<?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>Heuristic Media</title>
	<atom:link href="http://heuristicmedia.com/blog/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://heuristicmedia.com/blog</link>
	<description>Developing apps for iOS and the web</description>
	<lastBuildDate>Tue, 24 Aug 2010 03:23:56 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Innerviews App &amp; Book Coverage at NPR</title>
		<link>http://heuristicmedia.com/blog/?p=374</link>
		<comments>http://heuristicmedia.com/blog/?p=374#comments</comments>
		<pubDate>Tue, 24 Aug 2010 03:22:45 +0000</pubDate>
		<dc:creator>Tony Wallace</dc:creator>
				<category><![CDATA[Apps]]></category>
		<category><![CDATA[Reviews]]></category>

		<guid isPermaLink="false">http://heuristicmedia.com/blog/?p=374</guid>
		<description><![CDATA[A Blog Supreme, National Public Radio&#8217;s jazz blog, gave a shout out to the Innerviews app and book today. Check it out&#8230;]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.npr.org/blogs/ablogsupreme/2010/08/23/129385814/two-types-of-in-depth-innerviews" target="_blank">A Blog Supreme</a>, National Public Radio&#8217;s jazz blog, gave a shout out to the <a href="http://www.heuristicmedia.com/apps/innerviews">Innerviews app</a> and book today. <a href="http://www.npr.org/blogs/ablogsupreme/2010/08/23/129385814/two-types-of-in-depth-innerviews" target="_blank">Check it out&#8230;</a></p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://heuristicmedia.com/blog/?feed=rss2&amp;p=374</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Innerviews for iPhone &amp; iPad</title>
		<link>http://heuristicmedia.com/blog/?p=356</link>
		<comments>http://heuristicmedia.com/blog/?p=356#comments</comments>
		<pubDate>Thu, 19 Aug 2010 14:03:14 +0000</pubDate>
		<dc:creator>Tony Wallace</dc:creator>
				<category><![CDATA[Apps]]></category>
		<category><![CDATA[Anil Prasad]]></category>
		<category><![CDATA[fusion]]></category>
		<category><![CDATA[Innerviews]]></category>
		<category><![CDATA[interviews]]></category>
		<category><![CDATA[iOS (iPhone / iPad)]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[jazz]]></category>
		<category><![CDATA[music]]></category>
		<category><![CDATA[progressive]]></category>
		<category><![CDATA[rock]]></category>

		<guid isPermaLink="false">http://heuristicmedia.com/blog/?p=356</guid>
		<description><![CDATA[New Innerviews iPhone/iPad App Delivers In-Depth, Immersive and Visually-Rich Interviews With Rock, Pop and Jazz Luminaries Innerviews, a pioneering online music magazine, and Heuristic Media, a leading mobile app development company, are pleased to announce the immediate availability of the Innerviews app for iPhone, iPad and iPod Touch via the Apple App Store. The Innerviews [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.itunes.com/apps/innerviews" title="Download Innerviews from the App Store" target="_blank"><img class="right_align_top" src="http://www.heuristicmedia.com/blog/apps/innerviews/innerviews_promo.png" border="0" /></a></p>
<h2>New Innerviews iPhone/iPad App Delivers In-Depth, Immersive and Visually-Rich Interviews With Rock, Pop and Jazz Luminaries</h2>
<p><a href="http://www.innerviews.org" target="_blank">Innerviews</a>, a pioneering online music magazine, and Heuristic Media, a leading mobile app development company, are pleased to announce the immediate availability of the Innerviews app for iPhone, iPad and iPod Touch via the Apple App Store.</p>
<p>The <a href="http://www.heuristicmedia.com/apps/innerviews" target="_blank">Innerviews iPhone/iPad app</a> delivers in-depth, uncompromising interviews with music’s most vital and original voices, optimized for mobile reading. Brought to you by the creator of Innerviews.org, the first and longest-running music magazine on the Web, the app explores the widest variety of genres and styles of music imaginable, including rock, jazz, hip-hop, world music, pop, and folk. A few of the artist interviews featured in the initial app deployment include Porcupine Tree, Richard Thompson, Marcus Miller, Mike Stern, Ron Carter, Afro Celt Sound System, and Steve Hackett.</p>
<p>The Innerviews app was designed by Heuristic Media CEO and lead programmer Tony Wallace. Heuristic Media is a renowned app creation and consulting firm responsible for a variety of business and educational apps. The Innerviews app is Heuristic Media’s first foray into the entertainment and media field.</p>
<p>Key features of the Innerviews iPhone/iPad app include:</p>
<ul>
<li>The latest Innerviews interviews optimized for mobile viewing</li>
<li>Playlists exploring the latest in eclectic album and reissue releases</li>
<li>News about forthcoming interviews</li>
<li>Artists reflecting on their Innerviews experiences</li>
<li>Full support for iPhone 4 Retina display, iPad, earlier iPhones, and iPod Touch</li>
<li>Offline reading support</li>
<li>Gorgeous, intuitive user interface</li>
</ul>
<p>The app is available for download at: <a href="http://www.itunes.com/apps/innerviews" target="_blank">http://www.itunes.com/apps/innerviews</a></p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://heuristicmedia.com/blog/?feed=rss2&amp;p=356</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>iOS Dev: Decoding PHP URL Encoded Strings with NSString</title>
		<link>http://heuristicmedia.com/blog/?p=308</link>
		<comments>http://heuristicmedia.com/blog/?p=308#comments</comments>
		<pubDate>Mon, 14 Jun 2010 14:27:09 +0000</pubDate>
		<dc:creator>Tony Wallace</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[iOS (iPhone/iPad)]]></category>
		<category><![CDATA[Apps]]></category>
		<category><![CDATA[decode]]></category>
		<category><![CDATA[decoding]]></category>
		<category><![CDATA[encode]]></category>
		<category><![CDATA[encoding]]></category>
		<category><![CDATA[iOS (iPhone / iPad)]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[NSString]]></category>
		<category><![CDATA[rawurlencode]]></category>
		<category><![CDATA[string]]></category>
		<category><![CDATA[urlencode]]></category>

		<guid isPermaLink="false">http://heuristicmedia.com/blog/?p=308</guid>
		<description><![CDATA[If you do any PHP development, you should be familiar with the urlencode() function: 12345678910&#60;?php &#160; &#160; &#160;$string = &#34;This string will totally screw things up if it isn't urlencoded!&#34;; &#160; &#160; &#160;$encoded_string = urlencode&#40;$string&#41;; &#160; &#160; &#160;echo $encoded_string; &#160; &#160; &#160;// Result: &#160; &#160; &#160;// This+string+will+totally+screw+things+up+if+it+isn%27t+urlencoded%21 ?&#62; Notice that the resulting string contains percent [...]]]></description>
			<content:encoded><![CDATA[<p>If you do any PHP development, you should be familiar with the <a href="http://www.php.net/manual/en/function.urlencode.php" target="_blank"><em>urlencode()</em></a> function:</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
<br />
&nbsp; &nbsp; &nbsp;<span style="color: #000088;">$string</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;This string will totally screw things up if it isn't urlencoded!&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #000088;">$encoded_string</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/urlencode"><span style="color: #990000;">urlencode</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$string</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$encoded_string</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp;<span style="color: #666666; font-style: italic;">// Result:</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #666666; font-style: italic;">// This+string+will+totally+screw+things+up+if+it+isn%27t+urlencoded%21</span><br />
<br />
<span style="color: #000000; font-weight: bold;">?&gt;</span></div></td></tr></tbody></table></div>
<p>Notice that the resulting string contains percent escapes in place of the apostrophe (&#8216;%27&#8242;) and exclamation point (&#8216;%21&#8242;), but the spaces have been replaced with &#8216;+&#8217; symbols. This is what <em>urlencode()</em> does, and it works just fine if the encoded string will be decoded by the <a href="http://php.net/manual/en/function.urldecode.php" target="_blank"><em>urldecode()</em></a> function in PHP.</p>
<p>Things get a little more complicated if you use <em>urlencode()</em> to encode a query response for an iOS app. The standard, easy way to remove percent escapes is the <a href="http://developer.apple.com/iphone/library/documentation/cocoa/reference/foundation/Classes/NSString_Class/Reference/NSString.html#//apple_ref/doc/uid/20000154-BCIECHFE" target="_blank">NSString <em>stringByReplacingPercentEscapesUsingEncoding:</em></a> method. When used on the encoded string shown above, we get this:</p>
<p><span id="more-308"></span></p>
<div class="codecolorer-container objc default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br /></div></td><td><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a> <span style="color: #002200;">*</span>encodedString <span style="color: #002200;">=</span> <span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;This+string+will+totally+screw+things+up+if+it+isn%27t+urlencoded%21&quot;</span>; <span style="color: #11740a; font-style: italic;">// Presumably returned from a server call.</span><br />
<a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a> <span style="color: #002200;">*</span>decodedString <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>encodedString stringByReplacingPercentEscapesUsingEncoding<span style="color: #002200;">:</span> NSUTF8StringEncoding<span style="color: #002200;">&#93;</span>;<br />
NSLog<span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;%@&quot;</span>, decodedString<span style="color: #002200;">&#41;</span>;<br />
<br />
<span style="color: #11740a; font-style: italic;">// Result:</span><br />
<span style="color: #11740a; font-style: italic;">// This+string+will+totally+screw+things+up+if+it+isn't+urlencoded!</span></div></td></tr></tbody></table></div>
<p>Oh crap. Why are the &#8216;+&#8217; symbols still there?</p>
<p>Well, it turns out that <em>stringByReplacingPercentEscapesUsingEncoding:</em> is named accurately &#8211; it <em>only</em> replaces percent escapes, so it thinks those &#8216;+&#8217; symbols are a valid part of the string. There are two simple ways around this problem.</p>
<p>If you have to work with an existing web service that uses <em>urlencode()</em>, you can prepare the string for decoding with the <a href="http://developer.apple.com/iphone/library/documentation/cocoa/reference/foundation/Classes/NSString_Class/Reference/NSString.html#//apple_ref/doc/uid/20000154-SW6" target="_blank">NSString <em>stringByReplacingOccurrencesOfString:withString:</em></a> method, which replaces the &#8216;+&#8217; symbols with percent escapes representing spaces (%20):</p>
<div class="codecolorer-container objc default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br /></div></td><td><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a> <span style="color: #002200;">*</span>encodedString <span style="color: #002200;">=</span> <span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;This+string+will+totally+screw+things+up+if+it+isn%27t+urlencoded%21&quot;</span>;<br />
<br />
<a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a> <span style="color: #002200;">*</span>preparedString <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>encodedString stringByReplacingOccurrencesOfString<span style="color: #002200;">:</span> <span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;+&quot;</span> withString<span style="color: #002200;">:</span> <span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;%20&quot;</span><span style="color: #002200;">&#93;</span>;<br />
NSLog<span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;%@&quot;</span>, preparedString<span style="color: #002200;">&#41;</span>;<br />
<br />
<span style="color: #11740a; font-style: italic;">// Result:</span><br />
<span style="color: #11740a; font-style: italic;">// This%20string%20will%20totally%20screw%20things%20up%20if%20it isn%27t%20urlencoded%21</span><br />
<br />
<a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a> <span style="color: #002200;">*</span>decodedString <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>preparedString stringByReplacingPercentEscapesUsingEncoding<span style="color: #002200;">:</span> NSUTF8StringEncoding<span style="color: #002200;">&#93;</span>;<br />
NSLog<span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;%@&quot;</span>, decodedString<span style="color: #002200;">&#41;</span>;<br />
<br />
<span style="color: #11740a; font-style: italic;">// Result:</span><br />
<span style="color: #11740a; font-style: italic;">// This string will totally screw things up if it isn't urlencoded!</span></div></td></tr></tbody></table></div>
<p>Ahhhhh&#8230; much better! </p>
<p><strong>VERY IMPORTANT DETAIL:</strong> You have to replace the &#8216;+&#8217; symbols <em>before</em> decoding the percent escapes or you&#8217;ll run into problems when you encounter a string that contains a valid &#8216;+&#8217; symbol (i.e. one that the string contained before encoding). The <em>urlencode()</em> function escapes &#8216;+&#8217; with &#8216;%2B&#8217; before escaping spaces with &#8216;+&#8217; , so valid &#8216;+&#8217; symbols will be safe until you finally decode the string. If that seems confusing to you, read it again and again and again. Or just urlencode() a string that contains a &#8216;+&#8217; symbol and study the result. You&#8217;ll figure it out.</p>
<p>On the other hand, if you&#8217;re building your own web service for your app, you can avoid that extra step by using PHP&#8217;s <a href="http://php.net/manual/en/function.rawurlencode.php" target="_blank"><em>rawurlencode()</em></a> function:</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
<br />
&nbsp; &nbsp; &nbsp;<span style="color: #000088;">$string</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;This string will totally screw things up if it isn't urlencoded!&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #000088;">$encoded_string</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/rawurlencode"><span style="color: #990000;">rawurlencode</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$string</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$encoded_string</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp;<span style="color: #666666; font-style: italic;">// Result:</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #666666; font-style: italic;">// This%20string%20will%20totally%20screw%20things%20up%20if%20it%20isn%27t%20urlencoded%21</span><br />
<br />
<span style="color: #000000; font-weight: bold;">?&gt;</span></div></td></tr></tbody></table></div>
<p>The <em>rawurlencode()</em> function conforms to <a href="http://www.faqs.org/rfcs/rfc1738.html" target="_blank">RFC 1738</a> and uses &#8216;%20&#8242; escapes for spaces, so it plays nice with <em>stringByReplacingPercentEscapesUsingEncoding:</em> right away:</p>
<div class="codecolorer-container objc default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br /></div></td><td><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a> <span style="color: #002200;">*</span>encodedString <span style="color: #002200;">=</span> <span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;This%20string%20will%20totally%20screw%20things%20up%20if%20it isn%27t%20urlencoded%21&quot;</span>;<br />
<a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a> <span style="color: #002200;">*</span>decodedString <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>encodedString stringByReplacingPercentEscapesUsingEncoding<span style="color: #002200;">:</span> NSUTF8StringEncoding<span style="color: #002200;">&#93;</span>;<br />
NSLog<span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;%@&quot;</span>, decodedString<span style="color: #002200;">&#41;</span>;<br />
<br />
<span style="color: #11740a; font-style: italic;">// Result:</span><br />
<span style="color: #11740a; font-style: italic;">// This string will totally screw things up if it isn't urlencoded!</span></div></td></tr></tbody></table></div>
<p>There you have it! URL encoded strings decoded by NSString in one (or two) easy step(s).</p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://heuristicmedia.com/blog/?feed=rss2&amp;p=308</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>One big reason why the iPad matters&#8230;</title>
		<link>http://heuristicmedia.com/blog/?p=270</link>
		<comments>http://heuristicmedia.com/blog/?p=270#comments</comments>
		<pubDate>Thu, 28 Jan 2010 19:48:07 +0000</pubDate>
		<dc:creator>Tony Wallace</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://heuristicmedia.com/blog/?p=270</guid>
		<description><![CDATA[Yesterday Apple announced the iPad, finally bringing an end to months of rumours. If you somehow missed all the hype, you can catch Steve Jobs&#8217; keynote presentation here. The response to the iPad has been predictable. Apple&#8217;s fans are crazy for it, while their detractors are falling over themselves to find fault with it. Is [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday <a href="http://www.apple.com/" target="_blank">Apple</a> announced the <a href="http://www.apple.com/ipad/"  target="_blank">iPad</a>, finally bringing an end to months of rumours. If you somehow missed all the hype, you can catch Steve Jobs&#8217; keynote presentation <a href="http://events.apple.com.edgesuite.net/1001q3f8hhr/event/index.html"  target="_blank">here</a>.</p>
<p>The response to the iPad has been predictable. Apple&#8217;s fans are crazy for it, while their detractors are falling over themselves to find fault with it. Is the device perfect? Certainly not. Either was the iPhone, but that didn&#8217;t stop over 40 million people from buying it, or stop tens of thousands of developers from contributing over 140000 apps to the platform. Apple currently owns the smartphone market, not because they produced the clearest sounding phone or the most powerful mobile email client, but because they created the best mobile user experience. The iPad promises a similar experience, with the benefit of a larger screen.</p>
<p>The large screen is the whole point of this device. Small devices like the iPhone are wonderful for personal use, but they don&#8217;t make it easy to share your content with others. They also don&#8217;t support truly rich user interfaces. Before you point out that your laptop handles those things nicely (one of the most frequent arguments against the iPad), stop for a moment to consider what you have to do to get information into it and out of it. </p>
<p>Your laptop is married to input technology that is over 30 years old. The QWERY keyboard and mouse/trackpad don&#8217;t exist because they represent the best way to accomplish their respective tasks. They exist because, several decades ago, they were the only practical solutions. Apple clearly recognizes that past necessity is a bad reason to continue doing anything, and the iPad is the first big step towards freeing users and developers from the limitations presented by these devices. Once app developers get their hands on actual devices, expect to find yourself using fewer traditional input methods and more innovative, human-friendly gestures. We don&#8217;t know exactly what these gestures will be yet, but the potential is there for the first time.</p>
<p>Multitouch technology married to a screen with decent real estate is a big deal for usability and accessibility. Anybody who can&#8217;t see that should think a little less about how they worked yesterday, and more about how they want to work tomorrow.</p>
<h2>Update:</h2>
<p>Steven F. does a better job of explaining this than me. <a href="http://stevenf.tumblr.com/post/359224392" target="_blank">Read his take on the iPad and the future of computing</a>.</p>
<p>If you&#8217;re constantly disappointed by minor flaws in new technology, like a lot of people seem to be, you should probably <a href="http://www.eod.com/blog/2010/02/the-days-of-miracles-and-wonde/" target="_blank">read this</a>.</p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://heuristicmedia.com/blog/?feed=rss2&amp;p=270</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Using Custom Objects in JavaScript</title>
		<link>http://heuristicmedia.com/blog/?p=260</link>
		<comments>http://heuristicmedia.com/blog/?p=260#comments</comments>
		<pubDate>Tue, 12 Jan 2010 18:24:26 +0000</pubDate>
		<dc:creator>Tony Wallace</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[objects]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://heuristicmedia.com/blog/?p=260</guid>
		<description><![CDATA[Objects provide a simple, powerful way to store and manipulate data, and should be part of every JavaScript developer&#8217;s toolkit. This short tutorial will demonstrate how to create custom objects for your data. Note: This is not an in-depth tutorial. You should already be comfortable with basic JavaScript and programming concepts like functions and arrays [...]]]></description>
			<content:encoded><![CDATA[<p>Objects provide a simple, powerful way to store and manipulate data, and should be part of every JavaScript developer&#8217;s toolkit. This short tutorial will demonstrate how to create custom objects for your data.</p>
<p><em>Note: This is not an in-depth tutorial. You should already be comfortable with basic JavaScript and programming concepts like functions and arrays before you start.</em></p>
<p><span id="more-260"></span><br />
Start by examining the code in example 1:</p>
<h2>Example 1: albuminfo.js</h2>
<div class="codecolorer-container javascript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br />85<br />86<br />87<br />88<br />89<br />90<br />91<br />92<br />93<br />94<br />95<br />96<br />97<br />98<br />99<br />100<br />101<br />102<br />103<br />104<br />105<br />106<br />107<br />108<br />109<br />110<br />111<br />112<br />113<br />114<br />115<br />116<br />117<br />118<br />119<br />120<br />121<br />122<br />123<br />124<br />125<br />126<br />127<br />128<br />129<br />130<br />131<br />132<br />133<br />134<br />135<br />136<br />137<br />138<br />139<br />140<br />141<br />142<br />143<br />144<br />145<br />146<br />147<br />148<br />149<br />150<br />151<br />152<br />153<br />154<br />155<br />156<br />157<br />158<br />159<br />160<br />161<br />162<br />163<br />164<br />165<br />166<br />167<br />168<br />169<br />170<br />171<br />172<br />173<br />174<br />175<br />176<br />177<br />178<br />179<br />180<br />181<br />182<br />183<br />184<br />185<br />186<br />187<br />188<br />189<br />190<br />191<br />192<br />193<br />194<br />195<br />196<br />197<br />198<br />199<br />200<br />201<br />202<br />203<br />204<br />205<br />206<br />207<br />208<br />209<br />210<br />211<br />212<br />213<br />214<br />215<br />216<br />217<br />218<br />219<br />220<br />221<br />222<br />223<br />224<br />225<br />226<br />227<br />228<br />229<br />230<br />231<br />232<br />233<br />234<br />235<br />236<br />237<br />238<br />239<br />240<br />241<br />242<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #006600; font-style: italic;">// Object definitions:</span><br />
<br />
<span style="color: #003366; font-weight: bold;">function</span> albumObject<span style="color: #009900;">&#40;</span>theTitle<span style="color: #339933;">,</span> theArtistFirstName<span style="color: #339933;">,</span> theArtistLastName<span style="color: #339933;">,</span> theLabel<span style="color: #339933;">,</span> releaseYear<span style="color: #339933;">,</span> tracksArray<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
<br />
<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">title</span> <span style="color: #339933;">=</span> theTitle<span style="color: #339933;">;</span><br />
<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">artistFirstName</span> <span style="color: #339933;">=</span> theArtistFirstName<span style="color: #339933;">;</span><br />
<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">artistLastName</span> <span style="color: #339933;">=</span> theArtistLastName<span style="color: #339933;">;</span><br />
<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">label</span> <span style="color: #339933;">=</span> theLabel<span style="color: #339933;">;</span><br />
<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">year</span> <span style="color: #339933;">=</span> releaseYear<span style="color: #339933;">;</span><br />
<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">tracks</span> <span style="color: #339933;">=</span> tracksArray<span style="color: #339933;">;</span><br />
<br />
<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">artist</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
<span style="color: #000066; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">artistFirstName</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot; &quot;</span> <span style="color: #339933;">+</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">artistLastName</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #003366; font-weight: bold;">function</span> trackObject<span style="color: #009900;">&#40;</span>theTitle<span style="color: #339933;">,</span> theComposerFirstName<span style="color: #339933;">,</span> theComposerLastName<span style="color: #339933;">,</span> trackLength<span style="color: #339933;">,</span> personnelArray<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
<br />
<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">title</span> <span style="color: #339933;">=</span> theTitle<span style="color: #339933;">;</span><br />
<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">composerFirstName</span> <span style="color: #339933;">=</span> theComposerFirstName<span style="color: #339933;">;</span><br />
<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">composerLastName</span> <span style="color: #339933;">=</span> theComposerLastName<span style="color: #339933;">;</span><br />
<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">time</span> <span style="color: #339933;">=</span> trackLength<span style="color: #339933;">;</span><br />
<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">personnel</span> <span style="color: #339933;">=</span> personnelArray<span style="color: #339933;">;</span><br />
<br />
<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">composer</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
<span style="color: #000066; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">composerFirstName</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot; &quot;</span> <span style="color: #339933;">+</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">composerLastName</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #003366; font-weight: bold;">function</span> personnelObject<span style="color: #009900;">&#40;</span>theFirstName<span style="color: #339933;">,</span> theLastName<span style="color: #339933;">,</span> theInstrument<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
<br />
<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">firstName</span> <span style="color: #339933;">=</span> theFirstName<span style="color: #339933;">;</span><br />
<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">lastName</span> <span style="color: #339933;">=</span> theLastName<span style="color: #339933;">;</span><br />
<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">instrument</span> <span style="color: #339933;">=</span> theInstrument<span style="color: #339933;">;</span><br />
<br />
<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">credit</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
<span style="color: #000066; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">firstName</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot; &quot;</span> <span style="color: #339933;">+</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">lastName</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot; - &quot;</span> <span style="color: #339933;">+</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">instrument</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #006600; font-style: italic;">// Function definitions:</span><br />
<br />
<span style="color: #003366; font-weight: bold;">function</span> albumPersonnel<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
<br />
<span style="color: #003366; font-weight: bold;">var</span> allPersonnel <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Array<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
allPersonnel<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'Davis'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> personnelObject<span style="color: #009900;">&#40;</span><br />
<span style="color: #3366CC;">&quot;Miles&quot;</span><span style="color: #339933;">,</span><br />
<span style="color: #3366CC;">&quot;Davis&quot;</span><span style="color: #339933;">,</span><br />
<span style="color: #3366CC;">&quot;Trumpet&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
allPersonnel<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">&quot;Shorter&quot;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> personnelObject<span style="color: #009900;">&#40;</span><br />
<span style="color: #3366CC;">&quot;Wayne&quot;</span><span style="color: #339933;">,</span><br />
<span style="color: #3366CC;">&quot;Shoter&quot;</span><span style="color: #339933;">,</span><br />
<span style="color: #3366CC;">&quot;Tenor Saxophone&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
allPersonnel<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">&quot;Hancock&quot;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> personnelObject<span style="color: #009900;">&#40;</span><br />
<span style="color: #3366CC;">&quot;Herbie&quot;</span><span style="color: #339933;">,</span><br />
<span style="color: #3366CC;">&quot;Hancock&quot;</span><span style="color: #339933;">,</span><br />
<span style="color: #3366CC;">&quot;Piano &amp;amp; Electric Piano&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
allPersonnel<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">&quot;Corea&quot;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> personnelObject<span style="color: #009900;">&#40;</span><br />
<span style="color: #3366CC;">&quot;Chick&quot;</span><span style="color: #339933;">,</span><br />
<span style="color: #3366CC;">&quot;Corea&quot;</span><span style="color: #339933;">,</span><br />
<span style="color: #3366CC;">&quot;Electric Piano&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
allPersonnel<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">&quot;Carter&quot;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> personnelObject<span style="color: #009900;">&#40;</span><br />
<span style="color: #3366CC;">&quot;Ron&quot;</span><span style="color: #339933;">,</span><br />
<span style="color: #3366CC;">&quot;Carter&quot;</span><span style="color: #339933;">,</span><br />
<span style="color: #3366CC;">&quot;Bass&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
allPersonnel<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">&quot;Holland&quot;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> personnelObject<span style="color: #009900;">&#40;</span><br />
<span style="color: #3366CC;">&quot;Dave&quot;</span><span style="color: #339933;">,</span><br />
<span style="color: #3366CC;">&quot;Holland&quot;</span><span style="color: #339933;">,</span><br />
<span style="color: #3366CC;">&quot;Bass&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
allPersonnel<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">&quot;Williams&quot;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> personnelObject<span style="color: #009900;">&#40;</span><br />
<span style="color: #3366CC;">&quot;Tony&quot;</span><span style="color: #339933;">,</span><br />
<span style="color: #3366CC;">&quot;Williams&quot;</span><span style="color: #339933;">,</span><br />
<span style="color: #3366CC;">&quot;Drums&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #000066; font-weight: bold;">return</span> allPersonnel<span style="color: #339933;">;</span><br />
<br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #003366; font-weight: bold;">function</span> personnelSideA<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
<br />
allPersonnel <span style="color: #339933;">=</span> albumPersonnel<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
personnel <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Array<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
personnel<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> allPersonnel<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">&quot;Davis&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
personnel<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> allPersonnel<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">&quot;Shorter&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
personnel<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">2</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> allPersonnel<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">&quot;Hancock&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
personnel<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">3</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> allPersonnel<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">&quot;Carter&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
personnel<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">4</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> allPersonnel<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">&quot;Williams&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #000066; font-weight: bold;">return</span> personnel<span style="color: #339933;">;</span><br />
<br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #003366; font-weight: bold;">function</span> personnelSideB<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
<br />
allPersonnel <span style="color: #339933;">=</span> albumPersonnel<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
personnel <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Array<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
personnel<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> allPersonnel<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">&quot;Davis&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
personnel<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> allPersonnel<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">&quot;Shorter&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
personnel<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">2</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> allPersonnel<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">&quot;Hancock&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
personnel<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">3</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> allPersonnel<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">&quot;Corea&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
personnel<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">4</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> allPersonnel<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">&quot;Holland&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
personnel<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">5</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> allPersonnel<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">&quot;Williams&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #000066; font-weight: bold;">return</span> personnel<span style="color: #339933;">;</span><br />
<br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #003366; font-weight: bold;">function</span> trackList<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
<br />
personnelA <span style="color: #339933;">=</span> personnelSideA<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
personnelB <span style="color: #339933;">=</span> personnelSideB<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
tracks <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Array<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
tracks<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> trackObject<span style="color: #009900;">&#40;</span><br />
<span style="color: #3366CC;">&quot;Water Babies&quot;</span><span style="color: #339933;">,</span><br />
<span style="color: #3366CC;">&quot;Wayne&quot;</span><span style="color: #339933;">,</span><br />
<span style="color: #3366CC;">&quot;Shorter&quot;</span><span style="color: #339933;">,</span><br />
<span style="color: #3366CC;">&quot;5:06&quot;</span><span style="color: #339933;">,</span><br />
personnelA<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
tracks<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> trackObject<span style="color: #009900;">&#40;</span><br />
<span style="color: #3366CC;">&quot;Capricorn&quot;</span><span style="color: #339933;">,</span><br />
<span style="color: #3366CC;">&quot;Wayne&quot;</span><span style="color: #339933;">,</span><br />
<span style="color: #3366CC;">&quot;Shorter&quot;</span><span style="color: #339933;">,</span><br />
<span style="color: #3366CC;">&quot;8:27&quot;</span><span style="color: #339933;">,</span><br />
personnelA<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
tracks<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">2</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> trackObject<span style="color: #009900;">&#40;</span><br />
<span style="color: #3366CC;">&quot;Sweet Pea&quot;</span><span style="color: #339933;">,</span><br />
<span style="color: #3366CC;">&quot;Wayne&quot;</span><span style="color: #339933;">,</span><br />
<span style="color: #3366CC;">&quot;Shorter&quot;</span><span style="color: #339933;">,</span><br />
<span style="color: #3366CC;">&quot;7:59&quot;</span><span style="color: #339933;">,</span><br />
personnelA<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
tracks<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">3</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> trackObject<span style="color: #009900;">&#40;</span><br />
<span style="color: #3366CC;">&quot;Two Faced&quot;</span><span style="color: #339933;">,</span><br />
<span style="color: #3366CC;">&quot;Wayne&quot;</span><span style="color: #339933;">,</span><br />
<span style="color: #3366CC;">&quot;Shorter&quot;</span><span style="color: #339933;">,</span><br />
<span style="color: #3366CC;">&quot;18:01&quot;</span><span style="color: #339933;">,</span><br />
personnelB<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
tracks<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">4</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> trackObject<span style="color: #009900;">&#40;</span><br />
<span style="color: #3366CC;">&quot;Dual Mr. Anthony Tillmon Williams Process&quot;</span><span style="color: #339933;">,</span><br />
<span style="color: #3366CC;">&quot;Miles&quot;</span><span style="color: #339933;">,</span><br />
<span style="color: #3366CC;">&quot;Davis&quot;</span><span style="color: #339933;">,</span><br />
<span style="color: #3366CC;">&quot;13:20&quot;</span><span style="color: #339933;">,</span><br />
personnelB<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
tracks<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">5</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> trackObject<span style="color: #009900;">&#40;</span><br />
<span style="color: #3366CC;">&quot;Splash&quot;</span><span style="color: #339933;">,</span><br />
<span style="color: #3366CC;">&quot;Miles&quot;</span><span style="color: #339933;">,</span><br />
<span style="color: #3366CC;">&quot;Davis&quot;</span><span style="color: #339933;">,</span><br />
<span style="color: #3366CC;">&quot;10:05&quot;</span><span style="color: #339933;">,</span><br />
personnelB<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #000066; font-weight: bold;">return</span> tracks<span style="color: #339933;">;</span><br />
<br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #003366; font-weight: bold;">function</span> albumInfo<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
<br />
<span style="color: #003366; font-weight: bold;">var</span> album <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> albumObject<span style="color: #009900;">&#40;</span><br />
<span style="color: #3366CC;">&quot;Water Babies&quot;</span><span style="color: #339933;">,</span><br />
<span style="color: #3366CC;">&quot;Miles&quot;</span><span style="color: #339933;">,</span><br />
<span style="color: #3366CC;">&quot;Davis&quot;</span><span style="color: #339933;">,</span><br />
<span style="color: #3366CC;">&quot;Columbia&quot;</span><span style="color: #339933;">,</span><br />
<span style="color: #3366CC;">&quot;1976&quot;</span><span style="color: #339933;">,</span><br />
trackList<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #000066; font-weight: bold;">return</span> album<span style="color: #339933;">;</span><br />
<br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #003366; font-weight: bold;">function</span> printAlbum<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
<br />
album <span style="color: #339933;">=</span> albumInfo<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #003366; font-weight: bold;">var</span> htmlOutput <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;&quot;</span><span style="color: #339933;">;</span><br />
htmlOutput <span style="color: #339933;">+=</span> <span style="color: #3366CC;">&quot;<br />
<br />
&quot;</span><span style="color: #339933;">;</span><br />
htmlOutput <span style="color: #339933;">+=</span> <span style="color: #3366CC;">&quot;&lt;span&gt;Title: &quot;</span> <span style="color: #339933;">+</span> album.<span style="color: #660066;">title</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;&lt;/span&gt;<br />
&quot;</span><span style="color: #339933;">;</span><br />
htmlOutput <span style="color: #339933;">+=</span> <span style="color: #3366CC;">&quot;&lt;span&gt;Artist: &quot;</span> <span style="color: #339933;">+</span> album.<span style="color: #660066;">artist</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;&lt;/span&gt;<br />
&quot;</span><span style="color: #339933;">;</span><br />
htmlOutput <span style="color: #339933;">+=</span> <span style="color: #3366CC;">&quot;&lt;span&gt;Label: &quot;</span> <span style="color: #339933;">+</span> album.<span style="color: #660066;">label</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;&lt;/span&gt;<br />
&quot;</span><span style="color: #339933;">;</span><br />
htmlOutput <span style="color: #339933;">+=</span> <span style="color: #3366CC;">&quot;&lt;span&gt;Year: &quot;</span> <span style="color: #339933;">+</span> album.<span style="color: #660066;">year</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;&lt;/span&gt;<br />
&quot;</span><span style="color: #339933;">;</span><br />
htmlOutput <span style="color: #339933;">+=</span> <span style="color: #3366CC;">&quot;<br />
<br />
&quot;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #006600; font-style: italic;">// Loop through the tracks:</span><br />
<br />
<span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span> album.<span style="color: #660066;">tracks</span>.<span style="color: #660066;">length</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
<br />
htmlOutput <span style="color: #339933;">+=</span> <span style="color: #3366CC;">&quot;<br />
<br />
&quot;</span><span style="color: #339933;">;</span><br />
htmlOutput <span style="color: #339933;">+=</span> <span style="color: #3366CC;">&quot;&lt;span&gt;Track &quot;</span> <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span>i<span style="color: #339933;">+</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;:&lt;/span&gt;<br />
&quot;</span><span style="color: #339933;">;</span><br />
htmlOutput <span style="color: #339933;">+=</span> <span style="color: #3366CC;">&quot;&lt;span&gt;Title: &quot;</span> <span style="color: #339933;">+</span> album.<span style="color: #660066;">tracks</span><span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">title</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;&lt;/span&gt;<br />
&quot;</span><span style="color: #339933;">;</span><br />
htmlOutput <span style="color: #339933;">+=</span> <span style="color: #3366CC;">&quot;&lt;span&gt;Composer: &quot;</span> <span style="color: #339933;">+</span> album.<span style="color: #660066;">tracks</span><span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">composer</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;&lt;/span&gt;<br />
&quot;</span><span style="color: #339933;">;</span><br />
htmlOutput <span style="color: #339933;">+=</span> <span style="color: #3366CC;">&quot;&lt;span&gt;Time: &quot;</span> <span style="color: #339933;">+</span> album.<span style="color: #660066;">tracks</span><span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">time</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;&lt;/span&gt;<br />
&quot;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #006600; font-style: italic;">// Loop through the personnel listings for the current track:</span><br />
<br />
<span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> n <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> n <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span> album.<span style="color: #660066;">tracks</span><span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">personnel</span>.<span style="color: #660066;">length</span><span style="color: #339933;">;</span> n<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
htmlOutput <span style="color: #339933;">+=</span> <span style="color: #3366CC;">&quot;&lt;span&gt;&quot;</span> <span style="color: #339933;">+</span> album.<span style="color: #660066;">tracks</span><span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">personnel</span><span style="color: #009900;">&#91;</span>n<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">credit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;&lt;/span&gt;<br />
&quot;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span> <span style="color: #006600; font-style: italic;">// End personnel loop.</span><br />
<br />
htmlOutput <span style="color: #339933;">+=</span> <span style="color: #3366CC;">&quot;<br />
<br />
&quot;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #009900;">&#125;</span> <span style="color: #006600; font-style: italic;">// End tracks loop.</span><br />
<br />
document.<span style="color: #000066; font-weight: bold;">write</span><span style="color: #009900;">&#40;</span>htmlOutput<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// Write the album info to the page.</span><br />
<br />
<span style="color: #009900;">&#125;</span> <span style="color: #006600; font-style: italic;">// End function printAlbum.</span><br />
<br />
<span style="color: #006600; font-style: italic;">// Implementation:</span><br />
<br />
window.<span style="color: #000066;">onload</span> <span style="color: #339933;">=</span> printAlbum<span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// Call the printAlbum function when the page has finished loading.</span></div></td></tr></tbody></table></div>
<p>There is a lot going on here, so let&#8217;s dig deeper and see what it all does.</p>
<h2>Explaining Object Definitions</h2>
<p>The first three functions are object definitions. These serve as templates for the information you will store and manipulate. Object definitions look a lot like like regular functions. You pass data to the object definition the same way you would pass values to a function, then create <em>properties</em> to store it.</p>
<p>A property definition looks like this:</p>
<div class="codecolorer-container javascript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">theProperty</span> <span style="color: #339933;">=</span> theData<span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>In the above, <em>this</em> refers to the object itself, <em>theProperty</em> is the name of the property, and <em>theData</em> is data that was passed to the object definition. Properties can store simple values, like strings and numbers, arrays, or even other objects.</p>
<p>You access properties like this:</p>
<div class="codecolorer-container javascript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #003366; font-weight: bold;">var</span> result <span style="color: #339933;">=</span> theObject.<span style="color: #660066;">theProperty</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Properties can also represent functions. This allows you to create objects that can perform complex (or not so complex) operations on their own data, and return a result. Look at the <em>albumObject()</em> definition in example 1. The <em>artist</em> property represents a function that compiles the artist&#8217;s first and last names into a single string, with a space between the names. Similar functions are used in the <em>trackObject</em> and <em>personnelObject</em> definitions to make it easier to access full names. Remember that whenever you access a property that represents a function, you have to include the brackets at the end of the function name:</p>
<div class="codecolorer-container javascript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #003366; font-weight: bold;">var</span> result <span style="color: #339933;">=</span> theObject.<span style="color: #660066;">theFunction</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<h2>Implementation</h2>
<p>Now that we have taken a quick overview of object definitions, let&#8217;s work backwards though the  rest of the code to see how it works. The implementation line is very simple:</p>
<div class="codecolorer-container javascript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">window.<span style="color: #000066;">onload</span> <span style="color: #339933;">=</span> printAlbum<span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>This calls the <em>printAlbum</em> function when the window has finished loading. The first line of the  <em>printAlbum</em> function creates a variable called <em>album</em> to store the result of the <em>albumInfo</em> function.</p>
<p>The <em>albumInfo</em> function simply creates and returns a new <em>albumObject</em> object. Notice that the last argument passed to the new object is a call to the <em>trackList</em> function. The result of this function call will be stored in the <em>tracks</em> property.</p>
<p>The <em>trackList</em> function returns an array of <em>trackObject</em> objects, which contain information about the album&#8217;s tracks. The first two lines of the <em>trackList</em> function are calls to the <em>personnelSideA</em> and <em>personnelSideB</em> functions, which return arrays of <em>personnelObject</em> objects. Each instance of <em>personnelObject</em> contains the name and role of a different contributor. The <em>personnelSideA</em> and <em>personnelSideB</em> functions both call the <em>allPersonnel</em>, which creates all the <em>personnelObject</em> objects for the entire album.</p>
<p>Turning our attention back to the <em>printAlbum</em> function, we can summarize the <em>album</em> object as follows:</p>
<ul>
<li>1. The <em>album</em> object is an instance of <em>albumObject</em>, and stores general information about the album.</li>
<li>2. The <em>album</em> object contains a property called <em>tracks</em>, which stores an array of <em>trackObject</em> objects.</li>
<li>3. Each instance of <em>trackObject</em> contains a property called <em>personnel</em>, which stores an array of <em>personnelObject</em> objects.</li>
</ul>
<p>The remainder of the <em>printAlbum</em> function writes the contents of the <em>album</em> object to the document. Example 2 shows the result.</p>
<div class="frame">Title: Water Babies<br />
Artist: Miles Davis<br />
Label: Columbia<br />
Year: 1976</p>
<p>Track 1:<br />
Title: Water Babies<br />
Composer: Wayne Shorter<br />
Time: 5:06<br />
Miles Davis &#8211; Trumpet<br />
Wayne Shoter &#8211; Tenor Saxophone<br />
Herbie Hancock &#8211; Piano &amp; Electric Piano<br />
Ron Carter &#8211; Bass<br />
Tony Williams &#8211; Drums</p>
<p>Track 2:<br />
Title: Capricorn<br />
Composer: Wayne Shorter<br />
Time: 8:27<br />
Miles Davis &#8211; Trumpet<br />
Wayne Shoter &#8211; Tenor Saxophone<br />
Herbie Hancock &#8211; Piano &amp; Electric Piano<br />
Ron Carter &#8211; Bass<br />
Tony Williams &#8211; Drums</p>
<p>Track 3:<br />
Title: Sweet Pea<br />
Composer: Wayne Shorter<br />
Time: 7:59<br />
Miles Davis &#8211; Trumpet<br />
Wayne Shoter &#8211; Tenor Saxophone<br />
Herbie Hancock &#8211; Piano &amp; Electric Piano<br />
Ron Carter &#8211; Bass<br />
Tony Williams &#8211; Drums</p>
<p>Track 4:<br />
Title: Two Faced<br />
Composer: Wayne Shorter<br />
Time: 18:01<br />
Miles Davis &#8211; Trumpet<br />
Wayne Shoter &#8211; Tenor Saxophone<br />
Herbie Hancock &#8211; Piano &amp; Electric Piano<br />
Chick Corea &#8211; Electric Piano<br />
Dave Holland &#8211; Bass<br />
Tony Williams &#8211; Drums</p>
<p>Track 5:<br />
Title: Dual Mr. Anthony Tillmon Williams Process<br />
Composer: Miles Davis<br />
Time: 13:20<br />
Miles Davis &#8211; Trumpet<br />
Wayne Shoter &#8211; Tenor Saxophone<br />
Herbie Hancock &#8211; Piano &amp; Electric Piano<br />
Chick Corea &#8211; Electric Piano<br />
Dave Holland &#8211; Bass<br />
Tony Williams &#8211; Drums</p>
<p>Track 6:<br />
Title: Splash<br />
Composer: Miles Davis<br />
Time: 10:05<br />
Miles Davis &#8211; Trumpet<br />
Wayne Shoter &#8211; Tenor Saxophone<br />
Herbie Hancock &#8211; Piano &amp; Electric Piano<br />
Chick Corea &#8211; Electric Piano<br />
Dave Holland &#8211; Bass<br />
Tony Williams &#8211; Drums</p>
</div>
<p>If you want to try the script for yourself, you&#8217;ll need to reference it from an HTML document. Example 3 provides a basic one that will do the trick.</p>
<h2>Example 3: albuminfo.html</h2>
<div class="codecolorer-container javascript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #339933;">&lt;</span>script src<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;albuminfo.js&quot;</span> type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span><span style="color: #339933;">&gt;&lt;/</span>script<span style="color: #339933;">&gt;</span></div></td></tr></tbody></table></div>
<h2>Wrapping Up</h2>
<p>There we have it! All that data is wrapped up in one little object, easily accessible whenever we need it. The usefulness of custom objects goes beyond static data storage. For example, I use them to track users&#8217; mouse clicks and movements when designing complex user interfaces. By creating objects to represent each element on a page, I can independently track which objects have been clicked and change their state or appearance accordingly. Custom objects can take a lot of the pain out of JavaScript programming, and make your scripts more efficient at the same time.</p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://heuristicmedia.com/blog/?feed=rss2&amp;p=260</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Taxulator Review at The Loop</title>
		<link>http://heuristicmedia.com/blog/?p=165</link>
		<comments>http://heuristicmedia.com/blog/?p=165#comments</comments>
		<pubDate>Sun, 09 Aug 2009 19:28:34 +0000</pubDate>
		<dc:creator>Tony Wallace</dc:creator>
				<category><![CDATA[Reviews]]></category>
		<category><![CDATA[App Store]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Apps]]></category>
		<category><![CDATA[calculator]]></category>
		<category><![CDATA[Heuristic Media]]></category>
		<category><![CDATA[iPod Touch]]></category>
		<category><![CDATA[review]]></category>
		<category><![CDATA[tax]]></category>
		<category><![CDATA[Taxulator]]></category>
		<category><![CDATA[The Loop]]></category>

		<guid isPermaLink="false">http://heuristicmedia.com/blog/?p=165</guid>
		<description><![CDATA[Taxulator just received a positive review by Jim Dalrymple at The Loop! Read the review&#8230; Jim suggested that the tax settings panel should be moved into the app, instead of the iPhone settings bundle where it currently resides. A number of Taxulator users have asked for this change and it will be implemented in the [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.heuristicmedia.com/taxulator" target="_blank">Taxulator</a> just received a positive review by Jim Dalrymple at The Loop! <a href="http://www.loopinsight.com/2009/08/09/hands-on-taxulator-for-iphone/" target="_blank">Read the review</a>&#8230;</p>
<p>Jim suggested that the tax settings panel should be moved into the app, instead of the iPhone settings bundle where it currently resides. A number of <a href="http://www.heuristicmedia.com/taxulator" target="_blank">Taxulator</a> users have asked for this change and it will be implemented in the next update.</p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://heuristicmedia.com/blog/?feed=rss2&amp;p=165</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Heuristic Media on Twitter &amp; Facebook</title>
		<link>http://heuristicmedia.com/blog/?p=145</link>
		<comments>http://heuristicmedia.com/blog/?p=145#comments</comments>
		<pubDate>Thu, 16 Jul 2009 15:38:45 +0000</pubDate>
		<dc:creator>Tony Wallace</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[Heuristic]]></category>
		<category><![CDATA[Heuristic Media]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://heuristicmedia.com/blog/?p=145</guid>
		<description><![CDATA[Heuristic Media now has a dedicated feed on Twitter. Follow @heuristicmedia for updates about iPhone apps and web development. Follow @heuristicmusic for updates about new music, cool links and my daily ranting. You can also find us on Facebook.]]></description>
			<content:encoded><![CDATA[<p>Heuristic Media now has a dedicated feed on Twitter. </p>
<p>Follow <a href="http://www.twitter.com/heuristicmedia">@heuristicmedia</a> for updates about iPhone apps and web development. </p>
<p>Follow <a href="http://www.twitter.com/heuristicmusic">@heuristicmusic</a> for updates about new music, cool links and my daily ranting. </p>
<p>You can also find us on <a href="http://www.facebook.com/pages/Heuristic-Media/100921014719">Facebook</a>.</p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://heuristicmedia.com/blog/?feed=rss2&amp;p=145</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Taxulator for iPhone &amp; iPod Touch</title>
		<link>http://heuristicmedia.com/blog/?p=114</link>
		<comments>http://heuristicmedia.com/blog/?p=114#comments</comments>
		<pubDate>Fri, 10 Jul 2009 22:45:14 +0000</pubDate>
		<dc:creator>Tony Wallace</dc:creator>
				<category><![CDATA[Apps]]></category>

		<guid isPermaLink="false">http://heuristicmedia.com/blog/?p=114</guid>
		<description><![CDATA[This content has been moved here. Please update your links.]]></description>
			<content:encoded><![CDATA[<p>This content has been moved <a href="http://www.heuristicmedia.com/blog/?page_id=237">here</a>. Please update your links.</p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://heuristicmedia.com/blog/?feed=rss2&amp;p=114</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
