RIA Unleashed 2011

Mobile Gaming with Corona and Adobe AIRJust wanted to give a post mortem on RIA Unleashed 2011, a conference up in Boston run by the FITC crew. Specifically I wanted to mention some thoughts on gaming, JavaScript, and leadership.

I’m glad I went to RIA Unleashed this year. First year run by the FITC crew who always have their act together. I always like the crowd in Boston. This year was different for a few reasons.

 

Corona

I gave a 4 hour work shop on Corona SDK by Ansca Mobile and Adobe AIR for mobile gaming. Some of the Flash Lite team members formed their own company and created Corona, a way to build games and simple applications for Android and iOS. Through a performant, built-in Box2D physics/collision engine, light weight language & API, and partnerships with other social services it has scored a lot of points with people trying to hit the simple gaming & app market for the Indie’s, those learning, and those looking to reduce complexity in their development stack.

The AIR part was a little frustrating because things are extremely in flux right now with Adobe’s stack. The future of Flex is mobile applications. The future of Flash Player is low level functionality to support as high end gaming as you can in browser. The future of the Flash IDE appears to be supporting this gaming & mobile workflows. However, none of the gaming engines & supporting frameworks are mature enough yet, most are browser focused vs. mobile, and Flash Player’s new GPU related display mechanisms aren’t in AIR 3 for devices yet. They will be soon, the landscape itself is in flux, and “learning” to develop “games in Adobe AIR for mobile” will be changing big time for the next 12 months as we wait for the tech to hit devices and the libraries/frameworks to morph/be created to mobile work flows.

I really REALLY enjoyed teaching the Corona SDK. It’s been a LONG time that I’ve gotten to speak on something I enjoyed and had ZERO to do with helping my fellow devs build their skill set for their career. This was, “Learn this, it’s fun!”. Granted, I tried to give an overview of the consumer business landscape regarding paid vs. ads vs. micro-payments.

The trend I’m seeing is those building games, once they see Corona, are blown away with how simple it is, and what you can produce with very little effort, regardless of their background.

Sitting in on some of Jesse Freeman’s HTML5 gaming with ImpactJS session, it’s also very clear there are some great minds working to ensure HTML5 is also a valid platform for gaming. It also pointed out some gaping holes of needs in AIR and Corona gaming with regards to helpful libraries and toolsets.

I may not see any money from this, but damn is it fun and great to be learning something development related that’s out of my comfort zone (…and that’s not Sales or Biz Dev related).

JavaScript

I met this kat named Doug Neiner. He’s part of the jQuery team and is the perfect example of what the negative detractors against Flash/Flex think we should be like. Naturally, I did everything in my power to screw with him and learn everything I could in the short time I spent with him.

In our first meeting at dinner, I spilt my beer all over myself and let him think he did it. He was overly gracious and apologetic. And sincere. We chatted about guns. Damn.

I even tried to screw with him regarding religion. He took that one in stride too. Not insecure. Damn.

So finally with more liquor in me we got into a long discussion regarding JS devs perceptions of Flash, misconceptions about what they get paid, and how they develop, what frameworks & design patterns they use, the nomenclature, and basically every question I could possible think to ask with Andy to help mediate. He did a bang up job considering our language barrier (I butcher and give no respect to true meanings of Design Patterns). He was very forthcoming with information, tactful, unapologetic, and sought to understand. I learned we have a TON in common. I mean like 90%. Damn.

I suggested we do a code review of some of the Flex projects I had worked on in the past. The next day we briefly did so. It was eye opening to see the code they wrote after our previous nights conversations. It + the techniques + the patterns + the lingo seemed very familiar.

They do all the same shit we do. Seriously. What’s truly different?

  1. Their display list is slow, ours is fast.
  2. They thusly use CSS to not only off load display list redraw code, but save having to write a lot of JavaScript because of it. Most Flash/Flex devs don’t. Our CSS isn’t true CSS and doesn’t handle a lot of mouse/keyboard/touch events.
  3. They have to remember what works in what browser on what platform, and remember the already created/solved fallbacks.
  4. They are now creating, and getting paid to do so, some of the same types of browser based applications that we do.

