Mike McFadden

App developer in Mountain View, CA

Introduction

Welcome to my portfolio! I have 23 years of experience in the app development life cycle, including design, programming, testing, maintenance, and even marketing and tech support. One of these days, fingers crossed, I might even figure out what I'm doing!

2020 – 2021

Mineswifter

Solvable Minesweeper
Mineswifter

For Mineswifter I wrote a custom constraint-based Minesweeper solver and used it to automatically skip puzzles that it determines are impossible to solve. The interface looks and feels exactly like a native macOS and iOS app but is actually a single OpenGL surface rendered using a heavily modified version of my Bonzai Framework, which is an object-oriented UI and app framework written in C. The solver is also used to generate interesting daily challenges with a consistent difficulty curve.

2015 – 2019

CallTrackingMetrics

Call tracking and contact center platform
CallTrackingMetrics Android app

I was brought in to help develop a brilliant early product into a fully featured and mature call tracking platform. I updated every page to support localization, dark mode, and mobile layouts, added platform-specific CSS for iOS and Android to make the website look like a native app, leveraged that to create hybrid mobile apps for both platforms, added unified systems for providing version history previews, data exports, filtering, error/warning validations, multi-account views, and duplicate/copy support to all object types, rewrote the softphone interface to look modern and attractive, and greatly improved the core features of the call log, tracking script, call routing, reporting, and automation.

2015

Bonzai Apps

This website

This website took about a month to make, most of which was spent localizing the content (including screenshots) for 32 languages. It's on shared hosting so everything is held together with PHP scripts.

2015

Loading

Simple network activity monitor for macOS
Loading

Loading is a lightweight app that lives in the menubar and shows when apps on your Mac are using your network. I used Hopper Disassembler to reverse engineer the behavior of the private NetworkStatistics framework, which provides callbacks when processes send or receive bytes, then mapped those process IDs to macOS applications for display in the menu. I also had to perform some questionable things in the Carbon event handler to get it to draw into the menu items correctly due to many NSMenu bugs. Released the app as open source on GitHub.

2015

Mupen64Plus AE

Nintendo 64 emulator for Android (user interface)
Mupen64Plus AE

I redesigned the user interface for Mupen64Plus AE, updating it to use the Material Design support library, then added searching and sorting for the game library, implemented a beautiful sidebar with a game preview and actions for managing the selected game, improved the file importer so a simple refresh would synchronize all changes, and made the controller remapping more intuitive by adding a drag and drop interface that supported pinch-resizing and sliding off a button to keep it pressed.

2014

WikiSort

Fast and stable O(n log n) sorting algorithm using O(1) memory
WikiSort

I disagreed with the common assumption that a fast and stable O(n log n) sorting algorithm using O(1) memory wasn't possible, so I read nearly 30 academic papers until one seemed promising – a paper from 2008 called "Ratio-Based Stable In-Place Merging" by Pok-Son Kim and Arne Kutzner. After adapting it to a sort algorithm and applying some optimizations I was able to make it faster than a standard merge sort across a variety of benchmarks. I wrote extensive documentation for the algorithm, provided implementations in C, C++, and Java, contacted the authors for permission to release the implementation into the public domain, created the Wikipedia article for block merge sort, and helped popularize it online.

2003 – 2014

iVideo

Prosumer video organizer for macOS
iVideo

iVideo was my full-time project for over a decade. Over the years I added features such as smart playlists with hierarchical rule groups, multiprocess file importing, video conversion with custom presets, a metadata editor with autocompletion, three view modes (thumbnail, list, and gallery), full undo and redo, drag and drop with spring-loaded folders, batch file renaming, duplicate detection, native full-screen support, Quick Look and Apple Remote support, ad-hoc local-network video sharing, and many more.

2014

Traktor Sync

Syncing module for Traktor and Serato DJ
Traktor Sync

Alchimie LLC needed help reverse-engineering the database formats and metadata tags used by Serato DJ and Traktor, and since I had prior experience with reverse-engineering parts of the iTunesDB format and the pixm resource format for macOS I offered to help. The project was a success and I provided ample documentation and sample code.

2014

Nabo TV

Media player using libVLC, GLSL, and OpenAL
Nabo TV

Nabo TV contracted me to implement a Java-to-C bridge of libVLC, and after some discussion we agreed to expand the job to include a Java (later Scala) media player using OpenGL and GLSL for YUV-to-RGB colorspace conversion, and OpenAL for streaming audio.

