Not dead, just resting…

I just noticed that I hadn’t posted anything to my blog. Guess blogging is dead with Twitter and other social avenues.  Anyhow, I’ll leave everything as-is for now, but have to think at some point, I’ll just shutter the WP blog.  Doesn’t make much sense to leave open a potential security risk if I’m not using it and actively monitoring it.

Archived Adobe Flex SDKs

Seems as if the Flex SDK downloads on the Adobe SourceForge page (http://sourceforge.net/adobe/flexsdk/wiki/Downloads/) aren’t working so I decided to archive my own copies in the mean time.  Figured this might help others have download issues until Adobe fixes the links.

Download -> Flex 3.6.0.16995

Download -> Flex 4.1.0.16076

Download -> Flex 4.5.1.21328

Download -> Flex 4.6.0.23201

Adobe also has an archived page for AIR SDKs at http://helpx.adobe.com/air/kb/archived-air-sdk-version.html 

Update: It appears as if Adobes Flex SDK downloads are working again. I’m including those links here, but still keeping mine…just in case.

Adobe Flex 4.6.0 page : http://sourceforge.net/adobe/flexsdk/wiki/Download%20Flex%204.6/

Adobe Flex 4.5.1 page: http://sourceforge.net/adobe/flexsdk/wiki/Download%20Flex%204.5/

Adobe Flex 4.1 page: http://sourceforge.net/adobe/flexsdk/wiki/Download%20Flex%204/

Adobe Flex 3.6 page: http://sourceforge.net/adobe/flexsdk/wiki/Download%20Flex%203/

Android UI Components for Flex 4.5

Back during the public beta of Flash Builder and Flex 4.5, I realized I was going to need some Android UI components. I wanted the ability to have a stock Android look and feel.  So I went about building my own, and with the release of Flex 4.5 SDK, I’ve gone back and updated them a bit.  Big disclaimer: I built them for my needs, so I didn’t handle every possibility but I think they are decently robust, and hopefully it will save others some time.  I went ahead and put the component library up on github, along with a sample project using them.  Free free to use them, modify them, etc.   If you find them useful, maybe just send a friendly link my way back to this post.. or leave a comment.  Also, definitely leave comments for me here if you have suggestions or come across a huge bug I may have missed.

Screenshots:

Github link:  https://github.com/olsonjj/Flex-4.5-Android-Component-Library

Stage Video Frustrations

I was recently asked by a client to take a look at Flash Player 10.2′s new Stage Video.  This isn’t for your typical web video display, but for digital signage.  There is no nice way to put it but large scale Flash displays (720p, 1080p) have sucked in the past, and when you added in Flash video, it got worse. My client came up with their own solution that, interestingly enough, is very Stage Video-like.  It isn’t perfect, and can only run on Linux boxes, so that’s why I was asked to look at Stage Video.   I’ve worked with video before in Flash, and have even done my fair share of work with OSMF, but I’m in no ways one of the many experts out there.  I know enough to get’r done.  There are far more people out there more deeply entrenched in Flash video, so if you feel that I’ve stated anything incorrectly, please let me know and I’ll be happy to update my post.

All my example code (FlashBuilder 4.5 project) is hereLINK
I’m putting the project up instead of links to examples online because I dont want bandwidth issues to play a part in anyones testing, and the clients stuff is all loaded locally as well.

So I started looking at Stage Video about a week ago.  I didn’t touch it at all during the beta period.  Now, my client was interested in some baseline tests that mimicked some of their use cases.  During my tests, I immediately starting running into little issues, that really got me frustrated.  I’ve tweeted a few of the problems I’ve encountered, but at this point, I’d have a hard time recommending Stage Video to my client.

Issue #1:  Looping of Stage Video [ OSMF Looping fixed with OSMF 1.6 Sprint 5]

My first attempt with SV was extremely basic.  I just wanted to play a video and loop it.  Easy enough, right?  You’d think.  I set up my SV example pretty much just like I would when using the “old” way with NetConnection and NetStream, listening for the NetStatusEvent “NetStream.Play.Stop” and then seek(0) and have it loop.  In all my tests, I got a noticeable “blink” when the video would loop.  I never noticed any blinking of the video if I didn’t seek, or if I paused and did a seek, but if it was just a seek(0), and the NetStream was playing, “blink”.  I even tried pausing, seeking and then resuming, and still got a blink.   Two interesting tidbits:  1) If I set up a timer to watch the time, and manually looped it about .5 second before the end of the stream, it worked fine, but didn’t work if I tried to manually loop it right at the end, instead of waiting for the NetStatusEvent   2)  According to a response to my original tweet, this is fixed in OSMF.  Great.  really? I have to use OSMF to loop? Okay.. I’m game. . whatever.  I’ll be honest, I probably should look at what OSMF is doing under the covers to get around this, because the moment I moved over to using OSMF 1.6 Sprint 3, it was able to loop w/o blinking.  Problem solved, right? Just use OSMF 1.6..   Yeah.. not so fast….

