Skip to content

Google Summer of Code 2023

Evan W. Patton edited this page Mar 27, 2023 · 6 revisions

Introduction

Welcome to Google Summer of Code with MIT App Inventor.

We have an application process in addition to Google's application process. You must do both. Please apply to Google for GSoC through Google’s Website. All applications have to go through Google.

We will be receiving applications within the timeframe allocated by GSoC. Please consult the GSoC website for details. For bite-sized issues to work on as part of the community introduction phase, please see the help wanted issue list.

Below is the list of projects we are proposing for the summer; you can choose one or more projects from the list, or come up with your own project. Also note that these projects could be worked on outside GSoC if you would like to volunteer during the summer.

Information for students

How to apply

Our application form for GSoC 2023 is here. Additional instructions are linked from the application form.

Potential Projects

This is what you might expect from projects in the list below:

  • Brief explanation: An explanation of what the project is about. Please note that this might be just an idea, and as part of your work in the project you will be defining and scoping the project.

  • Technical Difficulty: A rough idea of how difficult the project is given knowledge of the language but not necessarily the knowledge of the frameworks involved.

  • Estimated Time Commitment: An estimate for the total number of hours required to be spent on the project to produce a working solution with testing.

  • Knowledge Prerequisite: A brief list of the technologies needed in order to work on this project.

  • Potential Mentor: The currently active team member you will probably be working with during the summer (this can also change depending on which projects are chosen).


Projects list

Blocks Editor Projects

Several projects involve the App Inventor Blocks editor. The main language used in these projects is JavaScript with the Google Closure and Blockly libraries.

Knowledge Prerequisites: javascript. The Blocks Editor is written primarily in javascript. Java and GWT are also useful. Familiarity with the Google Blockly sources is also a plus.

Search integration with Blockly editor

Brief Explanation: Implement search of the blocks workspace using the Blockly Workspace Search plugin, making App Inventor specific adjustments as needed.

Technical Difficulty: Medium

Estimated Time Commitment: 175 hours

Knowledge Prerequisite: JavaScript, familiarity with Blockly a plus

Potential Mentors:

Designer Projects

Improvements for the Designer view. This part of the system is built mainly with Java using the Google Web Toolkit.

Project Properties Dialog

Currently, the properties for the Screen1 form contains a number of project-wide properties such as App Name and Theme. We want these properties separated from the component and maintained on a separate dialog on the designer view.

Technical Difficulty: Medium

Estimated Time: 175 hours

Knowledge Prerequisite: Java, GWT

Potential Mentors: Evan Patton, Susan Lane

Dynamic notification of whether a component is implemented in iOS

We now support an iOS companion, but not all components have been implemented in iOS yet. There is currently no way for the user to know if a component is implemented in iOS. We would like to make this information available to the user in the designer. Information about component properties is defined in the Android component code in the components project here. We expect that this project would require some changes to the annotations to allow us to specify whether the component is also available in iOS.

Technical Difficulty: Medium

Estimated Time: 175 hours

Knowledge Prerequisite: Java, GWT, Android development

Potential Mentors: Evan Patton, Susan Lane

iOS Projects

iOS versions of Android components

MIT App Inventor was original written to build projects for Android. We have released an iOS version of the Companion, but there are still components that have not been ported. The current status of iOS component development can be found at Does App Inventor Run on iOS?. This components are implemented for Android, and the Java source can be used as reference for the swift implementation. Most components with substantial unimplemented features could make a good project.

Exclude: Lego Mindstorms

Of particular interest: File component (under Storage), ListView (under User Interface), several sensor components for sensors supported by iOS (Not all sensors can be ported to iOS due to lack of hardware support), Spreadsheet, Chart, BluetoothLE, Micro:bit, AI extensions

Note: The GSoC applicant needs to have access to a Mac computer. We can't provide this.

Technical Difficulty: Medium or Hard

Estimated Time: 175 or 350 hours

Knowledge Prerequisite: Swift

Potential Mentors: Evan Patton, Susan Lane, David Kim

iOS versions of Kodular components

We are working with Kodular to implement some of their component in App Inventor. These components will need iOS implementations in addition to Android.

Of particular interest: Cardview component.

Technical Difficulty: Medium or Hard

Estimated Time: 175 or 350 hours

