Jonathan K. Mack
Helicopter pilot, software engineer, academic tutor, aerospace engineer
This page houses my notable and/or potentially useful completed software projects. For each item, the title, programming language, date of completion, and a short description is given. Some projects are also mirrored at my GitHub page. Unless otherwise noted, all projects are licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.
- PHP helper file (PHP, 2014): current as of 2014, the PHP script file used in jonathankmack.com.
- HTML frame practice (HTML, 2006): continued HTML practice from the earliest versions of this site.
- HTML practice (HTML, 2006): one of the early purposes of this site was to practice HTML; this page houses that practice.
- jonathankmack.com (HTML/CSS/PHP), 2006-present): except, of course, for the WordPress-powered blog portion, all design and content of this site is by me, so serves as an ongoing programming project.
Modified Suicide Fantasy Football League
A dynamic, database-driven, modified suicide fantasy football league website, created in 2008, in which players are only penalized instead of being eliminated after choosing a losing team. Uses HTML, CSS, PHP, and MySQL to deliver web pages that allow users to join and participate in the league, and administrators to add/edit/remove users, update game scores, and otherwise administer the site. I designed the backend of the site and wrote/edited/approved 90% of the code. Initial concept, layout, and all other code by the site's coauthor.
- MSFFL code (HTML/CSS/PHP/MySQL, 2008): the HTML, CSS, PHP, and MySQL code used to implement the site.
- MSFFL mirror: a mirror of the (now-defunct) original site.
All databases are normalized, and SQL standards-compliant.
- Logbook (2013): stores and queries pilot flight time-related information, including aircraft and simulator model and registration numbers, examiner/student/instructor information, and individual flight records. Includes queries that determine aircraft time by category and class, mission, model, and year, and aircraft and simulator total times, including night, cross-country, NVG, mountain, instrument, and Pilot In Command time.
- LZ book (2010): stores and reports HEMES (Helicopter Emergency Medical Evacuation Service) LZ (Landing Zone) information, including name, location, description, lighting, communications, obstructions, no-fly zones, approach/departure procedures, and images. Calculates distance and heading from user-defined locations to each LZ. LZs included in each location's report determined by distance from location; additional LZs can be manually added. Displays LZ information in either a letter format (20 records per page, name/location/distance/heading data only), or kneeboard format (two records per page, includes all data). The file includes information on all dedicated LZs to which HealthNet Aeromedical normally flies.
- Medical History (2009): stores and queries medical information, including health care provider information, reasons for visits, and individual appointments. Includes queries to display all information for every appointment, and to determine the start and end date of each reason for visiting a provider.
- Freelancing (2008): tracks tutoring clients, sessions, rates, and subjects. Includes queries for determining taxes resulting from tutoring sessions.
- W&B iOS (2014): determines resulting helicopter total weight and longitudinal center of gravity from user weight and location inputs. Formatted for use in a smartphone. Designed for the EC135T2, but the file's constants are easily editable, so it should work for other EC135 series with minimal changes.
- Crewmember Info (2014): Determines helicopter medical crewmember NVG (Night Vision Goggle) currency (three HNVGOs (Helicopter Night Vision Goggle Operations) within the last 180 days) using raw HNVGO data, as well as whether a crewmember has at least two years HEMES (Helicopter Emergency Medical Evacuation Services) experience and/or at least 50 hours NVG time. Crewmember name, position, and date of hire is entered once, and crewmember name, date of flight, and number of HNVGOs is entered for each set of HNVGOs. The sheet then displays, on one sheet, and for each crewmember, his/her name, position, whether he/she has at least two years HEMS experience and/or at least 50 hours NVG time, the number of HNVGOs within the last 180 days, NVG currency expiration date, and currency status, with non- or nearly-non-current statuses highlighted. An instructions worksheet that fully explains how to use the spreadsheet is also included in the file. Four files are included: two are blank versions ready for use; one includes crewmember weights and whether they’ve been weighed in the last year, and one does not. For each version of the blank file, a corresponding version with sample data entered is also included, to show what the file would look like in use. The files are password-protected to prevent changes to their underlying calculations; the password is in an included text file.
- Flight time and cycle trackers (2013): Post-flight and end-of-day flight time and cycle trackers for the EC130 and EC135 (both P and T series) helicopters, to help ensure consistency among operations and maintenance values for aircraft times and cycles.
- Common Routes (2011): Given starting and ending designators, altitudes, mountainous vs. non-mountainous and local vs. cross-country statuses, and highest obstacle between the pairs, determines the weather minimums at starting and ending locations that satisfy helicopter emergency medical evacuation service requirements. Multiple pairs are displayed in an easy-to-reference format.
MS Computer Science
- Problem Report (Word/PowerPoint, 2008): Test-driven development of a performance-critical database record-tree balancing application. This is the capstone project for my Master's Degree in Computer Science, detailing my design, implementation, and testing of a configurable database manipulation application for a large corporate client. Includes both the Problem Report and slide deck used for the project's presentation.
- Quiz (Java, 2008): culmination of a semester-long project to create an application usable across multiple operating systems. Reads quiz questions and answers from a text file, queries a user for the the number of questions the quiz should have, then administers the quiz, displaying completion time and number and percentage of correct answers at the quiz's conclusion.
- GreenAcres (SQL, 2007): creates a database that might be used by a small farm. pc.sql creates tables that model farms, plots, crops, crop allocation, livestock, equipment, managers, and employees; pd.sql allows for their deletion. ptr.sql creates various triggers used for error-checking during record insertion, and pte.sql tests the preceding.
Computer System Concepts
- Process (C, 2006): uses child processes to alternatively output the date/time, calendar of the current month, or the files in the current directory.
- Maze (C, 2006): reads a binary-defined maze from a text file, then recursively attempts to traverse the maze. Includes a Microsoft executable version of the file (Maze.exe), and sample test maze file (m).
- Justify (C/Java, 2006): left-justifies text from a data file, and prints it to the screen. Includes a Microsoft executable version of the file (Justify.exe).
Introduction to Algorithms
- TreeAlgorithms (Java, 2006): implements breadth- and depth-first search as well as topological sort. Includes a class to test the depth-first search implementation, and sample graph input file.
- RadixSort (Java, 2006): implements radix sort, populates an array of user-given size with random values, sorts that array using one-, two-, and four-digit groupings, then displays the elapsed sorting time for each method.
- CountingSort (Java, 2006): implements both basic and advanced versions of counting sort, populates an array of user-given size with random values, sorts that array using each sorting method, then displays the elapsed sorting time for each sort.
- Sort (Java, 2006): implements merge sort, heapsort, and quicksort, populates an array of user-given size with random values, sorts that array using each sorting method, then displays the elapsed time for each sort.
- Merge Sort (Java, 2006): implements merge sort, populates an array of user-given size with random values, sorts that array using merge sort, then displays the elapsed sorting time.
- CompareSorts (Java, 2006): implements insertion sort and a basic and improved bubble sort, populates an array of user-given size with random values, sorts that array using each sorting method, then displays the elapsed time for each sort.
Introduction to Programming/Data Structures
- SalesTables (Java, 2006): creates a 3D array of randomly-generated sales numbers by month, model, and salesperson, then prints the contents of that array grouped in the previously-noted order.
- BinaryToDecimal (Java, 2006): determines the decimal equivalent of a binary number entered by the user.
- Palindrome (Java, 2006): uses recursion to determine whether a given set of user input is a palindrome.
- TicketSales (Java, 2006): given a text file containing sales data for various levels of stadium seats, computes and prints to a second file total sales values: both grand totals, and by seat type.
- Students (Java, 2006): reads student data (name and homework/test scores) from a file, constructs an array of class Student, calculates a final grade and assigns a letter grade for each student, sorts them by last name, and prints the result.
- Rabbits (Java, 2006): gets from the user a total number of months elapsed, then calculates a resulting number of rabbits starting from one pair, and displays the total as blue (male) or pink (female) circles on a JFrame display.
- Decoder (Java, 2006): reads text from a data file, removes # and space characters, reverses the text, then prints the result.
- Date+seconds (Java, 2006): accepts user input for a date and number of seconds, adds the two, then outputs the resultant date.