[Update]

I was able to confirm this blink on my 2010 iMac, 2011 MacbookPro and also a quad-core Dell running Vista.  All the computers were running the latest FP 10.2.159.1, except the iMac which is running the latest RC of 10.3

I put an example here on line with the test showing the blink:
http://www.yapiodesign.com/test/stagevideo/StageVideo_LoopBlink.html

I also put a Quicktime capture of the blink on my iMac:
http://www.yapiodesign.com/test/stagevideo/StageVideoBlink.mov

[UPDATE - June 16th]
With the latest OSMF 1.6 Sprint 5, the issue of the video blinking when looping has been resolved.  One issue down, more to go!

Bug logged: Flash Player JIRA #6806

Issue #2:  Starting OSMF using Stage Video after a Mouse Click

Yeah..  the title should confuse you. What?  A mouse click?  seriously.  After I got over the blinking issue using OSMF, I was setting up tests and using buttons to display the various tests.  All the sudden, my videos were playing audio, but not video, until they looped around once, and then the video played on the 2nd loop.  WTF?  If I forced OSMF to not use Stage Video, things worked just great. No problems.   If I took out the button control and had the OSMF Stage Video test start after ApplicationComplete event, things worked just fine.   Add in a button and things got weird.  I’m completely stumped WTH is going on here.   I’ve narrowed down the issue ( I THINK), to autoPlay = true, and loop = true.  If I set autoPlay = false, and then mediaPlayer.play() things work.    I’m going to chalk this up to a bug in OSMF 1.6 Sprint 3 and I’ll be submitting a bug to the OSMF Jira once I post this and post the Bug report # here.   OSMF 1.6 is beta. I get that.

Bug logged: OSMF(Strobe) JIRA #1297

Issue #3: SerialElement

Ok.. This isn’t related to Stage Video, but while I have your attention….here goes.  According to Adobe, the Serial Element definition includes “The media elements that make up a SerialElement are treated as a single, unified media element.”.  So my silly thinking would say that using a SerialElement that OSMF would handle making sure all those elements are ready to go when needed.  Turns out I’m wrong.  As OSMF encounters a progressive media element as part of SerialElement, it loads it when it encounters it, and doesn’t preload it at all.  So if you have 4 child elements in your serial element, child 2 is only loaded once child 1 has completed.  I’m using local assets and its bad enough, so I imagine loading from a web server is only that much worse.  After doing a few google searches, turns out that is the intended behavior.. or that’s what I read on an Adobe forum.  I’m sure I could dig up the link if anyone is interested.  But what a silly thought.  Who would want that?  So my answer is to preload all the elements myself.  Luckily, I found a solution buried (yes, buried) in the OSMF examples.  …and guess what? It works fine when using “regular” OSMF, but failed me when I was trying to use OSMF 1.6 with Stage Video.  Great..   All I’m asking if for Adobe OSMF team to a) add the ability to tell OSMF to preload the SerialElement child elements….and maybe in the process, take care of the duration issue as well. If I have to handle preloading the child elements myself, and have to tell OSMF the default duration of each child media element, I’m not really sure why I’m using Serial Element at all.

