Work Portfolio

Keith Anderson - April 5th, 2018

ProPrompter Studio

ProPrompter Studio is a smooth scrolling teleprompter application. Script presentation is fully customizable and can scroll content of any length smoothly with no stutter using Core Animation and sliced render views. A built-in remote control function uses Apple's Multipeer Connectivity Framework to allow a single master device to control up to three slave devices. Sync is maintained even when all devices are using different display settings by tokenizing the script and working on a per-word basis.

ProScope QC

ProScope QC is a camera capture application designed to work with the Bodelin ProScope Micro Mobile lens attachment for iOS devices. Using raw pixel buffers from AVFoundation and Core Image filters, the app is able to draw a pixel-accurate ruler overlay on the image feed in realtime at full framerate. The scaling takes into account various fields of view of different iOS devices to ensure accuracy. Photo and video capture are supported at maximum device resolution and framerate due to a fully GPU accelerated render pipeline.

PowerMax Product Information Manager

The PowerMax PIM was a project intended to consolidate decades of ad-hoc product management practices into a single, easy to use web application that integrated with suppliers and inventory management systems to deliver rich product content and stocking data pushed out to multiple sales channels. Written in Python and leveraging Django allowed rapidly changing management goals to be realized quickly and efficiently.

The initial version integrated with several suppliers (Ingram Micro, D&H, TechData) in order to include realtime availability quantities and DEAR Inventory to include physical inventory counts. Product data was pushed to WooCommerce based storefronts to create and delete product, update quantities available, and to set standard and sale pricing.

The Mac Store Service Tracker

Early in my tenure at Computer Stores NorthWest, Inc. (CSNW), repairs for Apple computers was handled at each location independently and were tracked with an ad-hoc FileMaker database. Apple service metrics and customer satisfaction were a constant issue due to lax tracking and documenting of customer systems.

Building on our in-house Wombat framework and tools, a new centralized web application was created to track repairs across the whole retail chain. This tool allowed anyone at any retail location to view the current status of any customer repair to provide accurate feedback to customers with questions about status, enabled integration with Apple's Global Service Exchange (GSX) to order and manage replacement parts.

Additionally, a courier mechanism allowed a shift from having a service bench and technician at every retail location to two centrally located service centers with regional courier service. This greatly reduced costs at retail stores by allowing more flexibility in choosing locations that didn't need space for repairs as well as labor overhead allowing hiring of skilled technicians in larger markets.

Ultimately, these changes allowed a shift in retail strategy that focused on upscale mall locations with higher foot traffic while still providing world class service for customers, and improved service metrics and customer satisfaction. These improved metrics increased back-end dollars from Apple, further increasing profitablity.


Despite the silly name, Wombat was a tool that enabled many other cost saving applications and internal improvements. The goal was to build a middleware tool that allowed rapid development of rich web based applications. Architecturally, it was composed of a pure JavaScript based interface layer that communicated via XML-RPC with a Perl based ORM server.

On the user interface side, the goal was to build a declarative XML based interface description language. This interface declaration would be compiled into a series of JavaScript widget objects (fields, lists, views, menus, etc) that would render themselves on the page using standardized DOM manipulation. Every property of a widget could be 'bound' to any other object property, from other UI widgets to data models representations fetched from the ORM. Value and state updates were presented in the user interface while live, making it one of the first fully Web 2.0 applications I'm aware of. The mechanism was inspired by Apple's Cocoa Bindings technology in macOS.

On the server side, Perl was selected as the ORM language solely for its (intentionally) loosely defined object oriented features at the time. Objects were defined by an XML file and backed by a PostgreSQL data store. The most basic published model object could be as simple as listing the field names of the appropriate table, and Perl would auto-create all property setters and getters using the AUTOLOAD functionality of the language. You could override any property to introduce more sophisticated behaviors, or to introduce property value dependencies. Further, you could write any instance or class based methods as necessary and then call them directly from the generated UI side over XML-RPC.

Given the ease of writing a data model and UI using Wombat, many internal applications were built and rolled out in record time by essentially automating the bulk of the controller layer in the MVC design pattern.