Andrew Powell

Into The Mind of A Solutions Architect

Andrew Powell

Entries Tagged as Flex

Amazon Introduces the Kindle Fire, Content Still Reigns

September 28, 2011 · 1 Comment

Amazon has entered the tablet market.  The Kindle Fire, however is not an "iPad killer". 

[Read more →]

1 CommentTags: Adobe · AIR · Amazon · Android · Apple · Flex · General · Mobile · User Experience

Geolocation Custom Swiz Metadata Processor

January 11, 2011 · 1 Comment

It's metadata processor time again! I love the Swiz Framework because it's so powerful, yet simple when you need it to be simple. That being said, it's also got the ability to be easily extended in the form of custom metadata processors. codeviously, I've worked with creating a [Scheduled("5000")] metadata processor, but this time decided to take a mobile twist. AIR for Android gives us some new functionality with relation to reading the GPS unit of the device. There's a new Geolocation class within the AIR API that gives you access to the data coming from the GPS. It can be a bit gnarly to work with and it's not necessarily the easiest thing to understand.

The [Geolocation] metadata processor seeks to simplify this usage as much as possible. To use it, you have to declare it in your Swiz configuration just as you would any other metadata processor:

<fx:Declarations>
      
      
      
<geolocation:GeolocationSetup id="geoSetup" stopOnDeactivate="true" updateInterval="30000"/>

<swiz:Swiz>
<swiz:beanProviders>
<config:Beans/>
</swiz:beanProviders>

<swiz:config>
<swiz:SwizConfig
setUpEventType="{ Event.ADDED_TO_STAGE }"
setUpEventPhase="{ EventPhase.CAPTURING_PHASE }"
setUpEventPriority="50"
tearDownEventType="{ Event.REMOVED_FROM_STAGE }"
tearDownEventPhase="{ EventPhase.CAPTURING_PHASE }"
tearDownEventPriority="50"
eventPackages="org.andypowell.examples.events"
viewPackages="org.andypowell.examples.views"
defaultFaultHandler="genericFaultHandler"
defaultDispatcher="global"/>

</swiz:config>
<swiz:customProcessors>
<processors:GeolocationProcessor config="{geoSetup}"/>
</swiz:customProcessors>
</swiz:Swiz>

</fx:Declarations>

This is pretty straightforward, however, you'll see another tag up there too: GeolocationSetup. This tag allows you to specify the updateInterval, or how long the app will wait until it tries to grab a new reading from the GPS, and the stopOnDeactivate variable. StopOnDeactivate will shutdown the GPS listeners when the application is moved to the background. There is generally not a reason why you'd set this to false since it has the possibility to kill your device's battery by constantly polling the GPS.

Usage of the Geolocation metadata tag is pretty straightforward, as well.

...
   
   [Geolocation]
   public function updateLocation(latitude:Number,longitude:Number):void{
   ...
   }
   
   ...

The method updateLocation will automatically be called at the updateInterval's next run.

What does this mean for the developer who wants to use this? It means you don't have to mess with setting up listeners with NativeApplication or listeners for Geolocation when it updates the lat/lon. It really simplifies the whole process for you. Head over to my github page and download the metadata processor and examples for yourself. Remember, it requires the Flex 4.5 SDK so make sure you grab that first.

1 CommentTags: Adobe · AIR · Android · Flex · General · Mobile · Swiz · Universal Mind

HTML5, AIR for Android, and Geolocation

September 22, 2010 · 3 Comments

Inspiration comes from all places. Sitting in Ryan Stewart's presentation at 360Flex this week, I got hit with the geolocation bug again. I saw some of the demos that Ryan was doing and figured that I can take some of those a bit further. This gave me a chance to do some work with HTML 5 and AIR for Android as well.

Seeing Ryan's presentation, I took the initiative and updated one of my old samples around Yahoo! Local Search and Adobe Spry. The old version actually asked you to provide a city state pair to do the local search. After taking a look at how Serge Jespers was using an ExternalInterface call to get HTML5 geolocation data into Flash, I took the same approach to grab the latitude and longitude from the HTML5 geolocation API and pass it into the ColdFusion service that I'm using to abstract the Yahoo! API. The end result, which works in any HTML5 enabled browser looks like this:

