Code jams encapsulate the perfect environment for improving your programming skills, connecting and working with talented developers while adding a healthy dose of competition that pushes you to give your best.
Despite the clear benefits, no one can deny that code jams can be challenging and sometimes even frustrating.
Getting to know your team, agreeing on a project idea, identifying each team member's unique skills, and figuring out how to put it all together in a practical, executable plan takes effort and excellent communication.
That's why when Mariya, host and owner of the YouTube channel, Python Simplified, announced its audio and sound Code Jam, we at Apify knew we had to support this initiative. We were excited to see what great projects would come out of the creative minds of the talented programmers in the Python Simplified community. And let me tell you, we were not disappointed.
Together, they would build the project that would eventually be crowned the winner of the jam, VAPORWAVE IT (see on GitHub), a web-based audio processing application that enables the user to manipulate an audio sample by applying a lowpass filter or changing the speed of audio playback, to make it sound like Vaporwave music.
From the beginning, it became clear that the team would get along well. Working together with a new team is rarely easy. It takes perseverance and patience to find a strategy that works well for your team and will accomplish your goals.
However, despite never having met each other before, coming from different backgrounds, and having divergent perspectives, there were two key principles that all team members agreed to adhere to, which allowed them to maintain team cohesion and harmony throughout the competition: open communication and respect.
Taking part of the summer jam was one of the best choices I've made for programming. I was paired with an amazing team, and I learned more about team cohesion, working with others remotely, and putting together a project.
Steven Johnston
These principles enabled the team to freely share their ideas and proactively encourage their colleagues to voice their opinions and offer constructive feedback without the fear of being disrespected. Additionally, having open discussions ensured that the team was always on the same page and working towards a common goal, which was a crucial component of The Crown's success.
While communication is important, we all know that a code jam’s ultimate objective is getting your hands dirty with code and building stuff! And, again, The Crowns didn't disappoint.
Building VAPORWAVE IT
It took some time, lots of discussions, and brainstorming to figure out what the team would work on. The final agreed proposal for the project was to build a web application that would take a YouTube link as input, fetch the audio from YouTube, and allow the user to dynamically adjust audio processing effects on the audio stream, such as equalization (EQ), playback speed, reverb, phasing, and delay.
Naturally, after a project moves from the planning to the implementation phase, many obstacles and problems that were previously hidden start to arise. At this point, it is essential to identify what features should make the application's MVP, how much development time and knowledge would be required to implement them, and, finally, distribute the responsibilities amongst the team.
Following this premise, The Crowns agreed that for VAPORWAVE IT to succeed, they would need to figure out how to develop and combine three essential pieces of the project's plan into a final product: core functionality (enabling users to affect the audio dynamically), distribution (making the application available to the user), and presentation (an intuitive UI for users to interact with).
Core functionality
Prior to committing to becoming a programmer and mastering the Python language, Steven Schaefer was immersed in the music industry. Their newly acquired programming skills only intensified their love for music, and this project was the perfect opportunity to combine Steven's two passions: coding and music. Taking advantage of their prior knowledge of digital audio, Steven volunteered to write the module that would enable the audio's actual processing.
Steven's approach to the task was to start by doing some preliminary research to fully understand the complexity of the module they were set to create. Their research led them to become acquainted with the field of Digital Signal Processing (DSP), which they promptly started learning more about with the help of the textbook, The Scientist and Engineer's Guide to Digital Signal Processing.
My code jam experience can be summarized in a quote from Abraham Lincolm, “Give me six hours to chop down a tree and I will spend the first four sharpening the axe.”
It took me a long time to get through the DSP material, but I believe it paid off. Understanding the methods that have been developed and refined to accomplish these tasks enabled me to write a module that met our requirements.
Steven Schaefer
Steven spent considerable time studying the field before actually jumping into coding the module. They began to worry that they wouldn't be able to finish building the task before the code jam's deadline. However, their effort paid off immensely.
Often in software development, knowing what to build is as important as having the skills to code the application or feature, and it can be the defining factor in a project's success.
Distribution
In yet another example of effectively distributing tasks accordingly to its members' unique skills, The Crowns had just the right person to take on the task of making the application available to the users. Steve Coulter runs a cloud hosting service and was ready to employ their expertise to ensure the project was properly hosted and distributed.
More than simply enabling users to access the application, the distribution side of the project had to ensure a seamless connection between the client and the server, so users could manipulate the application's controls and hear the changes made to the audio sample in real time.
Depending on the initial audio file size, it could take a long time for the data to be processed and received by the client. Additionally, the audio is processed on the server, and the user has control over the parameters of that processing, making it essential for the users to hear how the parameter changes affect the audio in real time.
To accommodate these needs, Steve C. found a way to simulate real-time streaming of the processed data by reading the audio file in "byte slices" or "chunks." This significantly increased the efficacy of the data processing workflow and contributed to achieving the functionality they were looking for. However, Steve's work wasn't over yet, as the application was still plagued by a couple of the developer's worst enemies: the dreaded bugs 🐞
When transmitting the processed data, the client would return an error: unable to decode audio data. Not only that, but even when the audio was decoded, it was choppy.
Puzzled by the exact cause of these bugs, Steve set out to solve the issues. After two days of intense debugging and research, Steve was able to understand the minutiae behind how the browser was decoding the audio, identify the source of the bugs and eventually fix them to provide a smooth experience to VAPORWAVE IT users.
Presentation
The final task of making the application's UI look neat and intuitive to the user would fall to Chalon Hutson.
While balancing their full-time job as a tech lead at a Python Programming Bootcamp (the same one they were once a student at) with putting their front-end skills to work on building a suitable UI for VAPORWAVE IT, Chalon was thoroughly enjoying their code jam experience.
Not unlike the other team members, Chalon also had a unique background before turning to coding. Having spent almost seven years working in politics, as well as gathering some experience using a variety of creative software to provide more learning opportunities for their students, Chalon joined the code jam to connect with other developers around the country and use their skills to contribute to the project.
Their contribution to developing the application's front end was the final piece of the perfect puzzle that resulted in the project that took home the title of the champion of Python Simplified's Audio and Sound Code Jam.
Apify ❤️ Python Simplified community
Having the opportunity to collaborate with Mariya and Python Simplified - a channel that produces high-quality, free, educative content for developers - was truly an incredible experience for us at Apify. Supporting developers is part of Apify's DNA, be it through our platform, open-source libraries, or collaborations like this one.
Even better was the opportunity to connect with the amazing developers of The Crowns, the champions of the code jam. The Crowns' success in the code jam is a tale of their effective teamwork, open communication, and efficient use of their unique skills, which, ultimately, resulted in the awesome project, VAPORWAVE IT.
Even though the project won the competition, the project is far from complete. The team is currently working on improving the site and implementing new features, so be sure to check it out again in the future to see the improvements!
With this final note, Apify congratulates the Python Simplified Code Jam champions, Steven Schaefer, Steve Coulter, Steven Johnston, and Chalon Hutson. We are excited to see all the fantastic things you will continue to build in the future!