How I Made An App

screengrab5 How many times have you heard someone say – or said yourself – “I’ve got a great idea for an app …” A few months ago, I posted an interview with Dean Head, a DP who developed an app for film crews working in China. Ever since then, my own “great ideas for apps” have been nagging at me.

After talking to a couple of programmer friends, I quickly realized two things:

1) Nobody had time to help me.

2) I couldn’t afford to hire somebody.

This was disappointing, but not unexpected. In fact, it’s much the way I expect people feel when they look into video production and discover how much it costs to product a quality project.

But, I don’t give up that easily. When I was in high school and college in the mid-to-late ’90s, the internet and 3D graphics were just starting. At that time, I was a computer nerd, cutting my teeth on the GW-BASIC programming language (as a middle-schooler, I tried to program a searchable Hitchhiker’s Guide to the Galaxy), and moving on to PASCAL and C+. Once I discovered filmmaking in college, I turned my back on “a life spent in front of a computer in a dark room,” and – aside from learning enough HTML and CSS to do my own websites and eBooks – I abandoned programming.

But, times change. These days, video production puts me in front of a computer a lot more than it puts me on a set or location. To a great extent, the photo/video/web/programming industries have all sort of converged into a nebulous cloud of “creative work.” So, I figured, what the heck, I’ll learn to do apps myself.

The first thing I learned was that the native language of Android apps is Java and the native language of iOS apps is Objective-C. Naturally, there’s really no easy way to translate one into the other. So, which language should I learn? Well, after looking around the Adobe Creative Cloud site to see how other people are doing things, I discovered that the rumors of Flash’s demise had been greatly exaggerated. Yes, Apple forbid Flash from being installed on iOS devices, but Adobe responded by allowing developers to pre-compile their Flash apps into ARM (“machine language”), so that they would run perfectly on iOS, WITHOUT the Flash plugin. At the same time, Flash allows Android developers the option to export an “.APK” file, ready to upload to the Android App store on Google Play.

Clearly, this seemed like the way to go. So, I spent about a month of evenings and weekends learning the ActionScript programming language that drives Flash, and building a game-like app intended to help people studying Spanish to build a solid cornerstone for grammar. I call it “Top 10 Spanish Verbs,” because instead of overwhelming users with dozens of different conjugations and hundreds of verbs, it focuses only on the ten most common Spanish verbs, in the three most common tenses. With the interface I designed, users practice both conjugations and definitions at the same time. If you get confused, touch the “?” button for a hint. It’s simple, fun, effective, and free. This is what it looks like.


Since I built it in Flash, it works on the web as well, so you can actually play it online, here.

Finally, I finished the app, exported it from Flash as an APK (Android) file … And discovered that the 28KB Flash file was now 10MB. I showed the app to a couple of my programmer buddies. One explained, “Actionscript requires a byte code interpreter to do anything, along with all the libraries that make it do what it does. Add in the translation/adaptation layer for iOS or Android and it starts adding up.”

Another suggested, “I would consider abandoning Flash/ActionScript in favor of HTML5.  My friend that worked on the Flash team (until Adobe signaled its negative future) says that there’s no future there.”

The reason I went with Flash initially was because I wanted to be able to have an interactive, drag-and-drop interface, and I wanted to be able to store the verb data in an XML file, so that I could easily expand the functionality of the app, or even add different languages. My limited experience with HTML and CSS hadn’t led me to believe that was possible. Apparently, I was totally wrong. The new HTML standard, HTML5 (as opposed to HTML 4.01, XHTML or any other flavor) has all kinds of new features, including a “Canvas” property specifically designed for graphic elements, native vector graphic capability, and built-in drag & drop support. Add in JavaScript – which apparently is extremely similar to Actionscript – and I could have done the same program without Flash.

Conveniently, Adobe has a utility called PhoneGap that will take HTML5 projects and automagically convert them into Android or iOS apps. Much easier, and much more size-conscious than publishing from Flash. While I appreciate this, I’m a little annoyed that they’re still pushing Flash as a viable alternative.


So, the good news is that I was able to create an app from scratch, and that it’s available on the Android Store (I could do iOS, but I’m mad at Apple right now, and I don’t feel like jumping through their notorious developer loops). The bad news is that, if I want to do anything further, I really should do it totally differently.

So, if you’ve been wondering how to get started on your own app project, here’s what you should do: pick an online HTML5 tutorial (here’s one and here’s another), work through it, and then use PhoneGap to convert your project for distribution.




UPDATE: I followed my own advice, and here’s the result! The official CrewOfOne Photo Lighting Setups app for Android phones and tablets.

This app puts reference images, detailed instructions, and 3D-rendered lighting diagrams for 17 different kinds of glamour and portrait lighting setups right at your fingertips. Copy the setups exactly, or use them as starting points for your own artistic exploration. The choice is yours!

Best of all, these setups can be assembled in minutes at any location, and require nothing more than three lights and a few inexpensive items. You don’t need your own studio or a ton of expensive equipment to use these setups for magazine-quality portraits.

Leave a Reply

Your email address will not be published. Required fields are marked *