That’s it.

For those of you who bring up loose typing, let me just say every single person, me included, who’s gotten used to JavaScript and closures does just fine (doesn’t mean they love it). On smaller projects. Additionally, the amount of tools regarding code coverage, testing frameworks, and other language pre/post compilers out there for JavaScript is solving the problems they have.

I now understand why Flex is 100% focused on mobile. You can’t fight that encroachment, half being true, half being hype with real money behind it.

While the larger scale browser based applications may suffer from lack of a strongly typed language, it’s very clear the JavaScript community has enough resources behind it to “figure it out”. Even if that takes 5 years.

My short time with Doug was great. He’s a really nice guy, helpful, and is extremely hard to take the piss out of. We have much in common with our browser brethren.

What remains to be seen on the technical side is how they handle Enterprise sized applications. Most I’ve seen is coded on the server-side and the client is generated (Google’s GWT, Microsoft’s .NET, Oracle’s ADF, Python/Ruby HTML templates). This is not how these guys develop; they develop just like us. They’re deep into the client code and browser and design. They do the work we do.

What I could gather is most is currently offloaded to the server, but based on some of the projects Doug showed me, it’s very clear traditional Flash & Flex applications (not websites nor widgets) are next in line.

It’s also very clear the jQuery team scored big time getting Doug on board. He is whip smart, passionate, and has good character.

Refactoring - Jesse WardenLeadership

Which leads me to leadership. It was very clear a lot of people are lost. I’ve seen it online for awhile, but seeing it in person confirmed it. For 10+ years Macromedia & Adobe have lead us technologically. Now they’re not. (paraphrasing Freeman here… or maybe I’m not… *ahem*) Many of our thought leaders have either left or haven’t recognized their responsibilities. In in the past, I’ve done my best to petition people like Brandon Hall, Keith Peters, and others to recognize what happens when they disappear or do certain things without context. Even normally secure people get the insecurity of the masses leaked upon them like spittle in a violent scuffle. This affects them.

It’s not just us. Microsoft is really taking some bold (crazy?) moves with Windows 8. While Apple recognizes some people drive trucks (Desktops and Laptops) and others cars (mobile) and thus made 2 OS’s for each platform, Microsoft is forcing both into the same OS. While Silverlight still has a lot of value and a future, it’s very clear where Microsoft is heading. Those who don’t wish to ride the Silverlight wave have left to other techs, or migrated back to the Win32 land.

Mobile development itself is still in it’s infancy. We have extreme hype continually thrown at us, yet the toolsets are still growing and changing. While some companies are making a lot of their revenue either partially or wholly from it, the “RIA” aspect doesn’t seem to have transitioned to the Flex and Flash world yet. Keep in mind, this could be because I’ve done zero marketing on what we’ve accomplished on mobile regarding our mobile Dashboard and my mobile gaming & mobile application work. I’m starting to hear about (from FITC Toronto, email, and Twitter convo’s) more and more Agency mobile work. If the consumers are paying, and companies are paying agencies, then it’s only a matter of time before it gets into the Enterprises and startups wishing to fund applications for B2B.

Either way, it’s very clear a lot of people are either picking a path that seems safe, or one that pays the bills. Only a few are saying, “This is fun AND makes me money, I’m going here.” If they do, they don’t define if that money actually pays for their mortgage/rent.

It was clear that there is still a lot of uncertainty, about the tech, business, and political landscape both here in the states and internationally. Thus there is also a ton of opportunity. While I’m disappointed a lot of people I respect haven’t provided what I perceived as much needed guidance in these confusing times, I get why a lot of them don’t. It gets tiring justifying obvious things after awhile. I get tired of telling my 2 year old no, but it’s my responsibility as a parent. Others aren’t the “parents” of the industry, but the power of their words, insight, and confidence about the future really do soothe the masses in ways they may not fully understand. I swear I’m not projecting; I see the impact on people not having their thought leaders spout a direction.

Conclusions

RIA Unleashed is clearly in good hands, FITC did a bang up job. Work shops are fun, I’d love to do another, especially for a younger crowd at a local school or something. It’s very clear from my Refactoring preso I need more imagery to convey humanistic challenges in programming. The next consulting article I do, I’ll remedy that.