Knowledge Prerequisite: Swift

Potential Mentors: Diego or Vishwas

Example Android Sources

This listing is not yet complete

Better behavior for unimplemented components

Currently, when an Android-only component is added to a project and loaded into the iOS Companion, the app just crashes. We would like our iOS Companion to be able to detect that it is trying to load an unimplemented component and present the user with useful information about it. We would also like the app to run if it is possible without the unimplemented component.

Technical Difficulty: Medium

Estimated Time: 175

Knowledge Prerequisite: Swift

Potential Mentors: Evan Patton, Susan Lane

New Component Projects

No new components suggested this year. We're focusing on porting what we have to iOS.

Testing Projects

Testing is critical to making sure regressions are added to the App Inventor code base. Projects in this category explore ways in which to shore up App Inventor's test suite to ensure that future changes don't negatively impact end users.

Automated Component Testing

Brief Explanation: App Inventor has implemented a JUnit framework for automated testing of our Java codebase. However, great strides still need to be made in testing coverage of existing code, including the design of meaningful automated tests.

Expected Results: Accurate, meaningful test suites for at least one existing component in App Inventor that demonstrates comprehensive knowledge of the functionality of the component. Preferably, this will be complete for several components, but exact scope will be set as we discover together the effort and time involved.

Knowledge Prerequisite: JUnit, Roboelectric Android framework

Technical Difficulty: Medium

Estimated Time: Anywhere from 80 hours up to 175 hours depending on the number of tests written once the infrastructure has been updated

Potential Mentors: Evan Patton, Susan Lane, or Jeff Schiller

GWT Unit Testing

Brief Explanation: App Inventor uses the Google Web Toolkit (GWT) to power a large part of its web interface. This code is in much need of unit and behavior tests. Potential projects will make use of GWTUnit and PowerMock to increase test coverage of the user interface.

Knowledge Prerequisite: JUnit, Java, familiarity with GWT and PowerMock (https://powermock.github.io/) are a plus

Technical Difficulty: Medium

Estimated Time: Anywhere from 80 hours up to 175 hours depending on the number of tests written

Potential Mentors: Susan Lane or Evan Patton

Prototypes and Proofs of concept

This is a list of more research oriented projects. They might not be merged into the main repository straight away, but prototyping projects are very important of App Inventor development and have evolved into fully fledged features over a longer period of development.

Built-In Block Extensions

Brief Explanation: App Inventor provides the ability to extend the system with custom components written by third parties. However, not all functionality is nicely wrapped up in a component. Built-in blocks define operations in the language (e.g., math operators) that can be used in any context. This project would explore making custom blocks that could be added to App Inventor.

Expected Results: A working extension that performs a useful task that can be loaded into App Inventor.

Knowledge Prerequisites: JavaScript and Scheme required, Java knowledge a plus

Technical Difficulty: Hard

Estimated Time: 175 hours

Potential Mentors: Evan Patton or Jeff Schiller

Extensions Library

Brief Explanation: We have the ability to add external extensions to App Inventor. We would like to host a library of potential extensions that people might want to add to their projects. This might include extensions that use Bluetooth Low Energy to interface with the Internet of Things. Remote sensors, Arduino’s or other external devices that someone might want to interact with from their phone or tablet.

Knowledge Prerequisite: Java and JavaScript

Technical Difficulty: Medium

Estimated Time: 140 hours of development with some time for user acceptance testing

Potential Mentors: Jeff Schiller or Evan Patton

Security for Visible Extensions

Brief Explanation: A previous GSOC project explored implementing visible extensions for App Inventor using nested iframes to embed component logic. Before this can be deployed, the security needs to be hardened so that malicious extension code is not run in the user's browser.

Knowledge Prerequisite: JavaScript, browser security mechanisms, familiarity with XSS and other security issues

Technical Difficulty: Difficult

Estimated Time: 350

Potential Mentors: Jeff Schiller or Evan Patton

Assets Library

Brief Explanation: Allow users to upload sets of assets to be imported easily into different projects.

Expected Results: A working extension that performs a useful task that can be loaded into App Inventor.

Knowledge Prerequisites: JavaScript and Scheme required, Java knowledge a plus

Technical Difficulty: Medium

Estimated Time: 175 hours

Potential Mentors: Evan Patton or Jeff Schiller