Mike McFadden
App developer in Mountain View, CAWelcome 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!
Mineswifter
Solvable MinesweeperFor 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.
CallTrackingMetrics
Call tracking and contact center platformI 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.
Loading
Simple network activity monitor for macOSLoading 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.
Mupen64Plus AE
Nintendo 64 emulator for Android (user interface)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.
WikiSort
Fast and stable O(n log n) sorting algorithm using O(1) memoryI 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.
iVideo
Prosumer video organizer for macOSiVideo 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.
Traktor Sync
Syncing module for Traktor and Serato DJAlchimie 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.
Nabo TV
Media player using libVLC, GLSL, and OpenALNabo 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.
Bonzai Framework
Cross-platform UI frameworkThis 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.
Win-Like OS X
Command-tab app switcher and Mac keyboard shortcuts for WindowsThis 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.
Pod Pals
Googly-eyed arts and crafts app for kidsI 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.
Model Flattener
Flatten 3D models for printing and reconstructionI 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...
Bubbles
Real-time version of the classic game DaleksFor 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.
el▸dj
Jukebox kiosk with admin backendThe 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.
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.
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.
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.
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!
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.
Sadly, most of my AppleScript games (and my TI-73 calculator games) seem to be long gone.