It’s also very clear there isn’t clarity the future yet, at least for Flash/Flex devs. If you want to do Ruby, Python, or Java on the server, you’re golden. If you want to do iOS or native Java for companies on B2B and some consumer offerings, you’re set. The Flash agency landscape is very confusing to me, I have no idea what’s going on. The Flex landscape is the same as it ever was. While Adobe’s mostly focused on mobile, there still seems to be a lot of people who aren’t using JavaScript/HTML/CSS on the client for large scale apps yet; if they are, it’s server-side generated. I’m not hearing anything yet for Flex 4 mobile work. I personally blame Adobe’s lack of hard marketing about how awesome it is to build mobile apps in Flex, Europe’s debt, and the USA’s budget woes. Maybe end of 2012 we’ll start to see a change when the bigger companies get balls to start targeting the growing demographic who wants apps vs. websites.

For HTML5, it seems the huge push is out west. While I occasionally hear about growing JavaScript/HTML/CSS application projects here on the east coast, it seems business as usual, and in California/the valley, business is unusual. i.e., we don’t care if this technology is inappropriate, if you say HTML5, we’ll give you tons of Series A funding. Mobile too? Here’s more.

…which, again, is I guess why Adobe is still pushing hard on Flex mobile. They know that once Android saturates the market more, the manufacturers will continue to screw up their browser implementations with crappy GPU’s, thus ensuring those who want highly branded applications with a lot of functionality will choose Flex. Or Flash. It’s strange, because I keep hearing about those who wish to do web deployments to prevent having to do the 3 development efforts (web, iOS, Android). I used to question and get concerned about what they are doing, but after using SoundCloud.com on my iPhone’s browser vs. the SoundCloud applications for both Android and iOS, it’s very clear: those who want the best experience will go native. It remains to be seen if the right someone(s) see what Flex and AIR can really do on mobile, and go, “Man… this looks great, and can be developed in a shorter time frame… and be re-used across tons of devices with just design changes to handle the variety of resolutions and functionality changes with our existing design tools. Let’s do this!”

We’ll see. And that’s what sucks… this whole “we’ll see”. Remember when we KNEW the Ajax guys were full of shit? Now they’re taking some of our widget jobs. Yes, you could do ‘em over the weekend, but some of those were fun, man… and nice to have some money on the side of you weren’t a full time freelancer. Things were so certain then. The only certainty I have now is:

1. The AIR for Android and iOS is really compelling and no one who matters seems to know about it.
2. The Flex in the Enterprise and mid-size software shops seems un-moveable. While the HTML5 hype is replacing a lot of Flex jobs, just like the iPad did for financial firms moving to HTML/native vs. Flex for some jobs, the HTML5 is mostly hype. That doesn’t mean you can ignore it; a lot of companies make decisions on a CTO’s whim, even if that decision is completely wrong technologically. Either way, you lose a gig. There still seem to be a lot of people who want to write a TON of ActionScript, quickly, and thus, Flex is still in demand.

#keepYourHeadsUp

Need the Presentations and Code from RIA Unleashed 2011?

