I took part in my first Hackathon, and we reached the finals!
A friend told me about junction, and said it would be cool if we could participate together. I was mostly interested to learn, and have fun. Little did I know that Junction was a global event, and people actually flew in from abroad just to attend.
The event had three tracks:
- AI for Humanity
- API Hack
- Smart Media
AI for Humanity, a Chicken and Egg Problem
At first, we wanted to do the AI for Humanity track, where we were going to make a music recommender interface for old people. We thought about creating a radio, a product senior citizens were familiar with, that recorded playback times and skips to train a recommender algorithm for playing music. But we ran into the classic problem of having no training data to begin with, so we had to pivot.
We took a step back and considered our options. Our team had one full stack coder who also did ML, a hardware and electrical systems expert who also did ML, a marketing lead, and a graphics developer who was willing to learn web frameworks like React, Sanic and Node.
Smart Media and Cloudinary's API
We figured that we would be better of doing something web related, so we approached the Cloudinary team and asked them a few questions about their platform, what it could do and what tools they were looking for. We found that while there were abundant tools for video transformations, they could benefit a lot from some audio transformations on the API. Cloudinary's API was really useful in making quick transformations and file conversions through url manipulations, and dynamic response times for retrieving data.
Introducing Cloud DSP
We built and app that had five main functions that were written using Python's library, Librosa:
- Beat Tracking
- Frequency Estimation
- Pitch Bending
- Tempo warping
- Source Separation ( taking out the beat in an audio track )
Writing an app in 36 hours
We made two repositories, one written in Python, that made API calls to the main app that was written in React and Node.
1. Python Back End for DSP transformations : https://github.com/nikkokun/cloud-dsp-transformer
2. Node and React Front End App: https://github.com/nikkokun/cloud-dsp-manager
I worked on the Python side on things where we wrote the back end in Sanic. We chose Sanic over Flask or Django because of its ease of use and scalability. I had to learn a lot of this on the fly, but had fun getting it to work and being able to return the JSON file to the POST and GET requests from the client app.
My friend Nikko worked on the entire back end in Node where he managed client uploads, downloads, transformation requests, url retrieval and responsive display in real time from Cloudinary's API. Watching him work made me understand exactly how much of web development I didn't understand and exactly what it was that I needed to learn. We made the app in 36 hours, and even deployed it to a server for testing and demonstration.
What I learned
- Working in teams is hard, and I can get frustrated easily in high pressure situations
- I find that there are more ways than one to solve a problem, and what is common practice doesn't always have to be the only way
- I need to learn a lot and keep learning. Reading the docs can help, but watching tutorials is long and time consuming.
- Making a REST API is hard, and Postman is a great app.
- Front End frameworks are a lot more complex than I thought they were
- HACKING IS FUN!