Issue #4:  SerialElement Looping

Ok.. so after all the drama of #3 above, I said hell with preloading the SerialElement child mediaElements, and just told OSMF 1.6 to loop the SerialElement using Stage Video.  I got pauses between the child media elements, and then it looped, and then things got very weird.   I set up  4 child media elements as part of my Serial Element.  The first time around, all the videos played. Once the loop started, it played child 1, but nothing displays for child 2, 3, 4.. loops around plays child 1, skips 2, 3, 4..and repeat.    Ok.. Another OSMF Jira bug going to get logged.

Ok.. appears this one may already be logged:  JIRA # 1226

Issue #5:  Stage Video Hardware Decoding and Rendering

What is the secret sauce to get Stage Video to use hardware decoding?  I know the hardware requirements on Apple seem to be limited to nVidia GPUs.  So that rules out nearly every top of the line Apple system since Apple has switched to ATI.  Doesn’t matter who we place blame on for this, but not having hardware decoding sucks.  Ok.. on to Windows.  I tried my wife’s fairly new Dell quad core with Windows Vista (we didn’t’ get Win7 b/c her office hasn’t upgraded).  No dice.  Hardware rendering.. no hardware decoding.  Okay.. I’ll try one of the Linux boxes at my clients office.  yeah. dont laugh…I know.. but for kicks, right? You guessed it, didn’t work.   So I really have no idea what magic secret hardware sauce is required for users to get hardware decoding.

Where I’m left at this point:

Even after all the issues above, I’ve managed to find workarounds to at least get my tests working.  Stage Video, either when using it as-is, or with OSMF is definitely not a drop-in replacement.  I put part of that on OSMF 1.6 still in beta. I’m sure it will get better (hopefully).  I have no idea what hardware is required to get hardware decoding, and I’m not even sure if it would solve the video tearing I was seeing when I was using it. Right now, I really can’t see myself recommending Stage Video over my clients home-grown Linux Flash & video solution.  It would sure be nice to use Flash for everything, but that’s not a reality at this point.  So I’m going to log those bugs in OSMF Jira, keep watching twitter and the Adobe blogs for updates, and maybe we’ll get there eventually.

Side note (and a little more ranting):  We really need better examples out there for OSMF and Stage Video.  When OSMF first came out, the examples were overly simplistic, or buried deep in the OSMF svn.  Documentation was lacking.  Now we have StageVideo , and we have some great getting started examples, but I believe if there were anything beyond the extreme basics, some of these issues would have already been spotted.

Thanks for reading and providing any insight into workarounds.  I’m really interested to see what sticks I need to rub together to make hardware decoding fire.  Who knows…. maybe I’m holding it wrong.

 

 

 

My First Two Weeks with Android

Recently, I bought a Droid 2 from a friend for development purposes.  Initially for AIR on Android, but maybe letter native development too.  I’m an iPhone user and to be honest, I really don’t have any reason to move over, but I wanted to get used to Android because I think there is work out there for it, and there is some curiosity as well about all the ‘droid hype.  I have used the Droid 2 as a device, not for general phone services, for about two weeks now.

To re-purpose a line from Steve Jobs, the Android UI is a “bag of hurt”.  Where Apple iOS is very controlled (I agree, too much at times), the Android OS seems to be all over the place.  You can hand an iOS device to a 3 yr old and they’ll be moving around and finding things very quickly.  I probably spent two minutes with my niece over the holiday and she proved that point.  There are still times when I’m using the Droid 2 where I’m asking myself “WTF?” and I can’t find something.

Case in point, open the Android camera app.  You have some settings controlled via on-screen slide out (scenes, effects, flash, switch to …), but then other settings are only accessed by hitting the hardware settings button (picture mode, tags, settings – yes settings within settings). And you can actually open both at the same time so they overlap. Pure UI Craptasic Awesomeness. This isn’t some 3rd party app either. Its the built-in experience on the Droid 2.  Then on top of that, just the basic UI feedback mechanisms like screen animations like slides feel clunky. Maybe its better on other Android phones.. not sure..  But this isn’t the only examples.   iOS is far from perfect, and Android is definitely far from perfect.  Android is free, open source, easy to develop for, and I’m sure will lead to more work, particularly for the Flash developers using AIR, but from a consumer perspective, its not a long way to go.  I hope 2011 brings big improvements.

