James Hager

iOS & macOS App Developer

ABOUT

I have been programming since the 1980s. I taught myself BASIC in middle school and learned Fortran in college. I worked with Fortran and Unix extensively in graduate school where I earned a Ph.D. in aerospace engineering with a concentration in computational fluid dynamics. I worked at McDonnell Douglas, and then Boeing, in research and development, where my proudest contribution was solving a stability problem with the DARPA Affordable Rapid Response Missile Demonstrator vehicle that later flew successfully as the Boeing X-51A.

After leaving the corporate world, I started a nature photography business. I photographed landscapes and wildlife, mainly in the US and Africa, and also led photo safaris to Africa.

In 2006, I learned PHP, MySQL, HTML, CSS, and JavaScript in order to develop database-driven websites.

Since 2015, I've been using Swift to develop iOS and macOS apps driven by CoreData.

I have been living full-time in my RV since 2008, and spend the majority of my time off the grid thanks to the solar-electric system I designed and installed.

PROJECTS

ATracks… an iOS and macOS App

Technology:Swift, SwiftUI, UIKit, AppKit, CoreData, CoreLocation, HealthKit, MapKit, XCTest

More Info:GitHub Repo | AvantiApplications.com/ATracks Website

This app records location, elevation, and step data for your outdoor activities. Data is stored locally using CoreData so that you'll always have it. It's also stored in your iCloud account so it can synch with all of your Apple devices. Step data is obtained from the Apple Health app using HealthKit.

It was developed using SwiftUI to facilitate cross-platform development. Several features required bridging to native UIKit and AppKit implementations:

XCTest is used for unit tests.

The iOS app has been available through the Apple App Store since May 2022.

download on the App Store

iOS App Screenshots

atracks tracks atracks track atracks tracks search atracks add track atracks tracks with swipe atracks settings atracks track dark mode

Demo Video

AWeather… an iOS App

Technology (iOS App):Swift, UIKit, CoreData, CoreLocation, MapKit, CryptoKit, XCTest

Technology (RESTful API):PHP, MySQL

More Info:AvantiApplications.com/AWeather Website

This is a weather app for iDevices (iPhones, iPads, and iPods) that lets you manage weather forecasts from NOAA (the National Oceanic and Atmospheric Administration) and the National Weather Service (NWS) while you're on the go and away from the internet. Weather data can be downloaded for multiple locations when you have a net connection and can be viewed later whether you have a net connection or not.

It obtains data from the NWS API (JSON), websites (HTML, XML), and image repositories (JPEG, TIFF).

CoreLocation is used to allow locations to be created from the user’s current location. MapKit is used to: 1) allow locations to be created from tapping on a map, and 2) present radar data.

It uses a RESTful API created using PHP and MySQL to: 1) report errors with the data feed, and 2) obtain weather icon composition data for automatic over-the-air app updates. CryptoKit is used to ensure data integrity.

XCTest is used for data-parsing functions and data-calculation functions unit tests, and API integration tests.

The app has been available through the Apple App Store since April 2016.

download on the App Store

iOS App Screenshots

aweather locations aweather forcast aweather forcast aweather hourly forcast aweather hourly forcast aweather radar loop aweather satellite loop aweather discussion aweather location info aweather location info

API Admin Website Screenshots

Avanti Applications AWeather main Admin page Avanti Applications AWeather icon composition Admin page Avanti Applications AWeather observation icon map Admin page Avanti Applications AWeather weather icon map Admin page

ANotes… an iOS & macOS App

Technology:Swift, UIKit, Cocoa, CoreData, MultipeerConnectivity

I created this notes app so I could sync data between my devices w/o having an internet connection. It supports simple formatting, images, and PDF files. It can import and export notes in Evernote format and a native ANotes format.

It uses a common framework to: 1) store data using CoreData, and 2) sync using MultipeerConnectivity. UIKit is used for the iOS UI and Cocoa is used for the macOS UI.

The sync function uses a vector clock and never loses data — if there's a sync conflict, both sets of data are combined and formatted to indicate that there was a sync conflict.

This a personal app that I use every day.

iOS App Screenshots

anotes home anotes folders anotes notes anotes PDF

macOS App Screenshot

anotes Mac

Contacts… an iOS App

Technology:Swift, UIKit, CoreData

More Info:Bitbucket Repo

I created this contacts app as a code test for a job interview.

It works on iPhones in a single-view mode and on iPads in a master-detail mode, all using the same code.

The app is available through TestFlight, and requires iOS 13 or earlier.

iOS App Screenshots