28 Responses

  1. Very good read. Your point about JS devs and AS/Flex devs doing 90% similar work confirms my hunch. I also agree with the “those who want the best experience will go native,” as it seems to be a no-brainer. I too am interested in AIR for mobile as Adobe already has many devs that could utilize their skillset/experience/workflow to build apps/games/tools, but do so with great ease and speed. I think this ease and speed are elements that can really make the difference (in addition to AIR being cross-platform) compared to other solutions. FYI – Check http://www.bytearray.org/?p=3732 comment #5 by Thibault Imbert. Finally, at least a time frame for Stage3D for mobile.

  2. The main leadership I see missing in the Flash community right now is someone to tell people to stop worrying so damn much. I’ve seen threads on mailing lists and social media long enough to fill books that can be summarized simply as “we’re all freaking out”. That’s not productive, and it is more damaging to the community than the rise of any competing technologies could ever be.

    • Some of us are trying!!!

      • Good to see it, Joseph. Personally, I’ve been trying to project a business as usual attitude, so I’ve stayed out of the negative conversations entirely. However, Jesse’s points are the most constructive I’ve seen for a while, so I joined in for once. It’s frustrating to see a community choose to worry rather than take an active part in making positive change.

        • Shawn

          Flash dev’s freaking out are nuts…

          We are in one of the best positions to be in the the entire world.

          As flash dev’s, we can create really performant apps, across all mobile devices, with one codebase. And we can do it quickly and efficiently because we have a proper debugger and strong typing.

          Who else can say that?
          * Corona Can’t. It’s fast, but only ‘sorta’ cross platform (does 2 platforms really count), and it’s a scripting language. Probably becomes quite the nightmare to debug…
          * Java dev’s can’t. iOS says hello…
          * c# dev’s can’t, everywhere but windows says hello…
          * HTML5 devs can’t. Performance is shit everywhere but iOS 5, browser inconsistancies are still rampant especially on mobile… and sound is just plain broken.

          Flash dev’s right now are in a golden position. Really really crazy to be anything but totally excited.

  3. “there still seems to be a lot of people who aren’t using JavaScript/HTML/CSS on the client for large scale apps yet; if they are, it’s server-side generated.”

    While true I find this distinction a bit strange. There are an increasing number of javascript applications that simply make API calls and build content on the client-side (twitter.com for example). However, this isn’t necessarily something to aim for and the reason it isn’t the norm doesn’t point to a failing in js/html/css – handling logic and rendering content on the server just makes a lot of sense in most situations.

    • It’s not a failing, it’s just in Flex, we fight to handle most of the logic on the client for more control whereas it seems prudent in JS’s case to offload that. It’s not bad at all, just very different than what the Flex/Flash guys do.

  4. Excellent blog post Jesse…it was great to be part of that conversation between you and Doug. (psst: link is broken for my name: http://twitter.com/commadelimited).

    • Yup, it was a fun convo! Sorry, fixed.

  5. Great post Jesse. I think you hit the nail on the head with every single point.

  6. Shawn

    “For those of you who bring up loose typing, let me just say every single person, me included, who’s gotten used to JavaScript and closures does just fine (doesn’t mean they love it). On smaller projects.”

    Ya that’s a pretty major distinction there: “on smaller projects”.

    I’ve had the displeasure of working on some larger projects in JS (not even big, medium at best), and it was quite the pain in the ass.

    Strong Typing is not something to just be “Meh”‘ed away…. the impact it has on large projects is massive. Not only on decreasing development costs, but also just pure maintenence, and the ability to have other developers take over a project.

    • How do the Ruby and Python guys handle this? Unit tests?

  7. Shawn

    I honestly don’t know, it’s not like it’s impossible or anything, it’s just harder… anything can be done, at any cost.

    The point is simple though: efficiency.

    As an indepenant developer, efficiency is money, it’s time, it’s profit. The less time I can spend, the more dollah bills I will see.

    And at the end of the day, throw strong typing out, and your efficiency drops instantly by a factor of 2… to me that’s just an absolute non-starter.

    Not to mention, I like to have fun when I code, and a debugger that gives me proper breakpoints, and code introspection goes along way towards maintaining that fun factor…

    • Shawn

      And just to clarify that… I’m talking about larger projects here. Obviously small stuff, you can get away with just about anything, but a large codebase, with a 100+ classes, and the technical debt, and congitive overhead, adds up extremely fast.

  8. Shawn

    “Flash Player’s new GPU related display mechanisms aren’t in AIR 3 for devices yet. ”

    This is not technically true. It’s possible to offload most rendering to the GPU right now, today, on mobile devices. And it requires just a small change to a typical AS3 workflow.

    I just posted on the blog about it today:
    http://esdot.ca/site/2011/fast-rendering-in-air-3-0-ios-android

    • That 1 sentence apparently failed to summarize all of Tinic’s original post. The point was, using cacheAsBitmap/cacheAsBitmapMatrix is dead. While you can still use render mode GPU for AIR 2.6 level of GPU, that entire work flow is STILL irrelevant once you go Starling; there is no “cacheAsBitmap”, you’re using raw textures at that point. Completely different workflow even with similarly named classes thanks to Starling.

      Bottom line, Stage3D isn’t in there yet. The old GPU stuff doesn’t matter; what matters is if the new stuff gives us decent speed for redraw in games.

      • Shawn

        Read tinic’s post a little more carefully, all the drawback’s are things that would be avoided anyways in a smartly designed game:

        * No Filters
        * No “deeply nested movieclips”
        * No scale9 scaling
        * no blend modes
        * no advanced transformtation (distort, 2.5d)

        Well, how much of that do you ever need in a game? Nothing. What is a game really, other than a bunch of nested sprites in containers? GPUMode handles that just fine…

    • With Jesse on this one, Shawn. The gpu renderMode with CABM was an interesting attempt at GPU support, but it will never gain relevance because it’s not “just a small change to a typical AS3 workflow” as you claim. Almost everyone that tried using it failed miserably or found a limitation that would have drastically altered their normal workflow. Even when I thought I finally understood it (and I was using it before it went public, with a direct line to the engineers), it would often throw me a curve ball of poor performance for no apparent reason. It can be a useful stopgap until Stage 3D gets here, but I, for one, would be happy never to use it again.

      • Shawn

        Nah, you guys are missing the point.

        You don’t use cacheAsBitmap or cacheAsBitmapMatrix at all anymore, that’s just flash’s piss-poor attempt at caching.

        You just manage the bitmapData yourself, it’s as easy as writing a couple cache classes (one for sprites, on for movieclips).

        @Jesse – Tinic’s post is true. The onus is on you to not be stupid. But it’s hardly a tough thing to do, keep your display list’s simple, don’t do a bunch of vector shit, and you’re basically good to go.

        If you haven’t used this mode since 2.7, you are seriously missing out on some fantastic work done by the AIR Team.

        I have an entire game running on top of this now, and yes, it was just a fairly minor change to my normal workflow. Basically:
        1. Output all movieclips to spritesheets, using ZOE or someother SWF > PNG exporter
        2. Write a simple cachedClip wrapper that takes a static flash movieclip, and wraps it in bitmapData.

        • Shawn

          @Josh – Just curious, what limitation did you hit?

          I’d be happy to sign you guys up as Beta testers for the new game, so you can try it out for yourselves:
          http://esdot.ca/site/2011/calling-all-beta-testers

          p.s. Currently, gpuMode outperforms stage3d on mobile by 2:1 in this same test, even if they fix this, you’re never really going to get much better than we have now.

        • Shawn

          Ugh, wish I could edit my posts!

          So, simply put, you don’t use cacheAsBitmap, you use the Bitmap() class itself as your display object.

          Bitmap() has been insanely optimized, so that if you manage bitmapData yourself, and share it across all similar bitmap’s, you get extremely fast rendering.

          Here’s an example, animated background, 220 animated spritesheets, mouse detection, particle trail, all running at 30fps:
          http://www.youtube.com/watch?v=HhcCPn8o3DM

          • The experiences I went through working with Charlie Schulze on Comb Over Charlie was a total crap shoot. Some devices you’d use cacheAsBitmap, others you’d not. Some you’d use gpu mode, others cpu. It was device specific. The ONLY constant was that iOS almost always worked great with GPU. Android was a mess.

            I hear you on the using pure Bitmap, though. Swapping bitmap data’s is insanely fast. I guess my point is, again, you’re not supposed to do that. You’re supposed to use Starling.

            And to be clear, I don’t have huge performance issues currently, it’s just that amount of work Charlie and I did (mostly him) in figuring out how to get the best performance had pretty poor gains. To me, it was ridiculous when it takes 1 line of code in Corona to “just work”.

            The low hanging fruit was things like Object Pooling, stage.quality = “LOW”, etc.

        • There are really two groups that are having issues.

          1) The ones who use vectors, timelines, blend modes, and filters are all basically screwed until devices get much faster. These are all awesome features, and it sucks that they’re mostly useless on mobile. Personally, I’d prefer to work on a display list with vectors and all that fun stuff rather than settling on bitmaps. My art style has changed a bit recently, though, and I need to use bitmaps now, so the switch was inevitable for me. For the rest, they’re frustrated as hell that mobile Flash isn’t what they use every single day to target desktops.

          2) The other developers with a bitmap-based workflow don’t want to invest time in figuring out the bitmap sharing and stuff that you’ve suggested. I know because I suggested it to some prominent game devs and they thought the suggestion was ridiculous. Maybe if there were a popular framework out there to do it for them, it wouldn’t be such a big deal. Maybe I just sucked at explaining it. I don’t know.

          • Shawn

            Wierd, I get group 1’s issue, though almost all of that can be worked around with draw(). Just have a sprite that’s never added to the stage, draw to it, or add filters, and then cache it to bitmap yourself.

            Group 2, I don’t get. This is code you can write in 20 minutes, just set up some static properties, and a method to name them. Or, have a dedicated class for each type of sprite, with a static .cachedData property, and all new instances can just check that property.

            Personally I’ve found it amazingly effective, and really really easy.

            Even when stage3d hits, we’ll still have a similar workflow. You’ll still need to rip everything to bitmapData, and pass it to a container for rendering, you will just covert it to a ‘texture’ first, and use Sprite2D as the container instead of bitmap().

            Same shit different pile really…

  9. Great write up, Jesse. Your point about Adobe failing to get the word out about Flash/Flex compile to native for iOS and Android is an uphill battle that really shouldn’t be. I was disappointed that it wasn’t even mentioned in the Adobe MAX keynotes. If it isn’t mentioned there, where and when will Adobe have the opportunity to spread the word.

  10. Shawn

    @ Jesse – Sure, my point though is that Starling is still 3mths away, and GPU Mode is here now. And is very fast.

    I believe that Charlie did all his dev using AIR 2.7 though, and GPU Mode was rebuilt for AIR 3.0 (that’s what Tinic means when he says they did it twice… I think).

    Btw, I’ve done tons of benchmarks and test suites with both Starling and ND2D, I’m very familiar with both of them. Wouldn’t touch starling with a 10ft pole, but ND2D is killer.

    Admittedly, I need to test more with other Android devices… I’ve only tried it on my Nexus One for now… I can’t really see it not working though, as basically it’s a bunch of containers, with moving bitmapData around, what can really go wrong…

    The biggest issue I’ve had is with my highscore board, the pooled list items get rendering artifcacts…. very small price to pay for high in-game performance though.

  11. […] are still relevant. We brought up Jesse Warden’s recent RIA Unleashed Conference post-mortem: http://jessewarden.com/2011/10/ria-unleashed-2011.html. Preshow with Adrian and Rachel Adrian with the situation room to his […]

  12. JP Venter

    “I personally blame Adobe’s lack of hard marketing about how awesome it is to build mobile apps in Flex” – perhaps this should be our ‘call to arms’ as dev’s to show the world what’s possible? I was just browsing the list of mobile jobs being posted on elance, and it seems the industry (mostly) is not entirely sure which software stack to adopt for a mobile solution – pinned to the job requirements is often just android, ios and blackberry ca-ching! I spot opportunity!. And even those specifying objective C, Java or HTML5 – I’m sure are just oblivious and wouldn’t mind a dev presenting a Air based solution to their proposal. So I’m thinking we be the marketing force, attack elance and ‘mobile’ job posts with killer Air proposals/solutions, viva le Air Army!

    So anyone got ideas on attack formations ;) …. I’m talking some nippy marketing slang phrases to toss around here?

  13. Shawn

    If anyone cares (probably not!), I updated the post with much better examples to show how easy this is to integrate into your workflow.

    Ok, I’ll stop spamming your post now, promise :p
    http://esdot.ca/site/2011/fast-rendering-in-air-3-0-ios-android

  14. […] are still relevant. We brought up Jesse Warden’s recent RIA Unleashed Conference post-mortem: http://jessewarden.com/2011/10/ria-unleashed-2011.html. Preshow with Adrian and Rachel Adrian with the situation room to his back Rachel @CrowChick Mic […]