[ edit on Jan 18th - a friend questioned my judgment on why I came to my conclusion on Android. Figured I'd post it here]

Here is a list of things I found clunky in Android:  Btw — iOS isn’t perfect, but it’s the little things that it really excels at.

Unlocking the phone:  The combination of haptic feedback and the sliding animation was jittery when sliding in a normal fashion.  The haptic feedback actually amplified this feedback experience.

Mute icon on locked screen:  This is a sliding metaphor, yet the response to set audio on or off.

Overall:  the combination of hard and soft UI is confusing. Many times, there are onscreen controls and controls accessed via the settings button.  A great example of this is the camera app on the Droid 2. You have a slide out menu for some settings onscreen on the right to access some camera features, including switching to camcorder, and yet, you have other important camera features, like camera modes, hidden away in the settings button.  (fyi I tried to find out if this is the stock camera app, and I really dont’ know but I did check that Omar has the same on his phone).

Settings button:  When does any app/screen use this or not.  I found myself routinely pressing this to see what is hidden away.  It surprised me how often things were hidden away w/o any feedback to the user that things existed there.

Back button:  I like the back button, but its not consistent.  Some popups will use OK, Cancel, and some won’t, expecting you to use the back button.
Portrait to Landscape (& vice-versa) transitions.  This is probably more of a personal preference, but the immediate snap in orientation is jarring.  This phone is far faster than my 2-1/2 year old iPhone, so there isnt’ a technical reason that it can’t change orientations with visual feedback to the user.  Transitions serve a very important function of user context.

Overall:  The phone doesn’t come with any music or video organization tool.  Some people hate iTunes, but it serves as a great tool for organizing your music, videos, and apps.  These aren’t always going to exist only on the phone.  This is why I pointed out iTunes+iOS.   It’s a package deal. And the home user wants a way to manage these items.  Instead, at least from what I see, Google & the carriers leave that up to the customer to figure out.
Notifications: I like the idea of having one place to get to your notifications.  I think Apple should adopt something like this.  However, getting to your notifications on Android is horrible.  That tiny top bar is about 1/2 size of the normal height needed.  Numerous times, I have fat-fingered it, and missed and had to try again.

List items that go somewhere, List items that just display:  Go to the About Phone screen.  This screen is a big list.  Some of the list items only display info, and some are triggers to new screens w/o any visual feedback that clicking on them will go somewhere.  iOS is very consistent with using “>” on list items that will go to more detail.  In the sound settings list, they actually use the “dropdown caret” icon.  Although, when in Contacts,  there is a similar caret icon for linked profiles, that doesn’t go anywhere, but instead drops down more information.

Android Market online:  why is this only usable when I’m on the phone?  Go to the market, find an app you are interested in and there’s no price, no Google desktop installer, no QR code even.  AppBrain does this better than Google.

Input Textfields: This may be something that Verizon or Motorola did, but why the red highlight around the active text field when I’m inputting text.  Red means bad.  Either pick another color to draw visual interest or only use the red when its meant to be used.

And I could probably go on.  I doubt most of these are only Droid 2 issues.  Your response seems to be that because it has better features, that it makes up for a lesser experience.  Maybe thats the case with some people, but I would seriously doubt that most people feel that way.  Here’s a good quote from Alan Coopers “The Inmates are running the Asylum” –> “Power User is a code name for an apologist. Regardless of how hard an interaction is, or how uselessly obscure a feature is, the apologist will unerringly point to the power and functionality of the gadget, blithely ignoring the difficulty of actually using it”   Apple “gets” this concept.  Google does not get it yet. I think voice commands is one step in the right direction, but that’s a good solution to a narrow circumstance (driving while using your phone).

Return top