Take-home qualification tasks

We know that working on existing codebases can be daunting, and you might end up working on a new project anyway, so this year we have some alternative qualification tasks (we'll add more soon, so come back).

You can still opt for the standard ones (such as fixing issues on GitHub) --- these are just alternatives that are available.


Interprocess communication (low-level)

Language: Modern C (not C++). Must work in: Linux

Create a program, in C, that utilizes queues and memory-based interprocess communication.

We're writing a system that encodes video using hardware encoders, specifically nVidia GPUs. These consumer-grade GPUs are limited to two simultaneous encode sessions. However they can encode (really) fast, easily at 300 frames per seconds.

We want to overcome this limitation by distributing the load in software. Suppose you have 10 cameras each of them providing a never ending stream of video at 30 frames per second. The job is to come up with a good plan (and proof of concept) that maximizes GPU usage.

Here's a few things that will help you:


Meetup auto-RVSP

Language: Any Must work in: Linux

This task is relatively simple (in theory), but it will help us assess your code organization abilities.

Write a program for meetup.com that sends an auto-RVSP to specific groups. For example, suppose you are a member of 7 different Meetup groups, some of which have very popular events that fill up quickly. You want to sign up for them as fast as possible to ensure that you get a spot.

Your program needs take care of authentication, searching for events in configured groups (not all), and automatically signing up on the user's behalf in a timely manner. Usage of existing Meetup client libraries is permitted.

It's OK for your program to be a simple command-line tool that needs to be run from cron once an hour or something like that.


Plan for migrating our DokuWiki website to fastpages

Language: Any Must work in: Linux (whatever migration system you come up with)

Our website currently uses an easy-to-use wiki solution called DokuWiki, but the aesthetics could be better.

There's a new platform that uses GitHub Pages for hosting and pull requests for content management. It seems to integrate well with things we care about, e.g. YouTube embeds.

Can you devise a good plan for migrating from DokuWiki to fastpages?


Export data from MyFitnessPal to Grafana

Language: Any Must work in: Linux (anything server side)

MyFitnessPal is a mobile app used to track food & energy intake, exercise, and more. It supports CSV data export (e.g. through email) to facilitate archival, but this style is a bit antiquated for manual viewing.

A simple website that accepts CSV exports and renders nice visual representations using Grafana would be much better for users. This should be feasible to complete in a few days since all of the major components already exist.


VoxelSpace in Flutter

Language: Flutter Must work in: Android, iOS (OK if you can just test in one, but we will test in both and if it doesn't work we'll send you the debug info so you can fix it).

A couple decade ago a superfun helicopter game took the gamers by storm. Well, that's a bit hyperbolic but it was really fun and a lot of people spent thousands of hours flying that helicopter.

What made it revolutionary was the technique used to draw the terrain. Of course that's obsolete by today's standards, but it still looks quite good, considering it's age.

Your job is to write a simple Flutter program that does the same thing. And no, you don't have to research VoxelSpace by yourself - there's source code already, but not in Flutter.

Write a Flutter program that does this. And to make it more interesting, edit the terrain map so the text "GSoC 2020, CCExtractor Development" can be read when flying.


Beacon in Flutter

Language: Flutter Must work in: Android, iOS (OK if you can just test in one, but we will test in both and if it doesn't work we'll send you the debug info so you can fix it).

Write a Flutter app that is able to share your location with anyone who has a specific passkey. For example, suppose you are going to start a hike with friends and you want them to know your location but only for the next 3 hours. You can do that in many ways, but let's say one is by letting people look up a passkey somewhere (to simplify things consider that it's OK to look up a list of passkeys in a static file hosted in github, so you don't need to setup a database).

Your app then will have two modes of operation: Someone is sharing their location (that means "carrying the beacon") and everybody else can see that location (they are "following the beacon").


Camera with intelligent autozoom in Flutter

Language: Flutter Must work in: Android, iOS (OK if you can just test in one, but we will test in both and if it doesn't work we'll send you the debug info so you can fix it).

Write a Flutter app that lets you take pictures of anything and autozooms to the right size to pick up an object that is in view. For example: Take a collection of dogs, or cats (there are probably pretrained models for this, it's up to you to look them up). If your app is used to take a picture of a dog, then the zoom should be automatically adjusted to take a picture of the dog in foreground, even if the dog is a bit far.

It must be fast or the dog will move!