Migrating this example to HTML5 was cool, but I felt like there was still something missing. I banged out the HTML5 version pretty quickly because I was migrating existing code. I needed a real challenge. Ryan's examples had all been based in AIR for Android. I had been signed up for the prerelease for a while, but hadn't been able to think of a compelling app to build. I decided to take the HTML5 app that I had just created and build an AIR for Android version, so I fired up IntelliJ IDEA and went for it. I figured a listing of the elements wouldn't be a good showing of what AIR for Android can do, so I decided to sexy it up a bit. I added in some nifty native geolocation functionality and some of the new uri based functionality to trigger the phone system, i.e. tel:4045551212. Since it was a Flex 4 application, I decided to use my Flex framework of choice, Swiz, to help me build the application quickly and keep my code organized. I picked up a beer from the 360Flex party on Tuesday night and then headed to my hotel room to crank out some code. The result isn't pretty, but it is pretty darn cool.

When the application starts up, it will check for the current location and center the map on that latitude and longitude. When you do a search, it will call the same ColdFusion service that the HTML5/AJAX version is using to get the local search results. It then leverages the MapQuest 6 API to plot the data. I added a double-click handler on the POIs to trigger phone calls to a given location.

Download the APK here. Warning, it's still just a POC quality, so you may need to force quit the application to keep it from eating all of your battery.
qrcode

3 CommentsTags: Adobe · AIR · AJAX · Android · ColdFusion · Conferences · Flex · MapQuest · Speaking · Spry · Swiz · Universal Mind · User Experience · XML

[Scheduled] Custom Metadata Processor for Swiz

July 21, 2010 · 2 Comments

I've been working with Spring 3.0 a good bit lately. One of the things that I've really enjoyed working with is the new ability to create rudimentary scheduled tasks with annotations. This got me to thinking, why can't we do the same thing in Swiz? We have the Timer class. Why not use the same type of methodology to create a custom metatdata processor to handle the execution of scheduled tasks in Flex with Swiz? I heard Ryan Campbell speaking about custom metadata processors at Flash Camp Seattle, and decided to take a look at his examples of the URLMapping processor as a guide. What I came up with is this, a metadata tag that will let you run a method at a set interval, for a defined number of runs (or unlimited if undefined). You make use of the tag like this:

It's really that simple.

There are two properties that you need to be concerned with: delay and repeatCount. delay is the default property and is the interval which to run the Timer, in milliseconds. repeatCount is the number of times to repeat the Timer, the default is 0, which means repeat as long as the application is running.

Resources:

SWC Download
Example Download (Requires SWC and Swiz Framework)
Swiz Timer on GitHub

2 CommentsTags: Flex · Spring · Swiz · Universal Mind

Mobile Innovation Is Back In The Developers' Hands

July 14, 2010 · 3 Comments

