Recent projects for mobile devices
updated: January 2012
For the past 2+ years I have been working mostly, with some exceptions, on mobile device projects. Most of these have been for Apple's iOS (iPhone and iPad), but there were also a couple for Android and Nokia (Symbian). These projects have ranged from physics simulations to kids' games, to business networking apps, to image processing, to more involved animations and games. At present, there are at least 9 apps up at the iTunes store that I wrote entirely or worked on, and 1 at the Android marketplace. I have also worked on other projects which contributed to apps which now may or may not be up at the iTunes store under some other name. A few of these projects are shown below.
My latest project was an iPad game/book involving magic and western
mythology which required multi-layer sprite animation, "on-the-fly" image and
scene generation, and a multi-view "popup" activity framework that operates in
all 4 pad orientations. This app is currently at iTunes for free for a limited time:

The only app vended under my own name is a free physics simulation that is very
"math heavy". It is also one of the few apps that uses the standard Apple UIKit
user interface widgets. Most of the work I do for clients involves the creation
of a custom, non-standard, immersive user interface, where I make all the
widgets. However, the Nbody app makes extensive use of the standard
widgets:

The next app consists of many screens which are navigated to by custom controls.
Some screens comprise personality tests (with custom slider widgets), while
others present images and text information. A core feature of this app is that
the content (tests and text info) is specified by extensible configuration
files (provided by the client) which do not require any re-programming of the
app. This is a common feature of many of my apps: the ability to extend or
change the content without re-programming or interaction with the programmer.
Note that this does not contravene Apple's decree against "dynamic" apps, since
all the content is specified at compile-time, and the app bundle is static
once installed on a device.
For this next app, I did separate iPhone, iPad, and Android apps. I think
version 1.00 at iTunes was also separate apps, but since then they appear to
have merged the two together, which is good, since they share much of the same
code. This app makes extensive use of network communications (HTTP), location
services, and access to device logs and other information. The app
automatically syncs with a remote server, sends data, and responds to commands.
The Android app can do all this in the background continuously, without a
foreground Activity UI, although the iOS app must rely on recurring location
updates in order to operate in the background. I also wrote the first version
of a web server program (in PHP) which allowed multiple devices to log in and
interact with a database, and multiple administrators to peruse the database
and send commands to any device. The iOS app also responded to Apple Push
Notifications, which could be sent from the admin website. I also did a Nokia
(Symbian) prototype app, but I don't know what became of that, now that Nokia
has abandoned Symbian for Windows Mobile.

The next series of apps are similar games. They all share code for multiple
layers of sprite animation, allowing both movement and alteration of images,
and user interaction and sounds in each layer. Various "managers" allow the
creation of many random independent sprite groups (such as moving clouds and
numbers). A key feature of this series of apps is that it can be extended by
the client with new sets of artwork to create different games around a central
theme, without re-programming. I also did an iPad version of these games,
which combined the features of both. The iPad app also incorporated several
new Game and Animation classes and derivatives which could be programmed and
tested independently of one another, and then migrated to other apps.


For the same client, I also created an extensible interactive book app, which makes use of multiple layers of interactive animation and page transitions, sounds for controls, animations, and word reading, and is configurable and extensible by the client without reprogramming. It is currently in review.
The next two apps are fairly simple. The goal was to migrate several games
that already existed at the client's website, and which were programmed in
Adobe Flash (which does not run on iOS). A simple set of layered animation
routines was created, and these became the basis for the more complex
animations shown in the apps above. However, for these apps I did have to
provide the use of a custom font (before they were supported by iOS), and all
device orientations (again, before view rotation was supported by iOS), which
required the creation of "on the fly" images using several coordinate
transforms. Also, email composition and sending from within the app, website
access, and connection to Facebook were provided.


The next app was done for a client who sells optical test equipment (but I
can't tell you who!). It hasn't appeared at the iTunes store, but may be
distributed as part of their custom systems. It is essentially an eye test
chart, but with some interesting enhancements. It shows the standard Snellen
letters and symbols, and the Lea symbols, and the "tumbling E's". However, the
standard image resizing code on the iPhone did not do a good job of creating
the various glyph sizes (especially at small sizes), so I wrote a stand-alone
program on the Mac to create exact (down to precise 5x5 pixel images)
renditions of all glyphs at different sizes by using image sampling and
Gaussian interpolation (similar to what I did previously for satellite images).
An additional enhancement involved creating specific images for the iPhone4's
hi-res screen which went below the 20/20 optical limit. BTW: This is why Apple
calls the phone4's screen "retina": because it is possible (with extra work) to
create images at a resolution that is slightly finer than 20/20 at standard viewing
distance (15.7").

The next example is just part of an app that does image distortions (e.g. of a
photograph) by using vector fields of flow. There are many possible
distortions, and many different variants of each, depending on the parameters
submitted to the distortion class. The vector fields and distorted images of a
few are shown below. This is similar to the "un-distortion" flow-field mapping
I did for a Venus astronomical project previously.

The final example isn't a native app per se, but is a web-app specifically for
the iPad (done in HTML5 using the Canvas object). This is a simple sketch app
done for a medical client used for eye exams. It allows
drawing lines of various widths and colors, text, and dragging several images
out of "wells". It works as a "popover" on any web page, and works in all pad
orientations. The drawn image can be saved as a PNG, and used by the calling
page (to send to a server, etc...).