Me

Eric Ford

Mobile App & Web Developer

Petaluma, CA

ericfordconsulting@gmail.com

(707) 787-8082)


Mobile Skills

Swift - 10 Apps

2015 - Present

Android Java - 4 Apps

2015 - 2016

Objective-C - 5 Apps

2014 - 2015

Corona Labs & Lua - 1 App (iOS & Android)

2015 - 2016

RubyMotion - 2 Apps

2013

Web Skills

Ruby on Rails

2007 - 2017

Javascript

2000 - 2017

Java

1997 - 2017

RDBMS & SQL

1996 - 2017

Other Programming Skills

MicroPython, Arduino & C

2017

C# (not ASP)

2005 - 2008

Dircetor/Lingo, Flash/Actionscript

2005 - 2006

C++/C

1990 - 2006

VB/VBA/MS Access

1996 - 2004


Eric Ford's Resume

Recent Projects

Song: 2020 - present

A Chord Family app

  • What is it?: A songwriting aid for guitarists
  • Client: Mutual Noise
  • Tools: Swift, CloudKit, MIDI
  • Status: In the app store
  • I added in-app purchasing, added mutiple guitar sounds, converted chord sounds from audio files to MIDI, ported data storage from Firebase to CloudKit, changed the basic datatype to include strums and measures, and created a strum editor.

    Strum Editor

    A strum is a repeating pattern of up and down strokes. A dotted line (skip) means move your pick hand up or down without hitting the strings. Each stroke has it's own volume, and can be tweaked ahead or behind in time (offset %). Spread is how much time between each string. For example a spread of zero means play all the strings at once. Longer spreads can sound a little bit like a flamenco strum.


    Lumens: 2020

    A controller for a custom bluetooth light

  • What is it?: A bluetooth app
  • Client: Lumens
  • Tools: Swift, bluetooth, MicroPython, breadboard and microcontroller
  • Status: Private app
  • This client had a very unwieldy development setup. He had the only bluetooth light. In order to run and test the app, I would use TeamViewer to connect to his windows machine which was running a Mac emulator. Then I would either edit source code that way, or send a source file and load it from XCode. The client had to be there to either describe what the light was doing, or point a camera at it.

    Having just recently finished an IoT class (remotely) via Stanford University, I had a microcontroller, some LEDs, a MicroPython script that responded to bluetooth, and a Swift app that sent bluetooth messages. I was fully equipped to make my own bluetooth LED peripheral. This allowed me to succeed where previous developers had hit a wall. I still had to upload my code via TeamViewer and all, but at least I could get it working locally, avoiding hours and hours of cumbersome remote debuggging.

    Lumens
    Fingerprint Imager: 2020

    An image filtering experiment

  • What is it?: An attempt to get useable fingerprint images from the camera
  • Client: James Savoldelli
  • Tools: Swift
  • Status: In the app store, but not ready for prime time
  • I wrote this as an experiment, responding to an ad on Craigslist. I took it as far as Apple's built-in filters would go, but the result was unsatisfactory. There is an open source Python server component that could be hosted and then provide the next step in filtering. This app gets more interest than my other apps, so I may pursue the Python server at a later date.

    Fingerprint Imager
    Senior Bulletin Board: 2019 - present

    A private messaging app for challenged seniors

  • What is it?: A messaging app for seniors with limited tech skills and/or cognitive challenges
  • Client: Me (Eric Ford Consulting)
  • Tools: Swift, CloudKit
  • Status: In the app store $20 (you can request a promo code form me)
  • I wrote this for my 90 mother. She has glaucoma. When she enlarged the text on her computer all kinds of controls fell off the right side of the screen. Due to her cognitive decline, she couldn't deal well with pop-ups and such. Furthermore she actually almost fell victim to some scam artists who convinced her they were working with the FBI.

    The first goal was auto-sizing text to the maximum size that would fit an iPad screen. The app needed to be secure, have no ads, and have the simplest UI possible. Later I added audio messages, pictures, and Youtube clips. There's a sweet domain specific language for CloudKit which is described in more detail under the Writing tab. I still hope to get this app out to all the seniors locked down due to COVID.

    Bulletin Board
    Designing Physical Interactions for Music: July 2020
    Diploma

    An online class in designing electronic musical instrument interfaces

    • What is it?: A microcontroller with an accelerometer and bluetooth sending movement data to an iPhone
    • Client: Side Project
    • Tools: Swift, MicroPython, Microcontroller, Bluetooth
    • Status: Hardware prototype. Software development is ongoing

    Accelerometer
    Gesticulator: 2020

    This hardware shown above can be attached to a violin bow or a drumstick/baton, and then send movement data over bluetooth to an iPhone app. The plan for the iPhone app is to algorithmically generate accompaniment. Parameters such as scale harmony, octave, tempo and such will respond to the incoming motion data. The iPhone also has additional movement and position APIs which will allow for more parameterized control. In the violin example, the iPhone could be atttached to the body of the instrument. I'm planning to put an app (Gesticulator) in the app store that doesn't need the external hardware.

    I am in the process of refactoring Jamulator (below) to include algorithmic accompaniment, and incorporate the motion APIs and bluetooth code. Then I will publish that separately as Gesticulator.


    Jamulator:

    Jamulator: 2018 - present
    • What is it?: An iOS musical instrument app
    • Client: Side Project
    • Tools: Swift, CloudKit
    • Status: In the app store

    Working with Chunks

    Use your fingers to finger-paint notes on a grid. There are three types of grid: percussion, multi (MIDI instruments), and sampler. On the percussion grid each hrorizontal row represents a percussion sound. The vertical columns represent beats. The entire thing is referred to as a chunk, which is important because you can keep adding chunks.

    When you choose the Multi tab from the tab bar at the bottom, you get another grid, for normal instruments, that behaves differently than the percussion grid. These instruments need pitch values for each note, so each horizontal row represents a pitch. The columns are the same as for percussion; they represent rhythmic beats.

    A third grid type is found on the Sampler tab. Here you have the ability to record audio clips using the microphone, than assign them notes, including pitch shifts which are represented again by the horizontal rows. Most vocal sounds will make you laugh. They sound like The Chipmunks, or like Darth Vader. Other recorded sounds could be more serious. Like the sound of a glass clinking, or the pop of a champagne cork. The Sampler is pretty experimental.

    You may notice that there are three play buttons (each with a corresponding "paws" button). The one near the top of the screen is for playing the current chunk. It will loop until the "paws" button is hit, allowing you to add (or erase) notes while it is playing. I will explain the other two when I explain tracks, and arrangements.

    Working with Tracks

    The horizontal area just below the grid is for creating and editing tracks. There are eight very small buttons on the left, followed by an area to the right of that where chunks are sequenced into a track. The small buttons left to right are: Play, and below that Paws, New Chunk (+) and below that Delete Chunk (x), Begin repeat, and below that End Repeat, Increase Repeat Counter (up arrow) and below that Decrease Repeat Counter (down arrow).

    Working with Arrangements

    The row of controls right above the bottom tab bar is used for controlling playback of arrangements. Arrangements include percussion, instruments, and samples.

    Saving and Sharing Jams

    The Share tab allows you to save and load locally to and from your device, add friends and send them a jam (which they can edit and send back), and also to publish jams for all users to see, and maybe add to and republish under a new name (yours stays uneditied).