SoundCloud Degater


SoundCloud Degater is a Python web automation project aimed at making downloading tracks, albums, setlists or artist works from SoundCloud easier. In the summer of 2018, my friend Noah approached me with the idea. He’d been frustrated with how SoundCloud would only allow single-song downloads, and often required unlocking many “gates” (following on social media, sharing, etc) before getting to the high-quality download links.  So, using Selenium ChromeDriver and the SoundCloud api, we were able to get a working prototype.  The user can input a SoundCloud link to the artist, album, track or setlist they wish to download along with their social media creds. The Degater will then use the SoundCloud API to track down all the download links, and start smashing through those gates!


Source Code





AnimaCardBuilder is a project I did at McHacks 2018 with my friend Seng-Chiat Haw. It was my first time writing anything web-based, and so it was really fun to try to get a running start on HTML, CSS and Javascript in under 24 hours. It’s a simple drag-n-drop interface where users can select backgrounds, sprites and overlay animations such as snow to create an animated postcard. We didn’t have time to implement sending to others, but it was still tons of fun to stay up all night working on it!


Source code




ConsoleAdventure is an ASCII style “make your own adventure” game written in Java. The player moves through a maze of rooms, interacting with the monsters and items inside each. Hidden in the maze are 4 colored keys, which when used together can open the final boss room.

The player has the ability to save and load game states, create new mazes. Each maze is randomly generated (with some constraints to make them playable).

I discontinued working on this project in early 2018 as I felt it wasn’t really challenging or stretching my capabilities as it was when I’d started. It was a learning project, and I no longer felt I was learning much from it. I learned a lot about object oriented design, and really solidified my skills in Java.

Source code

Responsive Rain Animation in Java


In the first weeks of the semester of Fall 2017, the workload was light. So, I went looking for an interesting “weekend” project. I wanted to learn more about GUI, and was taking an interest in animation. So, how better to get your feet wet than to make a simple animation?

I wanted to brush up on the skills I’d attained over the summer, and learn how to use some of the libraries that the Java API has to offer. So, with only the very basics of Java programming under my belt, I created this simple program that utilizes the Swing and AWT libraries to display falling raindrops down the window.

The first challenge was learning how to create and manipulate the image. I knew nothing about content panes, containers, or Java’s canvases, but luckily StackExchange came to the rescue..

The next issue was learning how to impliment a runnable for the first time. Again, thanks to the countless resources online, I managed to establish a steady refresh-rate that makes the image come to life.

I quickly found that the logic of the animation was quite simple, so as a challenge to myself, I made the density of drops on the screen proportional to the size of a resizable window, using the ArrayList class, since (at the time) it was the most sophisticated data structure I knew about.

Lastly, I learned how to export the project to an executable jar file, which I thought was super cool! Just having the little icon on the desktop to double click was exciting to see for the first time.

Click here for the link to the GitHub repository and the source code.

Click here for a step-by-step, in-depth tutorial on how to build your own!


My First Java Project


In the summer of 2017, I decided it was time to teach myself basic computer programming. So, after reading Allen Downey’s book, “Think Java: How to Think Like a Computer Scientist” I felt somewhat comfortable with the fundamentals of OOP and the default Java library.

The same night that I finished the book and all it’s exercises, I was playing Magic: the Gathering with my brother. As we were playing he came up with an interesting question.. How many lands optimizes your chances of recieving 4 or more lands within the first 5 rounds of play? For those unfamiliar, Magic is a trading card game that began in the mid 90’s in which two or more players use “lands” to cast spells at eachother.

So I got to work.. and wrote a program that calculated the optimal number of “lands” in a 60 card deck. Using what I learned about the basics of algorithms and OOP, I was able to come up with a definitive answer: 17. This number optimizes the odds (24% to be exact) of drawing 4 “land” cards within the first 5 turns of play. This answer confirmed what is the generally accepted number amongst high level players.

Click here for the link to the GitHub repository and the source code.