2007.  That's the last time we saw any true innovation in mobile hardware.  That's the year that the first iPhone was introduced.  Here, we are now, three years and three versions of the iPhone later and we've seen no significant innovations in mobile hardware.  Sure, we've seen cameras with better resolution and faster processors, but those are just natural evolutions of technology that would be happening anyway.  There has been no innovative development of hardware (or it's interactions) since that first iPhone set the new standard for mobile devices and how we use them.  

If there's no innovation happening in the hardware world at this time, then where does it happen?  It happens the only other place it can:  software.  Android devices are no more innovative, from a hardware standpoint, than the iPhone.  The thing that differentiates them is the software, the content available.  It does us well to remember, also, when the iPhone first came out, it was closed to developers.  Only when third-party developers started building applications did it truly become a "must-have" device.  One look at Apple's advertising validates this.  Most of their advertising, these days, centers around applications that run on the device, not the device itself.  Software developers are now responsible for creating content that is making these devices indispensable.  Once again, content is king.

Innovation is coming by leveraging the platform that is provided to us as developers.  We can use the cameras on these devices to create cutting edge augmented reality (AR) applications or whatever our imaginations can come up with to build.  As developers, we have the platforms, the canvases, laid before us.  It's up to us to work within those platforms to create the content that compels people towards the devices.  That's why you see Apple touting and enabling (if not subsidizing) big-ticket apps like Netflix and Farmville.  They want that content on their devices.  Content is king.

Consider the case of Farmville.  Android is on the brink of the 2.2 (Froyo) update.  This will bring Flash to the Android platform in a viable way.  With that addition of Flash, comes one of the most popular applications on Facebook right now, Farmville (built in Flash).  Well, Apple being Apple, recognizes how popular that content is and wants it on their device.  So it makes sense for them to do all they can to make sure that content is on their device first.  Content compels the consumer.  

It's not just about creating the software, though. As with everything else, the experience is what compels us to use these devices, for developers and consumers. There are really two major choices of platform when it comes to the discussion on differing mobile experience:  iOS and Android.  These two experiences, for developers, couldn't be more different, either.  One is a closed, controlled, borderline totalitarian environment, whereas the other is more akin to a wild-west free for all with zero moderation.  Neither can survive in their present form.  There has to be a balance between control and openness in the content that is made available to these platforms.  Getting quality content that consumers want to the consumers is absolutely crucial.  

That balance between closed and open is very important because, once struck, it will compel more developers to build across platforms and create consistent experiences across all platforms.  An experience must be consistent with the host platform as well as other implementations of the application.  If an application has differing aesthetics across platforms, then the brand value is lost.  If it doesn't interact as a native application should, on a given platform, then usability and user trust is lost.  It's a tricky balance that must be struck to have a successful multi-platform effort.  If the content is inconsistent and unusable it will not compel people to the target platform.  Usable content compels the users to a given platform.

Real innovation in the mobile space is happening in software now.  The time for hardware innovation has passed for the time being, now it's time for developers to continue to take these platforms and provide the next wave of innovation.  It's time to deliver that compelling content that drives the mobile space to the next level.  It's time for developers to step up and embrace the challenge of innovation.  It's time for us to deliver compelling, usable content and continue the innovation in the mobile space.  

If we do this, then we push the platforms we use as our canvases to innovate and, in turn, the hardware to innovate.  It's a circle of innovation that we are all responsible for maintaining.  As long as that cycle of innovation continues, we will continue to be amazed and inspired by what our peers are building as well as the platforms on which we build our inspiring and compelling content.

3 CommentsTags: Adobe · AIR · AJAX · Apple · ColdFusion · Flex · General · Google · Java · Mobile · Silverlight · Universal Mind · User Experience · WAP

The Rise of Mobile Devices: Same Song, Different Day

May 04, 2010 · No Comments

Every couple of years I have to stop and shake my head at how damn cyclical (and cynical) this business is.  Sometimes, I can't help but feel like Marty McFly and get the feeling like I've seen all this before.  Everyone is, quite rapidly, getting caught up in the notion of this high experience, mobile, touch-screen, multi-device world and how revolutionary it is.  

We've sung this song before though.  It's nothing new.  

It's kinda like "O Canada" and "My Country, 'Tis of Thee" being the same melody as "God Save The Queen".  We know it's the same tune, just different lyrics.  With that thought in mind, let's take a look back and figure out how we got to this point and where we are going in the future.

When I first started building software (Omnis 7 paid the bills), it was all about client-server computing.  You had to have moderately powered desktops and a beast of a database server to house all the data.  Most of the heavy lifting of the data and logic happened at the client.  The server was, basically, just a database, if not in reality, just a database.  This made updating the applications we built a total pain in the ass because we didn't have a really well built out infrastructure to push updates to our clients.  Hell, even Microsoft sent updates on CD.  I fondly remember waiting to see what was in that month's TechNet update, but I digress.

As server performance increased at a faster rate than desktop performance did, the shift was back towards a centralized-type system that was a lot like the mainframes of yesteryear.  Hell, the system we used was even called MetaFrame to harken back to the mentality that all the processing was centralized.  Metaframe was an absolute disaster, but that's a story for a few beers and another time.  At that point in time, you had all the power you needed on the server to run the app, but you were still talking to the database, which was the centralized server component.  That part didn't go away.  

Not too long after that, along came the rise of web-based UI's.  This moved pretty much solidified the move of all the processing to the massive servers that we had sitting in data centers (or server rooms).  This paradigm gave rise to the concept of a middle-tier that took requests from the client (web server), processed the incoming data, made requests to the database, then sent the results back to the client.  

This was a defining demarcation because at this point, we would never really have all the logic in one place anymore.  The client could render and process some of the data and the server would still do most of the business logic.  This worked well, especially with the introduction of client-side scripting methodologies, like JavaScript.

In the middle of the last decade, we saw the emergence of the Rich Internet Application (RIA), be it AJAX, Flash (and Flex), or whatever your tools of choice were (and maybe still are).  This, again, signaled a new era where we moved a lot of the processing back to the client and relegated a good majority of the middle-tier to things like security and data access.  A lot of business logic moved towards the client applications, again.  

Fast forward a year or two to the present day. Now, we are in the midst of a new multi-device paradigm where we have a legitimate business need to have both consistent experiences and business logic across multiple devices (Android, iPhone OS, Windows, Desktops, etc.).  So what do you do?  Do you spend the extra money to duplicate libraries of business logic across platforms and create a version for Cocoa, Android, .NET, and whatever other platforms on which you wish to deploy your applications?  

In a word, no. 

You do the smart thing and move that common business logic back to the server.  The native user interface serves the relatively simple purpose of providing the face of the application, taking input from the user, prepping it for the middle-tier, passing it to the middle-tier, then processing and rendering the results.  The real work: security, data access, and all important business rules and logic are deferred to the server, again.  

So here we are, again in the circle, moving the most intensive processing back to the middle-tier and leaving our device native code to render the user interfaces.  History would tell us that the next phase of this will probably be much more powerful devices that can handle the processing of complex business rules and crunching larger amounts of data.  Achieving this will require us to find a way to create logic libraries that are cross-device.  That will require a change in the current environment where either everyone, or a good number of vendors start playing nice.  If that does or doesn't happen, history tell us that something will trigger us towards this paradigm in the next two to three years.  Let's hang on and see what happens next.

No CommentsTags: Adobe · AIR · Apple · ColdFusion · Flex · General · Java · Silverlight · Universal Mind · User Experience · WAP · WebNext

What Is A Flash Camp?

April 23, 2010 · 3 Comments

(Note:  My colleague, David Tucker, has joined me in helping to author this post since we put on our Flash Camps as a collaborative effort between the two of us.)

It's come to our attention that there are a lot of people out in the community who do not know what a Flash Camp event really is all about.  If they do know, it's a pre-conceived misconception that they're things like "glorified user group meetings".  This couldn't be any further from the truth.

In our minds, a Flash Camp is, in essence, a mini conference.  In these days of tighter budgets and the premium placed on our time, we try to make these events as time conscious and price conscious as possible.  Why fly across the country to an event when we can bring something that will offer comparable content to your region?  We try to keep the presentation quality of these events high so that people will want to attend and they will feel that they're getting a good value for the money.  

Typically, a Flash Camp event will be one day, 9:00am to 5:00pm. We try to shoot for a Friday so that people can have a nice end to the week. We've talked about going to multiple days, but we want to make sure we've got this formula down pat first.  Lunch is also included in the price of admission.  If we're going to ask you to sit through a full day of content, the least we can do is feed you, right?  

During the camp, you will hear from a lot of different speakers presenting (in a typical conference presentation format - these aren't 'hands-on' sessions).  The speakers are diverse.  This means that, yes, as it is a community event, we try to pull a good mix of local speakers and nationally recognized speakers within the Flash Platform community as a whole.  This gives attendees a good motivation to attend because you will see both your peers from the local community, plus people who you know from twitter, reading blogs, etc.  

Along with a diversity of speakers, we try to maintain a diversity of content as well. In Atlanta, we did an Intro To The Flash Platform session that was really rudimentary, and almost a bit of a marketing pitch.  We have had topics as a advanced as "Custom Metadata Processors For Swiz", which is going to be way above an entry-level developer's head.  We can't make the content too basic, or too advanced, so we try to shoot for a bit of both with the hope that everyone will take something away from the event.

Cost is always the interesting element.  A lot of things go into the calculation of the cost like venue cost, catering, travel for out of town speakers, etc.  Our ultimate goal is to get enough sponsorships so that we can keep the event cost to attendees below $100.  We feel that that price point is a good place for a one day conference with top-notch content.  Some people want it to be free, but the way I see it, you can't please everyone.  Paying under $100 to have a full day of presentations from speakers that you would hear at 360Flex and Adobe Max is a bargain.

At the end of the day, Flash Camp events are catalysts for the local user community.  Some areas, like San Francisco, have vibrant and highly active Flash / Flex communities.  In these areas, the Flash Camp event serves as a way to reconnect with people and inspire the community to more user group meeting and such.  In areas like Phoenix, where the community is not as active, the Flash Camp events serve as a way to launch the development community.  It's an opportunity to get a large number of people in the room and have the user group managers pitch the user groups and their value to potential members.  As these local communities grow and thrive, the Flash and Flex communities as a whole will grow and thrive.  They are beneficial to the whole Flash Platform ecosystem.

3 CommentsTags: Adobe · AIR · BlazeDS · ColdFusion · Conferences · Flex · FlexCamp · Java · Silverlight · Speaking · Spry · Universal Mind · User Experience

A Discussion on Flash and HTML5

April 21, 2010 · No Comments

On May 7th, Flash Camp Seattle will be held in the Adobe offices in Seattle.  One of the sessions we are working out for that event will be a panel discussing where Flash and HTML5 will both fit within the future of the web.  It's not going to be a "bash-fest" either way, but a frank, open discussion with representatives from both sides. Tickets are going fast, and registering via this link will save you 50% off the ticket price.  

Speakers Include:

 

I think that all of the content we have put together for this make for the deepest and most interesting speaker lineup any FlashCamp has yet seen.  Go register today and join us for what surely will be a great day of content around the Flash Platform and the future of Flash.

 

No CommentsTags: Adobe · AIR · ColdFusion · Conferences · Flex · FlexCamp · Java · Silverlight · Speaking · Universal Mind · User Experience · WebNext

Flash Camp Coming To Washington, DC on April 16th!

March 17, 2010 · No Comments

Flash Camp is coming to Washington, DC on April 16th.  It will be a full day of great content on topics ranging from UX to Flex.  Admission is dirt cheap and lunch will be provided.  Come on out for a full day of great content and great networking with some of the area's industry experts!

www.capitlflashcamp.com

When:  April 16, 2010

Where:  Navy Heritage Center (Naval Memorial stop on the Metro)

More Info:  www.capitalflashcamp.com

No CommentsTags: Adobe · AIR · BlazeDS · Cairngorm · ColdFusion · Conferences · Flex · FlexCamp · Java · Universal Mind · User Experience

Atlanta Flex User Group Tomorrow Night - I'm Speaking!

February 16, 2010 · 1 Comment

If you're an Atlanta area (or even Macon / Augusta / Chattanooga area) developer and want to learn more about how a developer sees user experience design, make sure you come to the Atlanta Flex User Group meeting tomorrow.  I will be giving my presentation:

How I Learned To Stop Worrying And Love UX

It's guaranteed to make you laugh, cry, or angry.  I'd like to say it's entertaining, but that's just a bit more shameless self-promotion than I'm willing to do (at this time).  I think that this presentation is well suited to any type of developer (not just Flex) that wants to learn more about what exactly user experience design is.  I've heard, even Sledge Hammer! might be making an appearance.  

1 CommentTags: Adobe · AIR · AJAX · BlazeDS · ColdFusion · Flex · Java · Silverlight · Speaking · Spry · Universal Mind · User Experience · XML