Projects

A collection of projects I’ve worked on that I’m particularly proud of, organized by date.


MINIC Compiler

In the Spring of 2020, as part Professor Aaron Keen’s Compiler Construction course at Cal Poly, I developed a compiler written in Swift. It compiles the “mini” language designed by Keen and is called “MINIC”. MINIC can generate 32-bit ARM Assembly instructions and LLVM IR.

The source code and more technical details about the project are available on GitHub here.

Wednesday, June 10, 2020

Podcast App

Throughout my senior of college, I worked on and off on a Podcast app written in pure SwiftUI. I listen to a lot of podcasts so I had some ideas about what would make my perfect podcast player (even if it wouldn’t be a very successful one in the mass market). I was also looking for an excuse to learn SwiftUI and other iOS technologies, like CloudKit and Combine. This was the perfect way to do just that.

I’m pretty happy with how the app turned out- it’s still not in an entirely bug-free and ready-to-release state (and likely never will be), but it’s pretty darn close and is my favorite way to listen to podcasts.

Here’s a quick video demo of the app:

The app is doing a few things differently than what I’ve seen most podcast apps do.

UI Design

The common design for media playing apps on mobile is to hide playback controls in a bottom-sheet and use the main screen of the app for browsing podcasts. This has always frustrated me because (for the way I listen to podcasts), my primary reason to open the app is to interact with those playback controls- not to browse. My design reverses this behavior- putting playback controls front-and-center as the main screen of the app and using the bottom sheet for the podcast library.

Screenshot of the app showing the bottom sheet.

I found this to be really nice in practice as it removes much of the friction I encounter with other podcast apps.

Queue Management

One of the main reasons I wanted to create my own podcast app is I was unable to find one that organized my “up next” queue in the way I wanted.

I like listening to podcasts the way I think most people watch TV. When I start listening to a new show, I want to listen from the first episode and go all the way through. If I’m on episode 7 of a podcast and they release episode 231, I don’t want to be notified about that new episode. Contrary to this, most podcast players prioritize the latest episode of the podcasts you’re subscribed to, regardless of what episode you listened to last.

That being said, I am fully caught up with many of the podcasts I listen to and if those podcasts release a new episode, I do want to be notified and I want those new episodes to go to the top of my queue.

As it turns out, this is essentially how most TV streaming services manage your “Up Next” feed. As you’re binging a show, they’ll keep presenting you with the next episode. But- if a new episode is released for a series you’ve watched in the past- that new episode goes to the top of your feed. This is how I designed the queue in my podcast app to work. It allows you to listen chronologically through old podcasts while keeping up with new podcasts without any additional management or friction.

The one exception to the above thinking is the way I listen to daily news shows. In this case, I always want to be hearing the most recent episode- even if I happened to have missed yesterday’s (or even if I listened to only the first half of it).

So there’s two main tabs in my podcast app’s library: “Up Next” and “Daily”. You can subscribe to any podcast in either feed- if it’s a “Daily” podcast, you’ll only see the latest episodes of that podcast in your feed. If it’s an “Up Next” podcast, you’ll always see the next episode chronologically based on your listening history.

Overall Experience

I had a lot of fun working on this app. There were a lot of interesting UI and programming challenges to work through. Working on an app I have a daily use for was especially rewarding.

Saturday, May 23, 2020

The State of Being Happy

Overview

In early 2019, I formed a theatre company with four other students at Cal Poly: Spork in the Road Theatre Company. Four months later, we opened our first, original production.

The State of Being Happy was really the first show of its kind: a live piece of theatre where the audience made decisions for the characters onstage in real time. This was facilitated by a web application that I wrote, as well a piece of software that interfaced with existing theatre control systems, which enabled fluid lighting and video shifts based off audience decisions.

Screenshot of website used for live voting during the show

My team and I hung 12 individual video screens which were powered by two eGPUs connected to a Mac Mini (that also hosted the polling software for interfacing with the audience).

Computer rendering of the set design, including the 12 video screens.

As producer, I acquired funds for the production by applying for the Cal Poly Connect Grant and running a crowdfunding campaign. I also managed the theatre rental and other production logistics.

I also did the lighting, sound, and projection design for the show.

Credits

See more →
Tuesday, March 12, 2019

Morgan Papers - Website

Beginning in the Fall of 2018, I spent 6 months working with a student team at Cal Poly to build a website for the school’s library. It was designed to better display their existing digital collection of the communication between architect Julia Morgan and media mogul William Hearst. This was a huge learning experience for me that allowed me to further develop my Swift skills as well as learn how to work directly for a client.

Friday, March 1, 2019

Cue Interpreter.app

In early 2019, I developed a Mac app to help me coordinate lighting and sound cues for the productions I worked on. This app now has a small following and is one of the key pieces of software that enabled the show I did a few months later called The State of Being Happy.

Monday, January 14, 2019

Revolt. She Said. Revolt Again.

Overview

In the Fall of 2018, I did the lighting design for a student production of Revolt. She Said. Revolt Again. at California Polytechnic State University in San Luis Obispo, California.

Credits

See more →
Saturday, October 13, 2018