<?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>Words, punctuated &#187; User-centered design</title>
	<atom:link href="http://probertson.com/articles/category/user-centered-design/feed/" rel="self" type="application/rss+xml" />
	<link>http://probertson.com</link>
	<description>Thoughts on web development, user-centered design, code, etc. by Paul Robertson</description>
	<lastBuildDate>Mon, 30 Aug 2010 16:38:38 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Thoughts on multi-screen, multi-context app development</title>
		<link>http://probertson.com/articles/2010/02/09/thoughts-on-multi-screen-context-app-development/</link>
		<comments>http://probertson.com/articles/2010/02/09/thoughts-on-multi-screen-context-app-development/#comments</comments>
		<pubDate>Wed, 10 Feb 2010 01:00:58 +0000</pubDate>
		<dc:creator>Paul Robertson</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[Application Design]]></category>
		<category><![CDATA[Articles by Paul]]></category>
		<category><![CDATA[Contextual design]]></category>
		<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[Multi-screen]]></category>
		<category><![CDATA[Opinions]]></category>
		<category><![CDATA[Presentations]]></category>
		<category><![CDATA[User-centered design]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://probertson.com/?p=372</guid>
		<description><![CDATA[Around 8 months ago I was asked to start thinking about the now emerging (particularly from a Flash Platform perspective) world of multi-screen application development. What are issues to consider? What guidance should we offer?
It turns out that my thinking on that topic isn&#8217;t going to become anything in the Adobe documentation. So I&#8217;ve sort [...]]]></description>
			<content:encoded><![CDATA[<p>Around 8 months ago I was asked to start thinking about the now emerging (particularly from a Flash Platform perspective) world of multi-screen application development. What are issues to consider? What guidance should we offer?</p>
<p>It turns out that my thinking on that topic isn&#8217;t going to become anything in the Adobe documentation. So I&#8217;ve sort of just been sitting on my ideas with the idea that someday I&#8217;ll probably share them.</p>
<p>Which brings me to this post.</p>
<h2>Aside: upcoming presentations on multi-screen development</h2>
<p>This is really a side note to the main ideas here, but I thought I&#8217;d mention it since it&#8217;s the reason I actually stopped to write this. In one of my mind-wandering moments this morning, I realized that at the upcoming <a href="http://360flex.com/">360|Flex conference (San Jose, March 7-10)</a> I&#8217;ll be involved in two presentations that are directly related to practical aspects of building multi-screen apps:</p>
<ul>
<li>
<p>As part of the pre-conference free training, <a href="http://joelhooks.com/">Joel Hooks</a> and I are doing a four-hour training on using the <a href="http://robotlegs.org/">Robotlegs micro-architecture</a>. (Joel is the main speaker, fortunately, because he&#8217;s one of the core Robotlegs developers and the main &#8220;evangelist.&#8221; I&#8217;ll be helping out, to try and help save his voice and maybe to help find typos. =)</p>
<p>If you&#8217;re wondering what a Robotlegs session has to do with multi-screen apps&#8230;keep reading, it&#8217;s explained below.</p>
</li>
<li>On Tuesday and Wednesday, <a href="http://renaun.com/">Renaun Erickson</a> and I are giving (two separate) presentations about building iPhone apps using Flash Platform tools. My session is more of an intro into the workflow, how it&#8217;s similar to other app building, and how it&#8217;s different. (Plenty of code to look at &#8212; don&#8217;t worry!) Renaun is going to get more into specifics of building a game, as well as some more intermediate/advanced topics like performance.</li>
</ul>
<p>Funny that I never really made that connection until this morning. I guess subconsciously I knew this is a direction I want to move in, and that&#8217;s why I&#8217;ve been focusing my learning (and hence my presenting) on these topics =)</p>
<h2>Background</h2>
<p>While I was partially trying to keep my thinking abstract, from a practical perspective I centered my thoughts around developing using the Flash Platform. So conceptually, what I was thinking about was the idea of making a single &#8220;app&#8221; for multiple screens, which would mean that (in the technology of the next year or so) it could be potentially take several forms:</p>
<ul>
<li>a browser/computer app (Flash Player)</li>
<li>a browser/mobile app (Flash Player)</li>
<li>a desktop app (AIR)</li>
<li>a mobile (iPhone) app (Publisher for iPhone, similar to AIR)</li>
<li>a mobile app for other devices (AIR)</li>
<li>a TV app or widget (<a href="http://tv.adobe.com/watch/max-2009-design/flash-for-the-digital-home-flash-on-tv/">Flash for the digital home</a>)
</ul>
<p>(Obviously many of these are only out in public beta, some have only been vaguely publicly acknowledged, and others may or may not ever exist as actual Adobe products =)</p>
<h2>One app, or many?</h2>
<p>Back when I started thinking about this, there seemed to be two main camps. One group was a strong advocate for the &#8220;single source&#8221; idea: you would build one SWF or one AIR app and distribute that same app on any platforms (desktop/mobile/TV). Obviously a key element to that, especially for desktop/mobile apps rather than browser apps, would be having code that detects screen size and device capabilities and adapts the UI to the device.</p>
<p>The second group felt that it was more likely that developers who are creating an app for multiple screens would actually create multiple apps (from the perspective of the IDE). The apps would obviously share some code, visual assets, etc., but would be different enough that they&#8217;d be created separately and distributed as separate file types. (In the case of apps created for the iPhone, of necessity this has to be true, at least in terms of the publishing part.)</p>
<p>Since I try to be pragmatic about things unless I have a <em>really</em> good reason, I favored the second viewpoint. However, I acknowledge that in some circumstances the first approach might be used. As always, I think that developers are going to use a mix of approaches.</p>
<p>For example, suppose I&#8217;m building an app and I want to create a version for desktop computers, a version for the iPhone, and a version for other mobile devices. Personally I see this not just as an issue of &#8220;porting&#8221; the app from one platform to another. I think that each device has its strengths, and more importantly, each device is used for different purposes and in different contexts. If I&#8217;m building an app for a device, I should definitely be <a href="http://blog.digitalbackcountry.com/2009/10/introducing-contextual-applications/">taking that notion of context into account</a> as I&#8217;m designing the app. That pretty much rules out the possibility of using the exact same app (UI and everything) for both computers and mobile devices, unless I want it to run as a widget-type app on the desktop.</p>
<p class="editornote">Also see: <a href="http://www.adobe.com/devnet/flashplatform/context_apps/">Adobe Flash Platform contextual applications developer center</a></p>
<h2>Adaptable code to the rescue</h2>
<p>On the other hand, that doesn&#8217;t mean that developers will always create completely separate projects. For example, suppose I&#8217;m creating an app for iPhone, and another for another mobile device. Or perhaps I&#8217;m using the Publisher for iPhone to create an iPhone version of my app and an iPad version. If my app is a game where I can more freely discard the conventions of the platforms, perhaps the only platform difference I need to consider is the difference in screen dimensions and pixel density. In that case, it&#8217;s quite possible that I can <a href="http://www.adobe.com/devnet/flash/articles/authoring_for_multiple_screen_sizes.html"use the same source code and have it adapt to the different screen sizes</a>.</p>
<h2>Frameworks to the rescue</h2>
<p>Even for a more line-of-business or productivity app, one of the key ideas in <a href="http://tv.adobe.com/watch/max-2009-develop/preview-flex-for-mobile-devices/">Slider</a>, the future <a href="http://flashmobile.scottjanousek.com/2010/02/12/adobe-flex-for-mobile-whitepaper/">Flex mobile framework</a>, is to (as much as possible) abstract away platform convention differences. For example, if iPhone usually puts the back button on the top, and another platform puts it on the bottom, and another platform puts it in a menu, and another platform has it assigned to a physical button on the device, then Slider might have a &#8220;back&#8221; event that you can hook into, and you can make your app perform the necessary &#8220;back&#8221; tasks regardless of platform.</p>
<h2>Design patterns to the rescue</h2>
<p>And, of course, in some situations you&#8217;ll almost surely need to create different versions of apps for different screens. For example, suppose you&#8217;re building a desktop Twitter client and a mobile Twitter client. Chances are good you&#8217;ll put some functionality into the desktop version that doesn&#8217;t go into the mobile one &#8212; such as previewing images, or maybe Facebook integration. On the other hand, adding a feature like automatic location tagging would make lots of sense in the mobile version, but not so much in the desktop one.</p>
<p>As I was thinking, many months ago, about the idea of efficiently creating different versions of the same app for different devices, a thought hit me like a ton of bricks. This is exactly the use case that the oft-mentioned &#8220;separation of concerns&#8221; is designed for:</p>
<p>Over several years, various &#8220;micro architectures&#8221; and &#8220;application frameworks&#8221; have emerged and waxed and waned in popularity. Many of these architectures are modeled around the &#8220;<a href="http://en.wikipedia.org/wiki/Model-view-controller">Model-View-Controller</a>&#8221; design pattern (or its many variations).</p>
<p>One of the key benefits that these architectures claim is that it helps you keep the pieces of your application separate, without explicit links and dependencies between them. I&#8217;ve looked into and even tried out several of these over the years. One example that is frequently used to describe the notion of separation of concerns, which I always struggled with, goes something like this:</p>
<blockquote><p>
Suppose you&#8217;re creating an app, and you build the user interface and the other logic like server communication and data processing. If you use MVC/separation of concerns, then it&#8217;s really easy to just rip out your whole user interface layer and replace it with a new one.
</p></blockquote>
<p>They usually lost me with that one. As much as I tried, I couldn&#8217;t imagine a situation in which I&#8217;d want to build my app and then just rip out the UI and replace it with a different one <a id="note1src" class="footnote" href="#note1">note 1</a>.</p>
<p>Until now.</p>
<p>Suddenly I had discovered, for myself at least, a real-world use case for the separation-of-concerns-so-you-can-swap-out-the-UI argument. If I&#8217;m building an app for the desktop and mobile, I&#8217;d like to be able to reuse my code where I can. At the same time, some functionality is only going to apply to one app or the other, so it&#8217;d be nice to be able to plug it in cleanly. Oh and by the way, the user interfaces are going to be different, so being able to swap those out is an absolute must.</p>
<p>I&#8217;d always liked micro-architectures in general, if only because I like knowing that I&#8217;m building my app using some pattern or structure that is based on developers&#8217; real-world experience. It&#8217;s much nicer than trying to invent it myself and having to deal with all the pain points they&#8217;ve already gotten over. Now that I am imagining a world where I create multiple versions of the same app, with similar functionality but different user interfaces, suddenly micro-architecture patterns have become indispensable in my mind.</p>
<h2>Conclusion</h2>
<p>These are only just a few of my thoughts about the future world of multi-screen, contextual applications. Like Lee Brimelow, I believe that going forward <a href="http://theflashblog.com/?p=1743">building multi-screen, multi-context apps is going to be a much more common scenario</a>. From my perspective as someone who thinks a lot about user experience design, and trying to optimize tools for the task and context, I think this is one of the most exciting aspects of the current technology revolution. I&#8217;ll definitely continue to share my thoughts and ideas in the future (hopefully more practical ones, too, not just abstract ones like this =)</p>
<h2>Notes</h2>
<p class="footnote" id="note1">Note 1: Just to be clear, I&#8217;m not trying to sound negative about MVC or micro-architectures/frameworks. Most of them provide many benefits, many of which are also related to the idea of separation of concerns, such as making code easier to test, making code cleaner, reducing boilerplate code, providing structure so that teams or developers who inherit a project can get going more quickly, etc. Swapping out the view layer is just one little benefit they mention. (<a href="#note1src">back</a>)</p>
]]></content:encoded>
			<wfw:commentRss>http://probertson.com/articles/2010/02/09/thoughts-on-multi-screen-context-app-development/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Flex and AIR usability studies</title>
		<link>http://probertson.com/articles/2009/07/14/flex-and-air-usability-studies/</link>
		<comments>http://probertson.com/articles/2009/07/14/flex-and-air-usability-studies/#comments</comments>
		<pubDate>Tue, 14 Jul 2009 17:46:28 +0000</pubDate>
		<dc:creator>Paul Robertson</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[Articles to remember]]></category>
		<category><![CDATA[Elsewhere on the web]]></category>
		<category><![CDATA[Life at Adobe]]></category>
		<category><![CDATA[User-centered design]]></category>

		<guid isPermaLink="false">http://probertson.com/?p=312</guid>
		<description><![CDATA[My team at Adobe is conducting a few usability-type studies to learn more about how our customers actually work (and hopefully improve our products as a result =). To sweeten the deal, we&#8217;re offering Amazon gift cards for participants. (There are a limited number of participant slots available.)
We&#8217;re mainly looking for developers who have Flex [...]]]></description>
			<content:encoded><![CDATA[<p>My team at Adobe is conducting a few usability-type studies to learn more about how our customers actually work (and hopefully improve our products as a result =). To sweeten the deal, we&#8217;re offering Amazon gift cards for participants. (There are a limited number of participant slots available.)</p>
<p>We&#8217;re mainly looking for developers who have Flex experience but little or no experience developing for Adobe AIR. There aren&#8217;t many other restrictions &#8212; We&#8217;ll conduct the study on the phone and online using Adobe Connect.</p>
<p>Admittedly, I realize that if you read what I write here then there&#8217;s a good chance that you&#8217;ve already got too much AIR development experience. Even so, we&#8217;d appreciate it if you can spread the word to other developers you know who might be qualified.</p>
<p>If you&#8217;re interested or want to get more details, check out the official post on my team&#8217;s blog:</p>
<p><a href="http://blogs.adobe.com/actionscriptdocs/2009/07/need_participants_for_studies.html">Need participants for studies about AIR and Flex</a></p>
<p>On a related note, we&#8217;re also conducting some (very brief) surveys about your experience developing AIR applications (Flex or HTML/JS). I can&#8217;t remember all the places where you might encounter them, but if you browse around the documentation or the developer center for a while there&#8217;s a chance you&#8217;ll be offered the survey. If you&#8217;ve done some AIR development and get a chance to take the survey, we&#8217;d like to hear about your experiences.</p>
]]></content:encoded>
			<wfw:commentRss>http://probertson.com/articles/2009/07/14/flex-and-air-usability-studies/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mozilla Prism: analysis and comparison to AIR</title>
		<link>http://probertson.com/articles/2008/03/25/mozilla-prism-analysis-and-comparison-to-air/</link>
		<comments>http://probertson.com/articles/2008/03/25/mozilla-prism-analysis-and-comparison-to-air/#comments</comments>
		<pubDate>Tue, 25 Mar 2008 21:54:34 +0000</pubDate>
		<dc:creator>Paul Robertson</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[Articles to remember]]></category>
		<category><![CDATA[Elsewhere on the web]]></category>
		<category><![CDATA[User-centered design]]></category>
		<category><![CDATA[Web Browsers]]></category>

		<guid isPermaLink="false">http://probertson.com/articles/2008/03/25/mozilla-prism-analysis-and-comparison-to-air/</guid>
		<description><![CDATA[I wanted to share a couple of links and some of my thoughts about Mozilla Prism (also here), which (from my understanding) is currently a way to take a browser page and isolate it so that it runs in its own window (and maybe its own process &#8212; not certain about that one) without the [...]]]></description>
			<content:encoded><![CDATA[<p>I wanted to share a couple of links and some of my thoughts about <a href="http://wiki.mozilla.org/Prism">Mozilla Prism</a> (also <a href="http://labs.mozilla.com/2007/10/prism/">here</a>), which (from my understanding) is currently a way to take a browser page and isolate it so that it runs in its own window (and maybe its own process &#8212; not certain about that one) without the extra trappings of browser chrome. It&#8217;s been compared with Adobe AIR, and while there are similarities there are certainly differences too.</p>
<p>I missed the initial announcements and only became aware of Prism a couple of weeks ago when I happened on <a href="http://www.mikechambers.com/blog/2007/10/25/mozilla-prism-and-the-disingenuous-web/">a discussion of Prism by Mike Chambers</a> (complete with rather emotional comments on many sides). I can&#8217;t say I agree with everything Mike says there &#8212; it sounds like at the time he wrote it he didn&#8217;t have a complete understanding of what Prism was/is &#8212; although certainly some of the people who commented obviously didn&#8217;t have a great understanding of Adobe AIR. In any case, it&#8217;s an old (by Internet time) post, so I&#8217;m sure nobody in that conversation would want to be held to their stated opinion.</p>
<p>My opinion about Prism is more in line with <a href="http://weblogs.macromedia.com/jd/archives/2008/03/prism_questions.cfm">something JD shared recently</a>, specifically the quote below which I think clarifies the value proposition (and relative merits) of both AIR and Prism:</p>
<blockquote>
<p>For me, the top difference between the Adobe Integrated Runtime and what I currently understand of Mozilla Prism is the balance between creator choice and user choice. AIR lets you create a predictable beyond-the-browser experience; Prism lets the developer indicate how they&#8217;d like the presentation to appear, but the enduser can still modify the markup, scripts and styles they choose to package up in Prism. Two different types of contract between creator and consumer.</p>
<p>Any existing webpage can be repackaged and modified in Prism; any web developer can create desktop-optimized experiences in AIR.</p>
</blockquote>
<p>I think this is very relevant to one example that I&#8217;ve given to explain one of the benefits of AIR. There are now apps that people use in a browser (e.g. GMail), but they use them like a desktop application &#8212; opening them up and keeping them open all day. The user doesn&#8217;t want that browser window to navigate to a different page, and if some web site causes the browser to hang or crash, the user&#8217;s email app gets hung too. For an app like that, it makes sense for the developer to create a version in AIR that can be run as a separate application. However, there&#8217;s a big dependency from the user perspective &#8212; the app developer has to actually create the AIR app. (e.g. Google would have to make an AIR version of GMail). Once the developer decides to build an AIR app, there are other benefits and capabilities that become available &#8212; but the point is it&#8217;s still in the developer&#8217;s hands to actually build the app. The value I see for Prism is that with Prism the end user can choose to make that app a Prism app without the need for any action by the app developer. Of course, the app will still have dependencies on things like an Internet connection, and won&#8217;t have any more capabilities than any other browser-sandbox app. But it&#8217;s certainly no worse than what the user already has in the browser, with some nice conveniences added in.</p>
]]></content:encoded>
			<wfw:commentRss>http://probertson.com/articles/2008/03/25/mozilla-prism-analysis-and-comparison-to-air/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Knowing when to not use AIR</title>
		<link>http://probertson.com/articles/2007/09/14/knowing-when-to-not-use-air/</link>
		<comments>http://probertson.com/articles/2007/09/14/knowing-when-to-not-use-air/#comments</comments>
		<pubDate>Fri, 14 Sep 2007 22:58:03 +0000</pubDate>
		<dc:creator>Paul Robertson</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[Application Design]]></category>
		<category><![CDATA[Articles to remember]]></category>
		<category><![CDATA[Elsewhere on the web]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[User-centered design]]></category>
		<category><![CDATA[Web Browsers]]></category>

		<guid isPermaLink="false">http://probertson.com/articles/2007/09/14/knowing-when-to-not-use-air/</guid>
		<description><![CDATA[Simplified Chaos has an insightful article about deciding when to use AIR and when to stick to browser-based Flash/Flex. His recommendation is to use the browser by default, and only move to AIR if you really need that desktop functionality. His reasoning, which I can agree with, is that people are much less likely to [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.simplifiedchaos.com/">Simplified Chaos</a> has an insightful article about deciding <a href="http://www.simplifiedchaos.com/2007/08/29/too-many-adobe-air-applications-that-shouldnt-be/">when to use AIR and when to stick to browser-based Flash/Flex</a>. His recommendation is to use the browser by default, and only move to AIR if you really need that desktop functionality. His reasoning, which I can agree with, is that people are much less likely to try out a desktop app that they have to install (and probably uninstall later) than to just look at something in a browser. I definitely agree &#8212; I hadn&#8217;t really realized it until reading this, but I&#8217;ve noticed that when I hear about a new AIR app then I always hope the web site has some screenshots or videos of the app in action, so that I don&#8217;t have to install it to try it out.</p>
<p><a href="http://www.bit-101.com/blog/">Keith Peters</a> wrote <a href="http://www.bit-101.com/blog/?p=1018">a similar post on the same topic</a>, which I also recommend.</p>
<p>(via <a href="http://jessewarden.com/">Jesse Warden</a>)</p>
]]></content:encoded>
			<wfw:commentRss>http://probertson.com/articles/2007/09/14/knowing-when-to-not-use-air/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>&#8220;Deep-linking&#8221; to different frames/states in a Flash application</title>
		<link>http://probertson.com/articles/2006/12/14/deep-linking-flash-application-states/</link>
		<comments>http://probertson.com/articles/2006/12/14/deep-linking-flash-application-states/#comments</comments>
		<pubDate>Thu, 14 Dec 2006 15:52:29 +0000</pubDate>
		<dc:creator>Paul Robertson</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Articles by Paul]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[User-centered design]]></category>

		<guid isPermaLink="false">http://probertson.com/articles/2006/12/14/deep-linking-flash-application-states/</guid>
		<description><![CDATA[Note: a new article based on this one was published on the Adobe Developer Center in September 2007. The article (&#8220;Deep-linking to frames in Flash websites&#8221;) includes more background and detail of the first technique (the no-code approach) described in this article, but doesn&#8217;t discuss any of the other approaches.
I got an email from &#8220;Brent&#8221; [...]]]></description>
			<content:encoded><![CDATA[<p class="editornote">Note: a new article based on this one was published on the Adobe Developer Center in September 2007. The article (&#8220;<a href="http://www.adobe.com/devnet/flash/articles/deep_linking.html">Deep-linking to frames in Flash websites</a>&#8221;) includes more background and detail of the first technique (the no-code approach) described in this article, but doesn&#8217;t discuss any of the other approaches.</p>
<p>I got an email from &#8220;Brent&#8221; asking me if it&#8217;s possible to give someone a url that links directly to a particular keyframe of a Flash application:</p>
<blockquote><p>Maybe you can tell me if this is possible or not, I have a feeling it&#8217;s not cause i&#8217;ve been searching through google and not finding anything written about it.  Can you target a specific keyframe in a flash movie through an HTML page link (possibly using PHP? or javascript to feed the info to flash?)  The reason for doing this would be if, for instance you had a flash site with different sections and wanted to give someone a link to your contact section without having them navigate to it&#8230;</p>
<p>is this possible?</p></blockquote>
<p>Indeed, it is possible.</p>
<p>There are a few ways to accomplish what Brent was asking about. In fancy buzzword circles they might call it &#8220;using REST with Flash&#8221; or &#8220;creating RESTful urls that work with Flash&#8221;, or something like that (the key term being &#8220;REST&#8221;, which means having distinct urls for direct-linking to different states of a web-based application).</p>
<h2>I. Using Flash&#8217;s frame anchors</h2>
<p>The first way is one you can do within Flash itself, without needing any ActionScript. You can assign &#8220;anchors&#8221; to keyframes on the timeline. If you&#8217;re familiar with adding frame labels to frames, it works pretty much the same way:</p>
<ol>
<li>Select the keyframe you want to be able to target</li>
<li>In the Property inspector enter the anchor text (the text that will be added to the url to link to the particular frame) in the &#8220;&lt;Frame Label&gt;&#8221; field</li>
<li>In the &#8220;Label type&#8221; drop-down choose &#8220;Anchor&#8221;</li>
<li>Finally, to make it work you have to open File > Publish Settings, and in the HTML tab, in the Template field, choose &#8220;Flash with Named Anchors&#8221;</li>
</ol>
<p>To link directly to a particular keyframe, just use this format: &#8220;html_page_name.html#anchor_name&#8221; (replacing &#8220;anchor_name&#8221; with whatever name you gave the keyframe in step 2 above).</p>
<p>Admittedly I&#8217;ve never used this in production. I did a quick test and it seemed to work fine in Firefox 2.0 and Internet Explorer 6; but I couldn&#8217;t say if it will work in other browsers.</p>
<p>Also note that if you want to use frame labels (e.g. for ActionScript navigation) and anchors on the same frame #, you need to create them separately. In other words, you need a keyframe on one layer at that frame with the frame label, and another keyframe on another layer of the same frame with the anchor.</p>
<h2 id="flashvars">II. Using FlashVars and server-side code (url variables)</h2>
<p>For a more involved (but well-tested) approach, you could use FlashVars with PHP to pass in the url.  Basically you would make your html page url look something like this:</p>
<pre><code>html_page.php?section=profile</code></pre>
<p>The value that you pass in to the &#8220;section&#8221; variable could be a frame label, or just a value that you&#8217;re going to use in ActionScript somehow.</p>
<p>Then in the actual php source, in the part of the HTML that embeds Flash Player, you&#8217;d put something like this in:</p>
<pre><code>&lt;object ...&gt;
&lt;param name="FlashVars" value="section=&lt;?php echo($_GET['section']) ?&gt;" /&gt;
...
&lt;embed ... flashvars="section=&lt;?php echo($_GET['section']) ?&gt;" /&gt;
&lt;/object&gt;</code></pre>
<p class="editornote">(Note, I&#8217;m just writing this php from memory, and it&#8217;s been a while since I did php, so I may be putting the wrong thing there &#8212; but hopefully you get the idea).</p>
<p>If you&#8217;re using one of the JavaScript libraries for embedding the SWF, such as SWFObject or Adobe&#8217;s Active Content technique, those libraries already have built-in functionality for FlashVars, so you should be able to find examples of how you&#8217;d add the FlashVars with those libraries.</p>
<p>Anyway, that&#8217;s the HTML/PHP side of things.  Back in Flash, on Frame 1 of the main timeline you&#8217;d add code like this:</p>
<pre><code>this.gotoAndStop(section);</code></pre>
<p>The variable named <code>section</code> is &#8216;magically&#8217; created by Flash Player, as a result of the FlashVars code that was written into the html by php.</p>
<p>For more on FlashVars, you can see this post I wrote a while ago:</p>
<p><a href="http://probertson.com/articles/2005/02/14/flash-databases-urlvars-flashvars/">Using URL Variables and FlashVars</a></p>
<p>And you can see these slides/notes from a presentation I gave to an Adobe users&#8217; group covering FlashVars and related techniques:</p>
<p><a href="http://probertson.com/articles/2006/05/31/flash-data-presentation-files/">Slides and notes from &#8220;Flash to external data communication&#8221;</a></p>
<h2>III. Using Kevin Lynch&#8217;s technique for making linkable Flash applications</h2>
<p>Finally, there&#8217;s an even more complex but fancy and re-usable approach that was shared by Kevin Lynch, formerly of Macromedia and now Chief Software Architect for Adobe. It&#8217;s more involved code-wise, but it&#8217;s pretty slick:</p>
<p><a href="http://www.klynch.com/archives/000076.html">Making Rich Internet Apps Web-Friendly</a></p>
<p>This technique (like the first one) doesn&#8217;t require anything special on the server &#8212; it uses JavaScript and ActionScript to do all the work. The advantage it has is that it updates the url in the browser window as you navigate around in the Flash SWF &#8212; so that not only can you have urls that link to different application states, but it&#8217;s easy and obvious to discover what those urls are.</p>
]]></content:encoded>
			<wfw:commentRss>http://probertson.com/articles/2006/12/14/deep-linking-flash-application-states/feed/</wfw:commentRss>
		<slash:comments>29</slash:comments>
		</item>
		<item>
		<title>Interaction Design for RIAs - seven ideas</title>
		<link>http://probertson.com/articles/2005/06/10/ria-hcid-ideas/</link>
		<comments>http://probertson.com/articles/2005/06/10/ria-hcid-ideas/#comments</comments>
		<pubDate>Fri, 10 Jun 2005 20:10:03 +0000</pubDate>
		<dc:creator>Paul Robertson</dc:creator>
				<category><![CDATA[Elsewhere on the web]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[User-centered design]]></category>

		<guid isPermaLink="false">http://probertson.com/articles/2005/06/10/ria-hcid-ideas/</guid>
		<description><![CDATA[Sho Kuwamoto has ideas on interaction design for RIAs.
This is a good, if not comprehensive, list to think about.
Many of these seem to come from his experience with desktop app. design, and a lot of them were pretty familiar to me from HCI design courses I took in grad school (which is one reason why [...]]]></description>
			<content:encoded><![CDATA[<p>Sho Kuwamoto has <a href="http://www.markme.com/sho/archives/007873.cfm">ideas on interaction design for RIAs</a>.</p>
<p>This is a good, if not comprehensive, list to think about.</p>
<p>Many of these seem to come from his experience with desktop app. design, and a lot of them were pretty familiar to me from HCI design courses I took in grad school (which is one reason why I usually did my class projects in Flash rather than in HTML, like so many others did &#8212; the range of interface/interaction design possibilities is so much greater in an RIA platform).</p>
]]></content:encoded>
			<wfw:commentRss>http://probertson.com/articles/2005/06/10/ria-hcid-ideas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DataTiles: A Modular Platform for Mixed Physical and Graphical Interactions</title>
		<link>http://probertson.com/articles/2005/06/10/datatiles-a-modular-platform-for-mixed-physical-and-graphical-interactions/</link>
		<comments>http://probertson.com/articles/2005/06/10/datatiles-a-modular-platform-for-mixed-physical-and-graphical-interactions/#comments</comments>
		<pubDate>Fri, 10 Jun 2005 15:14:49 +0000</pubDate>
		<dc:creator>Paul Robertson</dc:creator>
				<category><![CDATA[Elsewhere on the web]]></category>
		<category><![CDATA[User-centered design]]></category>

		<guid isPermaLink="false">http://probertson.com/articles/2005/06/10/datatiles-a-modular-platform-for-mixed-physical-and-graphical-interactions/</guid>
		<description><![CDATA[Maybe this isn&#8217;t news to those of you who are deep into the subject, but I thought it was a pretty neat interaction concept:
Be sure to watch the video!
Project page for DataTiles: A Modular Platform for Mixed Physical and Graphical Interactions
It is a project being led by Jun Rekimoto, Director of the Interaction Laboratory at [...]]]></description>
			<content:encoded><![CDATA[<p>Maybe this isn&#8217;t news to those of you who are deep into the subject, but I thought it was a pretty neat interaction concept:</p>
<p>Be sure to watch the video!</p>
<p><a href="http://www.csl.sony.co.jp/person/rekimoto/datatile/">Project page for DataTiles: A Modular Platform for Mixed Physical and Graphical Interactions</a></p>
<p>It is a project being led by <a href="http://www.csl.sony.co.jp/person/rekimoto/">Jun Rekimoto</a>, Director of the Interaction Laboratory at Sony Computer Science Laboratories</p>
<p>(via <a href="http://ericd.net/">Eric Dolecki</a>)</p>
]]></content:encoded>
			<wfw:commentRss>http://probertson.com/articles/2005/06/10/datatiles-a-modular-platform-for-mixed-physical-and-graphical-interactions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Patterns for Interaction Design</title>
		<link>http://probertson.com/articles/2005/03/01/id-patterns-repository/</link>
		<comments>http://probertson.com/articles/2005/03/01/id-patterns-repository/#comments</comments>
		<pubDate>Tue, 01 Mar 2005 22:28:09 +0000</pubDate>
		<dc:creator>Paul Robertson</dc:creator>
				<category><![CDATA[Elsewhere on the web]]></category>
		<category><![CDATA[Sites to remember]]></category>
		<category><![CDATA[User-centered design]]></category>
		<category><![CDATA[Web Design]]></category>

		<guid isPermaLink="false">http://probertson.com/articles/2005/03/01/id-patterns-repository/</guid>
		<description><![CDATA[I can&#8217;t decide if I agree about the choice to call these design patterns, but in any case here is a nice (albeit small) collection of solutions to common interaction design needs. Be sure not to miss the section on Interaction Design Literature and Sites, which has links to the big names plus some hidden [...]]]></description>
			<content:encoded><![CDATA[<p>I can&#8217;t decide if I agree about the choice to call these design patterns, but in any case here is a nice (albeit small) <a href="http://visiblearea.com/patterns/">collection of solutions to common interaction design needs</a>. Be sure not to miss the section on <a href="http://visiblearea.com/cgi-bin/twiki/view/Patterns/Literature_and_sites">Interaction Design Literature and Sites</a>, which has links to the big names plus some hidden gems.</p>
]]></content:encoded>
			<wfw:commentRss>http://probertson.com/articles/2005/03/01/id-patterns-repository/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Making Rich Internet Apps Web-Friendly</title>
		<link>http://probertson.com/articles/2005/02/23/restore-state-in-rias/</link>
		<comments>http://probertson.com/articles/2005/02/23/restore-state-in-rias/#comments</comments>
		<pubDate>Wed, 23 Feb 2005 22:58:21 +0000</pubDate>
		<dc:creator>Paul Robertson</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Articles to remember]]></category>
		<category><![CDATA[Elsewhere on the web]]></category>
		<category><![CDATA[User-centered design]]></category>

		<guid isPermaLink="false">http://probertson.com/articles/2005/02/23/restore-state-in-rias/</guid>
		<description><![CDATA[Something sort-of  old that I just re-found: Kevin Lynch gives an example/code to restore state in Rich Internet Applications.
]]></description>
			<content:encoded><![CDATA[<p>Something sort-of  old that I just re-found: Kevin Lynch gives an example/code to <a href="http://www.klynch.com/archives/000076.html">restore state in Rich Internet Applications</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://probertson.com/articles/2005/02/23/restore-state-in-rias/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Autocomplete comes of age</title>
		<link>http://probertson.com/articles/2004/12/20/google-suggest-insights/</link>
		<comments>http://probertson.com/articles/2004/12/20/google-suggest-insights/#comments</comments>
		<pubDate>Mon, 20 Dec 2004 21:46:24 +0000</pubDate>
		<dc:creator>Paul Robertson</dc:creator>
				<category><![CDATA[Articles to remember]]></category>
		<category><![CDATA[User-centered design]]></category>
		<category><![CDATA[Web Design]]></category>

		<guid isPermaLink="false">http://probertson.com/articles/2004/12/20/google-suggest-how-it-works/</guid>
		<description><![CDATA[Insights about the innards of Google Suggest:
http://www.sitepoint.com/blog-post-view.php?id=216588
]]></description>
			<content:encoded><![CDATA[<p>Insights about the innards of Google Suggest:</p>
<p><a href="http://www.sitepoint.com/blog-post-view.php?id=216588">http://www.sitepoint.com/blog-post-view.php?id=216588</a></p>
]]></content:encoded>
			<wfw:commentRss>http://probertson.com/articles/2004/12/20/google-suggest-insights/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Interview with eBay Vice President of User Experience and Design</title>
		<link>http://probertson.com/articles/2004/10/09/interview-with-ebay-vice-president-of-user-experience-and-design/</link>
		<comments>http://probertson.com/articles/2004/10/09/interview-with-ebay-vice-president-of-user-experience-and-design/#comments</comments>
		<pubDate>Sat, 09 Oct 2004 21:10:46 +0000</pubDate>
		<dc:creator>Paul Robertson</dc:creator>
				<category><![CDATA[Articles to remember]]></category>
		<category><![CDATA[User-centered design]]></category>
		<category><![CDATA[Web Design]]></category>

		<guid isPermaLink="false">http://probertson.com/articles/2004/10/09/interview-with-ebay-vice-president-of-user-experience-and-design/</guid>
		<description><![CDATA[Interview with eBay Vice President of User Experience and Design
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.goodexperience.com/blog/archives/000063.php">Interview with eBay Vice President of User Experience and Design</a></p>
]]></content:encoded>
			<wfw:commentRss>http://probertson.com/articles/2004/10/09/interview-with-ebay-vice-president-of-user-experience-and-design/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What they didn&#8217;t teach me in Design and Usability school</title>
		<link>http://probertson.com/articles/2004/04/05/what-they-didnt-teach-me-in-design-and-usability-school/</link>
		<comments>http://probertson.com/articles/2004/04/05/what-they-didnt-teach-me-in-design-and-usability-school/#comments</comments>
		<pubDate>Tue, 06 Apr 2004 00:04:12 +0000</pubDate>
		<dc:creator>Paul Robertson</dc:creator>
				<category><![CDATA[Articles to remember]]></category>
		<category><![CDATA[User-centered design]]></category>

		<guid isPermaLink="false">http://probertson.com/articles/2004/04/05/what-they-didnt-teach-me-in-design-and-usability-school/</guid>
		<description><![CDATA[What they didn&#8217;t teach me in Design and Usability school
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.uiweb.com/issues/issue31.htm">What they didn&#8217;t teach me in Design and Usability school</a></p>
]]></content:encoded>
			<wfw:commentRss>http://probertson.com/articles/2004/04/05/what-they-didnt-teach-me-in-design-and-usability-school/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lessons learned from the Macromedia.com redesign</title>
		<link>http://probertson.com/articles/2003/12/05/lessons-learned-from-the-macromediacom-redesign/</link>
		<comments>http://probertson.com/articles/2003/12/05/lessons-learned-from-the-macromediacom-redesign/#comments</comments>
		<pubDate>Sat, 06 Dec 2003 00:15:32 +0000</pubDate>
		<dc:creator>Paul Robertson</dc:creator>
				<category><![CDATA[Application Design]]></category>
		<category><![CDATA[Articles to remember]]></category>
		<category><![CDATA[User-centered design]]></category>
		<category><![CDATA[Web Design]]></category>

		<guid isPermaLink="false">http://probertson.com/articles/2003/12/05/lessons-learned-from-the-macromediacom-redesign/</guid>
		<description><![CDATA[Lessons learned from the Macromedia.com redesign
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.macromedia.com/newsletters/edge/december2003/">Lessons learned from the Macromedia.com redesign</a></p>
]]></content:encoded>
			<wfw:commentRss>http://probertson.com/articles/2003/12/05/lessons-learned-from-the-macromediacom-redesign/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>design interact</title>
		<link>http://probertson.com/articles/2003/10/10/design-interact/</link>
		<comments>http://probertson.com/articles/2003/10/10/design-interact/#comments</comments>
		<pubDate>Fri, 10 Oct 2003 13:29:02 +0000</pubDate>
		<dc:creator>Paul Robertson</dc:creator>
				<category><![CDATA[Sites to remember]]></category>
		<category><![CDATA[User-centered design]]></category>
		<category><![CDATA[Web Design]]></category>

		<guid isPermaLink="false">http://probertson.com/articles/2003/10/10/design-interact/</guid>
		<description><![CDATA[design interact
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.designinteract.com/">design interact</a></p>
]]></content:encoded>
			<wfw:commentRss>http://probertson.com/articles/2003/10/10/design-interact/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
