Code Jams

Every three months or so, we aim to host a server-wide code jam, suitable for all members of the server. In these, we announce a theme and date in advance, and users may sign up via a link provided in the announcements channel on the server. Once the sign-up period is over, users are grouped into teams. On the day of the code jam, we announce a task - each team will then work on a solution to this task.

Once the code jam is over, our staff team will review and test each submission. Once that's done, a winner will be decided!

If you'd like to join one of our code jams, feel free to ask a member of staff about the next one.

Sponsors


 Wiki  Rules & Guidelines  Git Primer

Code Jam 2: Flask API  Teams

Start: Jun 25 2018, 00:00 UTC

End: Jul 02 2018, 00:00 UTC

Participants: 42

Champions: Defiant Sails

Theme: Mythology

Overview

The theme of the next code jam will be announced when the jam begins.

  • It will run between the 25th of June and the 1st of July.

  • Each team will consist of 3 developers.

  • You will be making a RESTful API using the Flask web framework.

  • You will be able to name a single user you would prefer to have on your team.

We are proud to announce that this code jam, and all future code jams, will be officially sponsored by JetBrains. The grand prize will be a 1 year subscription to PyCharm Pro for all 3 members of the winning team.

If you wish to participate in the code jam, you must complete a qualifier task first. It is a trivial task that requires only a few lines of code, but it must be done to demonstrate that you possess the bare minimum of Python knowledge required to participate in the jam.

The qualifier can be found at the code-jam-2 repo on our GitLab.

If you're not sure what a RESTful API is, watch this YouTube video.


Task Description

The theme for this code jam will be mythology. That means you're going to be creating a RESTful API in Flask with a mythology theme.

For example, you might create the The Mimír API, an API used to look up information about norse gods and godesses.

{
    "name": "Kvasir",
    "parents": "Born from the saliva of the Æsir and the Vanir",
    "type": "A god of wisdom and knowledge"
}

The API must respond with json data, but this is not limited to text. It could respond with bytedata, with a URL to an image, a video or some audio, or with any other form of data you deem interesting.

The API should accept at least a GET or a POST request with JSON data. You are allowed to use any third party libraries you want.

Remember, creativity counts. Try to have fun with it. We're not necessarily looking for dead serious solutions only, and it's okay if your solution is only tangentially related to the theme, so long as there's a relationship of some sort.


Results

The winner of the second code jam is Defiant Sails, with Momo, WrongEnd, and SharpBit! Congratulations!

They've written a phenomenal API with OAuth authentication, a multiplayer RPG, and a feature to procedurally generate a random mythologically themed story. This story can be played as a video, where they use Text-To-Speech to read the story out loud while epic music plays in the background. The music is different for each play, and the audio is visualized in a video.

The code quality is exceptionally good, and the project uses a NoSQL database where they have even implemented database migrations from scratch. The project is really well documented in their GitLab repo wiki.

The team will receive the grand prize of 12-month PyCharm Pro licenses, and will also receive the honorary Code Jam Champions role.


In second place with another really excellent submission, we have the team Rude Interests, consisting of Lord Bisk, Runew0lf and Nix. They've got procedurally generated rune images, procedural mythologies with gods with procedural relationships, descriptions, genders, and names. A super fun idea which nearly ended up taking the first place.


In third place, we have Overconfident Ideas, with Martmists, Casterly and eivl. They did relationship trees with a number of different visualization options, a fantastic myth lookup feature to find a great deal of details about a mythological figure, a mythology trivia feature, and a markov chain string generator. It also had a very comprehensive framework and it was clear that a great deal of work had gone into it.

Code Jam 1: Snakes on a Bot

Start: Mar 23 2018, 12:00 UTC

End: Mar 25 2018, 12:00 UTC

Theme: Snakes

Overview

The theme of the code jam was snakes. Participants were assigned a random partner, and used Git to submit code to us. Staff members reviewed the code both during and after the code jam, and provided suggestions for changes and improvements. The best submissions were implemented into our community bot. Winners recieved a special Code Jam Champion title.


Task description

Here is the original task description which was posted on the code-jam-1 GitHub repo:

"For this code jam, your task will be to create a Snake cog for a Discord.py rewrite bot. You can find the documentation for Discord.py rewrite here. The best cog commands will be added to the official Python Discord bot and made available to everyone on the server. The overall best cog will be awarded custom Code Jam Champion roles, but the best commands from the teams who did not win will also be added to our bot, and any users who write something that ends up in the bot will be awarded Contributor roles on the server.

Your initial task will be to write get_snek(). This is the minimum requirement for this contest, and everyone must do it. get_snek() should be a method that goes online and fetches information about a snake. If you run it without providing an argument, it should fetch information about a random snake, including the name of the snake, a picture of the snake, and various information about it. Is it venomous? Where can it be found? What information you choose to get is up to you.

get_snek() should also take an optional argument name, which should be a string that represents the name of a snake. For example, the call get_snek('cobra') should get information about a cobra. name should be case insensitive.

If get_snek('Python') is called, the method should instead return information about the programming language, but making sure to return the same type of information as for all the other snakes. Fill in this information in any way you want, try to have some fun with it.

Once you have finished get_snek(), you should make at least two bot commands. The first command, get(), should simply call get_snek() with whatever arguments the user provided, and then make a nice embed that it returns to Discord. For example, if the user in the Discord channel says bot.snakes.get('anaconda'), the bot should post an embed that shows a picture of an anaconda and some information about the snake.

The second command is entirely up to you. You can choose to use get_snek for this command as well, or you can come up with something entirely different. The only requirement is that it is snake related in some way or other. Here is your chance to be creative. It is these commands that will win or lose you this code jam. The best original ideas for these commands will walk away with the victory."


Result

The Winning Team: Team 23, kel and Momo!

These two experts worked together to create what can only be described as a flawless submission. The staff were unable to find a single thing to complain about in the 1100 lines that were committed. Here are some of the features they created for their snake cog:

  • A fully functional implementation of Snakes and Ladders

  • A feature that uses perlin noise to draw a random snake, and posts the picture in the chat.

  • Hatch your very own baby snake!

  • Snakify your post history with a Markov chain

  • Rattlesnake sound effects in the voice channels

These features, as well as the best ones from the other teams, have been implemented into our community bot. Use bot.snakes() to play with it.