<?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>Tiffany B. Brown &#187; Web Development &amp; Programming</title>
	<atom:link href="http://tiffanybbrown.com/category/web-development/feed/" rel="self" type="application/rss+xml" />
	<link>http://tiffanybbrown.com</link>
	<description>A web log about web development and internet culture with frequent detours into other stuff.</description>
	<lastBuildDate>Fri, 10 Feb 2012 23:35:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>On Mobile Web Development, Part 2: Stop building WebKit-only sites</title>
		<link>http://tiffanybbrown.com/2012/02/09/on-mobile-web-development-part-2-stop-building-webkit-only-sites/</link>
		<comments>http://tiffanybbrown.com/2012/02/09/on-mobile-web-development-part-2-stop-building-webkit-only-sites/#comments</comments>
		<pubDate>Thu, 09 Feb 2012 16:03:24 +0000</pubDate>
		<dc:creator>tiffany</dc:creator>
				<category><![CDATA[Browsers]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Web Development & Programming]]></category>
		<category><![CDATA[Web standards]]></category>
		<category><![CDATA[WebKit]]></category>

		<guid isPermaLink="false">http://tiffanybbrown.com/?p=6641</guid>
		<description><![CDATA[Following-up on my mobile web development post from last week, we have Daniel Glazou, co-chair of the CSS Working Group outlining the scope of the -webkit-prefix problem. Go read his post Call for Action: The Open Web Needs You *Now*. Or read some of what I&#8217;ve excerpted below. As in the past with IE6, it&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>Following-up on my <a href="http://tiffanybbrown.com/2012/02/01/on-mobile-web-development/">mobile web development</a> post from last week, we have Daniel Glazou, co-chair of the <a href="http://www.w3.org/blog/CSS/">CSS Working Group</a>  outlining the scope of the <code>-webkit-</code>prefix problem. </p>
<p>Go read his post <a href="http://www.glazman.org/weblog/dotclear/index.php?post/2012/02/09/CALL-FOR-ACTION%3A-THE-OPEN-WEB-NEEDS-YOU-NOW">Call for Action: The Open Web Needs You *Now*</a>. Or read some of what I&#8217;ve excerpted below.</p>
<blockquote class="longquote"><p>As in the past with IE6, it&#8217;s not a question of innovation but a question of hardware market dominance and software bundled with hardware. <strong>But there is an aspect of the problem we did not have during the IE6 era: these web sites are also WebKit-specific because they use only &#8220;experimental&#8221; CSS properties prefixed with -webkit-* and not their Mozilla, Microsoft or Opera counterparts.</strong> So even if the browser sniffing goes away, web sites will remain broken for non-WebKit browsers.</p>
<p>In many if not most cases, the <code>-webkit-*</code> properties WebKit-specific web sites are using do have <code>-moz-*</code>, <code>-ms-*</code>, <code>-o-*</code> equivalents. Gradients, Transforms, Transitions, Animations, border-radius, all interoperable enough to be browser-agnostic. <strong>Their web authors need only a few minutes to make the site compatible with Mozilla, Microsoft or Opera. But they never did it.</strong></p></blockquote>
<p>Emphasis mine. As I said in my previous post, a vendor prefix <q>means that the property is in flux, and the syntax of functionality may change radically once it&#8217;s finalized and implemented.</q> But here we have this mass of (primarily mobile-targeted) web sites<a href="#n20120209">*</a> that are calcifying the web in its current state.</p>
<p>The problem is so bad that, as Glazou says in his post, <q>other browsers will start supporting/implementing themselves the <code>-webkit-*</code> prefix, turning one single implementation into a new world-wide standard.</q> Yes, <b>every major browser vendor</b>, Opera included, will likely implement support for <code>-webkit-*</code> properties. </p>
<p>Save your celebration, son. <strong>Your laziness and myopia is what got us here.<a href="#n20120209b">**</a></strong>. The best we can hope for is that Opera, Mozilla, and Microsoft agree to support the same set of <code>-webkit-*</code> properties, and agree to handle conflicts and cascades the same way.</p>
<p><strong>But what if they don&#8217;t?</strong> Frankly, either way, we have a hot web development mess on our hands. We&#8217;ll either have more of the same proprietary prefix lock-in, or we&#8217;ll have a tangled mess of conflicting implementations.</p>
<h2>Okay, so what can I do?</h2>
<p>If there is any good news, it&#8217;s that <strong>you can get us out of this mess.</strong> Here&#8217;s how.</p>
<h3>Step 1: Educate yourself about the state of browser support for CSS properties</h3>
<ul>
<li><a href="http://html5please.us/">HTML5 Please</a></li>
<li><a href="http://caniuse.com/">When can I use</a></li>
<li><a href="http://lists.w3.org/Archives/Public/www-style/">www-style@w3.org Mail Archives</a></li>
<li><a href="http://www.css-discuss.org/">CSS Discuss</a></li>
</ul>
<h3>Step 2: Use tools to make writing cross-browser CSS3 easier</h3>
<ul>
<li><a href="https://github.com/desandro/textmate-bundles/tree/master/CSS.tmbundle">David Desandro&#8217;s CSS Textmate bundle</a></li>
<li><a href="http://lesscss.org/">LESS</a></li>
<li><a href="http://sass-lang.com/">SaSS</a></li>
<li><a href="http://compass-style.org/">Compass</a></li>
<li><a href="http://css3please.com/">CSS3 Please</a></li>
<li><a href="http://css3.me/">CSS3 Generator</a></li>
<li><a href="http://csslint.net/">CSSLint</a></li>
<li><ins datetime="2012-02-09T18:43:49+00:00">Chris Coyier also has an excellent roundup <a href="http://css-tricks.com/musings-on-preprocessing/">of CSS pre-processing tools</a></ins></li>
<li>Or just write your own script to do it for you<a href="#n20120209c">&dagger;</a></li>
</ul>
</li>
<h3>Step 3: Retrofit your existing code</h3>
<p>That&#8217;s self explanatory. </p>
<p><ins datetime="2012-02-09T16:03:30+00:00">Now ideally, you would also test in every browser. But I understand the tradeoffs between market share and time. For what it&#8217;s worth, Opera tries to make testing easier with its <a href="http://www.opera.com/developer/tools/mobile/">Opera Mobile emulator</a>. You can also set up an <a href="http://tiffanybbrown.com/2011/05/23/setting-up-an-opera-mini-testing-environment/">Opera Mini test environment</a> on your own machine. Firefox also <a href="http://www.mozilla.org/en-US/mobile/">offers a mobile emulator</a>. For Android, <a href="http://developer.android.com/sdk/index.html">install the SDK</a> (it&#8217;s painless). Pro-tip: You can also run other Android browsers using the SDK.</ins></p>
<p>Let&#8217;s not repeat the mistakes of years past in the mobile space. We know better, and we can <em>do</em> better.</p>
<p><ins datetime="2012-02-09T18:03:34+00:00"><b>UPDATE 1:</b> Check out the <a href="http://codepo8.github.com/prefix-the-web/">Prefix the Web</a> project.</ins></p>
<p class="footnote" id="n20120209">*Having learned the lessons with IE6 sites that are optimized for larger screens are less guilty of this.</p>
<p class="footnote" id="n20120209b">**Ever the one for fairness and nuance, I present Ian Lunn&#8217;s <a href="http://www.ianlunn.co.uk/blog/articles/vendor-prefixing-standing-up-for-developers/">Vendor Prefixing: Standing Up for Developers</a>.</p>
<div class="footnote" id="n20120209c">&dagger; This is a PHP snippet that I use from the command line to write individual properties. I use a Mac, so I&#8217;m not entirely sure how this would work on a Windows machine. I&#8217;m sure it would benefit from a <code>#!/usr/bin/php</code> path or the like for Linux users, but it runs as is for me. Save it as a file anywhere you&#8217;d like. Run it using <code>php
<path-and-filename> "unprefixed-property: value"</code>.
<pre><code>&lt;?php

$pref = array('moz','webkit','ms','khtml','o');

$str = '';

foreach($pref as $p){
   printf('-%s-%s;',$p,$argv[1]);
   echo "\n";
}

echo $argv[1].";\n";
?&gt;
</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://tiffanybbrown.com/2012/02/09/on-mobile-web-development-part-2-stop-building-webkit-only-sites/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Looping video in browsers that don&#8217;t yet support the loop attribute</title>
		<link>http://tiffanybbrown.com/2011/10/04/looping-video-in-browsers-that-dont-yet-support-the-loop-attribute/</link>
		<comments>http://tiffanybbrown.com/2011/10/04/looping-video-in-browsers-that-dont-yet-support-the-loop-attribute/#comments</comments>
		<pubDate>Tue, 04 Oct 2011 10:00:43 +0000</pubDate>
		<dc:creator>tiffany</dc:creator>
				<category><![CDATA[(x)HTML]]></category>
		<category><![CDATA[Browsers]]></category>
		<category><![CDATA[JavaScript/ECMAScript]]></category>
		<category><![CDATA[Web Development & Programming]]></category>
		<category><![CDATA[DOMScripting]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[html5 video]]></category>
		<category><![CDATA[multimedia]]></category>

		<guid isPermaLink="false">http://tiffanybbrown.com/?p=6314</guid>
		<description><![CDATA[To date, Firefox does not yet support the loop attribute of the &#60;video&#62; element. This snippet is a simple work-around. Once the video&#8217;s ended event is fired, it calls the play method. For more, consult the media events section of the HTML5 specification.]]></description>
			<content:encoded><![CDATA[<p>To date, Firefox does not yet support the <code>loop</code> attribute of the <code>&lt;video&gt;</code> element. This snippet is a simple work-around. Once the video&#8217;s  <code>ended</code> event is fired, it calls the <code>play</code> method.</p>
<p><iframe style="width: 100%; height: 300px" src="http://jsfiddle.net/webinista/eUvrc/embedded/"></iframe></p>
<p>For more, consult the <a href="http://dev.w3.org/html5/spec-author-view/media-elements.html#mediaevents">media events</a> section of the HTML5 specification.</p>
]]></content:encoded>
			<wfw:commentRss>http://tiffanybbrown.com/2011/10/04/looping-video-in-browsers-that-dont-yet-support-the-loop-attribute/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>XHR2 + CORS Slides, some AppCache-fu, OpenWebCamp, and Opera News</title>
		<link>http://tiffanybbrown.com/2011/06/30/xhr2-cors-slides-some-appcache-fu-openwebcamp-and-opera-news/</link>
		<comments>http://tiffanybbrown.com/2011/06/30/xhr2-cors-slides-some-appcache-fu-openwebcamp-and-opera-news/#comments</comments>
		<pubDate>Fri, 01 Jul 2011 01:00:49 +0000</pubDate>
		<dc:creator>tiffany</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Opera]]></category>
		<category><![CDATA[Tech Events]]></category>
		<category><![CDATA[Web Development & Programming]]></category>
		<category><![CDATA[appcache]]></category>
		<category><![CDATA[application cache]]></category>
		<category><![CDATA[base64_encode]]></category>
		<category><![CDATA[cors]]></category>
		<category><![CDATA[data uris]]></category>
		<category><![CDATA[html5la]]></category>
		<category><![CDATA[open web camp]]></category>
		<category><![CDATA[xhr2]]></category>

		<guid isPermaLink="false">http://tiffanybbrown.com/?p=6052</guid>
		<description><![CDATA[For the June meeting of the HTML5 &#038; CSS3 LA User Group, I spoke about XMLHttpRequest, Level 2 and Cross-Origin Resource Sharing headers. It&#8217;s always tough to present code. That goes double when you are sleep deprived, yet caffeinated and tongue-tied. In any case, the slides &#8212; which is really just one really long, really [...]]]></description>
			<content:encoded><![CDATA[<p>For the June meeting of the <a href="http://html5la.com/">HTML5 &#038; CSS3 LA User Group</a>, I spoke about XMLHttpRequest, Level 2 and Cross-Origin Resource Sharing headers. It&#8217;s always tough to present code. That goes double when you are sleep deprived, yet caffeinated and tongue-tied. </p>
<p>In any case, the slides &#8212; which is really just one really long, really heavy HTML file with inline CSS, JS, and images (thanks, data URIs!) &#8212; are <a href="http://tiffanybbrown.com/presentations/2011/xhr2/">now available</a>.</p>
<p><a href="http://en.wikipedia.org/wiki/Data_URI_scheme">Data URI</a>s have been available for quite a while now, though Internet Explorer versions 5-7 don&#8217;t support them. They are string representations of file data, typically base-64 encoded. When used as an <code>img</code> or <code>url()</code> source, they reduce the number of HTTP requests. And as we know, making fewer HTTP requests is the <a href="http://stevesouders.com/hpws/rule-min-http.php">number 1 rule</a> of web site optimization &#8230; except y&#8217;know when it creates a 1.8MB HTML file <img src='http://tiffanybbrown.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> .</p>
<p>It&#8217;s simple enough to convert files to a base64 encoded string with a few lines of code. Let&#8217;s assume we want to convert a file named &#8220;cars.png.&#8221; In PHP it might looks like this:</p>
<pre>$filename = 'cars.png';
$ext = pathinfo($filename,PATHINFO_EXTENSION);
switch($ext){
     case 'gif':
          $type = 'image/gif';
          break;
     case 'png':
          $type = 'image/png';
          break;
     case 'jpeg':
          $type = 'image/jpeg';
          break;
}
$fileHandler = fopen($filename,"r");
$data = fread($fileHandler, filesize($filename));
print 'data:'.$type.';base64,'.base64_encode($data);</pre>
<p>Despite the ginormous HTML file, I still think it&#8217;s useful for it to be a single-file package. After all, you only have to save and keep track of that one HTML file. </p>
<h2>Application Cache</h2>
<p>Bonus: you can view it offline because I took advantage of <a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/offline.html">Application Cache</a>. </p>
<p>Application Cache is an awesome technique that can speed up load times by caching data locally. But it also ensures that if connectivity is lost or unavailable, you can still visit that URL and have access to the content. This assumes, of course, that you&#8217;re using a browser that supports AppCache. The latest versions of <a href="http://caniuse.com/#search=appcache">most major browsers</a>, <strong>including Opera 11+</strong>, do.</p>
<p>Application Cache is also quite simple &#8212; at least the basics of it are. First, add a manifest attribute to your &lt;html&gt; element.</p>
<pre>&lt;html manifest="/path/to/manifest.appcache"&gt;</pre>
<p>Then create a manifest file. It&#8217;s a simple, plain text file that <em>must</em> be sent with a <code>Content-type: text/cache-manifest</code> header. Typically the file name should have an .appcache extension, though it will work (for now, at least) if it&#8217;s named foo.manifest provided you send the correct content type header.</p>
<p>A basic manifest &#8212; the one I&#8217;ve used for the slides in fact &#8212; looks like this: </p>
<pre>CACHE MANIFEST

CACHE:
index.html
</pre>
<p>That&#8217;s it. We have told our browser to cache this page. You can also specify which files the browser should <em>always</em> retrieve from the server with <code>NETWORK</code>, or which files to use if you need to fall back.  It&#8217;s fascinating stuff. For more, check out HTML5 Doctor&#8217;s post, <a href="http://html5doctor.com/go-offline-with-application-cache/">Go offline with application cache</a>.</p>
<h2>I&#8217;ll be at Open Web Camp!</h2>
<p>I&#8217;ll be speaking more about AppCache and other things at <a href="http://openwebcamp.org/schedule" class="b">Open Web Camp</a> <b>July 16</b> at Stanford University in Palo Alto. Come say hi.</p>
<h2>Opera news, in case you missed it:</h2>
<ul>
<li><a href="http://my.opera.com/desktopteam/blog/2011/06/28/swordfish-jumps-out-of-the-water">Opera 11.50 was released Tuesday</a></li>
<li><a href="http://my.opera.com/ODIN/blog/2011/06/30/opera-mobile-11-1-new-features-and-additions">Opera Mini 6.1 and Opera Mobile 11.1</a> were released yesterday (6/29)</li>
</ul>
<p>I&#8217;m most excited that the Opera Mobile rendering engine is now running Presto 2.8 which means it now supports multi-layouts (we run on tablets too!), session history and navigation, and the <a href="http://www.w3.org/TR/FileAPI/">File API</a> (among other things).</p>
<p><h</p>
]]></content:encoded>
			<wfw:commentRss>http://tiffanybbrown.com/2011/06/30/xhr2-cors-slides-some-appcache-fu-openwebcamp-and-opera-news/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Check me out: Modern debugging tips and tricks</title>
		<link>http://tiffanybbrown.com/2011/06/08/check-me-out-modern-debugging-tips-and-tricks/</link>
		<comments>http://tiffanybbrown.com/2011/06/08/check-me-out-modern-debugging-tips-and-tricks/#comments</comments>
		<pubDate>Wed, 08 Jun 2011 14:17:56 +0000</pubDate>
		<dc:creator>tiffany</dc:creator>
				<category><![CDATA[Web Development & Programming]]></category>

		<guid isPermaLink="false">http://tiffanybbrown.com/?p=6049</guid>
		<description><![CDATA[Yesterday my first piece for A List Apart went live: Modern Debugging Tips and Tricks. It&#8217;s an overview of using the JavaScript console that&#8217;s now available in every modern browser, and doing remote debugging using Opera Dragonfly and JS Console.]]></description>
			<content:encoded><![CDATA[<p>Yesterday my first piece for A List Apart went live: <a href="http://www.alistapart.com/articles/modern-debugging-tips-and-tricks/">Modern Debugging Tips and Tricks</a>.</p>
<p>It&#8217;s an overview of using the JavaScript console that&#8217;s now available in every modern browser, and doing remote debugging using Opera Dragonfly and <a href="http://jsconsole.com/">JS Console</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://tiffanybbrown.com/2011/06/08/check-me-out-modern-debugging-tips-and-tricks/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>On URL design</title>
		<link>http://tiffanybbrown.com/2011/01/06/on-url-design/</link>
		<comments>http://tiffanybbrown.com/2011/01/06/on-url-design/#comments</comments>
		<pubDate>Thu, 06 Jan 2011 19:07:51 +0000</pubDate>
		<dc:creator>tiffany</dc:creator>
				<category><![CDATA[Web Development & Programming]]></category>
		<category><![CDATA[Web design]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[rest]]></category>
		<category><![CDATA[uri]]></category>
		<category><![CDATA[url]]></category>

		<guid isPermaLink="false">http://tiffanybbrown.com/?p=5546</guid>
		<description><![CDATA[Namespaces can be a great way to build up a pragmatic URL structure that&#8217;s easy to remember with continued usage. What do I mean by a namespace? I mean a portion of a URL that dictates unique content. One of Kyle Neath&#8217;s tips from his post URL design. This. URLs make your site more usable, [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>Namespaces can be a great way to build up a pragmatic URL structure that&#8217;s easy to remember with continued usage. What do I mean by a namespace? I mean a portion of a URL that dictates unique content.</p></blockquote>
<p>One of <a href="http://warpspire.com/">Kyle Neath&#8217;s</a> tips from his post <a href="http://warpspire.com/posts/url-design/">URL design</a>.</p>
<p>This. URLs make your site more usable, navigable and extensible, particularly when your site is a <a href="https://secure.wikimedia.org/wikipedia/en/wiki/Representational_State_Transfer">RESTful</a> application.</p>
<p>[Via <a href="http://adactio.com/journal/4256/">Jeremy Keith</a>]</p>
]]></content:encoded>
			<wfw:commentRss>http://tiffanybbrown.com/2011/01/06/on-url-design/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why ActionScript 3.0 should be your first programming language</title>
		<link>http://tiffanybbrown.com/2010/08/23/why-actionscript-3-0-should-be-your-first-programming-language/</link>
		<comments>http://tiffanybbrown.com/2010/08/23/why-actionscript-3-0-should-be-your-first-programming-language/#comments</comments>
		<pubDate>Mon, 23 Aug 2010 15:00:58 +0000</pubDate>
		<dc:creator>tiffany</dc:creator>
				<category><![CDATA[ActionScript, Flash & Flex]]></category>
		<category><![CDATA[Productivity & Career]]></category>
		<category><![CDATA[Web Development & Programming]]></category>

		<guid isPermaLink="false">http://tiffanybbrown.com/?p=4512</guid>
		<description><![CDATA[Last week, a Twitter friend asked about learning programming and where to start. I suggested ActionScript 3.0, but 140 characters isn&#8217;t enough to explain why. That&#8217;s what blog posts are for. ActionScript sounds like a weird choice, right? It&#8217;s client-side, not server-side. You can&#8217;t connect to a database or create files on the fly without [...]]]></description>
			<content:encoded><![CDATA[<p>Last week, a Twitter friend asked about learning programming and where to start. I <a href="http://twitter.com/webinista/status/21436361575">suggested ActionScript 3.0</a>, but 140 characters isn&#8217;t enough to explain why. That&#8217;s what blog posts are for.</p>
<p>ActionScript sounds like a weird choice, right? It&#8217;s client-side, not server-side. You can&#8217;t connect to a database or create files on the fly without some sort of <a href="http://en.wikipedia.org/wiki/Middleware">middleware</a>. And why would I suggest that budding programmers learn a dying language? HTML5, CSS3, and JavaScript are going to (eventually) take over the world, right? </p>
<p>That stuff is true, or will be in the near term. Yet I still think <a href="http://help.adobe.com/en_US/Flash/10.0_Welcome/WS091A3800-D889-4425-B647-C44097B73F34.html">ActionScript 3.0</a> is worth learning, and that it&#8217;s a great starter language for budding developers. Here&#8217;s why.</p>
<ul>
<li><b>ActionScript 3.0 is syntactically similar to other C-style languages.</b> Curly braces rule! Semi-colons are awesome! Getting comfortable with how AS3 looks and works will make <a href="http://php.net/">PHP</a> or <a href="http://www.oracle.com/technetwork/java/">Java</a> less intimidating.</li>
<li><b>ActionScript 3.0 is <a href="http://whatis.techtarget.com/definition/0,,sid9_gci213058,00.html">strongly-typed</a></b>. Strongly- (or strictly-) typed languages enforce rules for variable behavior. It&#8217;s particularly useful when debugging, and will help  you understand what different variable types are and how they work across languages.</li>
<li><b>ActionScript 3.0 is Object oriented</b>. Objects are at the heart of several programming languages, and supported in several more. Getting comfortable with how OOP works in AS means it is easier to understand how it works in JavaScript, Ruby, PHP, and Java. In fact, ActionScript is in some ways <a href="http://www.flexafterdark.com/docs/ActionScript-vs-Java">similar to Java</a> in how it&#8217;s structured.</li>
<li><b>ActionScript 3.0 is a dialect of ECMAScript.</b> So is <a href="https://developer.mozilla.org/en/JavaScript_Language_Resources">JavaScript</a>. It&#8217;s remarkably easy to switch between the two, which brings me to my next point.</li>
<li><b>ActionScript 3.0 and Flash documents have a Document Object Model (DOM)</b>. Think of a Flash FLA as an HTML or XML document and ActionScript as the JavaScript that manipulates it. If you&#8217;re comfortable working with ActionScript objects and hierarchy, learning how to manipulate the HTML DOM is a breeze (and vice-versa). </li>
<li><b>ActionScript 3.0 supports Local Shared Objects, which is similar to <a href="http://dev.w3.org/html5/webstorage/">HTML5 storage</a>, and other key-value based datastores</b>. Yep. Local  storage &#8220;super cookies&#8221; have been available in Flash for years now. Learning how to use them in Flash and ActionScript will help you transition to an HTML5 future. What&#8217;s more, key-value datastores are the next wave of databases. The data structure for a &#8220;<a href="http://en.wikipedia.org/wiki/NoSQL">NoSQL</a>&#8221;  store is similar to those for a local shared object.</li>
<li><b>ActionScript 3.0 supports event-driven programming.</b> Event listening and handling is critical to game development or interactive experiences in which the sequence of user input can&#8217;t be (or shouldn&#8217;t be) controlled. Knowing how to generate, add and remove elements from the stage, or when an item can be safely garbage collected are portable concepts that you can learn with ActionScript.</li>
</ul>
<p>My point with this post isn&#8217;t to start a language holy war. I&#8217;m not even sure I like ActionScript, plus my first programming language was actually PHP. Still I recognize that the way ActionScript works and as importantly, how it&#8217;s used provides a nice foundation for beginning developers.</p>
]]></content:encoded>
			<wfw:commentRss>http://tiffanybbrown.com/2010/08/23/why-actionscript-3-0-should-be-your-first-programming-language/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>The HTML5 video progress event: Redux</title>
		<link>http://tiffanybbrown.com/2010/07/06/the-html5-video-progress-event-redux/</link>
		<comments>http://tiffanybbrown.com/2010/07/06/the-html5-video-progress-event-redux/#comments</comments>
		<pubDate>Tue, 06 Jul 2010 22:14:58 +0000</pubDate>
		<dc:creator>tiffany</dc:creator>
				<category><![CDATA[(x)HTML]]></category>
		<category><![CDATA[Web Development & Programming]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[event handling]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[html5 video]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://tiffanybbrown.com/?p=4216</guid>
		<description><![CDATA[In my first post on HTML5 video and its progress event, I wrote: Only Firefox provides a means to calculate the amount of the video that has been loaded. The progress event object includes total and loaded properties that reflect the total size of the video file, and the amount the browser has retrieved from [...]]]></description>
			<content:encoded><![CDATA[<p>In my first post on <a href="http://tiffanybbrown.com/2010/07/05/the-html5-video-progress-event/">HTML5 video</a> and its progress event, I wrote:</p>
<blockquote><p>Only Firefox provides a means to calculate the amount of the video that has been loaded. The progress event object includes total and loaded properties that reflect the total size of the video file, and the amount the browser has retrieved from the server. This is also a reflection of how each browser handles video downloads.</p></blockquote>
<p>Erm, that&#8217;s only sort of true. As zcorpan <a href="http://tiffanybbrown.com/2010/07/05/the-html5-video-progress-event/#comment-60732130">explained in the comments</a>, the latest version of Firefox implements an old version of the specification. </p>
<p>In the most recent version of the <a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/video.html#video">HTML5 spec</a>, the total and loaded properties of the progress event were removed and (mostly) replaced by the <code>video.buffered</code> property. </p>
<p>So while Firefox 3.6.x <em>is still the only browser that provides total and loaded properties in the progress event</em>, the latest revision added a new property to the <code>video</code> element that works <strong>similarly</strong> &#8212; note the emphasis on &#8216;similarly.&#8217;</p>
<p>What&#8217;s the difference? Both the <code>total</code> and <code>loaded</code> properties of the progress event express the download&#8217;s progress <strong>in terms of bytes.</strong> The <code>video.buffered</code> property expresses the download&#8217;s progress <strong>in terms of seconds</strong>. They&#8217;re similar in that you can determine the status of a download, but using seconds instead of bytes is more relevant for seeking within a timed media file. </p>
<p>By checking <code>video.buffered.end()</code>, we can determine how many seconds of the video are available to the browser and provide the relevant error handling (if a user seeks too far) or interface changes (such as a loading progress bar).</p>
<p>I am still learning how the <code>video.buffered</code> property works, particularly in conjunction other properties and events of the video object. I will post more about this later.</p>
<p>One thing to remember: Firefox has not yet implemented the <code>video.buffered</code> property. It is only available in Safari, Chrome and (sort of) in Opera (still learning the ins-and-outs). (And Internet Explorer doesn&#8217;t support the video element <em>at all</em>, though version 9 should when it&#8217;s released.)</p>
]]></content:encoded>
			<wfw:commentRss>http://tiffanybbrown.com/2010/07/06/the-html5-video-progress-event-redux/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>JavaScript tip: Use a for-loop to reveal properties and methods</title>
		<link>http://tiffanybbrown.com/2010/06/29/javascript-tip-use-a-for-loop-to-reveal-properties-and-methods/</link>
		<comments>http://tiffanybbrown.com/2010/06/29/javascript-tip-use-a-for-loop-to-reveal-properties-and-methods/#comments</comments>
		<pubDate>Tue, 29 Jun 2010 22:27:34 +0000</pubDate>
		<dc:creator>tiffany</dc:creator>
				<category><![CDATA[JavaScript/ECMAScript]]></category>
		<category><![CDATA[Web Development & Programming]]></category>

		<guid isPermaLink="false">http://tiffanybbrown.com/?p=4138</guid>
		<description><![CDATA[I&#8217;ve been tinkering with the HTML5 video element quite a bit lately. However, it&#8217;s not the best-documented thing in the world. There are very useful properties in the video element&#8217;s events that aren&#8217;t so clearly explained in the spec. Developing a media player means you have to uncover these properties using a little bit of [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been tinkering with the <a href="http://www.w3.org/TR/html5/video.html">HTML5 video</a> element quite a bit lately. However, it&#8217;s not the best-documented thing in the world. There are very useful properties in the video element&#8217;s events that aren&#8217;t so clearly explained in the spec. Developing a media player means you have to uncover these properties using a little bit of scripting know-how.</p>
<p>Luckily for us, there is a <em>very easy way</em> to reveal the methods and properties of just about any element in the DOM. Experienced JavaScript developers probably know this. It&#8217;s possibly one of the most useful things you can know about using JavaScript: <strong>use a <code>for</code>-loop to reveal an object&#8217;s unknown properties and methods</strong>.</p>
<p>Let&#8217;s assume you have a div with an <code>id</code> value of &#8220;test.&#8221; Let&#8217;s also assume that you have <a href="http://getfirebug.com/">Firebug,</a> for Firefox installed (and enabled), or that you have <a href="http://developer.apple.com/safari/library/documentation/appleapplications/conceptual/safari_developer_guide/2safaridevelopertools/safaridevelopertools.html">enabled developer tools</a> in Safari (this may work with <a href="http://www.opera.com/dragonfly/">Opera</a>&#8216;s Dragonfly as well).</p>
<p>To find out the properties and methods, for &#8220;test,&#8221; you would use the following code:</p>
<pre>
var p; // initialize this variable.

var testElement = document.getElementById('test');

for(p in testElement){
     console.log( p +': '+testElement[p] ); // using array notation for objects, which works just fine.
}
</pre>
<p>In Firebug, the output will look a bit like this:</p>
<div class="img500">
<a href="http://webinista.s3.amazonaws.com/images/uploads/2010/06/firebugoutput.png"><img src="http://webinista.s3.amazonaws.com/images/uploads/2010/06/firebugoutput-500x313.png" alt="" title="Firebug Output" width="500" height="313" class="alignnone size-medium wp-image-4139" /></a>
</div>
<p>That&#8217;s a list of every property and every method &#8212; and whether or not it&#8217;s a native part of the DOM (as supported by the browser) &#8212; available for this object.</p>
<p>Similarly, you can do the same thing with an event. Consider:</p>
<pre>

function clickHandler(evt){
      var p;
      for(p in evt){
            console.log( p+': '+evt[p] );
      }
}
testElement.addEventListener('click',clickHandler,false);
</pre>
<p>The code above would reveal all of the properties of the event listener (note that in Internet Explorer, you would use the <a href="http://msdn.microsoft.com/en-us/library/ms536343%28VS.85%29.aspx"><code>attachEvent()</code></a> method). This is how I learned that in Firefox, the progress event of the video element contains both &#8220;total&#8221; and &#8220;loaded&#8221; properties &#8212; which will come in handy for creating a loading progress display.</p>
<p class="footnote">Now if you don&#8217;t use Firefox with Firebug, Safari (or Opera), you can also output the data to a <code>&lt;div&gt;</code> in your HTML page.</p>
]]></content:encoded>
			<wfw:commentRss>http://tiffanybbrown.com/2010/06/29/javascript-tip-use-a-for-loop-to-reveal-properties-and-methods/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Increment and decrement, prefix and postfix</title>
		<link>http://tiffanybbrown.com/2010/06/18/increment-and-decrement-prefix-and-postfix/</link>
		<comments>http://tiffanybbrown.com/2010/06/18/increment-and-decrement-prefix-and-postfix/#comments</comments>
		<pubDate>Fri, 18 Jun 2010 20:00:05 +0000</pubDate>
		<dc:creator>tiffany</dc:creator>
				<category><![CDATA[Web Development & Programming]]></category>
		<category><![CDATA[arithmetic operators]]></category>
		<category><![CDATA[decrement]]></category>
		<category><![CDATA[increment]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://tiffanybbrown.com/?p=4098</guid>
		<description><![CDATA[I created this example of the increment (++) and decrement (--) operators in action because I needed to see how they work in combination. I tested this example in Firefox, Safari, and later versions of Internet Explorer, but it probably works in Opera and Chrome as well.]]></description>
			<content:encoded><![CDATA[<p>I created this <a href="http://tiffanybbrown.com/code/2010/incrementdecrement/">example</a> of the increment (<code>++</code>) and decrement (<code>--</code>) operators in action because I needed to see how they work in combination.</p>
<p>I tested this example in Firefox, Safari, and later versions of Internet Explorer, but it probably works in Opera and Chrome as well.</p>
]]></content:encoded>
			<wfw:commentRss>http://tiffanybbrown.com/2010/06/18/increment-and-decrement-prefix-and-postfix/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Links for 2010-05-17</title>
		<link>http://tiffanybbrown.com/2010/05/17/links-for-2010-05-17/</link>
		<comments>http://tiffanybbrown.com/2010/05/17/links-for-2010-05-17/#comments</comments>
		<pubDate>Mon, 17 May 2010 20:55:51 +0000</pubDate>
		<dc:creator>tiffany</dc:creator>
				<category><![CDATA[Browsers]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Web Development & Programming]]></category>
		<category><![CDATA[font-face]]></category>
		<category><![CDATA[xhr]]></category>
		<category><![CDATA[xmlhttprequest]]></category>

		<guid isPermaLink="false">http://tiffanybbrown.com/?p=3959</guid>
		<description><![CDATA[Two web development links for your enjoyment. FormData interface coming to Firefox An overview of the FormData object of XMLHttpRequest, and how you will soon be able to use it in Firefox. From Hacks.Mozilla.Org. Dealing With the Dreaded &#8216;Flash of Unstyled Text&#8216; Tips for mitigating, even eliminating the appearance of unstyled text when using @font-face. [...]]]></description>
			<content:encoded><![CDATA[<p>Two web development links for your enjoyment.</p>
<dl>
<dt><a href="http://hacks.mozilla.org/2010/05/formdata-interface-coming-to-firefox/">FormData interface coming to Firefox</a></dt>
<dd>An overview of the FormData object of XMLHttpRequest, and how you will soon be able to use it in Firefox. From Hacks.Mozilla.Org.</dd>
<dt><a href="http://www.webmonkey.com/2010/05/dealing-with-the-dreaded-flash-of-unstyled-text/">Dealing With the Dreaded &#8216;Flash of Unstyled Text&#8216;</a></dt>
<dd>Tips for mitigating, even eliminating the appearance of unstyled text when using @font-face. From Webmonkey.com.</dd>
</dl>
]]></content:encoded>
			<wfw:commentRss>http://tiffanybbrown.com/2010/05/17/links-for-2010-05-17/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>To password mask or not password mask?</title>
		<link>http://tiffanybbrown.com/2010/02/09/to-password-mask-or-not-password-mask/</link>
		<comments>http://tiffanybbrown.com/2010/02/09/to-password-mask-or-not-password-mask/#comments</comments>
		<pubDate>Tue, 09 Feb 2010 17:00:20 +0000</pubDate>
		<dc:creator>tiffany</dc:creator>
				<category><![CDATA[Usability]]></category>
		<category><![CDATA[Web Development & Programming]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[a list apart]]></category>
		<category><![CDATA[adactio]]></category>
		<category><![CDATA[jakob nielsen]]></category>
		<category><![CDATA[jeremy keith]]></category>
		<category><![CDATA[lyle mullican]]></category>
		<category><![CDATA[password unmasking]]></category>
		<category><![CDATA[privacy]]></category>

		<guid isPermaLink="false">http://tiffanybbrown.com/?p=3403</guid>
		<description><![CDATA[That is the question Jakob Nielsen sparked with last summer&#8217;s column: Stop Password Masking. In this week&#8217;s A List Apart, Lyle Mullican discusses The Problem with Passwords, and writes: However, making such a sweeping change to a fundamental user interaction could present serious problems. Consider some contexts in which a password might need to be [...]]]></description>
			<content:encoded><![CDATA[<p>That is the question <b>Jakob Nielsen</b> sparked with last summer&#8217;s column: <a href="http://www.useit.com/alertbox/passwords.html" class="ext">Stop Password Masking</a>. In this week&#8217;s <i>A List Apart,</i> Lyle Mullican discusses <a href="http://www.alistapart.com/articles/the-problem-with-passwords/" class="ext">The Problem with Passwords</a>, and writes:</p>
<blockquote><p>However, making such a sweeping change to a fundamental user interaction could present serious problems. Consider some contexts in which a password might need to be entered in front of a large group of people, such as while using a conference room projector. And many years of web experience have set user expectations on how form elements should work. People understood that password masking was invented for their security. Failing to meet that expectation might undermine confidence, and we cannot afford to lose our users&#8217; trust.</p></blockquote>
<p>I agree with Nielsen here, and suggest that if you need to enter a password while using a conference room projector, you should have logged-in before your presentation.</p>
<p>Password masking prevents users from making sure the password is correct before sending it to the server. If you, like you should and I do, pick long, hard-to-guess passwords, an unknown mistype can be a source of frustration. </p>
<p>Password masking also provides a false sense of security, particularly on unencrypted connections. Sure it prevents a person peeking over your shoulder. But it doesn&#8217;t stop her from watching you type it on a keyboard. Nor does it stop someone from intercepting it with a packet sniffer if the password is sent as plain text. </p>
<p>In other words: password masking is a bad convention.  </p>
<p>So what&#8217;s the answer? Password <em>un</em>masking &#8212; a toggle that allows users to choose whether or not to show the password. It&#8217;s a fairly recent convention that&#8217;s become widely used for WiFi set-up screens. Jeremy Keith <a href="http://adactio.com/journal/1618/" class="ext">described one method of password masking</a> last summer. Mullican covers a similar technique in his <i>A List Apart</i> piece. </p>
]]></content:encoded>
			<wfw:commentRss>http://tiffanybbrown.com/2010/02/09/to-password-mask-or-not-password-mask/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Proposed File API specification</title>
		<link>http://tiffanybbrown.com/2009/12/10/proposed-file-api-specification/</link>
		<comments>http://tiffanybbrown.com/2009/12/10/proposed-file-api-specification/#comments</comments>
		<pubDate>Thu, 10 Dec 2009 15:15:35 +0000</pubDate>
		<dc:creator>tiffany</dc:creator>
				<category><![CDATA[(x)HTML]]></category>
		<category><![CDATA[JavaScript/ECMAScript]]></category>
		<category><![CDATA[Web Development & Programming]]></category>

		<guid isPermaLink="false">http://tiffanybbrown.com/?p=3017</guid>
		<description><![CDATA[Web applications should have the ability to manipulate as wide as possible a range of user input, including files that a user may wish to upload to a remote server or manipulate inside a rich web application. This specification defines the basic representations for files, lists of files, errors raised by access to files, and [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>Web applications should have the ability to manipulate as wide as possible a range of user input, including files that a user may wish to upload to a remote server or manipulate inside a rich web application. This specification defines the basic representations for files, lists of files, errors raised by access to files, and programmatic ways to read files. The interfaces and API defined in this specification can be used with other interfaces and APIs exposed to the web platform.</p></blockquote>
<p>From <a href="http://www.w3.org/TR/FileAPI/" class="ext">File API</a> working draft by Arun Ranganathan of Mozilla Corporation.</p>
<p>This API, if adopted by major browser vendors will allow client-side file manipulation and asynchronous uploads. </p>
<p>As far as I know, asynchronous uploads are only possible now using a combination of Flash and JavaScript such as <a href="http://swfupload.org/">SWFUpload</a>. Flickr&#8217;s uploader uses a <a href="http://ajaxian.com/archives/flickrs-new-file-uploader">similar technique</a>. Client-side file processing is impossible without a plug-in.</p>
]]></content:encoded>
			<wfw:commentRss>http://tiffanybbrown.com/2009/12/10/proposed-file-api-specification/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flash Player Errors and How to Fix Them</title>
		<link>http://tiffanybbrown.com/2009/12/04/flash-player-errors-and-how-to-fix-them/</link>
		<comments>http://tiffanybbrown.com/2009/12/04/flash-player-errors-and-how-to-fix-them/#comments</comments>
		<pubDate>Fri, 04 Dec 2009 15:15:40 +0000</pubDate>
		<dc:creator>tiffany</dc:creator>
				<category><![CDATA[Web Development & Programming]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[senocular]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://tiffanybbrown.com/?p=2900</guid>
		<description><![CDATA[Trevor McCauley posted two new tutorials today about Flash Player Errors and how to fix them. One covers runtime errors, or errors that occur while a movie is playing. The other covers compiler errors or errors that occur while developing and testing a movie. If you&#8217;re not using it already, may I suggest using Flex [...]]]></description>
			<content:encoded><![CDATA[<p>Trevor McCauley posted two new tutorials today about Flash Player Errors and how to fix them. One covers <a href="http://www.senocular.com/flash/tutorials/runtimeerrors/">runtime errors</a>, or errors that occur while a movie is playing. The other covers <a href="http://www.senocular.com/flash/tutorials/compilererrors/">compiler errors</a> or errors that occur while developing and testing a movie.</p>
<p>If you&#8217;re not using it already, may I suggest using <a href="http://www.adobe.com/products/flex/">Flex Builder</a> as your ActionScript 3.0 <abbr title="integrated development environment">IDE</abbr>? It provides better debugging that Flash itself does. And you can use it with Flash assets by creating an SWC.</p>
<p><b>Also see:</b> <a href="http://tiffanybbrown.com/2009/05/01/debugging-flash-applications-with-firefox-extensions/">Debugging Flash applications with Firefox extensions</a></p>
]]></content:encoded>
			<wfw:commentRss>http://tiffanybbrown.com/2009/12/04/flash-player-errors-and-how-to-fix-them/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Yes, you really do need to learn JavaScript</title>
		<link>http://tiffanybbrown.com/2009/12/03/yes-you-really-do-need-to-learn-javascript/</link>
		<comments>http://tiffanybbrown.com/2009/12/03/yes-you-really-do-need-to-learn-javascript/#comments</comments>
		<pubDate>Thu, 03 Dec 2009 16:20:03 +0000</pubDate>
		<dc:creator>tiffany</dc:creator>
				<category><![CDATA[Web Development & Programming]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[php advent]]></category>

		<guid isPermaLink="false">http://tiffanybbrown.com/?p=2881</guid>
		<description><![CDATA[From Ed Finkler&#8216;s PHP Advent 2009 piece, You Really Need to Learn JavaScript: When I say &#8220;you need to learn JavaScript,&#8221; I don’t mean &#8220;learn how to copy and paste an example,&#8221; or &#8220;learn how to generate JavaScript with PHP.&#8221; I mean learn it as well as you already know PHP &#8212; or better. Why? Because JavaScript [...]]]></description>
			<content:encoded><![CDATA[<p>From <a href="http://funkatron.com/" class="ext">Ed Finkler</a>&#8216;s PHP Advent 2009 piece, <a href="http://phpadvent.org/2009/you-really-need-to-learn-javascript-by-ed-finkler" class="ext">You Really Need to Learn JavaScript</a>:</p>
<blockquote><p>When I say &#8220;you need to learn JavaScript,&#8221; I don’t mean &#8220;learn how to copy and paste an example,&#8221; or &#8220;learn how to generate JavaScript with PHP.&#8221; I mean learn it as well as you already know PHP &#8212; or better.</p>
<p>Why? Because JavaScript drives rich clients, and all indications are that clients will be getting richer. You won&#8217;t be able to get away with just adding small snippets of JS to add tooltips and simple animations. Complex processing and UI management will require real knowledge of how to write JS, and how in [sic] interacts with the client&#8217;s APIs &#8212; the DOM, local storage, networking, OS features, and more.</p></blockquote>
<p>And I will add: not <a href="http://jquery.com/" class="ext">jQuery</a>, not <a href="http://mootools.net/" class="ext">MooTools</a>, not <a href="http://www.dojotoolkit.org/" class="ext">Dojo</a>, but real, actual, JavaScript (and <a href="http://domscripting.com/" class="ext">DOMScripting</a>). Finkler tells you why and points you to some resources for learning more. </p>
]]></content:encoded>
			<wfw:commentRss>http://tiffanybbrown.com/2009/12/03/yes-you-really-do-need-to-learn-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Big Boston Warmup: Interactive Infographics done well</title>
		<link>http://tiffanybbrown.com/2009/11/13/big-boston-warmup-interactive-infographics-done-well/</link>
		<comments>http://tiffanybbrown.com/2009/11/13/big-boston-warmup-interactive-infographics-done-well/#comments</comments>
		<pubDate>Fri, 13 Nov 2009 15:23:48 +0000</pubDate>
		<dc:creator>tiffany</dc:creator>
				<category><![CDATA[Internet life]]></category>
		<category><![CDATA[Web Development & Programming]]></category>
		<category><![CDATA[Web design]]></category>
		<category><![CDATA[charity]]></category>
		<category><![CDATA[firstborn]]></category>
		<category><![CDATA[infographics]]></category>
		<category><![CDATA[information design]]></category>

		<guid isPermaLink="false">http://tiffanybbrown.com/?p=2450</guid>
		<description><![CDATA[Via @gsetser: The Big Boston Warm Up, an infographic presentation whose goal is to get you to donate a coat and help keep homeless people and families a little warmer this winter. The experience begins on the home page with a series of graphics that show the circumstances of Boston&#8217;s homeless. It&#8217;s a broad demographic [...]]]></description>
			<content:encoded><![CDATA[<p>Via <a href="http://twitter.com/gsetser/status/5679063615" class="ext">@gsetser</a>: The <a href="http://www.bigwarmup.com/" class="ext">Big Boston Warm Up</a>, an infographic presentation whose goal is to get you to donate a coat and help keep homeless people and families a little warmer this winter.</p>
<p><img src="http://tiffanybbrown.com/images/uploads/2009/11/bigbostonwarmup1.jpg" alt="big boston warm up screen shot" width="600" height="419" class="alignnone size-full wp-image-2451" /></p>
<p><img src="http://tiffanybbrown.com/images/uploads/2009/11/bigbostonwarmup.jpg" alt="another big boston warm up screen shot" width="600" height="419" class="alignnone size-full wp-image-2452" /></p>
<p>The experience begins on the home page with a series of graphics that show the circumstances of Boston&#8217;s homeless. It&#8217;s a broad demographic profile, which is far less effective, in my opinion, than homeless people in their own words. But I can understand the logistical and ethical concerns of featuring videos of homeless people.</p>
<p>In addition to data about Boston&#8217;s homeless, the site includes donation locations both in Boston and nationwide. To further spur you to donate, <a href="http://www.landsend.com/" class="ext">Land&#8217;s End</a> (the company behind this coat drive) points out that coats go to local homeless people. If you donate a coat in Alabama, it goes to a person in Alabama.</p>
<p>But I think the best piece &#8212; the part that lets you really feel like you and your donation have made a difference is the &#8220;Find Your Coat&#8221; feature.</p>
<p><img src="http://tiffanybbrown.com/images/uploads/2009/11/bigbostonwarmup2.jpg" alt="big boston warmup: find your coat" title="bigbostonwarmup2" width="600" height="419" class="alignnone size-full wp-image-2455" /></p>
<p>Yup! Donate a coat, get a number and find out where your coat has gone. I don&#8217;t have a code, so I can&#8217;t tell you what it looks like on the other side. But I am curious to find out. It&#8217;s this tangible tie-in &#8212; one that piques curiosity and interest if you haven&#8217;t donated, and rewards you with warm fuzzies if you have &#8212; that makes this campaign (potentially) very effective.</p>
<p>Site by: <a href="http://www.firstbornmultimedia.com/#/our-portfolio/1064/" class="ext">Firstborn</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://tiffanybbrown.com/2009/11/13/big-boston-warmup-interactive-infographics-done-well/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

