<?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>the machine started talking.</title>
	<atom:link href="http://www.rezmason.net/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.rezmason.net/blog</link>
	<description>(mostly about actionscript.)</description>
	<lastBuildDate>Thu, 03 Nov 2011 18:30:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Book review: haXe 2 Beginner&#8217;s Guide</title>
		<link>http://www.rezmason.net/blog/book-review-haxe-2-beginners-guide/</link>
		<comments>http://www.rezmason.net/blog/book-review-haxe-2-beginners-guide/#comments</comments>
		<pubDate>Thu, 03 Nov 2011 18:27:06 +0000</pubDate>
		<dc:creator>Jeremy</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.rezmason.net/blog/?p=188</guid>
		<description><![CDATA[So there&#8217;s this haXe book that came out in July, and I was supposed to review it. For those of you who don&#8217;t know, haXe is an ECMAScript-based programming language with awesome features. Its compiler is fast; it targets Flash, JavaScript, PHP, nekoVM (a speedy virtual machine like Flash or Java that is extensible) and [...]]]></description>
			<content:encoded><![CDATA[<p>So there&#8217;s this <a href="http://www.packtpub.com/haxe-2-beginners-guide/book" title="haXe 2 Beginner's Guide" target="_blank">haXe book</a> that came out in July, and I was supposed to review it.</p>
<p>For those of you who don&#8217;t know, <a href="http://www.haxe.org/" title="haXe" target="_blank">haXe</a> is an ECMAScript-based programming language with awesome features. Its compiler is fast; it targets Flash, JavaScript, PHP, nekoVM (a speedy virtual machine like Flash or Java that is extensible) and native platforms. You can even write functions in it that change the way your haXe code is compiled.</p>
<p>Understandably, people who are new to haXe spend a lot of time using it the way they&#8217;d use the languages they&#8217;re used to. The haXe 2 Beginner&#8217;s Guide covers all the usual things people are familiar with, but then it guides the reader steadily through the trickier concepts. Good thing too, because that&#8217;s where the fun is.</p>
<p><span id="more-188"></span></p>
<p>haXe code needs to be understood on several levels- the way it compiles and the way it behaves when it is run on each target. That&#8217;s a lot of ground to cover, and this book does a good job at it. It reads like a college textbook, though, which is good and bad. A professor who wanted to could teach a basic programming course with haXe and this book, but that&#8217;s because basic programming courses tend to cover mundane things like reading and writing to files. They cover client targets like Flash and JS, but only enough to put info onscreen that verifies a connection to the server. </p>
<p>And that&#8217;s really what this book is about, after the basic haXe syntax stuff is covered- server stuff. That SPOD thing with relational databases, the haXe templating API (which might have changed a little since the book&#8217;s publication; it can be tough to publish guides for an evolving language) and file stream exercises all seem to point to an unspoken expectation that the reader can figure out the presentation layer things themselves. In my opinion, working in the presentation layer is the most difficult challenge in haXe, and apart from the promising <a href="http://www.haxenme.org/" title="NME" target="_blank">NME</a> project, there&#8217;s no clear, common solution. haXe has no common graphics API, while it does have a common API for all the things that this book covers, so it&#8217;s really no fault of the author. Maybe another part of the reason for omitting graphics stuff is because that subject could fill a whole other book. It would be exciting to see a follow-up publication regarding haXe as a language for developing games and other rich clients for multiple targets.</p>
<p>The book comes with lots of homework, which I did not do, but might eventually. I have more fun integrating lessons into my own projects than completing assignments, but if I decide to take up SPOD, for instance, I&#8217;d go with this book.</p>
<p>Overall, this beginner&#8217;s guide is a useful resource even for people who think they know haXe inside and out. It&#8217;s the best book on haXe I&#8217;ve ever read&#8230; It&#8217;s also the only book on haXe I&#8217;ve ever read– there&#8217;s not a lot of haXe literature printed nowadays, which makes it just as important to have this book on your shelf. (Or e-shelf.)</p>
<p><strong><a href="http://www.packtpub.com/haxe-2-beginners-guide/book" target="_blank">haXe 2 Beginner’s Guide &#8211; Benjamin Dasnois</a></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rezmason.net/blog/book-review-haxe-2-beginners-guide/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oh right, I have a blog.</title>
		<link>http://www.rezmason.net/blog/oh-right-i-have-a-blog/</link>
		<comments>http://www.rezmason.net/blog/oh-right-i-have-a-blog/#comments</comments>
		<pubDate>Mon, 31 Oct 2011 17:13:46 +0000</pubDate>
		<dc:creator>Jeremy</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[back in the saddle]]></category>

		<guid isPermaLink="false">http://www.rezmason.net/blog/?p=148</guid>
		<description><![CDATA[Hey there. I guess it&#8217;s been a while! Since July of last year, I picked up Flex, haXe, a bit of JavaScript, and a new project called Scourge. And an apartment in Brooklyn. And a short-lived relationship. And a new job in a new town. I&#8217;ve been a bit busy. There&#8217;s been no time to [...]]]></description>
			<content:encoded><![CDATA[<p>Hey there. I guess it&#8217;s been a while!</p>
<p>Since July of last year, I picked up Flex, haXe, a bit of JavaScript, and a new project called Scourge.</p>
<p>And an apartment in Brooklyn. And a short-lived relationship.</p>
<p>And a new job in a new town. I&#8217;ve been a bit busy. There&#8217;s been no time to post things so that the two or three people who visit this site with any regularity can have something to return to. However, I do intend to post more frequently again. Here goes!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rezmason.net/blog/oh-right-i-have-a-blog/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Handling clipboard events in AIR</title>
		<link>http://www.rezmason.net/blog/handling-clipboard-events-in-air/</link>
		<comments>http://www.rezmason.net/blog/handling-clipboard-events-in-air/#comments</comments>
		<pubDate>Wed, 28 Jul 2010 02:15:10 +0000</pubDate>
		<dc:creator>Jeremy</dc:creator>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[graphics]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[System events]]></category>
		<category><![CDATA[text]]></category>
		<category><![CDATA[actionscript]]></category>
		<category><![CDATA[air]]></category>
		<category><![CDATA[clipboard]]></category>
		<category><![CDATA[tyro]]></category>

		<guid isPermaLink="false">http://www.rezmason.net/blog/?p=146</guid>
		<description><![CDATA[So! If you read that last post, you know about Tyro. Since I designed Tyro to be able to handle clipboard events, I expected it to respond to my cut, copy and paste keystrokes when I put it in an AIR application. It didn&#8217;t work. Can you think of why? If you guessed it had [...]]]></description>
			<content:encoded><![CDATA[<p>So!</p>
<p>If you read that last post, you know about <a href="http://code.google.com/p/wireworldas3/source/browse/trunk/src/net/rezmason/text/Tyro.as">Tyro</a>. Since I designed Tyro to be able to handle clipboard events, I expected it to respond to my cut, copy and paste keystrokes when I put it in an AIR application. It didn&#8217;t work. Can you think of why?</p>
<p>If you guessed it had something to do with menus, you&#8217;re correct. You seem pretty clever; maybe you want to follow along and try this project at home? Clipboard commands are usually provided through the Edit menu of an application, such as a web browser. Most people have learned through experience to rely upon the common keyboard shortcuts that software developers commonly bind to the clipboard commands, but know this: if your browser&#8217;s developer didn&#8217;t think to include that overlooked Edit menu, <strong>all your absent-minded key tapping would do nothing</strong>.<span id="more-146"></span></p>
<p>The first issue, then, is to include an Edit menu in your AIR application, and to fill it with NativeMenuItems that represent the standard Cut, Copy and Paste operations. I&#8217;ll wait while you do that. Don&#8217;t forget those keyboard shortcuts! (You might also want to stick in the Select All command, but remember, it doesn&#8217;t fit in the same category as the clipboard commands, so you should insert a separator to keep it apart from the other menu items.)</p>
<p><a href="http://www.rezmason.net/blog/wp-content/uploads/2010/07/EditMenu.png"><img src="http://www.rezmason.net/blog/wp-content/uploads/2010/07/EditMenu.png" alt="You&#039;ll want to do something along these lines." title="EditMenu" width="326" height="315" class="aligncenter size-full wp-image-176" /></a></p>
<p>Now, what&#8217;s next? Remember, our goal here is to reproduce the chain of events that cause clipboard events to work in the Flash Player. We&#8217;ll want to dispatch events that use the <code>Event.CUT</code>, <code>Event.COPY</code>, <code>Event.PASTE</code> and <code>Event.SELECT_ALL</code> types. And we&#8217;ll want to dispatch them from the current stage focus. You might listen for <code>Event.SELECT</code> typed events from your Edit menu items, and respond in a fashion similar to this:</p>
<p>
<code>var clipboardEventType:String;<br />
switch (event.currentTarget) {<br />
	case myCutMenuItem: clipboardEventType = Event.CUT; break;<br />
	case myCopyMenuItem: clipboardEventType = Event.COPY; break;<br />
	case myPasteMenuItem: clipboardEventType = Event.PASTE; break;<br />
	case mySelectAllMenuItem: clipboardEventType = Event.SELECT_ALL; break;<br />
}<br />
if (stage.focus &#038;&#038; clipboardEventType) stage.focus.dispatchEvent(new Event(clipboardEventType));<br />
</code>
</p>
<p>That ought to do the trick! If you want to be thorough, you can listen for <code>FocusEvent.FOCUS_IN</code> events on the Stage to determine whether there currently is a clipboard-friendly object in focus, and what kind of object it is; that way, if it&#8217;s not something you wish to use with the clipboard, you can disable the Edit menu. This whole method should work for any InteractiveObject that has been carefully written to receive stage focus and handle clipboard events.</p>
<p>Wait, what&#8217;s that you say? You say you aren&#8217;t using the Tyro class as your text system? You&#8217;re using TextFields, the way they taught you in school? And they aren&#8217;t responding to your events, even when they have focus?</p>
<p><em>Well then it sucks to be you, doesn&#8217;t it?</em> Don&#8217;t sweat it, I&#8217;m sure you can work out the copy and paste routines yourself. Have fun!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rezmason.net/blog/handling-clipboard-events-in-air/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Overthinking Text - Part 1 of my 65,536 part series on overthinking things</title>
		<link>http://www.rezmason.net/blog/overthinking-text/</link>
		<comments>http://www.rezmason.net/blog/overthinking-text/#comments</comments>
		<pubDate>Tue, 27 Jul 2010 23:02:10 +0000</pubDate>
		<dc:creator>Jeremy</dc:creator>
				<category><![CDATA[graphics]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[rambling]]></category>
		<category><![CDATA[text]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[actionscript]]></category>
		<category><![CDATA[fte]]></category>
		<category><![CDATA[text engine]]></category>
		<category><![CDATA[tlf]]></category>

		<guid isPermaLink="false">http://www.rezmason.net/blog/?p=144</guid>
		<description><![CDATA[Remember 2008? What a great year. Especially in November, when we made history. I remember watching the ceremony on video feed with friends. People were cheering and crying. No, wait. I mean 2007, not 2008. You know, when Adobe showed us a sneak peek of Flash Player 10, and Peter Elst&#8217;s posted video coverage gave [...]]]></description>
			<content:encoded><![CDATA[<p>Remember 2008? What a great year. Especially in November, when we made history. I remember watching the ceremony on video feed with friends. People were cheering and crying.</p>
<p>No, wait. I mean 2007, not 2008. You know, when Adobe showed us a sneak peek of Flash Player 10, and Peter Elst&#8217;s posted <a href="http://www.peterelst.com/blog/2007/10/03/adobe-max-chicago-sneak-peeks/">video coverage</a> gave his blog a bazillion hits as Flashmongers everywhere watched Emmy Huang spin a MovieClip in 3D. &#8220;Whoop dee doo&#8221;, you might say with hindsight-equipped eyes. It&#8217;s 2010 and all those new tricks are now old hat, right?</p>
<p>Not exactly. While the novelty of 2.5D and IK handles may have faded away, one of Flash Player 10&#8242;s new features– the advanced text engine– has lagged behind the rest. That&#8217;s because the text engine is very low-level, and wasn&#8217;t exposed to designers in the Flash Professional authoring environment. Until CS5 was released this past April, only developers had access to the FTE. That&#8217;s kind of ridiculous, and Adobe knew that. And so began the efforts (by many different people) to bring TextField-like usability and new text functionality to the Flash platform.<span id="more-144"></span></p>
<p>Since the release of Flash Player 10, <a href="http://blogs.adobe.com/tlf/">a team at Adobe</a> has been hard at work to create a higher level framework for using the new text features. It&#8217;s called the <a href="http://labs.adobe.com/technologies/textlayout/">Text Layout Framework</a>; in Flash CS5, it&#8217;s the &#8220;TLF Text&#8221; option in the Properties panel. The TLF exposes all those neat new tricks to designers, but ironically it&#8217;s almost entirely inaccessible to developers, which almost defeats the purpose. Plus it&#8217;s riddled with memory issues and quirks; if you want to read more angst directed at the TLF, read <a href="http://www.gskinner.com/blog/archives/2010/07/some_thoughts_o_1.html">Grant Skinner&#8217;s recent article and the comments that follow it</a>. The TLF team has <a href="http://sourceforge.net/adobe/tlf/home/">released the code to the framework</a> as they work toward their 2.0 release, but still, there&#8217;s some demand for text systems that out-TLF the TLF.</p>
<p>&#8230;Er, well not entirely. The TLF tries to cover a lot of bases; most projects don&#8217;t need all that functionality, so they&#8217;d benefit from smaller text layout systems that have lesser overhead than the TLF. That might sound like a tall order to give to an ActionScript 3 developer, but that&#8217;s only because historically, we weren&#8217;t able to directly manipulate text this way. It&#8217;s outside of our comfort zone, but ActionScript developers have produced more complicated libraries in the past. So while gearing up the <a href="http://www.rezmason.net/wireworld">Wireworld player</a> for an Android port, I decided to redesign the view, and while doing that I decided to utilize the new text engine. I wasn&#8217;t looking for any bells or whistles, just the ability to select and possibly edit text within a single-line field. So I started implementing <a href="http://code.google.com/p/wireworldas3/source/browse/trunk/src/net/rezmason/text/Tyro.as">Tyro</a>.</p>

    <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id="swfobj_0" width="600" height="58" align="center">
      <param name="movie" value="http://www.rezmason.net/blog/wp-content/uploads/2010/07/tyro.swf" />
      <param name="align" value="center" />
      <param name="scale" value="noscale" />
      <!--[if !IE]>-->
      <object type="application/x-shockwave-flash" data="http://www.rezmason.net/blog/wp-content/uploads/2010/07/tyro.swf" width="600" height="58" align="center" scale="noscale">
      <!--<![endif]-->
        
      <!--[if !IE]>-->
      </object>
      <!--<![endif]-->
    </object>

<p>Tyro&#8217;s not exactly finished yet– it hasn&#8217;t been commented, for instance– but if you want it, go ahead and use it. It doesn&#8217;t try to be everything, but it does have some pretty complicated selecting behaviors that roughly match the behavior of rich text on OS X. It feels natural when you use it. It supports cut, copy and paste, and most of the other features available in the TextField. It just also happens to benefit from some of the new text features. And just as long as you don&#8217;t expect bidirectionality, HTML+CSS or muliple lines, it&#8217;s a hell of a lot simpler than the TLF.</p>
<p>A huge resource I benefitted from while I built Tyro was <a href="http://guyinthechair.com/">a guy in a chair</a> named <a href="http://twitter.com/guyinthechair">Paul Taylor</a>. He&#8217;s working on a project called <a href="http://github.com/guyinthechair/tinytlf/">TinyTLF</a>, and unlike Tyro, it <em>does</em> intend to do <a href="http://guyinthechair.com/flash/tinytlf/demos/TinyTLF_Example.html">most of the things the TLF does</a>, only with a better architecture and a smaller footprint.</p>
<p>In most other cases, if someone tried to implement something that Adobe already went out of their way to implement themselves, you might think they&#8217;d be wasting their time. But even if we set aside the recent complaints that the TLF isn&#8217;t up to snuff, I feel that high-level text functionality is simply not the sort of thing you can effectively implement once. Not when its general use case includes support for every language, on any Flash-supported device. Not when it&#8217;s responsible for rendering that visual information that millions of designers slave over for hours on end, nudging each character this way and that. Text composition is a real beast. So shouldering the burden of rendering text for a project that you care about doesn&#8217;t seem very unreasonable to me.</p>
<p>Besides, the more text layout systems there are in the wild, the better. They&#8217;ll increase developers&#8217; general understanding of text, just like the Great Tween Engine Craze increased our understanding of programmatic motion. We&#8217;re all more competent programmers as a result.</p>
<p>So if you need Tyro, pick it up and use it, it&#8217;s yours. If you need it to support Hebrew, don&#8217;t hesitate to get your hands dirty; the Flash text engine&#8217;s API is fully documented. Just be sure to show me טירון once you&#8217;re done with it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rezmason.net/blog/overthinking-text/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Thoughts on Apple - Off the bat you can guess where this is going</title>
		<link>http://www.rezmason.net/blog/thoughts-on-apple/</link>
		<comments>http://www.rezmason.net/blog/thoughts-on-apple/#comments</comments>
		<pubDate>Thu, 29 Apr 2010 15:35:54 +0000</pubDate>
		<dc:creator>Jeremy</dc:creator>
				<category><![CDATA[rambling]]></category>
		<category><![CDATA[rant]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[steve jobs]]></category>

		<guid isPermaLink="false">http://www.rezmason.net/blog/?p=134</guid>
		<description><![CDATA[Today, Apple released something truly amazing– Steve Jobs&#8217;s personal opinion regarding the Flash platform. Like Apple&#8217;s other releases, it&#8217;s sleek, substantial, and loses much of its charm once Steve&#8217;s left the room. Many of Steve&#8217;s criticisms are legitimate, but most of them have a valid counterargument that should be presented before the Grubers and Pogues [...]]]></description>
			<content:encoded><![CDATA[<p>Today, Apple released something truly amazing– Steve Jobs&#8217;s <a href="http://www.apple.com/hotnews/thoughts-on-flash/">personal opinion</a> regarding the Flash platform. Like Apple&#8217;s other releases, it&#8217;s sleek, substantial, and <a href="http://en.wikipedia.org/wiki/Reality_distortion_field">loses much of its charm</a> once Steve&#8217;s left the room.</p>
<p>Many of Steve&#8217;s criticisms are legitimate, but most of them have a valid counterargument that should be presented before the <a href="http://daringfireball.net/">Grubers and Pogues</a> of the world do their dance of exaltation.</p>
<p><b>Update: </b> Apparently Steve&#8217;s triggered an impromptu Flash apologist essay writing contest. Here&#8217;s <a href="http://jessewarden.com/2010/04/steve-jobs-on-flash-correcting-the-lies.html">one of the more extensive responses</a>.</p>
<p><span id="more-134"></span></p>
<p><b>Flash is &#8220;free&#8221; and &#8220;open&#8221;, just not <a href="http://en.wikipedia.org/wiki/Free_and_open_source_software">Free and Open Source Software</a></b></p>
<p>The Flash platform is more than one technology. It consists of several systems, some of which Adobe licenses from other companies. Most of the code governing the parts of the player that are not licensed in this way was made available in <a href="http://www.mozilla.org/projects/tamarin/">Project Tamarin</a>, the second largest code contribution ever made to the Mozilla Foundation. Understandably, Adobe cannot release all their player&#8217;s source code, because they do not have the right to do so.</p>
<p>Does this really hurt <i>anyone</i>? If the Flash platform&#8217;s proprietary technology hindered anyone, there&#8217;s hardly any indication of it. The player&#8217;s ubiquitous– it&#8217;s on every general purpose computer, and it was on a billion mobile devices before the iPhone made its debut. Flash content can be made for free by anyone on any Mac or PC. Flash may be proprietary, but it definitely isn&#8217;t restrictive.</p>
<p>A restrictive technology would be something like Cocoa Touch. Correct me if I&#8217;m wrong, but here&#8217;s the list of things you need to do to make a program available for an iPhone user:</p>
<ul>
<li>Buy an iPhone. Obviously.</li>
<li>Pay Apple $99 per year for the right to develop for their platform.</li>
<li>Sign an agreement limiting what you can say and do on iPhones</li>
<li>Learn Objective-C. This step is a bit like chewing on sand.</li>
<li>Learn Cocoa Touch. (<a href="http://jwz.livejournal.com/1224702.html">Not Cocoa, as jwz pointed out. These are separate frameworks.</a>)</li>
<li>Design, and develop and test your app, obviously.</li>
<li><b>Submit it to Apple for their approval.</b> They can reject your app for all sorts of reasons, and the approval process can take months regardless of the outcome. Furthermore, they can put a hold on your app&#8217;s approval until you agree to make a change, such as <a href="http://www.theregister.co.uk/2010/02/05/apple_slaps_iphone_app_for_mentioning_google_android/">dropping any mention of competitors&#8217; platforms</a>.</li>
<li>Now your app is available to everyone. No, not just that one guy, not just your friends. To release your app on the iPhone App Store, you need to be comfortable giving it to everyone.</li>
<li>&#8230;Though Apple might not be comfortable with your app, and may take it down at any time.</li>
</ul>
<p>That&#8217;s ridiculous, and that&#8217;s the status quo on the iPhone. It&#8217;s the Walmartization of the application development process. And of course it works for Apple, because just as everyone wants their products available at Walmart, developers are clambering to put their software on these unique devices.</p>
<p>Flash developers don&#8217;t clamber. The Flash Platform does not support clambering. So while it may be proprietary, it&#8217;s nothing to be concerned about in this context.</p>
<p>But according to Steve (and many, many others), there is a free and open source alternative to Flash that is not hindered the way iPhone development is. We call it HTML5, but really, let&#8217;s just call it the fifth major version of</p>
<p><b>HTML</b></p>
<p>HTML&#8217;s great. But people who think it can currently replace Flash are fooling themselves.</p>
<p>When HTML innovates, it does it slowly and carefully. This is the backbone technology of the web, and it has got to work. Any change must be very carefully considered before it&#8217;s committed to the spec.</p>
<p>What happens when HTML cannot be used to express something, as was the case in 1996 when Flash made its debut? Then and now, the solution is to write a plugin that can support your expression. Plugins can provide experiences not supported by the browser, and can be easily disabled or removed. They fill the cracks in the web.</p>
<p>Flash used to be this way. But very early on, Flash gained ubiquity via dealings with Netscape and Microsoft, and it was updated faster than web technologies were. Before people were even contemplating HTML5, there was no question that Flash was an essential part of the web, because it provided experiences that couldn&#8217;t be replicated with HTML.</p>
<p>HTML5 is a major improvement of the spec, but it is nowhere near perfect. It will take years for browser implementations to reach a consensus on how the stuff is rendered. In the meantime, Flash renders the same way on every computer and will continue to fill in whatever gaps there are in the web. That is its niche.</p>
<p>There is no adequate HTML5 tooling. Steve himself implies this, when he encourages Adobe to provide those tools. In all likelihood, Adobe&#8217;s HTML5 tooling will be Flash Professional, which already has a timeline paradigm and the ability to work with Photoshop, Illustrator and InDesign. (And possibly Soundbooth?) </p>
<p>Most of the HTML5 examples we see online aren&#8217;t impressive until you hear that they are implemented in HTML5. That&#8217;s a bad sign. People are impressed that web tech is <i>catching up with Flash</i>, not because it&#8217;s doing anything particularly new. Flash developers see tons of these examples, and let me tell you, we&#8217;re not at all wowed.</p>
<p>HTML5 is a subset of HTML. Flash developers will use it, because we already use HTML. But it&#8217;s important to recognize it for what it is: the latest version of HTML, a slowly updated technology that appears different in different browsers. Don&#8217;t compare that to Flash. More importantly, maintain perspective: like any other technology, use its various features in the specific cases where those features make sense.</p>
<p><b>All the trimmings</b><br />
In rapid fire, here are some of the other things Jobs said that are disagreeable or downright wrong:</p>
<ul>
<li><i>H.264 is a battery-friendly alternative to Flash video.</i> Most Flash video is in H.264 format. The reason why H.264 even took off was because Flash supported it; otherwise it would have ended up like the other codecs. As long as plugins are given access to Apple&#8217;s H.264 hardware, Flash video won&#8217;t drain your battery any more or any less than a Cocoa Touch app. We&#8217;re all damn lucky that Flash supports H.264, otherwise there&#8217;d be no fallback implementation for the HTML5 video tag.</li>
<li><i>Flash has poor reliability, security and performance.</i> This more directly applies to Flash content. Since any dolt can make Flash content, there&#8217;s a wide variation to the quality of what&#8217;s out there. On the iPhone, none of this matters; for better or for worse, the application approval process should weed out bad apps. On more open platforms, bad Flash content is usually in the form of ads, and it can be ignored or turned off; at its worst, it&#8217;s a nuisance. But consider what would happen if the same content were to be created in HTML. Suddenly the browser makers would be responsible (as they always are) for &#8220;properly&#8221; rendering bad web markup. HTML5 has no advertisement tag. We&#8217;re in for a nasty shock when HTML ads hit the scene. Also, Steve, quoting Symantec about Flash is like quoting Hugo Chavez about the United States.</li>
<li><i>Flash content was designed for PCs, not for touch devices.</i> Three years ago, basically all content was designed for mouse interaction and not touch. Making the transition is not a chore, and it&#8217;s something everyone has to do when they target touch devices. This is a terrible excuse to philander Flash. Frankly, I think Jobs already knows the flaw in that argument. Why he&#8217;s making it anyway is a mystery to me.</li>
<li><i>Flash is an abstraction layer of the iPhone SDK</i> I agree that Flash&#8217;s purpose on a mobile device is different from its aforementioned filling-the-cracks role on the web. Flash isn&#8217;t doing anything special on mobile devices. What it is doing is providing support for an existing code base. If I have an app that runs on ten devices and I add a feature to it, it doesn&#8217;t always make sense to have to implement that feature ten times, once for each device. Similarities in those devices should be exploitable; I should be able to target multiple devices when I make an update to my code base. As it currently stands, every app on the iPhone is a separate product from any other offering their developer provides. I think that promotes feature lag, where the app with fewer users will lag behind in updates. The major strength of Flash is its consistent experience, and I think it has a lot to bring to the mobile arena.</li>
</ul>
<p>I left some stuff out, but frankly, I&#8217;m beat. But I have one more point to make. Before Jobs posted his essay, everyone already knew his stance. They knew his reasons, some of which are still left out of his post. That it took this long for him to open up about Flash indicates that he&#8217;s not ready or looking forward to a counterargument. He doesn&#8217;t want this to be a discussion; he&#8217;s made his decision, and won&#8217;t change his mind. Posting his opinion can only do two things– it can change Apple&#8217;s carefully designed public image, and it can demonstrate how Apple has moved away from its idealistic roots. This company is no longer the beacon of light it used to be, and every statement it makes reinforces that.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rezmason.net/blog/thoughts-on-apple/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Crisp Rasterizations with Flash 10&#8242;s 3D - Preserve your designer&#039;s hard work</title>
		<link>http://www.rezmason.net/blog/crisp-rasterizations-with-flash-10s-3d/</link>
		<comments>http://www.rezmason.net/blog/crisp-rasterizations-with-flash-10s-3d/#comments</comments>
		<pubDate>Sun, 14 Mar 2010 16:30:12 +0000</pubDate>
		<dc:creator>Jeremy</dc:creator>
				<category><![CDATA[graphics]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[3d]]></category>
		<category><![CDATA[flash 10]]></category>
		<category><![CDATA[pixelation]]></category>
		<category><![CDATA[quality]]></category>
		<category><![CDATA[rasterize]]></category>
		<category><![CDATA[resolution]]></category>

		<guid isPermaLink="false">http://www.rezmason.net/blog/crisp-rasterizations-with-flash-10s-3d/</guid>
		<description><![CDATA[My last post was about guaranteeing beautiful vector graphics in Flash. Unfortunately, the project I’m working on that uses these graphics (which again I’ll talk about at length some other time) transforms them in 3D space. Unsurprisingly this leads to some complications. Most people forget that Flash can do native 3D, and when they see [...]]]></description>
			<content:encoded><![CDATA[<p>My last post was about guaranteeing beautiful vector graphics in Flash. Unfortunately, the project I’m working on that uses these graphics (which again I’ll talk about at length some other time) transforms them in 3D space. Unsurprisingly this leads to some complications.</p>
<p>Most people forget that Flash can do native 3D, and when they see it in use usually they think it’s “innovative”. Frankly it’s not; Flash has had a 3D API since late 2008, but there are reasons why most people don’t see much of it:</p>
<ul>
<li>Most designers and developers aren’t taught much about 3D transformations, or even 3D aesthetics.</li>
<li>The tools Adobe’s released to design 3D Flash content are in their first lifecycle, and are only in one product (Flash CS4), which has a ton of other new features too, competing for user’s attention.</li>
<li>There are plenty of classic techniques for producing 3D media that does not require Flash’s 3D API</li>
<li>Perspective projection of objects means that a 3D object has to be redrawn each time it is moved in 2D space, unlike a 2D object</li>
</ul>
<p>And the sneaky one which I’ll be talking about,</p>
<ul>
<li>Flash’s beautiful vector graphics may become fuzzy or pixelated when you transform them in 3D.</li>
</ul>
<p>Thus a skilled and determined designer-developer team who find themselves in the right scenario could end up producing 3D Flash content. But if they ignore the last issue, their output might have a lower visual quality than what they’d like. Let’s look at why that is.<span id="more-131"></span></p>
<p>Along with the 3D API, Flash Player 10 introduced some enhancements and additions to its 2D API, most notably the <a href="http://help.adobe.com/en_US/FlashPlatform/beta/reference/actionscript/3/flash/display/Graphics.html#drawTriangles()">Graphics.drawTriangles()</a> method. This function accepts a series of triangles to draw in 2D, along with an optional series of texture coordinates for mapping an image onto those triangles. Whatever low-level code underlies the drawTriangles() function, it is also responsible for drawing 3D objects in the display list; when you transform a 2D DisplayObject in 3D, its bounding box’s corners are transformed in space, projected onto the screen and passed to the triangle drawing system. Those points are joined into two 2D triangles drawn onscreen.</p>
<p>Next comes the texture. The original 2D object is drawn to a bitmap the size of its bounding box, and the texture coordinates given to the triangle drawing system are the four corners of the bitmap. This rasterization– drawing your graphics to a bitmap the size of its local bounds– is where your graphic quality is capped; like any other bitmap, your graphics’ resolution is limited by the number of pixels in the texture, and if that texture is drawn to triangles with greater area, the resulting image will be blurry or pixelated.</p>
<p>If you’re only transforming one object in 3d, there is a simple solution, which I call the CrisperDrawer. It’s a subclass of Sprite with “child” and  “resolution” properties. It only takes one child display object; when you assign it a resolution, it scales the child up by that amount in the X and Y dimensions, and scales itself down the same amount as well. You then transform the CripserDrawer in 3D.</p>
<p>The reason why this works is, by scaling up the 2D object, it is drawn to a larger bitmap than it normally would be. That bitmap is then used to texture the same projected triangles as before, because they will be derived from the bounding box of the CrisperDrawer, which is the same as the original bounding box. Usually you won’t need a resolution much higher than 3, but if your resolution is too high Flash won’t be able to represent the 2D graphic as a bitmap. You can also use the CrisperDrawer to <em>lower</em> the resolution of your graphics, if that’s your cuppa joe.</p>
<p>There are two limitations to the CrisperDrawer system. First, it only works on one 2D graphic; the DisplayObject you passed into it. That means for each 2D graphic with resolution issues in your application, you will need to work with a separate CrisperDrawer. You may write some handy recursive functions for making CrisperDrawers from existing 3D display lists, but that’s something you would typically wish to program on a per-project basis.</p>
<p>The other limitation is that bitmap filters you use in your 2D graphics will need to be tweaked when you use a CrisperDrawer. Adjusting the scaleX and scaleY of a 2D object that has filters applied to it will not affect the filter’s properties; for instance, a circle with a 10-pixel horizontal blur will look less blurry when you double its size. You will want to change the filter’s horizontal blur to 20 pixels, in that case. But as long as your 2D graphic stays in the CrisperDrawer and you don’t adjust its resolution, you’ll only need to modify your filters once.</p>
<p><a href="http://www.rezmason.net/code/net/rezmason/display/CrisperDrawer.as">Here’s a link to that CrisperDrawer class.</a> Look it over, and if you use it, fantastic.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rezmason.net/blog/crisp-rasterizations-with-flash-10s-3d/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Getting good vector shapes out of Flash embeds - mxmlc&#039;s use of transcoders is more complicated than you might think</title>
		<link>http://www.rezmason.net/blog/getting-good-vector-shapes-out-of-flash-embeds/</link>
		<comments>http://www.rezmason.net/blog/getting-good-vector-shapes-out-of-flash-embeds/#comments</comments>
		<pubDate>Sat, 27 Feb 2010 07:32:58 +0000</pubDate>
		<dc:creator>Jeremy</dc:creator>
				<category><![CDATA[graphics]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[vector graphics]]></category>
		<category><![CDATA[actionscript]]></category>
		<category><![CDATA[batik]]></category>
		<category><![CDATA[cff]]></category>
		<category><![CDATA[embed]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[fonts]]></category>
		<category><![CDATA[svg]]></category>

		<guid isPermaLink="false">http://www.rezmason.net/blog/?p=57</guid>
		<description><![CDATA[If you've had trouble with vector graphic quality when embedding SVGs and fonts into your Flash projects, here are a couple of ways around the problem.]]></description>
			<content:encoded><![CDATA[<p>A recent project I&#8217;ve been working on utilizes a couple faces from <a href="http://mplus-fonts.sourceforge.jp/">M+</a>, a beautiful FOSS font set. There are several ways to embed fonts in Flash, and I prefer using the [Embed] meta-tag, which plays nice with the majority of the IDEs out there. However, a straight-up font embed tag wasn&#8217;t working well at all for me. The text that appeared onscreen was broken and misshapen in places.</p>
<p>It turns out that mxmlc, the Flash compiler, employs several &#8220;font managers&#8221; for taking embedded font files and &#8220;transcoding&#8221; them into Flash fonts. The primary manager relies on a Java library called <a href="http://en.wikipedia.org/wiki/Batik_(software)">Batik</a> to convert the letterforms of the font file into Flash-friendly curves. I&#8217;m not sure why this was the case, but Batik was flummoxed by some of the faces in M+, specifically with the capital &#8216;O&#8217; letterform.</p>
<p>I mean, you could trace a big O by hand if you wanted to. It&#8217;s cake. I can&#8217;t imagine why M+&#8217;s &#8216;O&#8217; is so difficult to process, but if it can happen with this font, it could happen to any font.</p>
<p>I only managed to get good shaped text with one font manager- the one that also handles transcoding OpenType fonts and such, which uses the new Compact Font Format (CFF) system in Flash 10. (To learn more about this subject, <a href="http://richardleggett.co.uk/blog/index.php/2009/03/16/definefont4embedding">here&#8217;s a post</a> about the new CFF embedding system.)</p>
<p>It might seem subtle, but when you compare the text side by side, I think you&#8217;ll agree that all this CFF stuff I had to do was worth it. Below is the same SWF, one with M+ text imported with Batik, the other with CFF.<span id="more-57"></span></p>
<p><a href="http://www.rezmason.net/blog/wp-content/uploads/2010/02/batik_test_font_bad.swf">batik_test_font_bad.swf</a></p>
<p><a href="http://www.rezmason.net/blog/wp-content/uploads/2010/02/batik_test_font_good.swf">batik_test_font_good.swf</a></p>
<p>In the same project, I&#8217;m using SVGs whenever I can to represent artwork. Again, this is because I want to support as many other developers&#8217; workflows as I can. It doesn&#8217;t make sense to stick art in a FLA if you&#8217;re going to open the source to a project.</p>
<p>Anyway, embedding SVG files with an [Embed] tag is pretty straightforward– the only parameter you need to give is the file path to your SVG document. Unfortunately, Flash&#8217;s SVG transcoder apparently doesn&#8217;t handle things like the cap style on strokes. Again, it&#8217;s just my personal preference, but that&#8217;s kind of a deal breaker for me. A quick Google search pointed me to <a href="http://code.google.com/p/as3svgrendererlib/">as3svgrendererlib</a>, whose title is self-explanatory if you put spaces in the right spots. In a nutshell, it&#8217;s a runtime SVG interpreter, which is excellent; I can not only avoid the faulty SVG transcoder in the compiler, but I could potentially script the interpreter do handle SVGs however I want. But the [Embed] syntax still made sense for throwing the SVGs into my SWF as plain text. Doing that doesn&#8217;t take much &#8211; just remember to set its mimeType to &#8220;application/octet-stream&#8221;, and it&#8217;ll become a ByteArrayAsset:</p>
<pre>[Embed(source="./vector_shape.svg", mimeType="application/octet-stream")]
const VectorShape:Class;
var VectorShapeSVG:XML = XML((new VectorShape).toString());</pre>
<p>Like before, here are the bad and good SWFs side-by-side:</p>
<p><a href="http://www.rezmason.net/blog/wp-content/uploads/2010/02/batik_test_svg_bad.swf">batik_test_svg_bad.swf</a></p>
<p><a href="http://www.rezmason.net/blog/wp-content/uploads/2010/02/batik_test_svg_good.swf">batik_test_svg_good.swf</a></p>
<p><a href="http://www.rezmason.net/blog/wp-content/uploads/2010/02/batik_test_svg_better.swf">batik_test_svg_better.swf</a> (after editing the SVG parser to not use pixel hinting)</p>
<p><em>At this point I developed suspicion.</em> Here are two situations where vector data is being transcoded, and where the results are suboptimal. Batik is not just a Java library for font management; it&#8217;s a full-blown SVG toolkit. Might it be used by mxmlc to transcode SVGs as well as simple font files?</p>
<p>There&#8217;s one easy way to find out. Batik resides within the &#8220;lib&#8221; directory in the Flex SDK. It&#8217;s easy to drop it to temporarily into another directory. I did this and recompiled all four SWFs you see here, and the two SWFs whose transcoders produced bad vector graphics <strong>both failed</strong>, verbosely. Both of them relied on Batik.</p>
<p>So! While something may be wrong with Batik, it is much more likely that the Batik toolkit is not being properly used in the Flex SDK. It may be possible to manually replace the Batik toolkit in the SDK with a newer version, but I would not recommend it, as I&#8217;ve demonstrated that there are easy ways to circumvent the problem. Embed your fonts as CFF, parse your SVG files at runtime and you&#8217;ll be in vector heaven.</p>
<p><strong>update:</strong> I think I should point out that the default cap style for SVG is flat, while the default cap style for Flash is round. If you explicitly state in your SVG file what the cap style is for your lines, the built-in SVG system is probably fine. However, apps that export to SVG can&#8217;t be expected to handle every discrepancy between Flash&#8217;s default graphics configuration and the SVG spec&#8217;s, so you&#8217;ll be adding cap style properties to your SVG markup by hand. Personally, I&#8217;d go with the as3 SVG lib.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rezmason.net/blog/getting-good-vector-shapes-out-of-flash-embeds/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Messing with things - Oh hey, now the subtitles work</title>
		<link>http://www.rezmason.net/blog/messing-with-things/</link>
		<comments>http://www.rezmason.net/blog/messing-with-things/#comments</comments>
		<pubDate>Sun, 11 Oct 2009 17:39:56 +0000</pubDate>
		<dc:creator>Jeremy</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[future-talk]]></category>
		<category><![CDATA[meta]]></category>
		<category><![CDATA[site]]></category>

		<guid isPermaLink="false">http://www.rezmason.net/blog/?p=48</guid>
		<description><![CDATA[(Nobody will be reading this post until months or years after it was written, so I&#8217;ll write it from a future perspective.) In October &#8217;09 I started taking my site&#8217;s design and navigation more seriously, in the hopes of making it a more successful site and increasing my motivation to write posts. Before then, rezmason.net [...]]]></description>
			<content:encoded><![CDATA[<p>(Nobody will be reading this post until months or years after it was written, so I&#8217;ll write it from a future perspective.)</p>
<p>In October &#8217;09 I started taking my site&#8217;s design and navigation more seriously, in the hopes of making it a more successful site and increasing my motivation to write posts.</p>
<p>Before then, rezmason.net pointed to my portfolio site. My blog was accessible only by entering its URL; there was no link to it, because it was ugly and off-brand, and wasn&#8217;t updated frequently.</p>
<p>By throwing everything into WordPress pages and making a custom theme, I can now direct visitors straight to the blog. My portfolio was redesigned to fit in with the rest of the site, though it can still stand on its own.</p>
<p>I&#8217;m now much happier with the way things are. I think October was a turning point.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rezmason.net/blog/messing-with-things/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Caching timeline objects in Flash</title>
		<link>http://www.rezmason.net/blog/caching-timeline-objects-in-flash/</link>
		<comments>http://www.rezmason.net/blog/caching-timeline-objects-in-flash/#comments</comments>
		<pubDate>Sat, 08 Aug 2009 11:08:40 +0000</pubDate>
		<dc:creator>Jeremy</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[rambling]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[cacheTimeline]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[garbage]]></category>
		<category><![CDATA[memory]]></category>
		<category><![CDATA[timeline]]></category>

		<guid isPermaLink="false">http://www.rezmason.net/blog/?p=45</guid>
		<description><![CDATA[Grant Skinner&#8216;s talking about a Flash feature request that seems to make a lot of sense. It got me thinking about a problem I&#8217;ve experienced with Flash in the past, and whether it deserved anyone&#8217;s attention at Adobe. I decided that it did. A lot of programmers new to AS3 reach a point, as I [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.gskinner.com/blog" target="_blank">Grant Skinner</a>&#8216;s talking about a <a href="http://bugs.adobe.com/jira/browse/FP-2524" target="_blank">Flash feature request</a> that seems to make a lot of sense. It got me thinking about a problem I&#8217;ve experienced with Flash in the past, and whether it deserved anyone&#8217;s attention at Adobe. <a href="http://bugs.adobe.com/jira/browse/FP-2527" target="_blank">I decided that it did</a>.</p>
<p>A lot of programmers new to AS3 reach a point, as I did, when they get very jumpy about their projects&#8217; memory usage. It&#8217;s kind of a rite of passage, and during mine, I discovered that a set of animated buttons I incorporated into a GUI were spewing out gobs of display list garbage. (Display list garbage consists of DisplayObject instances, whose references to parents and children make them difficult for the garbage collector to quickly eliminate, kind of like <a href="http://en.wikipedia.org/wiki/Cellulose#Breakdown_.28cellulolysis.29">digesting cellulose</a>. For more on garbage collection, I&#8217;d suggest you conduct a <a href="http://www.hexosearch.com/se/result.aspx?zqz=garbage%20collection&amp;zlvz=2">hexosearch</a>.)</p>
<p>Imagine your Flash animator friend makes you a MovieClip that represents a flashing bulb. She has probably made it go on and off by having a blank keyframe (lightbulb off) and a filled keyframe (lightbulb on) in a top layer in the Flash timeline, with the lightbulb outline in a bottom layer. Because the timeline is short, it will loop frequently, causing the bulb to flicker.<span id="more-45"></span></p>
<p>Now, let&#8217;s consider what happens in the Flash Player with this MovieClip. When the lightbulb goes on, a display object is instantiated and added to the display list. When the bulb goes off, that display object is removed from the display list and discarded. The lightbulb outline in the background stays put. This is the procedure specified by the Flash timeline that the MovieClip follows each time it loops– and it loops very frequently. The result is a small animation that has produced a heaping pile of display list garbage.</p>
<p>One might think of this and say, &#8220;Well, why can&#8217;t the MovieClip timeline cache these display list objects? It could clearly benefit from reusing them.&#8221; Caching does seem like a good idea, but only for short, looping animations. If every animation on <a href="http://www.newgrounds.com/" target="_blank">Newgrounds</a> cached the display objects created on the timeline, you&#8217;d end up with a ton of cached display objects that do not need to be reused, because the animation doesn&#8217;t loop. The timeline has no way to determine by itself whether it should cache its animated contents or not.</p>
<p>But as authors, we know when a timeline should cache its contents. <a href="http://bugs.adobe.com/jira/browse/FP-2527" target="_blank">My feature request</a> calls for a Boolean property on the MovieClip class (similar to <a href="http://help.adobe.com/en_US/AS3LCR/Flash_10.0/flash/display/DisplayObject.html#cacheAsBitmap" target="_blank">cacheAsBitmap</a> on DisplayObject) that allows developers and animators to explicitly set the behavior of MovieClip timelines for the purpose of conserving memory. If you agree that it matters, why don&#8217;t you vote for it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rezmason.net/blog/caching-timeline-objects-in-flash/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Are browser inconsistencies the &#8220;Flash killer&#8221; killer?</title>
		<link>http://www.rezmason.net/blog/are-browser-inconsistencies-the-flash-killer-killer/</link>
		<comments>http://www.rezmason.net/blog/are-browser-inconsistencies-the-flash-killer-killer/#comments</comments>
		<pubDate>Thu, 02 Jul 2009 22:17:41 +0000</pubDate>
		<dc:creator>Jeremy</dc:creator>
				<category><![CDATA[rambling]]></category>
		<category><![CDATA[audio]]></category>
		<category><![CDATA[bickering]]></category>
		<category><![CDATA[flash killer]]></category>
		<category><![CDATA[flash killer killer]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[video]]></category>
		<category><![CDATA[w3c]]></category>

		<guid isPermaLink="false">http://www.rezmason.net/blog/?p=39</guid>
		<description><![CDATA[It looks like the W3C is chucking the video codec specification out of HTML5. Audio, too. That must have been hard; a standard implementation for online media is a big deal, and it was apparently right about to happen. Too bad that the people implementing our standards are Apple, Mozilla, Nokia and Microsoft. Inevitably these [...]]]></description>
			<content:encoded><![CDATA[<p>It looks like the W3C is <a href="http://tech.slashdot.org/story/09/07/02/184251/Browser-Vendors-Force-W3C-To-Scrap-HTML-5-Codecs?from=rss">chucking the video codec specification</a> out of HTML5. Audio, too. That must have been hard; a standard implementation for online media is a big deal, and it was apparently right about to happen.</p>
<p>Too bad that the people implementing our standards are Apple, Mozilla, Nokia and Microsoft. Inevitably these companies would start making power plays, but I didn&#8217;t expect any type of fallout this early in HTML5&#8242;s life cycle.</p>
<p>I don&#8217;t know much about standards or software politics– I write apps for a proprietary platform that just about everybody has– but I feel that whatever &#8220;takes out&#8221; Flash, as some people have been hoping HTML5 would, will not come from this peanut gallery of power-hungry industry giants. After all, &lt;video&gt; and &lt;audio&gt; are only two of several new &#8220;rich web&#8221; features of HTML5. Can we count on these bozos to agree on the &lt;canvas&gt; tag? HTML5 won&#8217;t compete with Flash if there is any discrepancy there. And what about local data storage for web apps? I doubt Nokia and Opera will agree on one implementation for that.</p>
<p>This bickering is only temporary, I&#8217;m sure. Markets swing, giants shift their weight and standards get worked out. But in the meantime, Flash implements all of these features in the same way across all browsers <em>today</em> (mostly) with very little competition, and is already delivering even <em>richer</em> web content that certainly won&#8217;t make it to HTML5 for at least a decade. For pete&#8217;s sake.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rezmason.net/blog/are-browser-inconsistencies-the-flash-killer-killer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Consequences of the trend toward a richer web</title>
		<link>http://www.rezmason.net/blog/consequences-of-the-trend-toward-a-richer-web/</link>
		<comments>http://www.rezmason.net/blog/consequences-of-the-trend-toward-a-richer-web/#comments</comments>
		<pubDate>Sat, 23 May 2009 02:19:32 +0000</pubDate>
		<dc:creator>Jeremy</dc:creator>
				<category><![CDATA[rambling]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[flash killer]]></category>
		<category><![CDATA[killer]]></category>
		<category><![CDATA[rich web]]></category>

		<guid isPermaLink="false">http://www.rezmason.net/blog/?p=3</guid>
		<description><![CDATA[This post is a response to a recent ZDNet article– folks have recently been talking about HTML 5, CSS 3 and JavaScript 2 (Web Trek: The Next Generation) &#8220;killing&#8221; Flash. I agree that what we call &#8220;rich media&#8221; today will be incorporated into these web technologies tomorrow, such as browser-based audio and video. I believe that this will continue for [...]]]></description>
			<content:encoded><![CDATA[<p>This post is a response to <a href="http://news.zdnet.co.uk/software/0,1000000121,39655473,00.htm" target="_blank">a recent ZDNet article</a>– folks have recently been talking about <a href="http://www.alistapart.com/articles/previewofhtml5" target="_blank">HTML 5</a>, <a href="http://www.css3.info/" target="_blank">CSS 3</a> and <a href="http://www.ecmascript.org/" target="_blank">JavaScript 2</a> (Web Trek: The Next Generation) &#8220;killing&#8221; <a href="http://www.adobe.com/flashplatform/" target="_blank">Flash</a>. I agree that what we call &#8220;rich media&#8221; today will be incorporated into these web technologies tomorrow, such as browser-based audio and video. I believe that this will continue for as long as our culture can refine its expectations of &#8220;rich media&#8221;. But this is not the same as killing Flash.</p>
<p>Flash exists because it can deliver an experience <strong>today</strong> that cannot be delivered with standard web technologies. If the standard web expands on what it can deliver (and it will), then so will Flash (and it will!). Audio, video and simple animation may soon be HTML based, but it will take longer for the HTML standard to implement 3D graphics, sound manipulation and pixel shading. There will always be a richer experience than HTML, and Flash will exist for as long as it can deliver that experience.</p>
<p><strong>And another thing!</strong> Say the committee in charge of JavaScript puts together a draft for a standard system for in-browser audio manipulation, as mentioned above. With today&#8217;s way of going about things, that system would need to be separately implemented in each web browser on the market, wouldn&#8217;t it? So a future justification to choose one browser over another may be that the one has better sound manipulation than the other. But the reverse may be true for some other element of the user&#8217;s web experience, like 3D graphics.<span id="more-3"></span></p>
<p>Browser wars are good, I think– the competition keeps the browsers relatively fast and bug-free. But on how many fronts can you fight a war? Would we tolerate a browser war where 3D graphics aficionados swarm to one contender, while audiophiles follow another, with no middle ground? And what if something goes wrong, <strong>again,</strong> and we end up with substantially different variations on the standard implementation?</p>
<p><em>&#8220;Welcome to my site! Requires Internet Explorer, or your ears will pop.&#8221;</em> Not pretty.</p>
<p>It would be better, in this future scenario, for browsers to support plugins that specialize in a part of the experience and compete with one another in that niche. That way, browsers can compete against other browsers, while sound plugins can compete against other sound plugins and 3D plugins can compete against other 3D plugins.</p>
<p><span style="text-decoration: underline;">I&#8217;m calling it right here:</span> The future web will be delivered by a mash-up of third party plugins that each deliver their little part of the whole enchilada. And there will always be plugins that deliver something not presently standardized (the role Flash has had for <em>the past thirteen years</em>), because somebody somewhere will always be thinking ahead of the curve.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rezmason.net/blog/consequences-of-the-trend-toward-a-richer-web/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GOTO Addendum</title>
		<link>http://www.rezmason.net/blog/goto-addendum/</link>
		<comments>http://www.rezmason.net/blog/goto-addendum/#comments</comments>
		<pubDate>Mon, 23 Feb 2009 02:37:05 +0000</pubDate>
		<dc:creator>Jeremy</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[rambling]]></category>
		<category><![CDATA[actionscript]]></category>
		<category><![CDATA[goto]]></category>
		<category><![CDATA[jerks]]></category>

		<guid isPermaLink="false">http://www.rezmason.net/blog/?p=26</guid>
		<description><![CDATA[With all this talk of GOTO, it&#8217;s suddenly occurred to me that ActionScript has a direct, higher-level version of GOTO that causes Flash projects to succumb to the same problems as those affected by the original. Do gotoAndPlay() and gotoAndStop() ring any bells, anyone? Dijkstra&#8217;s commentary on how a dynamic, running process can be conceptually connected [...]]]></description>
			<content:encoded><![CDATA[<p>With all this talk of GOTO, it&#8217;s suddenly occurred to me that ActionScript has a direct, higher-level version of GOTO that causes Flash projects to succumb to the same problems as those affected by the original.</p>
<p>Do gotoAndPlay() and gotoAndStop() ring any bells, anyone? Dijkstra&#8217;s commentary on how a dynamic, running process can be conceptually connected to static source code essentially describes the same relationship between a Flash animation and its keyframes. And old Flash code that uses gotoAndPlay() extensively experiences the exact same pitfalls that old programs did that extensively used GOTO.</p>
<p>In fact, I completely agree with EWD- that although these functions are extremely useful, the quality of a Flash program generally correlates with the frequency of gotoAndPlay() and gotoAndStop() in its source code. I know this from personal experience; it wasn&#8217;t until I expanded my knowledge of ActionScript and began using structured code that I could really achieve anything in the medium.<span id="more-26"></span></p>
<p>I&#8217;ll even go one step further and say that the reason why most people look down their noses at ActionScript is because more often than not, ActionScript programmers will hack together a system that relies on gotoAndPlay(). Had we been less dependent on that function earlier on, perhaps Flash would have been more generally adopted as an application platform.</p>
<p>That said, I know for a fact that there are elegant ways to code with gotoAndPlay(). Jared Tarbell&#8217;s ActionScript 2.0 projects at <a title="levitated.net" href="http://www.levitated.net/" target="_blank">levitated.net</a> are perfect examples of how timeline dependence can be a weird type of art form. There is something physical about using GOTO; it gives code an intricacy, <em>because</em> it reduces readability.</p>
<p>EWD was a highly analytical computer scientist; I wonder if he&#8217;d have been willing to see source code as a kind of art. I really wish I could have had that discussion.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rezmason.net/blog/goto-addendum/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Reviewing &#8220;GOTO Considered Harmful&#8221;</title>
		<link>http://www.rezmason.net/blog/reviewing-goto-considered-harmful/</link>
		<comments>http://www.rezmason.net/blog/reviewing-goto-considered-harmful/#comments</comments>
		<pubDate>Sun, 22 Feb 2009 02:28:29 +0000</pubDate>
		<dc:creator>Jeremy</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[rambling]]></category>
		<category><![CDATA[goto]]></category>
		<category><![CDATA[jerks]]></category>

		<guid isPermaLink="false">http://www.rezmason.net/blog/?p=22</guid>
		<description><![CDATA[I just looked into an old paper– &#8220;GOTO Considered Harmful&#8221;– and I found something bitter about EWD (Dijkstra). GOTO is understandably bad from a present-day perspective; it allows a thread to jump to basically anywhere in a process, and even in situations where it is used respectfully, it is difficult for the programmer to indicate so [...]]]></description>
			<content:encoded><![CDATA[<p>I just looked into an old paper– <span style="font-style: italic;"><a href="http://www.cs.utexas.edu/users/EWD/ewd02xx/EWD215.PDF" target="_blank">&#8220;GOTO Considered Harmful&#8221;</a></span>– and I found something bitter about EWD (Dijkstra).</p>
<p>GOTO is understandably bad from a present-day perspective; it allows a thread to jump to basically anywhere in a process, and even in situations where it is used respectfully, it is difficult for the programmer to indicate so in his or her source code. But GOTO did something that lots of people could appreciate; it allowed an inner loop to break out of an outer loop. It essentially allowed a complex iterative process to end before the iteration could be completed, without any nutty boolean flags.</p>
<p>Nineteen years after Dijkstra&#8217;s rant against GOTOs, a guy named Rubin wrote a counterargument. (This was in 1987, about the time I was born.) By then, GOTO-independence was almost a religious (read: irrational) doctrine. Rubin&#8217;s rebuttal reinitialized dialogue about GOTOs. Most people involved in the discussion pointed out that the strength of GOTO could be inherited by some sort of more restrained flow control successor, one that couldn&#8217;t just jump around the process. [It should be noted that the formulation of our most common present-day flow control statements were highly influenced by EWD. -Ed.] Rubin&#8217;s stance was that at the time, code that used GOTO properly was less cluttered and more readable than code written to deliberately avoid GOTO, and that therefore EWD&#8217;s 1968 proposal to eradicate GOTO had a harmful effect on programming efforts.</p>
<p>Dijkstra replied, and here&#8217;s what gets me; he noted some errors in Rubin&#8217;s code– mostly failures to comply with an orthodox writing style– lambasted him for being an amateur, used computer science to achieve a difficult-to-read solution to Rubin&#8217;s example problem, and basically called the man and the other contributors to the conversation &#8220;unprofessional&#8221;.</p>
<p>It&#8217;s too bad the discussion didn&#8217;t take place yesterday, or I&#8217;d troll him on a message board somewhere.</p>
<p>I believe and can understand that Dijkstra was coming from a different perspective- a highly technically informed one. He was in the middle of a major movement attempting to bridge programming with highly abstract mathematics. But programmers typically will not pour over algorithms to produce code, mainly because it reduces the reader&#8217;s comprehension, a principle ironically similar to EWD&#8217;s original incentive to ban GOTO in the first place! Wouldn&#8217;t it be better to write code that can be understood by those responsible for maintaining it?<span id="more-22"></span></p>
<p>This is what the creators of ActionScript 3 had done. [Apparently this language element was inherited from Java. -Ed.] In a situation where code in an inner scope needs to break from an outer scope, the &#8220;break&#8221; statement can refer to the name of a scope that it is nested within. The following code uses this principle to report the index of the first row composed only of zeros in a 2D matrix of integers:</p>
<div class="geshi no as">
<ol>
<li class="li1">
<div class="de1">function firstEmptyRow(arr:Array):int {
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;var rows:int = arr.length, columns:int = arr[0].length;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;rowLoop: for (var i:int = 0; i &amp;lt; rows; i++) {
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; columnLoop: for (var j:int = 0; j &amp;lt; columns; j++) {
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;if (arr[i][j] != 0) {
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; break columnLoop;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;}
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; }
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; return i;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;}
</div>
</li>
<li class="li1">
<div class="de1">return -1;
</div>
</li>
<li class="li1">
<div class="de1">}</div>
</li>
</ol>
</div>
<p>You see? Comprehensible, expressive. Powerful. Anyone who is familiar with C syntax would have no trouble understanding this. Even Python users would be fine with it (though I&#8217;d take the curly braces out first, the pansies).</p>
<p>In conclusion: GOTO had serious problems, and it&#8217;s good that it&#8217;s gone. And Dijkstra&#8217;s contribution to computer science and programming has been invaluable. But his rebuttal was far less sensible than his original proposal; his personal attack on Rubin did nothing to inform the readers on the problems surrounding GOTO, but instead revealed his intolerance for programmers who were more down-to-earth than he is.</p>
<p>References!</p>
<p>[-1] <a href="http://www.cs.utexas.edu/users/EWD/ewd02xx/EWD215.PDF" target="_blank">&#8220;GOTO considered harmful&#8221;, EWD</a><br />
[0] <a href="http://www.ecn.purdue.edu/ParaMount/papers/rubin87goto.pdf" target="_blank">&#8220;&#8216;GOTO considered harmful&#8217; considered harmful&#8221;, Rubin</a><br />
[1]<a href="http://www.ecn.purdue.edu/ParaMount/papers/acm_may87.pdf" target="_blank">&#8220;&#8216;&#8221;GOTO considered harmful&#8221; considered harmful&#8217; considered harmful?&#8221;</a><br />
[2]<a href="http://www.cs.utexas.edu/users/EWD/transcriptions/EWD10xx/EWD1009.html" target="_blank">&#8220;On a somewhat disappointing correspondence&#8221;, ugh, EWD</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rezmason.net/blog/reviewing-goto-considered-harmful/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Great example of Flash as Fine Art</title>
		<link>http://www.rezmason.net/blog/20/</link>
		<comments>http://www.rezmason.net/blog/20/#comments</comments>
		<pubDate>Tue, 09 Dec 2008 02:26:41 +0000</pubDate>
		<dc:creator>Jeremy</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[audio]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[play]]></category>

		<guid isPermaLink="false">http://www.rezmason.net/blog/?p=20</guid>
		<description><![CDATA[To anyone who wishes to question the creative bandwidth of the Flash platform: feast your eyes! http://www.playauditorium.com/ Now if only this sort of thing showed up more often.]]></description>
			<content:encoded><![CDATA[<p>To anyone who wishes to question the creative bandwidth of the Flash platform: feast your eyes!</p>
<p><a href="http://www.playauditorium.com/">http://www.playauditorium.com/</a></p>
<p>Now if only this sort of thing showed up more often.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rezmason.net/blog/20/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Round and Round- YouTube embed test</title>
		<link>http://www.rezmason.net/blog/round-and-round-youtube-embed-test/</link>
		<comments>http://www.rezmason.net/blog/round-and-round-youtube-embed-test/#comments</comments>
		<pubDate>Wed, 06 Aug 2008 02:20:53 +0000</pubDate>
		<dc:creator>Jeremy</dc:creator>
				<category><![CDATA[site testing]]></category>
		<category><![CDATA[music]]></category>
		<category><![CDATA[music video]]></category>
		<category><![CDATA[ratt]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://www.rezmason.net/blog/?p=16</guid>
		<description><![CDATA[The eighties weren&#8217;t so bad.]]></description>
			<content:encoded><![CDATA[<p>
<object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/4e8NG76SQ3c&amp;rel=1" /><param name="wmode" value="transparent" /><embed src="http://www.youtube.com/v/4e8NG76SQ3c&amp;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object></p>
<p> The eighties weren&#8217;t so bad.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rezmason.net/blog/round-and-round-youtube-embed-test/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Video embed test</title>
		<link>http://www.rezmason.net/blog/5/</link>
		<comments>http://www.rezmason.net/blog/5/#comments</comments>
		<pubDate>Mon, 28 Jul 2008 22:47:40 +0000</pubDate>
		<dc:creator>Jeremy</dc:creator>
				<category><![CDATA[site testing]]></category>
		<category><![CDATA[funny]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://www.rezmason.net/blog/?p=5</guid>
		<description><![CDATA[Fantastic.]]></description>
			<content:encoded><![CDATA[<p>Fantastic.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="512" height="296" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://www.hulu.com/embed/MP8rdrIh1HUBZjl-LCEOoA" /><embed type="application/x-shockwave-flash" width="512" height="296" src="http://www.hulu.com/embed/MP8rdrIh1HUBZjl-LCEOoA"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rezmason.net/blog/5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Beginning again.</title>
		<link>http://www.rezmason.net/blog/beginning-again/</link>
		<comments>http://www.rezmason.net/blog/beginning-again/#comments</comments>
		<pubDate>Wed, 31 Dec 1969 23:00:00 +0000</pubDate>
		<dc:creator>Jeremy</dc:creator>
				<category><![CDATA[meta]]></category>
		<category><![CDATA[beginning]]></category>

		<guid isPermaLink="false">http://www.rezmason.net/blog/?p=9</guid>
		<description><![CDATA[A blog wasn&#8217;t very useful before. I&#8217;ve been using Posterous for a while, just to stick things online. (I&#8217;d highly recommend that service.) But life has changed a bit, and the folks I counted on for meaningful discussion are farther away than they were before, and there are other important folks that I haven&#8217;t met [...]]]></description>
			<content:encoded><![CDATA[<p>A blog wasn&#8217;t very useful before. I&#8217;ve been using <a href="http://rezmason.posterous.com/" target="_blank">Posterous</a> for a while, just to stick things online. (I&#8217;d highly recommend that service.) But life has changed a bit, and the folks I counted on for meaningful discussion are farther away than they were before, and there are other important folks that I haven&#8217;t met yet. I feel like this is an important thing to get up and running.</p>
<p>I expect to typically talk about current projects outside of work, general discoveries and ramblings, all typically centered on Flash and ActionScript. I&#8217;ll be opinionated but not very personal. And hopefully, as I get used to WordPress, I&#8217;ll set up some lessons or video tutorials to help people get a grip on the Flash platform, or what have you.</p>
<p>For now, I&#8217;m bringing over some thoughts I&#8217;ve put on Posterous in the past, and just generally checking the rigging. It&#8217;ll take a while to make this site what I want it to be, so until then, a little patience please.</p>
<p>Thanks for dropping by.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rezmason.net/blog/beginning-again/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