contacts contact edit contact select phone label search contacts settings about

ACamera… an iOS App

Technology:Swift, UIKit, AVFoundation, CoreMotion, ImageIO, Photos, Speech

More Info:Bitbucket Repo

I created this camera and photo-viewer app to play with the camera system. It can take still images and videos, and you can specify the aspect ratio of the image or video so that the framing during capture matches the desired output. The photos viewer always shows the full image in the thumbnail view instead of being cropped like in the Apple Photos app.

Voice commands can be used to operate the camera.

This a personal app that I stopped using after iPhones had multi-lens cameras.

iOS App Screenshots

acamera still acamera video acamera photo with thumbs acamera photo acamera photo zoomed acamera settings acamera about

Contacts… a website

Technology:JavaScript, NodeJS, Axios, ExpressJS, Sequelize, BcryptJS, PostgreSQL

More Info:GitHub Repo | Website

I created this contacts web app for my Devmountain Foundations capstone project. Each contact can have an arbitrary number of phone numbers, email addresses, and physical addresses. Clicking on the phone data will launch a phone call, clicking on the email data will launch your email app, and clicking on the address data will launch Google maps. Each contact can also have a free-form note area which supports basic HTML for simple formatting. Contacts can be assigned to user-defined groups. It has a responsive design.

Demo Video

Avanti Web House… a website

Technology:PHP, HTML, CSS, JavaScript

More Info:AvantiWebHouse.com Website

This is my web-development website. It was my first responsive design. The Free Quote page sends an email with the content of the form.

Web Screenshots

Avanti Web House home page Avanti Web House about page Avanti Web House process page Avanti Web House portfolio page Avanti Web House quote page

Mile High Wildlife Photo Club… a Website

Technology:PHP, HTML, CSS, JavaScript, MySQL

More Info:MHWPC.org Website

The public area provides information about the club and galleries of winning competition images.

There is a secure area for: 1) members to upload images for the monthly competitions, and 2) admin control.

The website automatically sends meeting and competition email notices to members.

Web Screenshots

Mile High Wildlife Photo Club home page Mile High Wildlife Photo Club gallery page Mile High Wildlife Photo Club image page Mile High Wildlife Photo Club ads page Mile High Wildlife Photo Club ethics page Mile High Wildlife Photo Club member websites page Mile High Wildlife Photo Club blog page Mile High Wildlife Photo Club contact page Mile High Wildlife Photo Club login page Mile High Wildlife Photo Club manage account page Mile High Wildlife Photo Club member directory page Mile High Wildlife Photo Club submit image page Mile High Wildlife Photo Club snacks page Mile High Wildlife Photo Club admin nav menu page

RV Ramblings… a website

Technology:PHP, HTML, CSS, JavaScript, MySQL

More Info:RVRamblings.com Website

The blog system was set up so that I could create new blog entries on my laptop while away from the internet, export the necessary data to an XML file, and import that data into the live site when I had a net connection.

Web Screenshots

RV Ramblings home page RV Ramblings background page RV Ramblings locations page RV Ramblings recipes page RV Ramblings previous blog page RV Ramblings recipe page RV Ramblings login page RV Ramblings home page as admin RV Ramblings recipe page

James Hager Photography… a website

Technology:PHP, HTML, CSS, JavaScript, MySQL

More Info:JamesHagerPhoto.com Website

I created this website to feature my nature-photography work.

The blog system was set up so that I could create new blog entries on my laptop while away from the internet, export the necessary data to an XML file, and import that data into the live site when I had a net connection.

I created the custom slideshow on the home page using JavaScript.

Web Screenshots

James Hager Photography home page James Hager Photography blog page James Hager Photography newsletter page James Hager Photography bio page James Hager Photography login page James Hager Photography admin page

SKILLS

Languages

Swift, JavaScript, PHP, SQL, Objective-C, C#, Python

Apple Frameworks

SwiftUI, UIKit, AppKit, Cocoa, CoreData, XCTest, MessageUI, StoreKit, CoreLocation, MapKit, CryptoKit, HealthKit, MultipeerConnectivity, AVFoundation, CoreMotion, ImageIO, Photos, Speech

JavaScript Frameworks & Libraries

NodeJS, Axios, ExpressJS, Sequelize, BcryptJS

Databases

MySQL, PostgreSQL

Data Formats

JSON, XML

Operating Systems

macOS, Unix

Version Control

Git, GitHub, Bitbucket, Sourcetree

Environments

Xcode, VSCode, Terminal, vi, phpMyAdmin, Apache, Heroku, Rollbar, Postman, SQL Tabs