<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-9191434423296443514</id><updated>2011-08-16T17:19:38.866-07:00</updated><title type='text'>Greetings From Oakland</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://greetingsfromoakland.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9191434423296443514/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://greetingsfromoakland.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Seth Hodgson</name><uri>http://www.blogger.com/profile/16975354828667463005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>15</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-9191434423296443514.post-1584246743846204353</id><published>2011-06-15T10:41:00.000-07:00</published><updated>2011-06-15T10:44:38.838-07:00</updated><title type='text'>Torey Pudwill</title><content type='html'>Drops the best &lt;a href="http://www.theberrics.com/dailyopspost.php?postid=2907"&gt;inspirational video&lt;/a&gt; of 2011. Back-lip, kick-flip, back-lip. Massive lazerflip. 360 kick-flip over bench. Kick-flip into waist-high back-smith. What?!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9191434423296443514-1584246743846204353?l=greetingsfromoakland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greetingsfromoakland.blogspot.com/feeds/1584246743846204353/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9191434423296443514&amp;postID=1584246743846204353' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9191434423296443514/posts/default/1584246743846204353'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9191434423296443514/posts/default/1584246743846204353'/><link rel='alternate' type='text/html' href='http://greetingsfromoakland.blogspot.com/2011/06/torey-pudwill.html' title='Torey Pudwill'/><author><name>Seth Hodgson</name><uri>http://www.blogger.com/profile/16975354828667463005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9191434423296443514.post-1224925801153755851</id><published>2011-01-12T20:29:00.000-08:00</published><updated>2011-01-12T20:44:36.232-08:00</updated><title type='text'>RTMFP and FMS on AWS</title><content type='html'>For the folks out there who would benefit from the full RTMFP Groups functionality provided in FMS 4 but who balk at the up-front server licensing fees, there's a new path to potential fame and fortune:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Grab the developer addition of the &lt;a href="http://www.adobe.com/products/flashmediaenterprise/"&gt;FMS 4 server&lt;/a&gt; (get the trial) and a client-side dev tool of your choice, with my strong recommendation being &lt;a href="http://www.adobe.com/products/flashbuilder/"&gt;Flash Builder&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Develop your world-changing P2P application.&lt;/li&gt;&lt;li&gt;Deploy your server-side logic to an FMS 4 instance(s) on AWS:&lt;br /&gt;&lt;a href="http://www.adobe.com/products/flashmediaserver/amazonwebservices/"&gt;http://www.adobe.com/products/flashmediaserver/amazonwebservices/&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;Also, Jozsef has a great new(ish) &lt;a href="http://www.adobe.com/devnet/flashmediaserver/articles/real-time-collaboration.html"&gt;article&lt;/a&gt; up that discusses strategies for fall-back to handle the situation where clients who wish to establish a direct P2P link may fail to due to poorly behaving NATs or firewalls. FMS on AWS will happily support both RTMFP and RTMP/T/S/E clients and is a great place to put Jozsef's strategies into practice!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9191434423296443514-1224925801153755851?l=greetingsfromoakland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greetingsfromoakland.blogspot.com/feeds/1224925801153755851/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9191434423296443514&amp;postID=1224925801153755851' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9191434423296443514/posts/default/1224925801153755851'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9191434423296443514/posts/default/1224925801153755851'/><link rel='alternate' type='text/html' href='http://greetingsfromoakland.blogspot.com/2011/01/rtmfp-and-fms-on-aws.html' title='RTMFP and FMS on AWS'/><author><name>Seth Hodgson</name><uri>http://www.blogger.com/profile/16975354828667463005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9191434423296443514.post-4858188000667809657</id><published>2010-10-31T09:45:00.000-07:00</published><updated>2010-10-31T09:48:48.456-07:00</updated><title type='text'>Dylan Rieder</title><content type='html'>Drops the best inspirational video of 2010. Thanks, Dylan!&lt;div&gt;&lt;a href="http://gravisskateboarding.com/dylan/videos/dvd/"&gt;http://gravisskateboarding.com/dylan/videos/dvd/&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9191434423296443514-4858188000667809657?l=greetingsfromoakland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greetingsfromoakland.blogspot.com/feeds/4858188000667809657/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9191434423296443514&amp;postID=4858188000667809657' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9191434423296443514/posts/default/4858188000667809657'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9191434423296443514/posts/default/4858188000667809657'/><link rel='alternate' type='text/html' href='http://greetingsfromoakland.blogspot.com/2010/10/dylan-rieder.html' title='Dylan Rieder'/><author><name>Seth Hodgson</name><uri>http://www.blogger.com/profile/16975354828667463005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9191434423296443514.post-2350192508838035757</id><published>2010-10-30T15:00:00.000-07:00</published><updated>2010-10-30T15:13:09.775-07:00</updated><title type='text'>MAX 2010</title><content type='html'>My colleague Asa Whillock and I presented a session at MAX 2010 this past week. The session was recorded and the video as well as the slide deck is already publicly viewable at the &lt;a href="http://bit.ly/aChgfa"&gt;MAX archive site&lt;/a&gt;. The session was titled &lt;span style="font-weight:bold;"&gt;Secure Enterprise Video Streaming with Flash Media Server and P2P&lt;/span&gt; and that does a fair job of summing up everything we covered.&lt;br /&gt;&lt;br /&gt;If you're curious about the new RTMFP protocol support in FMS 4, how that's allowing us to really take advantage of the beautiful scaling story with IP or P2P (application-level) multicast as well as the fusion of both at the same time, and how we're putting it to work within Adobe right now, watch the session and take &lt;a href="http://www.adobe.com/products/flashmediaserver/"&gt;the server&lt;/a&gt; for a spin.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9191434423296443514-2350192508838035757?l=greetingsfromoakland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greetingsfromoakland.blogspot.com/feeds/2350192508838035757/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9191434423296443514&amp;postID=2350192508838035757' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9191434423296443514/posts/default/2350192508838035757'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9191434423296443514/posts/default/2350192508838035757'/><link rel='alternate' type='text/html' href='http://greetingsfromoakland.blogspot.com/2010/10/max-2010.html' title='MAX 2010'/><author><name>Seth Hodgson</name><uri>http://www.blogger.com/profile/16975354828667463005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9191434423296443514.post-9060126611478367488</id><published>2009-09-09T21:40:00.000-07:00</published><updated>2009-09-09T21:43:58.774-07:00</updated><title type='text'>D</title><content type='html'>Wishing I had the free time right now to really play with D2... Andrei Alexandrescu published a nice, reasonably brief, overview at &lt;a href="http://www.ddj.com/hpc-high-performance-computing/217801225?pgno=1"&gt;Dr. Dobb's&lt;/a&gt; earlier this year, and it's definitely worth the read.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9191434423296443514-9060126611478367488?l=greetingsfromoakland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greetingsfromoakland.blogspot.com/feeds/9060126611478367488/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9191434423296443514&amp;postID=9060126611478367488' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9191434423296443514/posts/default/9060126611478367488'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9191434423296443514/posts/default/9060126611478367488'/><link rel='alternate' type='text/html' href='http://greetingsfromoakland.blogspot.com/2009/09/d.html' title='D'/><author><name>Seth Hodgson</name><uri>http://www.blogger.com/profile/16975354828667463005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9191434423296443514.post-8847487855906087460</id><published>2009-02-04T20:07:00.001-08:00</published><updated>2009-02-04T20:16:25.073-08:00</updated><title type='text'>Mission One</title><content type='html'>Maybe it's time to dust off the motorcycle helmet, boots, and gloves languishing in the garage and get that motorcycle license I was planning on two years ago...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_DNXBtCuca98/SYpnNo2xGMI/AAAAAAAAACA/lCsi4tWXBLw/s1600-h/mission-motors-electric-motorcycle-01.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 216px;" src="http://4.bp.blogspot.com/_DNXBtCuca98/SYpnNo2xGMI/AAAAAAAAACA/lCsi4tWXBLw/s320/mission-motors-electric-motorcycle-01.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5299161395557898434" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Not that I have the spare change, or the spare time, and I do have a young daughter to consider, but wow. The world's fastest all-electric, from &lt;a href=" http://www.treehugger.com/files/2009/02/electric-motorcycle-mission-one-mission-motors-ted-2009.php"&gt;Mission Motors&lt;/a&gt; of San Francisco.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9191434423296443514-8847487855906087460?l=greetingsfromoakland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greetingsfromoakland.blogspot.com/feeds/8847487855906087460/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9191434423296443514&amp;postID=8847487855906087460' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9191434423296443514/posts/default/8847487855906087460'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9191434423296443514/posts/default/8847487855906087460'/><link rel='alternate' type='text/html' href='http://greetingsfromoakland.blogspot.com/2009/02/mission-one.html' title='Mission One'/><author><name>Seth Hodgson</name><uri>http://www.blogger.com/profile/16975354828667463005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_DNXBtCuca98/SYpnNo2xGMI/AAAAAAAAACA/lCsi4tWXBLw/s72-c/mission-motors-electric-motorcycle-01.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9191434423296443514.post-611499728881149955</id><published>2009-02-04T15:24:00.000-08:00</published><updated>2009-02-04T22:48:04.752-08:00</updated><title type='text'>enums</title><content type='html'>Back in the FDS (Flex Data Services) days we were stuck supporting Java 1.4.x. Hence, no enum support because they weren't available in the language until 1.5. But things changed awhile back when BlazeDS and LCDS up'ed their base supported JVM to 1.5.&lt;br /&gt;&lt;br /&gt;However, just because we could now support enums in the JVM at the server didn't mean anything to the AVM (ActionScript Virtual Machine) at the client.&lt;br /&gt;&lt;br /&gt;ActionScript (and ECMAScript) doesn't provide a native enum type. To complicate matters futher, the &lt;a href="http://livedocs.adobe.com/flex/3/langref/flash/utils/IExternalizable.html"&gt;flash.utils.IExternalizable&lt;/a&gt; interface doesn't provide the &lt;a href="http://java.sun.com/javase/6/docs/platform/serialization/spec/output.html#5324"&gt;writeReplace()&lt;/a&gt; and &lt;a href="http://java.sun.com/javase/6/docs/platform/serialization/spec/input.html#5903"&gt;readResolve()&lt;/a&gt; hooks that the java.io.Externalizable interface defines. When you're deserializing a raw byte stream into an object graph, you need a readResolve() in order to handle enums (singletons).&lt;br /&gt;&lt;br /&gt;Java enum serialization &lt;a href="http://java.sun.com/javase/6/docs/platform/serialization/spec/serial-arch.html#6469"&gt;can't be overridden&lt;/a&gt; at the server, which is good! It's good because this means that enums are always serialized and deserialized according to a consistent recipe. When they're serialized in Java-land (ignoring AMF for a moment), their String name value (as returned by the name() method) is all that's written to the byte stream. When they're deserialized, a single String value is read from the byte stream and passed to the enum's valueOf() method. The returned singleton instance is then readReplace()'ed into the resulting object graph.&lt;br /&gt;&lt;br /&gt;Based on this behavior, BlazeDS and LCDS send Java enums to your Flex app as Strings. If the client needs to send an "enum" to the server, send the String value for the enum, and it'll be unpacked as the desired Java enum instance at the server.&lt;br /&gt;&lt;br /&gt;But some folks want more than a simple String at the client. As I mentioned earlier, lack of native enum types in ActionScript coupled with lack of a readResolve() hook on flash.utils.IExternalizable makes this impossible. On top of that, when the Java enum instance is written to the AMF byte stream at the server, the AMF type prefix is for the native String type. That means the server-side type name for the enum isn't included in the byte stream so attempting to use registerClassAlias() or [RemoteClass(alias="...")] is futile (and you wouldn't want that anyways without a readResolve() hook at the client).&lt;br /&gt;&lt;br /&gt;If you're deadset on representing these values as typed singleton instances at the client, you'd have to do something wacky like manually traversing the data returned from the server (i.e.: a RemoteObject result) and replacing your "enum" Strings or some other marker in the result with the corresponding client-side singleton type instance of your own making before anything else got its hands on the data. That's a lot of brittle data munging for very questionable payoff... &lt;br /&gt;&lt;br /&gt;Perhaps at some happy point in the future we'll have a native enum type to work with at the client, but until then my recommendation is to take a deep breath, relax, and just work with Strings (along with defining matching String constants that you can use for data validation, assignments, and equality checks where it makes sense).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9191434423296443514-611499728881149955?l=greetingsfromoakland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greetingsfromoakland.blogspot.com/feeds/611499728881149955/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9191434423296443514&amp;postID=611499728881149955' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9191434423296443514/posts/default/611499728881149955'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9191434423296443514/posts/default/611499728881149955'/><link rel='alternate' type='text/html' href='http://greetingsfromoakland.blogspot.com/2009/02/enums.html' title='enums'/><author><name>Seth Hodgson</name><uri>http://www.blogger.com/profile/16975354828667463005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9191434423296443514.post-7500313082268595825</id><published>2008-12-17T12:28:00.000-08:00</published><updated>2008-12-17T12:31:18.495-08:00</updated><title type='text'>Time to test drive</title><content type='html'>The first public development milestone for the &lt;a href="http://www.springsource.org/node/904"&gt;Spring BlazeDS integration&lt;/a&gt; is live. Go give it a try, provide feedback via the community forum and Jira system, and keep in mind that further enhancements for the next milestone are already in the works.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9191434423296443514-7500313082268595825?l=greetingsfromoakland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greetingsfromoakland.blogspot.com/feeds/7500313082268595825/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9191434423296443514&amp;postID=7500313082268595825' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9191434423296443514/posts/default/7500313082268595825'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9191434423296443514/posts/default/7500313082268595825'/><link rel='alternate' type='text/html' href='http://greetingsfromoakland.blogspot.com/2008/12/time-to-test-drive.html' title='Time to test drive'/><author><name>Seth Hodgson</name><uri>http://www.blogger.com/profile/16975354828667463005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9191434423296443514.post-4123522844161148298</id><published>2008-12-08T14:58:00.000-08:00</published><updated>2008-12-08T15:07:48.484-08:00</updated><title type='text'>And you thought we were heading into Winter...</title><content type='html'>Some very exciting, and season-defying, news is that the excellent folks at Spring Source will be releasing an &lt;a href="http://www.springsource.com/node/1077"&gt;open source Spring BlazeDS integration project&lt;/a&gt;, with a beta coming available in mid-December :)&lt;br /&gt;&lt;br /&gt;I know &lt;strong&gt;many &lt;/strong&gt; of you out there have been hoping for just such an integration, so this is both a heart warming development to complement your regular Holiday cheer as well as a hint of the &lt;em&gt;many&lt;/em&gt; interesting things the future holds for BlazeDS and LCDS.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9191434423296443514-4123522844161148298?l=greetingsfromoakland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greetingsfromoakland.blogspot.com/feeds/4123522844161148298/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9191434423296443514&amp;postID=4123522844161148298' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9191434423296443514/posts/default/4123522844161148298'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9191434423296443514/posts/default/4123522844161148298'/><link rel='alternate' type='text/html' href='http://greetingsfromoakland.blogspot.com/2008/12/and-you-thought-we-were-heading-into.html' title='And you thought we were heading into Winter...'/><author><name>Seth Hodgson</name><uri>http://www.blogger.com/profile/16975354828667463005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9191434423296443514.post-938113785436130739</id><published>2008-11-23T12:31:00.000-08:00</published><updated>2008-11-23T12:36:23.898-08:00</updated><title type='text'>But can he kick flip?</title><content type='html'>Much to my pleasure and surprise, Timothy Geithner, on deck to become our next Treasury Secretary here in the US, is a fellow skateboarder.&lt;br /&gt;&lt;br /&gt;Courtesy of &amp;nbsp;&lt;a href="http://www.economist.com/world/unitedstates/displayStory.cfm?story_id=12668365&amp;source=features_box_main"&gt;The Economist&lt;/a&gt;:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;"Mr Geithner looks a lot younger than his 47 years (though not as young as he did before the crisis began). He skateboards and snowboards and exudes a sort of hipster-wonkiness, using “way” as a synonym for “very” as in “way consequential” and occasionally underlining his point with the word “f***”."&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9191434423296443514-938113785436130739?l=greetingsfromoakland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greetingsfromoakland.blogspot.com/feeds/938113785436130739/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9191434423296443514&amp;postID=938113785436130739' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9191434423296443514/posts/default/938113785436130739'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9191434423296443514/posts/default/938113785436130739'/><link rel='alternate' type='text/html' href='http://greetingsfromoakland.blogspot.com/2008/11/but-can-he-kick-flip.html' title='But can he kick flip?'/><author><name>Seth Hodgson</name><uri>http://www.blogger.com/profile/16975354828667463005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9191434423296443514.post-5649361152078074180</id><published>2008-11-23T11:17:00.000-08:00</published><updated>2008-11-24T14:48:38.537-08:00</updated><title type='text'>Post-MAX</title><content type='html'>As promised, I've shared (as in share.acrobat.com'ed) the two demos I presented during my MAX talk this past week. They're both basically the same app as far as the end user is concerned, with one version built on BlazeDS and the other on LiveCycle Data Services (LCDS), and they're a sketch or starting-point for building a real-time collaborative app using either of these server libraries we provide. The app provides a simple Contact List with Presence so you can watch as your peers come online, go offline and change their status. It also supports persistent threaded point-to-point chat between Contacts, with an option to view full chat history or just the messages for your current interaction. Again, I want to emphasize that these are demos. They're certainly not production-quality, fully realized apps, and are not officially endorsed or supported by Adobe.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_DNXBtCuca98/SSm5z3WUfpI/AAAAAAAAABU/xp6KayuFyRk/s1600-h/demo.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 310px;" src="http://3.bp.blogspot.com/_DNXBtCuca98/SSm5z3WUfpI/AAAAAAAAABU/xp6KayuFyRk/s400/demo.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5271949139495911058" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;By implementing the same basic app on both BlazeDS and LCDS, they serve as a simple illustration of how the up-front design considerations as well as the actual implementation of a real-time collaborative app will vary depending on which server library you're using. The delta isn't too serious for simple examples, but LCDS makes things much easier, and the pay-off is way above linear as the complexity of your application and its data model grows. Take a careful look through the configuration as well as the client and server source code for both samples to get a better sense for how the channels/endpoints and services you'd use differ, as well as how your application's use of service destinations would differ. &lt;br /&gt;&lt;br /&gt;I've zipped up each demo as a fully self-contained, exploded web app that you can deploy to the JEE app server or Servlet container of your choice. If you're running Tomcat with HTTP on port 8400, deploying these should be very simple. You should be able to simply drop them into your /webapps directory and then add Context entries for them.&lt;br /&gt;&lt;br /&gt;I hard-coded my channel/endpoint URLs to use localhost:8400 for HTTP in the BlazeDS demo and the LCDS demo uses RTMP on the default port of 1935. If you need to be using different IPs/domain names/ports locally, simply open up the corresponding /WEB-INF/flex/services-config.xml file and adjust the channel/endpoint URL values accordingly.&lt;br /&gt;&lt;br /&gt;Both demos include the integrated web tier compiler so you can browse to either /bchat/BlazeSimpleChat.mxml or /chat/LCDSSimpleChat.mxml respectively and compile and run the app without having to set up, build and compile the client swf manually or in FlexBuilder. This also means you can tweak things, and recompile easily, as you play with the apps.&lt;br /&gt;&lt;br /&gt;The one thing both demos depend on is a MySQL database. If you don't have MySQL running locally, go grab it and install it. Once installed, you'll need to define a database for each demo.&lt;br /&gt;&lt;br /&gt;For the BlazeDS demo, create the database from the MySQL command line with:&lt;br /&gt;CREATE DATABASE bchat_db;&lt;br /&gt;&lt;br /&gt;For the LCDS demo, do:&lt;br /&gt;CREATE DATABASE chat_db;&lt;br /&gt;&lt;br /&gt;We also need to define the account the demos use to connect to and manage the databases:&lt;br /&gt;GRANT ALL PRIVILEGES ON *.* TO 'javauser'@'localhost' &lt;br /&gt;IDENTIFIED BY 'javapass' WITH GRANT OPTION;&lt;br /&gt;&lt;br /&gt;That's wide-open, and if you have additional security considerations, you'd need to take them into account by limiting the grants to just these two test databases. The MySQL docs are an excellent resource if you have any questions about these steps.&lt;br /&gt;&lt;br /&gt;The demos both use Hibernate to simplify the management of persistent application data, and the hibernate.cfg.xml files for both apps should be updated to drop, recreate and re-init these databases the first time you start your web app(s). To do this, uncomment the following line in these files (the copies under WEB-INF/classes, not /WEB-INF/src):&lt;br /&gt;&amp;lt;property name="hbm2ddl.auto"&amp;gt;create&amp;lt;/property&amp;gt;&lt;br /&gt;&lt;br /&gt;Note: the import.sql file in the same directory is used to initialize the data in your database when you have this hibernate property uncommented.&lt;br /&gt;&lt;br /&gt;So, without any further ado, links to download the demo zips:&lt;br /&gt;&lt;br /&gt;&lt;a href="https://share.acrobat.com/adc/document.do?docid=aecb4d4c-1ff3-4bd7-8593-c30eee99d711"&gt;BlazeDS Simple Chat Demo&lt;/a&gt;&lt;br /&gt;&lt;a href="https://share.acrobat.com/adc/document.do?docid=f09b20fe-c993-4259-9cb4-c42fd66453da"&gt;&lt;br /&gt;LCDS Simple Chat Demo&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And a link to download the PowerPoint slide-deck for my talk (don't overlook the notes on each slide - they provide more info and background beyond the high level points):&lt;br /&gt;&lt;br /&gt;&lt;a href="https://share.acrobat.com/adc/document.do?docid=d89513bb-4786-4a1d-8bf5-8522c7a9613f"&gt;Building Real-Time and Collaborative Applications with Flex and BlazeDS&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;PS: The session itself was recorded, and the video as well as the PowerPoint slide deck should be available soon to MAX attendees via the MAX site. The video should end up publicly available at some point but I don't have a hard date for that.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9191434423296443514-5649361152078074180?l=greetingsfromoakland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greetingsfromoakland.blogspot.com/feeds/5649361152078074180/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9191434423296443514&amp;postID=5649361152078074180' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9191434423296443514/posts/default/5649361152078074180'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9191434423296443514/posts/default/5649361152078074180'/><link rel='alternate' type='text/html' href='http://greetingsfromoakland.blogspot.com/2008/11/post-max.html' title='Post-MAX'/><author><name>Seth Hodgson</name><uri>http://www.blogger.com/profile/16975354828667463005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_DNXBtCuca98/SSm5z3WUfpI/AAAAAAAAABU/xp6KayuFyRk/s72-c/demo.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9191434423296443514.post-5223947241935944525</id><published>2008-11-19T20:48:00.000-08:00</published><updated>2008-11-19T21:24:07.886-08:00</updated><title type='text'>Pop - Flick - Catch</title><content type='html'>Basil Hosmer, dangerously high on my list of favorite people, pointed me at a video recently that my buddy BOUTROS had turned me on to a few months ago (and which I'd subsequently gc'ed). Embedding it here should save me the search, next time I'm in need of a bit of inspiration.&lt;br /&gt;&lt;br /&gt;&lt;object width="400" height="225"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=1340684&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1"&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=1340684&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="225"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;I can't help but think it was influenced by Fully Flared, which I believe was a sea change and from here on out things will only get better. For those who haven't had the pleasure, every time I watch the opening sequence it's as refreshing as the first time. Followed by Mike Mo's opener, and everything else... words don't do it justice.&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/vHX8jezNBTk&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/vHX8jezNBTk&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9191434423296443514-5223947241935944525?l=greetingsfromoakland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greetingsfromoakland.blogspot.com/feeds/5223947241935944525/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9191434423296443514&amp;postID=5223947241935944525' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9191434423296443514/posts/default/5223947241935944525'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9191434423296443514/posts/default/5223947241935944525'/><link rel='alternate' type='text/html' href='http://greetingsfromoakland.blogspot.com/2008/11/pop-flick-catch.html' title='Pop - Flick - Catch'/><author><name>Seth Hodgson</name><uri>http://www.blogger.com/profile/16975354828667463005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9191434423296443514.post-1973008439965889155</id><published>2008-11-13T22:04:00.000-08:00</published><updated>2008-11-17T10:27:37.653-08:00</updated><title type='text'>Pre-MAX</title><content type='html'>I'm presenting this coming &lt;strike&gt;Monday, November 17th,&lt;/strike&gt; Wednesday, November 19th, at &lt;a href="http://max.adobe.com/"&gt;Adobe MAX&lt;/a&gt; in San Francisco. My session is entitled 'Building Real-Time and Collaborative Applications with Flex and BlazeDS', and I'm hoping it gives attendees lots to chew on and a nice starting point for building some cool apps. The title is a bit of a mouthfull, but accurate, and I'll also be comparing what's involved using BlazeDS to what's involved using LiveCycle Data Services - it's an interesting delta. Hope to see you there!&lt;br /&gt;&lt;br /&gt;Post-MAX, I'll be posting my demo source, etc. here.&lt;br /&gt;&lt;br /&gt;Absolutely not to be missed is Jeff Vroom's talk on 'Advanced Declarative Persistence Using JPA and LiveCycle Data Services' on Tuesday, the 18th.&lt;br /&gt;&lt;br /&gt;For those working with ColdFusion along with BlazeDS and LiveCycle Data Services, Tom Jordahl's talk, also on Tuesday the 18th should be excellent.&lt;br /&gt;&lt;br /&gt;Christophe and Anil Channappa will be running workshops every day to get folks up and running with deploying BlazeDS and LiveCycle Data Services.&lt;br /&gt;&lt;br /&gt;And that's just my little corner of the world.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9191434423296443514-1973008439965889155?l=greetingsfromoakland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greetingsfromoakland.blogspot.com/feeds/1973008439965889155/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9191434423296443514&amp;postID=1973008439965889155' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9191434423296443514/posts/default/1973008439965889155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9191434423296443514/posts/default/1973008439965889155'/><link rel='alternate' type='text/html' href='http://greetingsfromoakland.blogspot.com/2008/11/pre-max.html' title='Pre-MAX'/><author><name>Seth Hodgson</name><uri>http://www.blogger.com/profile/16975354828667463005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9191434423296443514.post-379496643983149939</id><published>2008-11-03T11:54:00.000-08:00</published><updated>2008-11-03T11:57:09.987-08:00</updated><title type='text'>LOLCats, watch your backs</title><content type='html'>&lt;a href="http://2.bp.blogspot.com/_DNXBtCuca98/SQ9XPrJCAII/AAAAAAAAABM/0Td2fLQxVP0/s1600-h/poor-ben.jpg"&gt;&lt;img style="margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 213px;" src="http://2.bp.blogspot.com/_DNXBtCuca98/SQ9XPrJCAII/AAAAAAAAABM/0Td2fLQxVP0/s320/poor-ben.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5264522416209657986" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://brokershandsontheirfacesblog.tumblr.com/"&gt;http://brokershandsontheirfacesblog.tumblr.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9191434423296443514-379496643983149939?l=greetingsfromoakland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greetingsfromoakland.blogspot.com/feeds/379496643983149939/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9191434423296443514&amp;postID=379496643983149939' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9191434423296443514/posts/default/379496643983149939'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9191434423296443514/posts/default/379496643983149939'/><link rel='alternate' type='text/html' href='http://greetingsfromoakland.blogspot.com/2008/11/lolcats-watch-your-backs.html' title='LOLCats, watch your backs'/><author><name>Seth Hodgson</name><uri>http://www.blogger.com/profile/16975354828667463005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_DNXBtCuca98/SQ9XPrJCAII/AAAAAAAAABM/0Td2fLQxVP0/s72-c/poor-ben.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9191434423296443514.post-2956018630621452962</id><published>2008-11-03T10:50:00.000-08:00</published><updated>2008-11-03T11:38:03.293-08:00</updated><title type='text'>Zen and the Art of LocalConnection Maintenance</title><content type='html'>&lt;p&gt;My colleague Jono Spiro hassled me to post this for my own benefit weeks ago, so here it is, fashionably late... This is culled from conversations with my pal, and ex-Player dev, Peter Grandmaison along with my own experiences working with LocalConnections&lt;br /&gt;&lt;br /&gt;LocalConnection uses a block of shared memory to exchange messages between player processes. Outgoing messages targeting a LocalConnection are serialized and added to a queue within the sending player process, and these messages are moved into shared memory during idle time if there's room. Similarly, if messages sent to a LocalConnection owned by the player process are resident in shared memory, they're drained from shared memory during this idle time and processed by the player.&lt;br /&gt;&lt;br /&gt;If the recipient process goes away without cleanly releasing its ownership of a LocalConnection, this can end up wedging the shared memory for the LocalConnection because messages aren't being removed for processing. Without any draining, there's no room for new messages.&lt;br /&gt;&lt;br /&gt;The most common scenario leading to this is a player instance (or Breeze plugin, or AIR, or...) crashing or being force quit. Stopping a debug session in FlexBuilder behaves this way.&lt;br /&gt;&lt;br /&gt;So, a fix was implemented where any player process polling shared memory will expunge anything stored there for more than 5 seconds regardless of which LocalConnection the messages are associated with. This reap cycle after 5 seconds prevents shared memory for a LocalConnection from wedging indefinitely - yay!&lt;/p&gt;&lt;p&gt;The implied caution here is to not send messages to a LocalConnection that will take the receiving process longer than a second or two to process. If you do, you run the risk of subsequent messages magically vanishing into the ether if they're reaped due to the 5 second rule.&lt;br /&gt;&lt;br /&gt;In addition to the 5 second rule there's a size limit of 40K on the data sent in each message, and that's covered in the LiveDocs for LocalConnection.&lt;br /&gt;&lt;br /&gt;So the take away is to keep your LocalConnection interactions short and sweet.&lt;br /&gt;&lt;br /&gt;If you're trying to ship a large amount of data from one player process to another, do your best to limit the total amount of data you need to send, and if it's still substantial then slice it up to send in chunks. Make sure each chunk is guaranteed to be processed by the receiver(s) in well under 5 seconds.&lt;/p&gt;&lt;p&gt;The simplest way to handle this sort of chunking is to have the sending player process open its own LocalConnection that the receiving processes can 'ack' back over. This lets you chain the transfer like so, and protects against the sender potentially flooding the receiver:&lt;/p&gt;&lt;p&gt;Player 1   ---- sends data chunk over primary LC ---&gt;   Player 2&lt;br /&gt;Player 1   &lt;----- returns ack over secondary LC ------   Player 2&lt;br /&gt;... rinse and repeat ...&lt;br /&gt;&lt;br /&gt;Also, if the process that opened a LocalConnection doesn't exit cleanly, other processes will receive a "connection in use" error if they attempt to create a LocalConnection having the same name. You can work around this by implementing a retry on an interval slightly longer than 5 seconds, which gives the current process a chance to clean up the orphaned shared memory at which point it can successfully create the desired LocalConnection.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9191434423296443514-2956018630621452962?l=greetingsfromoakland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greetingsfromoakland.blogspot.com/feeds/2956018630621452962/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9191434423296443514&amp;postID=2956018630621452962' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9191434423296443514/posts/default/2956018630621452962'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9191434423296443514/posts/default/2956018630621452962'/><link rel='alternate' type='text/html' href='http://greetingsfromoakland.blogspot.com/2008/11/zen-and-art-of-localconnection.html' title='Zen and the Art of LocalConnection Maintenance'/><author><name>Seth Hodgson</name><uri>http://www.blogger.com/profile/16975354828667463005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry></feed>
