Change My Mind Android, Java

"Change My Mind" (CMM) is an app that matches two individuals with opposing views on a certain topic or idea and engages them in an open-ended discussion. Participants choose a topic and subject they would like to discuss, their stance on the chosen topic (for, against or neutral) and optional search parameters ("people my age" or "near my location") which will then be used by CMM to match participants together for discourse.

CMM was developed on the Firebase platform using its database engine, authentication systems, notification service and its Node.js cloud computing platform for custom-developed server-side logic. Current in-development features include the facilitation of Google's cloud machine learning platform for discussion moderation and participant matchmaking.

The app was presented at Commonwealth Bank's Sydney headquarters alongside Android applications developed by other talented undergraduate students.

Click to view in a larger size

iOS File Manager Swift, C

With the limitations of the iOS platform, storing, organising, viewing and modifying media and documents is impossible without a file manager. iOS-FM was and is developing to be a user-friendly file manager that resembles the functionality of Finder on macOS X. While still in development, many of the basic features have been implemented including copying, moving, deletion and viewing of locally stored files. Other nifty features include 3d-touch support for quickly previewing files for devices such as the iPhone 6S and multi-file sharing.

At the moment, the project has not been published. After several key features have been implemented and thoroughly tested I hope to release it sometime before the end of Q4 2017.

Click to view in a larger size

NSW Transport Map Plot Data Analysis & Visualisation

Using publicly available NSW Transport data, over 3,000,000 co-ordinates were programatically plotted onto a virtual canvas to generate this 4K map of New South Wales. Using Java and an SQLite library, the map data was also converted into a relational database that was then imported and used in R-Studio for further data analysis.

By modifying my code and with the help of ffmpeg, a 6-minute animated 480p video was produced, showing every single coordinate plot as the program stepped through it in real-time.

Using statistical mathematics functions, millions of latitude and longitude tuple-pairs are checked to find both the maximum and minimum values, sorted and are then passed onto a flexible "data worker" class that can quickly fetch and query points to be used by the plotting algorithm. All latitude and longitude tuples are then converted to a 2-dimensional xy-space by normalising their values and then mapped onto the final 3840x2160 image buffer.

A modified version of the program exploits the power of modern computing by splitting the workload onto multiple threads. This provides a significant speed up for the program and allows for a higher quality output to be produced at a fraction of the time it'd usually take without parallelism.

IPA Installer Objective-C, C, JS

An app developed in late 2012, IPA Installer was a tool I used to simplify my development pipeline by completely eliminating the long-winded SSH prompts and terminal commands required to install an IPA package onto my device. Debugging and constantly having to retype the same command to uninstall, install and then reload SB cache led to the development of the one-tap installer.

IPA Installer was programmed primarily in Objective-C and uses a combination of HTML, CSS and JS for the UI. Since it also needs to communicate to the underlying system, a custom web bridge was created so the front-end UI could easily send and receive messages much like any C app. This was accomplished by programming a custom JS API that would fork and pipe a Unix binary via the backend (which was programmed in Objective-C and C), collecting its console output as a C-String and sending it back to the frontend as a JS String coupled inside of a JSON Object.

Some notable achievements and features:

  • All frontend files are AES-256 encrypted
  • The JS API includes tools to find all installed apps, execute Unix commands, register callbacks and read and write to the file system.
  • Thread separation was programmed in Objective-C while the forking and piping of the file descriptors were done in pure C.
  • A download manager and web browser can be invoked at anytime through the JS API.
  • Originally a ticket server was used where a license had to be generated before being granted access to the app.
Find out more