<?xml version='1.0' encoding='UTF-8'?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/'><id>tag:blogger.com,1999:blog-506409777947312150</id><updated>2008-10-29T22:38:09.483-07:00</updated><title type='text'>Andrew Paul Simmons: Blog</title><subtitle type='html'></subtitle><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default'/><link rel='alternate' type='text/html' href='http://blog.andrewpaulsimmons.com/'/><link rel='next' type='application/atom+xml' href='http://blog.andrewpaulsimmons.com/atom.xml?start-index=26&amp;max-results=25'/><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.andrewpaulsimmons.com/atom.xml'/><author><name>Andrew Paul Simmons</name><uri>http://www.blogger.com/profile/08253292550421330391</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>32</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-506409777947312150.post-1525119464602427390</id><published>2008-10-28T22:22:00.000-07:00</published><updated>2008-10-29T22:38:09.498-07:00</updated><title type='text'>Writing Requirements from a UX Perspective</title><content type='html'>&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Here is Alan Cooper's five step cycle for requirements refinement and solidification.  With some products one iteration may be enough often refinements will need to be made several times to maintain a comprehensive focus.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Create problem and vision statements&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Brainstorm&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Identifying persona expectations&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Constructing context scenarios &lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Identifying requirements&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;span class="Apple-style-span" style=";font-family:arial;font-size:13;"  &gt;&lt;span class="Apple-style-span" style="font-weight: bold;font-size:100%;" &gt;One: Creating &lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-family:arial;" class="Apple-style-span" &gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Problem and Vision Statements&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style=";font-family:arial;font-size:13;"  &gt;&lt;span class="Apple-style-span" style="font-weight: bold;font-size:100%;" &gt; (an argument of purpose) &lt;/span&gt;&lt;span style="font-size:85%;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style=";font-family:arial;font-size:85%;"  &gt;&lt;span style="font-size:100%;"&gt;In every product there must be a central thesis or argument of purpose behind which all stake holders unite. This statement will then be used to assign value to each proposed feature during the following brainstorming sessions.   It also provides a cohesive focus for the product.  It is vital that the feature set be as concise and focused as possible.  This statement will help reduce features which may be appealing to specific stake holders, but do not facility the user in efficiently realizing his primary goals.   &lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-size:100%;"&gt;Finally, it is vital that usability issues, which are always critical to the success of the application, be illustrated in terms of business goals!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;Two: Brainstorming&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-size:130%;"&gt;During brainstorming it is important to focus on how users will use the product.  Spend more time talking about use cases and little on features and layout.   Let go of preconceived ideas about how the product will look and allow new UI concepts to form around the specific needs of the user.  Do not lock down UI here.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:180%;"&gt;Three: Identifying User Expectations&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family: arial;font-size:130%;" &gt;Understand the features the users will expect to find in the product.  Focus on making expected functionality as apparent as possible.  Also, realize that different users will expect to accomplish the same task in different ways. Attempt to outline areas where the application needs to be permissive.    (An application is said to be permissive when a user has many ways and orders in which he can accomplish the same task.) This is usually expensive so identifying key areas here will save time.  Remember as these are issues of usability it is vital to tie them directly to business objectives.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;span style="font-size:180%;"&gt;Four: Constructing Context Scenarios&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;Context Scenarios focus on how the users will interactive with the product in their typical usage environments.   Here we focus on how the user lives with the product throughout his day.   From our context scenarios we will form requirements designed around how the user will accomplish his goals while driving, multitasking in a busy office, or in whatever  environment he typically finds himself.   It is important to focus on overall user-objectives first and then iteratively fill  in the details.  Context Scenarios should not describe specific UI design, but will be used as a source for discovering the priority of user's needs.  Context Scenarios allow us to create novel solution. It is important to never mention specific UI interactions at this stage! &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style=";font-family:arial;font-size:85%;"  &gt;&lt;span class="Apple-style-span"&gt;&lt;span&gt;An example Context Scenario can be found in &lt;/span&gt;&lt;span style="font-style: italic;"&gt;The Essentials of Interaction Design 3&lt;/span&gt;  on pg 120.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-family:arial;font-size:85%;"  &gt;Five: Identifying Requirements&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;Accept that Requirements are not to be comprised of features and tasks. It is recommended to think of requirements as consisting of the following three primary components:&lt;br /&gt;&lt;/span&gt;&lt;ol  style="font-family:arial;"&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Objects: The information that the user will need in order to accomplish his goals, these would be messages, comments, images, blog entries, as well as associated information publish date, file size etc.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Actions: The operations the user will need to perform on the objects.  Later UI controls will be created to conduct these operations.  Hence, actions will also help determine where information should appear in the UI.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Contexts:  Development timelines, business models, technical limitiations, customer based limitations.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;From here it should be possible to begin drawing UI diagrams and defining interactions.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style=";font-family:arial;font-size:85%;"  &gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span style="font-size:78%;"&gt;(For more information on this topic view the text: &lt;span style="font-style: italic;"&gt;The Essentials of Interaction Design 3&lt;/span&gt; pg 115.)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/1525119464602427390/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=506409777947312150&amp;postID=1525119464602427390' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/1525119464602427390'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/1525119464602427390'/><link rel='alternate' type='text/html' href='http://blog.andrewpaulsimmons.com/2008/10/writing-requirements-from-ux.html' title='Writing Requirements from a UX Perspective'/><author><name>Andrew Paul Simmons</name><uri>http://www.blogger.com/profile/08253292550421330391</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-506409777947312150.post-4023651889529286595</id><published>2008-08-31T22:42:00.000-07:00</published><updated>2008-09-01T01:03:03.617-07:00</updated><title type='text'>What Robert Penner Never Told You About His 'Easing Equations'</title><content type='html'>In his epic work &lt;a href="http://www.robertpenner.com/profmx/"&gt;"Programming Macromedia Flash MX" &lt;/a&gt;Robert Penner introduced &lt;a href="http://www.robertpenner.com/easing/"&gt;his easing equations &lt;/a&gt;to the world.  Of course, the equations were standard curves used in interpolation throughout animation programming.  However, these curves had never before been available in Flash.  (Later, Macromedia would add them to the standard Flash libraries.)&lt;br /&gt;&lt;br /&gt;Interestingly, it turns out that these curves with the names NSAnimationEaseInOut, NSAnimationEaseIn, NSAnimationEaseOut  had existed on OS X/NeXTStep computers for nearly 15 years before Penner would bring them to Flash. Of course, the developers of Flash must have used NSAnimations before they brought the term 'easing' to the mainstream through the Flash UI.   (Outside of Flash/COCOA the term 'easing'  is never used in formal academic circles and is always refered to as interpolation.)&lt;br /&gt;&lt;br /&gt;It infact appears that many  ActionScript classes have Object-C/COCOA ancestors such as hitTest, NSURLRequest, NSURL, and many more.</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/4023651889529286595/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=506409777947312150&amp;postID=4023651889529286595' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/4023651889529286595'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/4023651889529286595'/><link rel='alternate' type='text/html' href='http://blog.andrewpaulsimmons.com/2008/08/what-robert-penner-never-told-you-about.html' title='What Robert Penner Never Told You About His &apos;Easing Equations&apos;'/><author><name>Andrew Paul Simmons</name><uri>http://www.blogger.com/profile/08253292550421330391</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-506409777947312150.post-4622570301855020151</id><published>2008-08-27T19:41:00.000-07:00</published><updated>2008-08-27T19:48:49.945-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='Objective-C'/><category scheme='http://www.blogger.com/atom/ns#' term='UIKit'/><category scheme='http://www.blogger.com/atom/ns#' term='Cocoa'/><title type='text'>Add, Set, and Delete Cookies in UIWebView with NSHTTPCookieStorage</title><content type='html'>NSHTTPCookieStorage allows you to update the cookies for every request made from your application.  UIWebViews will respond to this changes in cookies at run time and NSHTTPCookieStorage allows you to listen for changes in cookies as the are normaly set in the browser.&lt;br /&gt;&lt;br /&gt;To get the cookies for any url use:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;    NSHTTPCookieStorage* cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    NSArray* theCookies = [cookieStorage cookiesForURL:[NSURL URLWithString:@"http://example.com"]];&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This makes it possible to easily login or logout a user from a website presented in your UIWebView.&lt;br /&gt;&lt;br /&gt;Checkout NSHTTPCookieStorage* for all the details.</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/4622570301855020151/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=506409777947312150&amp;postID=4622570301855020151' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/4622570301855020151'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/4622570301855020151'/><link rel='alternate' type='text/html' href='http://blog.andrewpaulsimmons.com/2008/08/add-set-and-delete-cookies-in-uiwebview.html' title='Add, Set, and Delete Cookies in UIWebView with NSHTTPCookieStorage'/><author><name>Andrew Paul Simmons</name><uri>http://www.blogger.com/profile/08253292550421330391</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-506409777947312150.post-6075502550392192021</id><published>2008-08-25T16:08:00.000-07:00</published><updated>2008-08-27T10:04:59.586-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='Objective-C'/><category scheme='http://www.blogger.com/atom/ns#' term='UIKit'/><category scheme='http://www.blogger.com/atom/ns#' term='Cocoa'/><title type='text'>AdMob Ads break in UIWebView</title><content type='html'>AdMob ads are broken in UIWebViews  (a UIWebView is an iPhone native browser control) for two reasons.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;AdMob requires a user agent and when you tell AdMob    you are on an iPhone AdMob will provide ads with direct links to the App Store.  This would be great, but Apple servers respond with "Internal Server Error" when AdMob ads link to the appstore through UIWebView.  The same links work great in iPhone Safari.&lt;/li&gt;&lt;li&gt;When a page containing a UIWebView loads with an AdMob ad, the page is instantly redirected to about:blank.  Canceling this redirect in&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt; shouldStartLoadWithRequest&lt;/span&gt;&lt;/span&gt; causes other links on the page to become unresponsive!&lt;/li&gt;&lt;li&gt;If you know how to get this working please comment.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Update:&lt;/span&gt; after some badgering AdMob has responded &lt;a href="http://developer.admob.com/wiki/IPhone#UIWebView_integration_instructions"&gt;here&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/6075502550392192021/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=506409777947312150&amp;postID=6075502550392192021' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/6075502550392192021'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/6075502550392192021'/><link rel='alternate' type='text/html' href='http://blog.andrewpaulsimmons.com/2008/08/admob-ads-break-in-uiwebview.html' title='AdMob Ads break in UIWebView'/><author><name>Andrew Paul Simmons</name><uri>http://www.blogger.com/profile/08253292550421330391</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-506409777947312150.post-808342063942559378</id><published>2008-08-24T00:16:00.000-07:00</published><updated>2008-08-24T01:12:52.239-07:00</updated><title type='text'>Simple iPhone  image loader class uses NSThread and NSData dataWithContentsOfURL.</title><content type='html'>This class, APSSimpleWebImageView, extends the UIImageView  class with the method&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;- (void) loadStringURL:(NSString*)url.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;loadStringURL&lt;/span&gt; takes the URL of the image you wish to load and loads that image asynchronously.&lt;br /&gt;&lt;a href="http://blog.andrewpaulsimmons.com/examplecode/objc/APSSimpleWebImageView.zip"&gt;Download Example Code Here &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Create an APSSimpleWebImageView as you would a normal UIImageView and then&lt;br /&gt;invoke loadStringURL with the NSString url of the image you wish to load as follows:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;APSSimpleWebImageView* myImageView&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt; = [[APSSimpleWebImageView alloc] initWithFrame:CGRectMake(0,0,100,100)];&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt; [&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;myImageView&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt; loadStringURL:@"http://example.com/image.jpg"];&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;(For the complete code listing download the example code.)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Following are a few points of interest from the sample code:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;(&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;onLoadSuccess&lt;/span&gt;&lt;/span&gt; and&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;onLoadFailure&lt;/span&gt;&lt;/span&gt; are optional call backs that can be used to receive notification that the image has appeared.)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;To load asyncrounsly we invoke &lt;span style=";font-family:courier new;font-size:85%;"  &gt;NSData dataWithContentsOfURL &lt;/span&gt; on a new thread, using &lt;span style=";font-family:courier new;font-size:85%;"  &gt;NSThread detachNewThreadSelector&lt;/span&gt;.&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;br /&gt;&lt;br /&gt;[NSThread detachNewThreadSelector:@selector(performAsyncLoadWithURL:)&lt;br /&gt;toTarget:self withObject:[NSURL URLWithString:urlString]]&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;We must create an autrelease pool in &lt;span style=";font-family:courier new;font-size:85%;"  &gt;performAsyncLoadWithURL: &lt;/span&gt;to prevent the new thread from leaking. (Each thread must have an autorelease pool.)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;performAsyncLoadWithURL:&lt;/span&gt; will then block its thread as it performs the image load&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;:&lt;br /&gt;NSData* imageData = [NSData dataWithContentsOfURL:url options:NSMappedRead error:&amp;amp;loadError];&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;Finally after the image has loaded, we will invoke our load complete call back on the main thread&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;[self performSelectorOnMainThread:@selector(loadDidFinishWithError:)&lt;br /&gt;withObject:loadError waitUntilDone:YES];&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Notice &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;waitUntilDone:YES &lt;/span&gt;&lt;/span&gt;causes our loading thread to block while the approprate loadDidFinish method is invoked on the main thread.  This prevents our imageData object from getting released by the autorelease pool that will be drained in the last line of performAsyncLoadWithURL.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;a href="http://blog.andrewpaulsimmons.com/examplecode/objc/APSSimpleWebImageView.zip"&gt;Download Example Code Here &lt;/a&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href="http://blog.andrewpaulsimmons.com/examplecode/objc/APSSimpleWebImageView.zip"&gt;&lt;br /&gt;&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/808342063942559378/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=506409777947312150&amp;postID=808342063942559378' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/808342063942559378'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/808342063942559378'/><link rel='alternate' type='text/html' href='http://blog.andrewpaulsimmons.com/2008/08/simple-iphone-image-loader-class-uses.html' title='Simple iPhone  image loader class uses NSThread and NSData dataWithContentsOfURL.'/><author><name>Andrew Paul Simmons</name><uri>http://www.blogger.com/profile/08253292550421330391</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-506409777947312150.post-5669081773817655385</id><published>2008-08-23T21:09:00.000-07:00</published><updated>2008-08-23T21:21:47.296-07:00</updated><title type='text'>Asynchronous image loading on the iPhone NSURLConnection or NSThread and NSData dataWithContentsOfURL</title><content type='html'>&lt;span style="font-size:100%;"&gt;In order to &lt;/span&gt;&lt;span style="font-size:100%;"&gt;load images asyncornisly on the iPhone you must choose to use NSURLConnection or NSData dataWithContentsOfURL along with NSThread.  I have decided to use threads to do my asynchronous image loading in spite of the following and rather hilarious warning from the Apple &lt;a href="http://developer.apple.com/documentation/Cocoa/Conceptual/Multithreading/AboutThreads/chapter_2_section_5.html#//apple_ref/doc/uid/10000057i-CH6-SW8"&gt;&lt;span style="font-style: italic;"&gt;Threading Programming Guide&lt;/span&gt;&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;"If you do not fully understand the implications of your design choices, you might encounter synchronization or timing issues, &lt;span style="font-weight: bold;"&gt;the severity of which can range from subtle behavioral changes to your application imploding gloriously and destroying user data.&lt;/span&gt; (Granted, it takes a lot of effort for you to cause your application to implode gloriously, but the fact that it is possible should serve as a warning not to skimp on your planning efforts.)"&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;When I am done, I shall publish my asynchronous web image loader in hopes that it may be helpful.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/5669081773817655385/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=506409777947312150&amp;postID=5669081773817655385' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/5669081773817655385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/5669081773817655385'/><link rel='alternate' type='text/html' href='http://blog.andrewpaulsimmons.com/2008/08/asynchronous-image-loading-on-iphone.html' title='Asynchronous image loading on the iPhone NSURLConnection or NSThread and NSData dataWithContentsOfURL'/><author><name>Andrew Paul Simmons</name><uri>http://www.blogger.com/profile/08253292550421330391</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-506409777947312150.post-2317515348272561448</id><published>2008-08-23T18:13:00.000-07:00</published><updated>2008-08-23T19:46:10.042-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='Objective-C'/><category scheme='http://www.blogger.com/atom/ns#' term='UIKit'/><category scheme='http://www.blogger.com/atom/ns#' term='Cocoa'/><title type='text'>Load web image  into iphone native applicaiton UIImage with no NSURLConnection code required</title><content type='html'>It turns out it is trivial to load images into iPhone native applications.&lt;br /&gt;This simple function will do all of the work. No UIWebView required no NSURLConnection required. Just dataWithContentsOfURL.&lt;br /&gt;&lt;br /&gt;-(UIImage*) newUIImageWithURLString:(NSString*)urlString&lt;br /&gt;{&lt;br /&gt;return [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:urlString]]];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Usage:&lt;br /&gt;&lt;br /&gt;UIImage* myUIImage = [self newUIImageWithURLString:@"http://example.com/images/myimage.jpg"];&lt;br /&gt;&lt;br /&gt;That's it!&lt;br /&gt;&lt;br /&gt;It is important to note that  +(NSData*) dataWithContentsOfURL:(NSURL*)url blocks.  This will not do an asynchronous load. :(  I am looking into another more involved solution that will load images on a separate thread.</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/2317515348272561448/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=506409777947312150&amp;postID=2317515348272561448' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/2317515348272561448'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/2317515348272561448'/><link rel='alternate' type='text/html' href='http://blog.andrewpaulsimmons.com/2008/08/load-web-image-into-iphone-native.html' title='Load web image  into iphone native applicaiton UIImage with no NSURLConnection code required'/><author><name>Andrew Paul Simmons</name><uri>http://www.blogger.com/profile/08253292550421330391</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-506409777947312150.post-2609523060277259002</id><published>2008-08-23T15:41:00.000-07:00</published><updated>2008-08-23T15:45:25.296-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='Objective-C'/><category scheme='http://www.blogger.com/atom/ns#' term='UIKit'/><category scheme='http://www.blogger.com/atom/ns#' term='Cocoa'/><title type='text'>@property and assign, retain, copy</title><content type='html'>From &lt;span style="font-style: italic;"&gt;The Objective-C 2.0 Programming Language&lt;/span&gt; here is how assign retain and copy will be effectively implemented  by @synthesize and how they should be functionally implemented by you if not synthesized.&lt;br /&gt;&lt;br /&gt;property = newValue;&lt;br /&gt;// retain&lt;br /&gt;if (property != newValue)&lt;br /&gt;{&lt;br /&gt;[property release];&lt;br /&gt;property = [newValue retain];&lt;br /&gt;}&lt;br /&gt;// copy&lt;br /&gt;if (property != newValue)&lt;br /&gt;{&lt;br /&gt;[property release];&lt;br /&gt;property = [newValue copy];&lt;br /&gt;}</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/2609523060277259002/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=506409777947312150&amp;postID=2609523060277259002' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/2609523060277259002'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/2609523060277259002'/><link rel='alternate' type='text/html' href='http://blog.andrewpaulsimmons.com/2008/08/property-and-assign-retain-copy.html' title='@property and assign, retain, copy'/><author><name>Andrew Paul Simmons</name><uri>http://www.blogger.com/profile/08253292550421330391</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-506409777947312150.post-1638886005821512507</id><published>2008-07-25T21:05:00.000-07:00</published><updated>2008-07-27T13:51:42.245-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone Cocoa UIKit Objective-C'/><title type='text'>warning: initialization from distinct Objective-c type (iPhone Development)</title><content type='html'>This warning is raised by Xcode whenever an implicit or INCORRECT type cast is occurring.&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;(The AS3 equivilant is the error: &lt;/span&gt;&lt;strong style="font-style: italic; font-weight: normal;"&gt;Error # 1067: Implicit coercion of a value of type * to an unrelated type *.&lt;/strong&gt;&lt;span style="font-style: italic;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;"Distinct Objective-C type" is the type &lt;span style="font-style: italic;"&gt;id&lt;/span&gt;.  Apple docs say, "In Objective-C, object identifiers are a distinct data type: &lt;span style="font-style: italic;"&gt;id&lt;/span&gt;. This type is defined as a pointer to an object..."&lt;br /&gt;&lt;br /&gt;Example Causes:&lt;br /&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;NSMutableArray* myArraySorted = [myArray sortedArrayUsingSelector:@selector(compare:)];&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;The above will raise "warning: initialization from distinct Objective-c type" because &lt;span style="font-style: italic;"&gt;sortedArrayUsingSelector&lt;/span&gt; returns an object of type &lt;span style="font-style: italic;"&gt;id&lt;/span&gt;.  We can correct this by simply casting the return value to the type NSMutableArray* as follows.&lt;br /&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;&lt;br /&gt;NSMutableArray* myArraySorted = (&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;NSMutableArray*)&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;[myArray sortedArrayUsingSelector:@selector(compare:)];&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Finally notice that the incorrect cast that follows will also raise this warning:&lt;br /&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;NSMutableArray* myArraySorted = (NSString&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;*)&lt;/span&gt;&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;[myArray sortedArrayUsingSelector:@selector(compare:)];&lt;/span&gt;&lt;br /&gt;Hence, whenever you see: "warning: initialization from distinct Objective-c type" you are performing an implicit cast.</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/1638886005821512507/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=506409777947312150&amp;postID=1638886005821512507' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/1638886005821512507'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/1638886005821512507'/><link rel='alternate' type='text/html' href='http://blog.andrewpaulsimmons.com/2008/07/warning-initialization-from-distinct.html' title='warning: initialization from distinct Objective-c type (iPhone Development)'/><author><name>Andrew Paul Simmons</name><uri>http://www.blogger.com/profile/08253292550421330391</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-506409777947312150.post-8985221046126469086</id><published>2008-07-22T23:51:00.000-07:00</published><updated>2008-07-23T00:36:28.743-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><title type='text'>MD5 hash on iPhone with cocoa and Objective-C</title><content type='html'>In beta 7 OpenSSL has been removed from the iPhone SDK.  However, MD5 is still available.&lt;br /&gt;&lt;br /&gt;Simply import CommonCrypto as follows:&lt;br /&gt;&lt;span style="font-size:78%;"&gt;#import  &amp;lt; CommonCrypto/CommonDigest.h  &amp;gt;&lt;br /&gt;&lt;br /&gt;Then add this C function to your objective-c class between the @implementation and @end statements (if you like).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;NSString* md5( NSString *str )&lt;br /&gt;{&lt;br /&gt;const char *cStr = [str UTF8String];&lt;br /&gt;unsigned char result[CC_MD5_DIGEST_LENGTH];&lt;br /&gt;CC_MD5( cStr, strlen(cStr), result );&lt;br /&gt;return [NSString  stringWithFormat:&lt;br /&gt;@"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",&lt;br /&gt;      result[0], result[1], result[2], result[3], result[4], result[5],  result[6], result[7],&lt;br /&gt;      result[8], result[9], result[10], result[11], result[12], result[13],  result[14], result[15]&lt;br /&gt;      ];&lt;br /&gt;}&lt;/span&gt;                                                                                                                    &lt;br /&gt;&lt;br /&gt;I am sure you can just use NSData for this but this is the way an example was posted on apple forums.  Please feel free to add an NSData based solution.&lt;br /&gt;&lt;br /&gt;Read the post here "http://discussions.apple.com/thread.jspa?threadID=1509152&amp;amp;tstart=96"&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/8985221046126469086/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=506409777947312150&amp;postID=8985221046126469086' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/8985221046126469086'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/8985221046126469086'/><link rel='alternate' type='text/html' href='http://blog.andrewpaulsimmons.com/2008/07/md5-hash-on-iphone.html' title='MD5 hash on iPhone with cocoa and Objective-C'/><author><name>Andrew Paul Simmons</name><uri>http://www.blogger.com/profile/08253292550421330391</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-506409777947312150.post-2043824849711617819</id><published>2008-05-25T22:04:00.000-07:00</published><updated>2008-07-25T22:06:41.043-07:00</updated><title type='text'>Maximum AS3 (FileReference) file upload size 100MB or more?</title><content type='html'>  From the adobe docs we can can not be sure that flash supports file uploads larger than 100MB.  In my testing I have found no limit.  I would be very interested in hearing about the client os/flash version, and server used by anyone who has found a file so large that it would not upload.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Here is what  Adobe docs say:&lt;br /&gt;"Although Flash Player has no restriction on the size of files you can upload or download, the player officially supports uploads or downloads of up to 100 MB.  You must call the FileReference.browse() or FileReferenceList.browse()  method before you call this method. "&lt;br /&gt;&lt;br /&gt;However, in another area on the same page adobe points out the following:&lt;br /&gt;&lt;br /&gt;"Note: In the initial version of ActionScript 3.0, the [file] size property was defined as a uint object, which supported files with sizes up to about 4 GB. It is now implimented as a Number object to support larger files. "&lt;br /&gt;&lt;br /&gt;So it appears that Adobe also believes uploads larger than 4GB are possible but will not stand behind it.&lt;br /&gt;&lt;br /&gt;Both quotes are from this page: http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/net/FileReference.html</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/2043824849711617819/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=506409777947312150&amp;postID=2043824849711617819' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/2043824849711617819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/2043824849711617819'/><link rel='alternate' type='text/html' href='http://blog.andrewpaulsimmons.com/2008/07/maximum-as3-filereference-file-upload.html' title='Maximum AS3 (FileReference) file upload size 100MB or more?'/><author><name>Andrew Paul Simmons</name><uri>http://www.blogger.com/profile/08253292550421330391</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-506409777947312150.post-7766761359618877880</id><published>2008-04-13T18:15:00.000-07:00</published><updated>2008-04-13T18:26:27.643-07:00</updated><title type='text'>Killing Flash CS3 / AIR Processes and avoiding the "debugger launch failed" message</title><content type='html'>To kill an AIR application launched for testing from Flash CS3 open the task manager and kill the process  idl.exe.&lt;br /&gt;&lt;br /&gt;When working within the Flash CS3 development environment, lightweight or utility windows spawned from an AIR application are not killed when the primary AIR application window is exited. In fact, they are not even killed when Flash CS3 is closed.  &lt;br /&gt;&lt;br /&gt;Further, as long as these lightweight/utility windows are open you will not be able to to test your application. There simply will be no result from pressing ctrl+enter.   Launching the debugger will only offer the message, "debugger launch failed!"  If any part of the AIR application is still running you simply will not be able to test your application.  Hence, you must go to the task manager and kill idl.exe!</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/7766761359618877880/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=506409777947312150&amp;postID=7766761359618877880' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/7766761359618877880'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/7766761359618877880'/><link rel='alternate' type='text/html' href='http://blog.andrewpaulsimmons.com/2008/04/killing-flash-cs3-air-processes-and.html' title='Killing Flash CS3 / AIR Processes and avoiding the &quot;debugger launch failed&quot; message'/><author><name>Andrew Paul Simmons</name><uri>http://www.blogger.com/profile/08253292550421330391</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-506409777947312150.post-3485149374665659738</id><published>2007-12-17T07:34:00.000-08:00</published><updated>2008-01-14T07:39:02.275-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PaperVision3D'/><title type='text'>Google Provides COLLADA Models (for Papervision 3D)</title><content type='html'>&lt;p style="margin-bottom: 0in;"&gt;Have you ever just wanted to throw some models into &lt;a href="http://blog.papervision3d.org/2007/12/05/papervision3d-20-alpha-great-white/"&gt;Papervision3D (2.0)&lt;/a&gt; and get started?  I always find myself in my 3D graphics app creating models when I really want to be writing code.   Now I have discovered the solution.  Google's 3DWarehouse has a large store of free models and now offers every model in COLLADA format which is for your use with Papervision3D!  &lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;a href="http://sketchup.google.com/3dwarehouse"&gt;http://sketchup.google.com/3dwarehouse&lt;/a&gt;&lt;/p&gt;</content><link rel='related' href='http://sketchup.google.com/3dwarehouse' title='Google Provides COLLADA Models (for Papervision 3D)'/><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/3485149374665659738/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=506409777947312150&amp;postID=3485149374665659738' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/3485149374665659738'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/3485149374665659738'/><link rel='alternate' type='text/html' href='http://blog.andrewpaulsimmons.com/2008/01/google-provides-collada-models-for.html' title='Google Provides COLLADA Models (for Papervision 3D)'/><author><name>Andrew Paul Simmons</name><uri>http://www.blogger.com/profile/08253292550421330391</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-506409777947312150.post-1887557052313833564</id><published>2007-11-26T21:19:00.000-08:00</published><updated>2007-11-28T00:24:17.465-08:00</updated><title type='text'>MediaWalls a PaperVision3D Application</title><content type='html'>This application is designed to allow users to explore videos and images in a three dimensional environment.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://andrew.sb.treemo.com/mp/MediaWalls.html"&gt;&lt;img src="http://blog.andrewpaulsimmons.com/images/MediaWalls.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The viewer flies through a world of media walls with his viewport (the camera) smoothly gliding on hermite curves.   Hermite curves are much like bezier curves. Given an initial position P1 and viewing direction P1', with a final position P2 and final viewing direction P2', a 3rd degree polynomial can be formed to provide smooth curving interpolation between camera transformations.  P1' and P2' are like the control handles of a bezier curve and can be lengthened or shortened to add or reduce curvature.  &lt;a href="http://andrew.sb.treemo.com/mp/MediaWalls.html"&gt;Try out MediaWalls...&lt;/a&gt;</content><link rel='related' href='http://andrew.sb.treemo.com/mp/MediaWalls.html' title='MediaWalls a PaperVision3D Application'/><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/1887557052313833564/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=506409777947312150&amp;postID=1887557052313833564' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/1887557052313833564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/1887557052313833564'/><link rel='alternate' type='text/html' href='http://blog.andrewpaulsimmons.com/2007/11/papervision3d-mediawalls-concept.html' title='MediaWalls a PaperVision3D Application'/><author><name>Andrew Paul Simmons</name><uri>http://www.blogger.com/profile/08253292550421330391</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-506409777947312150.post-454952376488570339</id><published>2007-10-30T22:36:00.000-07:00</published><updated>2007-11-28T21:41:16.401-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PaperVision3D'/><title type='text'>Video Cube PaperVision3D</title><content type='html'>The other day I was given an opportunity to create an interactive piece to be used in a Treemo platform demo. The result was this spinning video cube with acceleration driven motion blur.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://andrew.sb.treemo.com/mp/VideoCube.html"&gt;&lt;img src="http://blog.andrewpaulsimmons.com/images/SpinningVideoCube.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Spin the cube by dragging up, down, and from side to side. &lt;a href="http://andrew.sb.treemo.com/mp/VideoCube.html"&gt;Try it...&lt;/a&gt;</content><link rel='related' href='http://andrew.sb.treemo.com/mp/VideoCube.html' title='Video Cube PaperVision3D'/><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/454952376488570339/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=506409777947312150&amp;postID=454952376488570339' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/454952376488570339'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/454952376488570339'/><link rel='alternate' type='text/html' href='http://blog.andrewpaulsimmons.com/2007/10/video-cube-papervision3d.html' title='Video Cube PaperVision3D'/><author><name>Andrew Paul Simmons</name><uri>http://www.blogger.com/profile/08253292550421330391</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-506409777947312150.post-6638668064405624241</id><published>2007-09-10T00:43:00.000-07:00</published><updated>2007-11-28T21:39:29.169-08:00</updated><title type='text'>My Channel Player for Treemo.com</title><content type='html'>Users can upload images and videos directly from their phones to this embeddable widget.&lt;br /&gt;&lt;br /&gt;&lt;embed src="http://superbad.treemo.com/mp/noembed_cplayer.swf" allowfullscreen="true" allowscriptaccess="always" type="application/x-shockwave-flash" flashvars="&amp;amp;u=superbad&amp;amp;host=treemo.com&amp;amp;p=superbad&amp;amp;embed=true&amp;amp;channelPlayer=true&amp;amp;scaleUp=true" height="300" width="400"&gt;&lt;/embed&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Clicking on the gears button (mouse over player to see buttons) offers viewers embed html, designed to induce viral sharing.  The above player is showing the Super Bad channel.  Currently, Treemo.com is running a contest for this film involving my player(above).  Go to &lt;a href="http://superbad.treemo.com/"&gt;http://superbad.treemo.com/&lt;/a&gt; to view the contest.  This url can also be found in the December issue of Rolling Stone Magazine.</content><link rel='related' href='http://www.treemo.com' title='My Channel Player for Treemo.com'/><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/6638668064405624241/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=506409777947312150&amp;postID=6638668064405624241' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/6638668064405624241'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/6638668064405624241'/><link rel='alternate' type='text/html' href='http://blog.andrewpaulsimmons.com/2007/09/cplayer.html' title='My Channel Player for Treemo.com'/><author><name>Andrew Paul Simmons</name><uri>http://www.blogger.com/profile/08253292550421330391</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-506409777947312150.post-1329463459638147826</id><published>2007-08-12T00:33:00.000-07:00</published><updated>2007-11-28T21:22:23.995-08:00</updated><title type='text'>Embedding Font in CS3 Components  (Avoiding Disappearing Button Labels)</title><content type='html'>&lt;p style="margin-bottom: 0in;"&gt;When a CS3 Component (i.e. a Button) appears under a mask the text disappears.&lt;br /&gt;To fix this we simply embed the font in the Component.  Unfortunately, this isn't like embedding  font in a normal programatically generated TextField instance.   &lt;/p&gt;  &lt;p style="margin-bottom: 0in;"&gt;&lt;span style="font-weight: bold;"&gt;How To Embed Font in CS3 Components &lt;/span&gt;&lt;br /&gt;(I will use the Button component for this example.)&lt;/p&gt;  &lt;ol&gt;&lt;li&gt;&lt;p style="margin-bottom: 0in;"&gt;First, we must embed the font in  the swf.  There are 2 ways to do this:&lt;/p&gt;  &lt;ul&gt;&lt;li&gt;&lt;p style="margin-bottom: 0in;"&gt;If you wish, you may simply   create a TextField off stage and embed the font in that TextField.    &lt;/p&gt;   &lt;/li&gt;&lt;li&gt;Or if you have taste, you will   open the library and select “new Font” from the library panel   menu. Now, create a font symbol in the library. I chose Arial and   set the linkage identifier for the font symbol to “ArialFont”   exporting it for ActionScript.&lt;/li&gt;&lt;/ul&gt;  &lt;/li&gt;&lt;li&gt;        &lt;p style="margin-bottom: 0in;"&gt;With the font embedded in the swf,  we now need to embed it in our component.&lt;br /&gt;There is only one way  to do this.  Assuming that our button is named button_btn your  ActionScript will look like this:&lt;/p&gt;&lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;// you may replace new  ArialFont().fontName with the string “Arial” if you prefer. (If  you did not create a Font Symbol you must use the string “Arial”)&lt;br /&gt;&lt;br /&gt;var  tf:TextFormat = new TextFormat(new ArialFont().fontName);&lt;br /&gt;button_btn.setStyle("embedFonts",  true);&lt;br /&gt;button_btn.setStyle("textFormat",  tf);&lt;br /&gt;button_btn.label = "fox";&lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0in;"&gt;That's it. The Font is now embedded  in the CS3 Component.&lt;/p&gt;    &lt;p style="margin-bottom: 0in;"&gt;&lt;span style="font-weight: bold;"&gt;A Note about things that don't work:&lt;/span&gt;  components do not have a “fontFamily” style.  The only way to  control the style of text in components is to create an instance of  TextFormat and set the Button's  “textFormat” style to that  instance of TextFormat. Also, you cannot set a style directly on the  TextField object in the button component. (The CS3  Button  Component's TextField can be  retrieved through it's textField  property.)  Setting the style directly on the  textField causes a  runtime error.  Also, setting the textField's defaultTextFormat  object does not have an effect, as it is overwritten by the  components default styles.   Finally setting the  textField.embedFonts property to true does not have any effect.   &lt;/p&gt; &lt;/li&gt;&lt;/ol&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/1329463459638147826/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=506409777947312150&amp;postID=1329463459638147826' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/1329463459638147826'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/1329463459638147826'/><link rel='alternate' type='text/html' href='http://blog.andrewpaulsimmons.com/2007/09/embedding-font-in-cs3-components.html' title='Embedding Font in CS3 Components  (Avoiding Disappearing Button Labels)'/><author><name>Andrew Paul Simmons</name><uri>http://www.blogger.com/profile/08253292550421330391</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-506409777947312150.post-7298336456071157877</id><published>2007-07-04T16:52:00.000-07:00</published><updated>2007-07-04T17:41:24.860-07:00</updated><title type='text'>ReferenceError: Error #1056:  Caused by  Declaring Stage Instances Private</title><content type='html'>If you declare a stage instance private you get the message: "ReferenceError #1056 Cannot create property my_mc on StageIntanceDeclarationsClass"&lt;br /&gt;&lt;br /&gt;This error occurs when you uncheck the "Declare Stage Instances Automatically" checkbox in the "ActionScript 3.0 Settings" dialogbox and proceed to declare stage instances as private variables in the class associated with the containing MovieClip.&lt;br /&gt;&lt;br /&gt;A Note on Inheritances and Declaring Stage Instances:&lt;br /&gt;You cannot choose to simply always declare stage instances automatically without forging the use of inheritance in classes linked to MovieClip Symbols.  If you have a class APrime which is derived from class A  and APrime is linked to a MovieClip Symbol,  all stage instances used in the base class A must be  manually declared in class A.  "Declare Stage Instances Automatically" only declares instances in the class linked to the MovieClip Symbol and does NOT make those references available to any base classes.&lt;br /&gt;&lt;br /&gt;Example:&lt;br /&gt;Assume that the class &lt;span style="font-style: italic;"&gt;StageIntanceDeclarations &lt;/span&gt;is set as the class associated with a MovieClip which c0ntains the MovieClip &lt;span style="font-style: italic;"&gt;my_mc&lt;/span&gt;.  Then the following code will cause &lt;span style="font-style: italic;"&gt;ReferenceError #1056&lt;/span&gt;  at runtime.&lt;br /&gt;&lt;br /&gt;&lt;style&gt;&lt;br /&gt;    pre {font-family:"Courier New", Courier, Arial; font-size: 12px;}&lt;br /&gt;    .operator {color: #000000;}&lt;br /&gt;    .keyword {color: #993300;}&lt;br /&gt;    .identifier {color: #000087;}&lt;br /&gt;    .properties {color: #000087;}&lt;br /&gt;    .identifier2 {color : #000087;}&lt;br /&gt;    .linecomment, .blockcomment {color: #808080;}&lt;br /&gt;    .string {color: #0000FF;}&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;package&lt;br /&gt;{&lt;br /&gt;        &lt;span class="keyword"&gt;import&lt;/span&gt; flash.display.&lt;span class="identifier2"&gt;MovieClip&lt;/span&gt;;&lt;br /&gt;        &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt; StageIntanceDeclarations &lt;span class="keyword"&gt;extends&lt;/span&gt; &lt;span class="identifier2"&gt;MovieClip&lt;/span&gt;&lt;br /&gt;        {&lt;br /&gt;                &lt;span class='linecomment'&gt;//Private Causes ReferenceError #1056&lt;br /&gt;&lt;/span&gt;                &lt;span class="keyword"&gt;private&lt;/span&gt; &lt;span class="keyword"&gt;var&lt;/span&gt; my_mc:&lt;span class="identifier2"&gt;MovieClip&lt;/span&gt;;&lt;br /&gt;                &lt;span class="keyword"&gt;function&lt;/span&gt; StageIntanceDeclarations()&lt;br /&gt;                {&lt;br /&gt;                }&lt;br /&gt;        }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The output is as follows:&lt;br /&gt;&lt;span style="font-style: italic;"&gt;ReferenceError: Error #1056: Cannot create property my_mc on StageIntanceDeclarations.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    at flash.display::Sprite/flash.display:Sprite::constructChildren()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    at flash.display::Sprite$iinit()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    at flash.display::MovieClip$iinit()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    at TestStageIntanceDeclarationsBase$iinit()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    at flash.display::Sprite/flash.display:Sprite::constructChildren()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    at flash.display::Sprite$iinit()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    at flash.display::MovieClip$iinit()&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To avoid this error simply declare &lt;span style="font-style: italic;"&gt;my_mc&lt;/span&gt; as public:&lt;br /&gt;&lt;span style="font-style: italic;"&gt;public var my_mc:MovieClip;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/7298336456071157877/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=506409777947312150&amp;postID=7298336456071157877' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/7298336456071157877'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/7298336456071157877'/><link rel='alternate' type='text/html' href='http://blog.andrewpaulsimmons.com/2007/07/referenceerror-error-1056-caused-by.html' title='ReferenceError: Error #1056:  Caused by  Declaring Stage Instances Private'/><author><name>Andrew Paul Simmons</name><uri>http://www.blogger.com/profile/08253292550421330391</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-506409777947312150.post-1913827808530051480</id><published>2007-06-30T12:13:00.000-07:00</published><updated>2007-06-30T12:21:55.770-07:00</updated><title type='text'>Sound and NetStream bytesTotal is zero until the entire file is loaded in IE</title><content type='html'>The bytesTotal property only returns the total number of bytes after the sound or video file has completely loaded in both IE and Safari.   However, in Firefox bytesTotal will return the total number of bytes in a sound or video file as soon as the file begins to load.   Further the loadProgress, ProgressEvent.PROGRESS, event of the sound object does not fire as it should in Internet Explorer and Safari.    Adobe makes no mention of this in their documentation!  To show load progress in browsers other than Firefox the bytesTotal/getBytesTotal properties cannot always be used.   You may need to have the total bytes loaded from XML or elsewhere.</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/1913827808530051480/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=506409777947312150&amp;postID=1913827808530051480' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/1913827808530051480'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/1913827808530051480'/><link rel='alternate' type='text/html' href='http://blog.andrewpaulsimmons.com/2007/06/sound-and-netstream-bytestotal-is-zero.html' title='Sound and NetStream bytesTotal is zero until the entire file is loaded in IE'/><author><name>Andrew Paul Simmons</name><uri>http://www.blogger.com/profile/08253292550421330391</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-506409777947312150.post-197015267420858313</id><published>2007-06-14T13:58:00.000-07:00</published><updated>2007-06-14T16:37:22.017-07:00</updated><title type='text'>Magna Cum Laude Complete!</title><content type='html'>&lt;p class="MsoNormal"&gt;Today, final grades posted assuring that I will graduate Magna Cum Laude with a Bachelors of Science in Computer Science.&lt;span style=""&gt;&lt;br /&gt;&lt;/span&gt;(&lt;a href="http://www.wwu.edu/depts/registrar/degree_requirements.shtml#gradhonors"&gt;Suma Cum Laude is not offered by &lt;st1:place st="on"&gt;&lt;st1:placename st="on"&gt;Western&lt;/st1:placename&gt; &lt;st1:placename st="on"&gt;Washington&lt;/st1:placename&gt; &lt;st1:placetype st="on"&gt;University&lt;/st1:placetype&gt;&lt;/st1:place&gt;&lt;/a&gt;, making Magna Cum Laude the highest academic honor awarded.)&lt;br /&gt;&lt;br /&gt;&lt;span style=""&gt;  &lt;/span&gt;&lt;span style=""&gt; &lt;/span&gt;Its has been 3 years since I graduated from junior college with a Presidents Medal across degrees in &lt;span style=""&gt; &lt;/span&gt;digital media communications and an associate of arts. &lt;span style=""&gt;  &lt;/span&gt; During the years at WWU, I spent my time delving into advanced physics, mathematics, and computer science exploring the underlying academics on which our interactive arts are founded.&lt;br /&gt;&lt;/p&gt;</content><link rel='related' href='http://en.wiktionary.org/wiki/magna_cum_laude' title='Magna Cum Laude Complete!'/><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/197015267420858313/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=506409777947312150&amp;postID=197015267420858313' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/197015267420858313'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/197015267420858313'/><link rel='alternate' type='text/html' href='http://blog.andrewpaulsimmons.com/2007/06/magna-cum-laude-complete.html' title='Magna Cum Laude Complete!'/><author><name>Andrew Paul Simmons</name><uri>http://www.blogger.com/profile/08253292550421330391</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-506409777947312150.post-6192288365721017361</id><published>2007-06-12T04:18:00.001-07:00</published><updated>2007-06-12T05:55:58.771-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ActionScript 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Flash Media Server'/><title type='text'>flash.media.Microphone.rate  What are the acceptable bit rates (bitrates)?</title><content type='html'>&lt;p class="MsoNormal"&gt;&lt;a href="http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/media/package-detail.html"&gt;&lt;br /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p class="MsoNormal"&gt;Adobe appears to have forgotten to publish the acceptable values for the &lt;a href="http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/media/package-detail.html"&gt;flash.media&lt;/a&gt;.Microphone.rate property in the ActionScript 3.0 edition of their documentation. &lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p&gt;The Adobe documentation on the rate (bitrate) property is limited to the following,&lt;br /&gt;“The rate at which the microphone is capturing sound, in kHz. The default value is 8 kHz if your sound capture device supports this value. Otherwise, the default value is the next available capture level above 8 kHz that your sound capture device supports, usually 11 kHz. “&lt;/p&gt;  &lt;p&gt;But, what If you want a rate (bitrate) other than 8 or 11 kHz ? If you are looking for the acceptable bit rates look no further. I dug this out of a tech note. &lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;span style=";font-family:Arial;font-size:10;"  &gt;Sampling rate&lt;/span&gt;&lt;/b&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style=";font-family:Arial;font-size:10;"  &gt;Approximate data rate&lt;/span&gt;&lt;/b&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:Arial;font-size:10;"  &gt;5&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:Arial;font-size:10;"  &gt;5.512 kHz&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:Arial;font-size:10;"  &gt;1378 bytes/sec, or 11.025 K bits/sec&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:Arial;font-size:10;"  &gt;8&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:Arial;font-size:10;"  &gt;8.000 kHz&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:Arial;font-size:10;"  &gt;2,000 bytes/sec, or 16 K bits/sec&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:Arial;font-size:10;"  &gt;11&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:Arial;font-size:10;"  &gt;11.025 kHz&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:Arial;font-size:10;"  &gt;2756 bytes/sec, or 22.05 K bits/sec&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:Arial;font-size:10;"  &gt;22&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:Arial;font-size:10;"  &gt;22.050 kHz&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:Arial;font-size:10;"  &gt;5,513 bytes/sec, or 44.1 K bits/sec&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:Arial;font-size:10;"  &gt;44&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:Arial;font-size:10;"  &gt;44.100 kHz&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:Arial;font-size:10;"  &gt;11,025 bytes/sec, or 88.2 K bits/sec&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/6192288365721017361/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=506409777947312150&amp;postID=6192288365721017361' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/6192288365721017361'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/6192288365721017361'/><link rel='alternate' type='text/html' href='http://blog.andrewpaulsimmons.com/2007/06/flashmediamicrophonerate-what-are.html' title='flash.media.Microphone.rate  What are the acceptable bit rates (bitrates)?'/><author><name>Andrew Paul Simmons</name><uri>http://www.blogger.com/profile/08253292550421330391</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-506409777947312150.post-7495243291431273190</id><published>2007-06-11T23:47:00.000-07:00</published><updated>2007-06-11T23:55:12.178-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Flash Media Server'/><title type='text'>Adobe Flash Player Settings Dialog Box Does Not Appear</title><content type='html'>&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;I was creating a flash mp3 recorder application today and the Adobe Flash Player Settings dialog box, which gives the user the option to allow his microphone to be streamed back to the server, would not appear. &lt;span style=""&gt; &lt;/span&gt;&lt;span style=""&gt;  &lt;/span&gt;It turns out that my SWF was too small for the settings box to show up.&lt;span style=""&gt;  &lt;/span&gt;A SWF size of no less than 214 x 137 pixels is required for the settings dialog box to appear.&lt;span style=""&gt;  &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I got no warning and no error.&lt;span style=""&gt;  &lt;/span&gt;It would be nice if the window would show up at any size.&lt;span style=""&gt;  &lt;/span&gt;A warning would also have been fine. Even just shading the window as normal would have indicated that the setting dialog box was just off screen. &lt;span style=""&gt;  &lt;/span&gt;Instead I got nothing.&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/7495243291431273190/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=506409777947312150&amp;postID=7495243291431273190' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/7495243291431273190'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/7495243291431273190'/><link rel='alternate' type='text/html' href='http://blog.andrewpaulsimmons.com/2007/06/adobe-flash-player-settings-dialog-box.html' title='Adobe Flash Player Settings Dialog Box Does Not Appear'/><author><name>Andrew Paul Simmons</name><uri>http://www.blogger.com/profile/08253292550421330391</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-506409777947312150.post-6977918547240804608</id><published>2007-06-08T02:43:00.001-07:00</published><updated>2007-06-08T04:38:59.851-07:00</updated><title type='text'>Slow SWF Publishing Due To Embedded Fonts</title><content type='html'>Quick Note:&lt;br /&gt;Don't Embed too much font in an FLA file until you are done developing the Flash Application. Embedding fonts can cause extremely long compile times.  (Embedding under 75 characters shouldn't cause too much of a slow down.)</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/6977918547240804608/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=506409777947312150&amp;postID=6977918547240804608' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/6977918547240804608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/6977918547240804608'/><link rel='alternate' type='text/html' href='http://blog.andrewpaulsimmons.com/2007/06/slow-flash-swf-publishing-due-to.html' title='Slow SWF Publishing Due To Embedded Fonts'/><author><name>Andrew Paul Simmons</name><uri>http://www.blogger.com/profile/08253292550421330391</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-506409777947312150.post-7127900176316072292</id><published>2007-06-07T00:09:00.000-07:00</published><updated>2007-06-07T00:15:24.927-07:00</updated><title type='text'>Can’t convert FLV to MP3 due to a vcen.dll  error?</title><content type='html'>When using Total Video Converter on a web server to convert Nellymoser FLV (but not MP3 FLV), you may encounter an error in vcen.dll. &lt;span style=""&gt;   &lt;/span&gt;You cannot usually invoke the command line version of Total Video Converter directly from your web application.&lt;span style=""&gt;  &lt;/span&gt;You must make a Windows Service that performs the conversion.&lt;span style=""&gt;   &lt;/span&gt;We made a service that converted all Nellymoser FLV files written to a specific folder to MP3 files.&lt;span style=""&gt;  &lt;/span&gt;We were able to do large number simulations conversions this way. &lt;span style=""&gt; &lt;/span&gt;    &lt;p class="MsoNormal"&gt;For more information on Total Video Converter see my &lt;a href="http://blog.andrewpaulsimmons.com/2007/05/recording-audio-with-flash-player-to.html"&gt;tutorial on using the Total Video Command line application&lt;/a&gt; to convert Nellymoser FLV files to mp3 or wav files.&lt;/p&gt;    &lt;p class="MsoNormal"&gt;I will post an example application with tutorial, that walks you through the entire process of doing the Nellymoser FLV to MP3 conversion with Total Video Convert  and setting up the Windows Service as soon as possible.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/7127900176316072292/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=506409777947312150&amp;postID=7127900176316072292' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/7127900176316072292'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/7127900176316072292'/><link rel='alternate' type='text/html' href='http://blog.andrewpaulsimmons.com/2007/06/cant-convert-flv-to-mp3-due-to-vcendll.html' title='Can’t convert FLV to MP3 due to a vcen.dll  error?'/><author><name>Andrew Paul Simmons</name><uri>http://www.blogger.com/profile/08253292550421330391</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-506409777947312150.post-4098448604518344717</id><published>2007-06-06T20:20:00.000-07:00</published><updated>2007-06-07T09:00:52.455-07:00</updated><title type='text'>ReferenceError: Error #1065: Variable SimpleMP3Player is not defined.</title><content type='html'>I needed to make a simple flash mp3 player in about two hours today.  I quickly setup my classes, launched my application, and this is the error that I got:&lt;br /&gt;&lt;br /&gt;ReferenceError: Error #1065: Variable SimpleMP3Player is not defined.&lt;br /&gt;&lt;br /&gt;I had set the linkage, in the linkage properties, of a symbol to point to the class SimpleMP3Player.&lt;br /&gt;&lt;br /&gt;The class was written as follows:&lt;br /&gt;&lt;pre&gt;package&lt;br /&gt;{&lt;br /&gt;    &lt;span class="keyword"&gt;import&lt;/span&gt; flash.display.*;&lt;br /&gt;    &lt;span class="keyword"&gt;class&lt;/span&gt; SimpleMP3Player &lt;span class="keyword"&gt;extends&lt;/span&gt; &lt;span class="identifier2"&gt;MovieClip&lt;/span&gt;&lt;br /&gt;    {&lt;br /&gt;        &lt;br /&gt;            &lt;span class="keyword"&gt;function&lt;/span&gt; SimpleMP3Player()&lt;br /&gt;            {&lt;br /&gt;                    &lt;span class="identifier2"&gt;trace&lt;/span&gt;(&lt;span class="string"&gt;"MP3 Player instantiated"&lt;/span&gt;);&lt;br /&gt;            }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;I checked the adobe live docs and read:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;1065 Variable _ is not defined.   You are using an undefined lexical reference. For example, in the following statements, the statement trace(x) generates an error because x is undefined. However, the statement trace(y) doesn't generate an error because y is defined:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;trace("hello world")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt; trace(x) // x is undefined&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt; var y&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt; trace(y) // No error, y is defined.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;It didn't take too long to see that &lt;span style="font-weight: bold;"&gt;I had simply forgotten to declare the class SimpleMP3Player as public.&lt;/span&gt;  Nevertheless, there could have been a much better error for this.   When you take your compiler classes, they always teach you to include common errors in your parser so you can provide useful error messages.   Apparently the Adobe AS3 developers weren't paying attention. &lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;/span&gt;</content><link rel='related' href='http://livedocs.adobe.com/flex/201/langref/runtimeErrors.html' title='ReferenceError: Error #1065: Variable SimpleMP3Player is not defined.'/><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/4098448604518344717/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=506409777947312150&amp;postID=4098448604518344717' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/4098448604518344717'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/506409777947312150/posts/default/4098448604518344717'/><link rel='alternate' type='text/html' href='http://blog.andrewpaulsimmons.com/2007/06/referenceerror-error-1065-variable.html' title='ReferenceError: Error #1065: Variable SimpleMP3Player is not defined.'/><author><name>Andrew Paul Simmons</name><uri>http://www.blogger.com/profile/08253292550421330391</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>11</thr:total></entry></feed>