Recent projects for web and mobile devices
Updated: March 2015

For the past 5 years I have been working mostly, with some exceptions, on mobile device and web 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 15 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 most recent web app was for online map creation. An automated process was developed for converting Adobe Illustrator files (exported as SVG) to pure Javascript source code via several C programs. These Javascript files (on the server) can then be dynamically imported into another Javascript mapping framework (on the client) which manages the creation, drawing, and editing of lines, polylines, paths, rects, circles, text, and other interactive graphical elements within an HTML Canvas. Maps can be scrolled and zoomed, and different features (water, land masses, countries, cities, various geographic elements, etc...) can be displayed or hidden. Edited in-memory Javascript objects can then be extracted as PNG files and up/down-loaded to/from the remote server as image files and saved on the user’s local machine.

My most recent device app was an extensible interactive book app (not an iBook), 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. Actually, the coding for this app was done a year or so ago, but it was only recently that the client completed the artwork and submitted it to Apple. There are currently two titles (separate apps) that share the same code, but have different content. Many others are possible.

Before that I did, mostly for fun, my own simple math "toolkit" for creating data, performing calculations, and displaying plots, etc... using a "box and wire" approach to layout. You can see more at the SCToolkit for the iPad page.

My next recent client project was an iPad timeline constructor app for a repeat client who makes other educational and historical products. Although somewhat simple in the first version, this app allows you to create a linear timeline anywhere from 1 billion BC to 1 billion AD, and to populate it with events that span one or more days within that timeline. Each event can have a range of dates, an imported image, and a text description that appears in a content pop-up view. Thumbnail images of events are shown attached to the timeline, and they can be moved or resized by dragging, while the timeline can be zoomed and scrolled to show detail. Images can be imported from the image library or the pasteboard (e.g. from Safari). Large images can be resized on import. The entire timeline can be exported as a series of tiled images at the current zoom factor, plus the text and images for each event, either to the image library, as email attachments, or to folders on the device that can be copied to a computer via iTunes. The app design is based on an animated "folder" theme, with music and button sounds. I did versions v1.0, v2.0, and v3.0. Currently at iTunes:

My previous project was an iPhone app for a group of local Colorado-based businesses that is similar to a programmable never-ending discount coupon book, and a remote (web-based) content-management system for automatically adding, editing, and removing content (text and images) from all apps that contact an update server at regular intervals. The app has information about several businesses compiled in at deployment time, but can extend and modify that content indefinitely by syncing with the server (via HTTP). Information on the server can be curated by the client in an easy and secure way from an HTML/Javascript administration page that makes extensive use of XMLHttpRequest (i.e. Ajax) to contact PHP programs on the server in the background. I wrote all app code in ObjectiveC, all HTML/Javascript code for the web interface, and all PHP code for the servers. Currently at iTunes.

The project before that was a simple and cute iPad educational "game" that lets you take a picture of yourself, or someone else, and then places that photo behind a graphic of a historical figure, showing only your face. You can align the photo by dragging and zooming, and can save the composite to the device. Then you take a little quiz about the historical figure. You can email the composite image and quiz, or post it to your Facebook wall. This app is currently at iTunes. I also did the version 2.0 development for the client:

The client had this to say: "Great news! KQ TimeTraveler was approved late on Monday and the first day we had 150 sales. We also received 25 comments and 36 ratings - 4 stars!"

Before that 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. Several web apps (Javascript) using the content from this game were also created:

Another app under my own name is a free physics simulation that is very "math heavy" like the pad app. It is also one of the few apps that uses the standard Apple 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 (and the client supplies the art). 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.

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...).

© Sky Coyote 2012