Ideas Page for Google Summer of Code 2021
We are thrilled to share our carefully curated project ideas for this year’s Google Summer of Code.
Idea Overview
- Awesome Demo Game Project
- Pocket Code for Android: Support for Particle Physics in Catrobat
- Pocket Code for Android: Search functionality for bricks in Pocket Code
- Pocket Code for Android: HMS API Machine Learning and AI support
- Pocket Code for Android: Room integration
- Pocket Code for Android: Merge Feature
- Pocket Code for Android: Refactoring and rewriting production code and tests to Kotlin
- Pocket Paint for Android: Hide the top and bottom bars, and make the drawing surface full screen by default
- Pocket Paint for Android: Refactoring tests and functionality to Kotlin
- Pocket Paint for Android: Erase background tool (make it transparent more easily)
- Pocket Paint for Android: Add a feature that allows a user to see a zoomed in view of the area beneath his finger while drawing
- Pocket Paint for Android: Additional brush options
- Pocket Code for iOS: Support for Catrobat Language version 0.994 - 0.99992
- Unified Catrobat Language Brick Syntax
- Embroidery Robot Programming
- Your own Project Ideas
General Information
These ideas are just some topics we came up with, where currently nobody is working on. However, Catrobat is a project with a wide range of possibilities and we’re aware of our blindspots: So let’s live the spirit of Open Source and come up with improvements (e.g. new features, extensions,…) that are related to the project and you’re interested in. We do have many senior-contributors who would be happy to mentor such a project. Don’t be shy and check out the last point on the list: Your idea!
General Knowledge Prerequisites for all Projects
- Knowledge in the usage of git
- Basic knowledge in the concepts of software testing and test-driven development
- Basic knowledge in app development (for Android and iOS projects)
- Java, JUnit, Robotium and Espresso for Android development
- Swift and Objective C for iOS development
- Also please check that you have the proper hardware for the development (e.g. a Android/iOS smartphone for testing, Mac for iOS development)
Your Application
Please find the mandatory template for the application and additional information on this shared Google Doc.
Project Descriptions
Awesome Demo Game Project
Brief explanation and expected results:
Spend the whole GSoC time developing and designing one tutorial game for coding using the Luna&Cat IDE app, i.e., programming in the Catrobat visual programming language. The game must be playable both on a phone as well as when cast from the phone to a smart TV.
The game should be strongly inspired by a hugely popular recent 2D game, your own suggestions of popular games are highly welcome. You may also get inspiration by search for lists of the best OR popular 2d games.
If you have your own original idea about a game, please feel free to suggest it. Note, however, that the focus in GSoC should be on coding, not story design. Also, reusing existing already successful ideas will tremendously increase the probability that the game will be popular, and allow you to get much further in its implementation. Also note that the game will be published under Catrobat’s licenses as described in detail on Licenses and that the game will thus become part of the Catrobat FLOSS project’s source code. Thus, all artwork, sounds, character names etc must be compatible with our licenses, i.e., freely publishable under our licenses, the AGPL version 3 and CC BY-SA 4.0, or under a compatible, possibly even freer license such as CC0.
The artwork, sound effects, and background music must also be of high quality and high resolution, but do not have to be necessarily have been created originally by yourself, as long as the rights are compatible with our licenses.
The development of the game may possibly also be a community effort, but that’s up to you. This means that if you want, you may involve a team of people who want to work together with you on the game, either coding extensions or additional levels, contributing media assets, testing, creating promotion videos of it, etc. How you put together your team is entirely up to you, and you alone are responsible for the recruitment of and coordination within your team. Some Catrobat games have been created by large crowds. You and your team working together on the game would be perfectly fine and welcome, as long as you by yourself spend the full GSoC period working 100% on it too, and you do the main part of the coding, since Google wants GSoC projects to basically be single developer coding subprojects. However, most FLOSS projects are community efforts, and collaboration has always been one of the tenets of such projects. Also note that there will be no T-Shirts etc from Google for the other members of your team, so all contributions by other team members must be motivated intrinsically, or by additional means left to your discretion.
In summary, this GSoC project’s game should become an incredibly awesome & amazing demo game that showcases what kind of mind boggling games can be created with Pocket Code.
In your GSoC application, please add a link to a proof of concept for such a game in landscape mode (because it should be playable when cast to a TV screen) that you have created on your phone using Pocket Code. Also describe shortly your ideas for the story of the game you want to develop in your GSoC project.
Boyakasha!
Pocket Code for Android: Support for Particle Physics in Catrobat
The current version of Pocket Code doesn’t have support for particle physics. This project proposes to implement a particles system (using libGDX particles library) which would allow the addition of smoke, fire, and other such particle effects in the games! The visibility, position, type, and other such properties of the particles could be controlled using the new “particles” bricks that will be added as part of the project!
Pocket Code for Android: Search functionality for bricks in Pocket Code
In the current version of Pocket Code, users have to manually click and scroll through all brick categories and bricks to find and add the desired brick to their project. Therefore a brick search functionality will be implemented which enables the user to search through all available bricks in all brick categories. The matching bricks will be shown to the user and can be added to the project. This will provide a more improved programming flow for users of all skill groups. If there’s time, a similar search & complete feature can also be added for reporter functions and sensors, and even variable or look names in the formula editor.
Pocket Code for Android: HMS API Machine Learning and AI support
We need to support the HMS APIs where other APIs are not available. This concerns all computer vision (pose, face, hand, image, OCR etc), speech, and general machine learning APIs. Additionally, it might also be of interest for other services such as geolocation and/or augmented reality APIs.
Pocket Code for Android: Room integration
Since the migration to Android Architecture Components has already started, the goal of this project is to integrate Room instead of SQLiteDatabase as a better approach for data persistence. This idea involves the following challenges:
- Initially, all the API responses need to be cached in order to reduce the number of connections to the server (especially Featured Projects and the Categories displayed on the main screen)
- To continue, the structure of the projects (JSON instead of XML) needs to be improved
- Showing and caching the user projects (local/on-server-stored projects) in the Projects screen which will give the user the control to modify/delete his projects from one place
- Kotlin will be the only used language – no more Java!
Pocket Code for Android: Merge Feature
Design and develop a feature for the Android version of Pocket Code that allows to merge two user projects into one, without duplicating scripts, objects, sounds etc that already exist in both projects. Similar to git merge, but for Catrobat user projects. Repeatedly merging the same project into itself should not increase the project’s size. Think about how to handle different screen resolutions, orientations, etc, or how to treat conflicting variable names, correctly update remix graph data, etc.
Pocket Code for Android: Refactoring and rewriting production code and tests to Kotlin
The current code base of Pocket Code is 8.8% in Kotlin and rest in Java. This project proposes to refactor and rewrite most of production code and tests to Kotlin, implementing all the modern features designed specifically to streamline mobile development resulting in safer and more maintainable code for future development.
Pocket Paint for Android: Hide the top and bottom bars, and make the drawing surface full screen by default
Currently Menus and Options are shown by default in top and bottom bars, and the default zoom is smaller than the screen’s drawing surface, resulting in lost space on the sides of the image. The goal is to have the already existing full screen functionality active by default and find an intuitive way to show menus only by fading in and out depending on whether the finger leaves or touches the screen.
Pocket Paint for Android: Refactoring tests and functionality to Kotlin
Several parts of the project have already been refactored to use Kotlin, but there are still large parts that should be refactored, and reworked to use Kotlin instead of Java.
Pocket Paint for Android: Erase background tool (make it transparent more easily)
The goal of this idea is to create a new tool that allows the user to select an area and erase the parts of the drawing surface outside the area, see similar tools in many picture manipulation programs.
Pocket Paint for Android: Add a feature that allows a user to see a zoomed in view of the area beneath his finger while drawing
Currently Pocket Paint only has the basic brush and the spray can. The goal is to add additional brush options such as a watercolor brush, rubbing around existing color. Also, when drawing a little bit faster, the drawing line should be slightly smoothed. When drawing slowly, it should however be possible to draw without smoothing of the lines. Also, add an option in the brush settings that allows to turn off (and on again) antialiasing, independently of the width of the brush. Currently, antialiasing is only turned off if the width is set to 1.
Pocket Paint for Android: Additional brush options
Currently Paintroid only has the basic brush and the spray can. The goal is to add additional brush options such as a watercolor brush, rubbing around existing color. Also, when drawing a little bit faster, the drawing line should be slightly smoothed. When drawing slowly, it should however be possible to draw without smoothing of the lines. Also, add an option in the brush settings that allows to turn off (and on again) antialiasing, independently of the width of the brush. Currently, antialiasing is only turned off if the width is set to 1.
Pocket Code for iOS: Support for Catrobat Language version 0.994 - 0.99992
The iOS version of Pocket Code is currently supporting projects with a Catrobat Language up to version 0.993. Compared to Pocket Code for Android, this is a very old language version, released a few years ago. Hence, projects created with newer versions of Pocket Code for Android can not be opened and used on iOS. To take one step further into supporting the newest Catrobat Language versions, this project proposal is intended to implement the language versions 0.994 to 0.99992. This would allow Pocket Code for iOS to interpret tens of thousands more projects. In order to accomplish this, at least the following tasks have to be considered:
- The Android version of Pocket Code needs to be compiled for all different language versions in order to create sample XMLs for regression testing.
- The XML parser needs to be adapted so that Pocket Code for iOS can interpret those XML versions.
- The XML serializer needs to be adapted so that Pocket Code for iOS complies to Catrobat language version 0.99992.
- Starting from language version 0.99992 all nested Bricks (e.g., Bricks of an “If Brick”) will be stored as a tree structure. This involves major refactoring in the data model and the parser/serializer.
- This task requires a lot of reverse engineering work since there is no XML schema available for those language versions
- The focus of this project proposal should be on building up regression tests.
Unified Catrobat Language Brick Syntax
The goal is to develop a standalone Brick Library (own library/repository; mutually understandable by all major projects in the organization, which utilize the Catrobat Language and its bricks) as need for functionality in Catblocks and Catroweb.
Other objectives of this project are the streamlining of brick construction via Construction Patterns, which in turn will massively improve testability, maintainability of code and usability (on the programmers side, it will be easier to implement new bricks, and harder to make mistakes while doing so) and synchronizing Cross-Team Brick changes/updates and new bricks can easily be propagated throughout the whole organizational structure (with just 1x git pull) as well.
This includes the creation of a new Brick Definition Format, the transcription of all existing Bricks into the new Format, “teaching” the new format to Catblocks and Designing an Example Brick Creation Pattern for Pocket Code for Android for a first set of bricks as an extendable Proof of Concept.
Embroidery Robot Programming
Spend the whole GSoC time developing huge Embroidery Designs using the Pocket Code IDE app, i.e., programming in the Catrobat visual coding language:
- If you have your own original idea about an embroidery design, please feel free to suggest it.
- Note, however, that the focus in GSoC should be on coding.
- This GSoC project’s Embroidery Design should become an incredibly awesome & amazing demo design that showcases what kind of mind-boggling embroidery designs can be created with Pocket Code.
Your own Project Ideas
New features or extensions for iOS and Android are welcome to be introduced to us. Help us to spread coding and Open Source!
Please do not hesitate to bring forward your own ideas and discuss them with the Catrobat team members at #catrobat on Freenode or by contacting us via https://catrob.at/mailinglist!