2011 – 2013, 2020

Bonzai Framework

Cross-platform UI framework
Bonzai Framework

This was an object-oriented UI and app framework written in C, which required heavy abuse of the GCC preprocessor. At the time it was written for a game called Pod Pals on iOS, but in 2020 I revamped it to produce Mineswifter.

2012

Win-Like OS X

Command-tab app switcher and Mac keyboard shortcuts for Windows
Win-Like OS X

This was an AutoHotKey script that hooked into the Win32 API to provide a command-tab app switcher, command-tilde window switcher, and Mac-style text input for Windows.

2010 – 2011

Pod Pals

Googly-eyed arts and crafts app for kids
Pod Pals (iPhone)

I designed and wrote this app in C and OpenGL. Open your art box and use various craft materials create your very own Pod Pal! I had to develop a number of interesting technologies for this app, such as the ability to render or a pattern or images along a path for yarn and pipe cleaners, even/odd polygon fills for cloth and construction paper, and physically accurate googly eyes that reacted to both the accelerometer and scrolling within the app.

2010

Model Flattener

Flatten 3D models for printing and reconstruction
Model Flattener

I wanted to create a Charming Tails mouse sculpture freehand but lacked the necessary talent to do so, so I instead created reference drawings from the top, side, and front, used them to construct a 3D model in Cheetah3D, and wrote an app that flattened the 3D model into a series of 2D triangle strips. From there it was a simple matter of taping the pieces together. I suppose these days I would just use a 3D printer...

2010

Bubbles

Real-time version of the classic game Daleks
Bubbles

For my first iOS project I decided to remake one of my earlier games from 2003, called Bubbles. The gameplay relied on the accelerometer for movement and multitouch to collapse the spike walls on either side. I also added an online ranking system, a calibration tool for the accelerometer, and 50 unlockable achievements.

2007 – 2009

el▸dj

Jukebox kiosk with admin backend
el▸dj

The HiFi Bar hired me in late 2007 to begin working on the next generation of their el▸dj jukebox software. My version was designed from the ground up to work efficiently with over 50,000 songs, use a custom flicker-free user interface on Windows XP (no easy feat), provide detailed usage reports, and accept money via their RS-232 bill acceptor.

2003 – 2007

College stuff

I spent most of my time in college working on iVideo but I did find time to make these projects, all of which were built from scratch. The earliest was a Pac-man clone with 8 cutscenes, the next one was a cel-shaded cutscene based on Halo 2, the third was a custom 3D game engine with inverse kinematics applied to the character's legs, and the last was a simple baseball demo.

Snowball Run Project 2 Bonzai and Kamikaze (walkaround engine) Bonzai Bases
1999 – 2003

High school stuff

I made a few cool apps during this time, including a graphing calculator, a comic strip creator, a vector grapher (created solely to skip an annoying physics project), and a clone of GameMaker which lets you make your own card-based games with basic scripting support. I also made a number of games within that game maker.

REALcalc X Comic Creator Visual Vectors GameScripter Advance

These two projects involved reverse engineering the pixm and CURS resource formats. They aren't complex formats, granted, but come on I literally just taught myself programming.

Pixmap Viewer Cursor Editor

The following games were written in REALbasic, except for the first one (Yoshi's Puzzle Panel Solver) which was a Java applet. The graphics were hideous, but the games were fun!

Yoshi's Puzzle Panel Solver Bubbles Encompass Bonzai the Penguin Family Bonzai Blocks Traffic Jam Kirby Race! Mario: TFG Mega Man Bonzai Boarding Sky Traveler

These next games were written in AppleScript using a scripting addition called Dialog Director, which at the time only allowed PushButton controls to move. Therefore I just made everything out of buttons or a static grid of images. Yes, that is literally an Ω omega frog button, a ¶ pilcrow golf hole button, and button Tron light cycles with button-based explosions.

Sonic Adventure APS APS Tron (Light cycle game) ChessScripter Santo vs. Los Diablos (programming only) Floatris! Arcade Lite 3 Mini-Golf Hole Designer Mini-Golf Frogger! Seasons MineScripter CompPong! CompTacToe

Sadly, most of my AppleScript games (and my TI-73 calculator games) seem to be long gone.