Monday, October 17, 2016

Pizza App

Pizza App is finally out!

Developing this app has been a great achievement for me. It contains very exciting features that were really rewarding to learn and implement.

I started developing this app back in March, it started as a simple pizza locator using the now deprecated Yelp V2 api.

I forgot about it for several months until I learned about the existence of Firebase. I thought that it could be a good idea to revisit the app and implement some cool features to it.

I have to confess that I regularly scout freelancer portals and see what is trending so I can learn what features people are asking for.

It is no surprise that real time chat applications are on the rising, everyone wants their own WhatsApp, SnapChat, etc.

Firebase offers its database services in realtime, to read data in realtime you only need to set up an URLStream and its ProgressEvent.PROGRESS handler. Every time a message is pushed to the database you instantly get notified by it.

People also often ask for users to be able to upload images, comment and vote on them. For this I used the Firebase Storage with the Firebase Database.

Using the CameraUI and CameraRoll is certainly challenging, there is a lot to consider, starting with how you get the picture data.

You can get it sync or async depending on the device and OS and each method has its own workflow. Thankfully I found a very detailed doc on Adobe's site explaining how all of it works.

Now that you have the picture data you need to convert it to BitmapData in order to be previewed inside an Starling app, but you also need to make the image no larger than 2048x2048 pixels.

That part was tough, it took me several hours to figure out an algorithm that allowed me to scale pictures while maintaining their aspect ratio.

Once that was sorted out, everything else was a walk in the park.

Yelp recently updated their API and it has been very easy to work with it, you no longer need to create complex requests just to get a list of businesses.

Now you only request an access_token and then use that token to access the api, both of those can be done with very simple URLRequest+URLLoader combo.

While I was developing this app I was learning more about how Firebase works only with a REST approach (in a future post I will elaborate my insights on this), at the same time I made some guides and examples that have been quite popular and hopefully have helped a lot of developers.

To wrap things up,  I'm glad that this app is finally out and I really hope it helps our community in showcasing what's possible to do with the Flash platform.

Now I will continue my plan to write a book on how to develop a simple business app with FeathersUI and Starling.

Monday, October 3, 2016

Why Adobe AIR?

Adobe AIR is a platform for developing desktop and mobile apps. It supports Windows, OSX, Android and iOS.

There are very similar products, such as PhoneGap, Xamarin, Unity, React Native, etc.

Why I choose AIR over those? Here's a list:

  • It's free and it doesn't asks you for a share of your profits (they tried to do that but it didn't worked out).
  • You can deploy to iOS without a Mac.
  • It's fast and performs well enough compared to pure native apps.
  • It uses a solid programming language.

Some people just want to make apps as a hobby but they don't have the monetary resources to invest on expensive software and hardware.

AIR allows you to create apps with virtually no cost. Just download the AIR SDK, a trial of Flash Builder / IntelliJ IDEA and you are set.

What it's interesting is the possibility to deploy to iOS without a Mac. Most other middleware platforms require that you have installed Xcode in your Mac to be able to compile. Some offer compilation on the cloud to get around this but it's a hassle to not have total control of your development environment.

ActionScript 3.0 is the language used for AIR, it is based on Java and JavaScript which are the two most popular languages at the moment.

It is a fact that no one likes to code in JavaScript, you can see it for yourself with the countless of libraries, transpilers and frameworks. That's why I avoid that mess of an ecosystem.

ActionScript 3.0 is starting to get a bit stale for these modern times but it still does the job just fine.

AIR has also its flaws, I will list the ones that annoy me the most:

  • Adobe has certainly limited the resources they allocate to the product. It is understandable since they don't really profit much of it. I wouldn't mind paying a monthly license for personal support or they had a marketplace where they can get a cut of the sales.
  • Continuing the previous one, fixes and enhancements take a bit longer to resolve since they are understaffed.
  • Lack of exposure, Adobe is not promoting developer technologies. You can see the trend that Adobe is moving to its roots as a design/creative company.

Some people may say that they don't like that extra functionality is only available on external plugins which are mostly paid.

I agree at some point that some features should be included in the runtime by default but I also like the idea that the community can extend the runtime and make an economy based on it.

Regardless of that I feel very comfortable developing business applications with the AIR runtime in 2016.

Performance is very good, I really like the Starling and FeathersUI approach of using the GPU to render everything. You quickly get addicted to run apps at 60 fps.

In conclusion,  I wish the AIR runtime would be more popular and people to not dismiss it just because its based on Flash. In the meantime I will enjoy this ride. 

Hello World!

Sometimes 140 characters aren't enough to fully express what I have in mind.

That's why I created this blog, to share my experiences and explain my decision making while developing software applications.

Right now I'm focused on mobile and desktop development with Adobe AIR, Starling Framework with FeathersUI and Apache Flex.

You can expect from this blog unbiased opinions on the cross platform ecosystem, guides, examples and personal experiences.

My goal is simple, make the Flash Platform great again (heh). But seriously, we got some undeserved infamy and the only way to demonstrate how wrong they are is by creating strong and stunning experiences.