Skip to content
Evan W. Patton edited this page Mar 8, 2019 · 9 revisions

Introduction

Please apply for GSoC 2019 through Google’s Site GSoC '19 Website. All applications have to go through Google.

We have submitted an application for GSoC '19 and, if accepted, we will be receiving applications within the timeframe allocated by GSoC. Please consult the GSoC '19 website for details. For bite-sized issues to work on as part of the community introduction phase, please see the help wanted issue list.

This 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

Follow these instructions to apply. Also note that you will have to go through the normal application in the GSoC '19 website and register yourself as a student.

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.

  • Expected results: What would be expected from this particular project at the end of the summer. Again, this might not be super specific at this stage, and the expected results might change and be redefined during the summer.

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

  • Difficulty and estimated time: An estimation of the effort needed for the particular project (legend: Easy || Medium || Hard) and a rough estimation if the project would take the whole summer, or less than that.

  • 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

This is a list of potential projects; some of them might not be totally defined so some work will be expected around definition and fleshing out the ideas exposed in here.

This list will not include smaller fixes or short improvements. As part of your onboarding you will probably start with one or two of the help wanted issues in our issues list before choosing a main project for the summer. Preference will be given to students who participate in the open source community and make small improvements as part of the application period.

Also note that there are a number of technologies that are not project-dependent, such as using git and GitHub, apache ant, Google AppEngine, Android SDK tools such as adb, or IDEs such as Eclipse or IntelliJ. These technologies are used throughout the project and familiarity is expected, but will not be included in the Knowledge Prerequisites section for each project.

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.

Searching blocks in the Blocks editor

  • Brief explanation: When working on bigger projects, it can be rather difficult to find blocks. A way of searching and focusing on certain blocks would be very useful. Some prototyping work has already been done for this project, so that work could be continued during the summer.

  • Expected results: A new way to filter blocks in the editor by the means of a searching box or similar placed in the workspace. The details of the solution will be fleshed out as part of the project (a few mockups are expected to be discussed before any coding is done).

  • Knowledge Prerequisite: JavaScript and familiarity with the Google Blockly library.

  • Difficulty and estimated time: Medium; this would be a several week project.

  • Mentor: Potentially Hal Abelson, and/or Jeff Schiller.

Better User Control Over Sorting Blocks

  • Brief explanation: When working on bigger projects, one occassionally may want to rearrange the blocks to better organize them. However, the sorting mechanisms available in the blocks editor are not aware of the semantics/relationships between block types. App inventors might have their own preferences as to how blocks are ordered (e.g., global variables first).

  • Expected results: Add a new user interface to allow the developer to specify sort order of blocks, and update the sorting algorithms accordingly.

  • Knowledge Prerequisite: JavaScript (familiarity with [Google Blockly](https://github.com/google/blockly] a plus) and Java (specifically, the Google Web Toolkit)

  • Difficulty and estimated time: Small; a student with sufficient algorithms experience and experience in Java and JavaScript should be able to implement this in one months time.

  • Mentor: Potentially Susan Lane and/or Evan Patton

Designer Projects

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

Mass-change Properties of Designer Elements

  • Brief Explanation: In most modern WYSIWYG GUIs, it is possible to select multiple design elements and perform a mass change the properties that all the elements have in common. The App Inventor designer currently only allows a single element to be selected at a time.

  • Expected Results: Add industry standard functionality for multi-select (Control-click, drag select) to the designer and modify Properties sidebar to allow changes to be made only to properties all selected elements have in common.

  • Knowledge Prerequisite: JavaScript, Java, and familiarity with GWT.

  • Difficulty and estimated time: Small; a student with familiarity with the tools should be able to implement this in one month’s time.

  • Mentor: Susan Lane

Multiple file uploads

  • Brief explanation: The current designer only allows uploading one asset at a time. If you need to upload 10 images, you need to do the process 10 times. It would be a much better experience to be able to upload a number of assets in one go.

  • Expected results: An improvement in the currently existing file chooser that allows multiple uploads for assets.

  • Difficulty and estimated time: Easy; no more than a couple of weeks including testing.

  • Knowledge Prerequisite: Java and familiarity with GWT.

  • Mentor: Potentially Jeff Schiller and/or Evan Patton

My Projects page (improvements)

Organization (folders)

  • Brief explanation: The My projects page could do with a number of improvements, for instance, being able to group projects within folders.

  • Expected results: A different number of options to organize projects in the My Projects page.

  • Knowledge Prerequisite: Java and familiarity with GWT.

  • Difficulty and estimated time: Easy; no more than a couple of weeks including testing.

  • Mentor: Potentially Jose Dominguez and/or Hal Abelson.

Shortcuts for project actions

  • Brief explanation: It would be very useful to be able to download the sources or the apk directly from the projects page.

  • Expected results: A new layout for the My Projects page from which a new set of options for downloading different packages are shown. There's some initial work done on this so it could be expanded during the summer.

  • Knowledge Prerequisite: Java and familiarity with GWT.

  • Difficulty and estimated time: Easy; 3 to 4 weeks including testing.

  • Mentor: Potentially Jose Dominguez and/or Hal Abelson.

Component Projects

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

  • Difficulty and estimated time: Medium; meaningful work can be complete in 1-2 months. It can easily be extended into an all-summer project.

  • Mentor: Susan Lane

Improvements in ListView

  • Brief explanation: Adding different layouts for list views is one of the most asked for improvement from users. Exploring how to use a recycler view within App Inventor can also be attempted.

  • Expected results: New options in the ListView component to make its layout more flexible (for instance adding icons, text, pictures, and so forth).

  • Knowledge Prerequisite: Java and familiarity with the Android SDK.

  • Difficulty and estimated time: Easy; no more than a couple of weeks including testing.

  • Mentor: Evan Patton

Menu options

  • Brief explanation: Another highly asked for improvement is to allow to add menu options.

  • Expected results: This should be a new component that integrates a set of actions for the options menu and provides events that trigger when the added options are clicked on.

  • Knowledge Prerequisite: Java and familiarity with the Android SDK.

  • Difficulty and estimated time: Easy; 3 to 4 weeks including testing.

  • Mentor: Potentially Evan Patton or Susan Lane

Visualisation component

  • Brief explanation: A component that can easily visualise and plot data such as time-series coming in from the accelerometer and gyroscope (or other data sources such as plain files).

  • Expected results: This should be a new component that offers an easy way to create data plots. Integration with a library such as MPAndroidChart may be the way to go.

  • Knowledge Prerequisite: Java and familiarity with the Android SDK.

  • Difficulty and estimated time: medium; half summer project.

  • Mentor: Susan Lane

Add components programmatically

  • Brief explanation: Currently components as Sprites have to be manually added to a Canvas to be able to use them. In situations like games, it would be a lot more useful if Sprites could be instantiated and created when needed. In Scratch this functionality is called cloning and it would be a great starting point to see how cloning works to design a similar feature in App Inventor.

  • Expected results: An option for components to be instantiated from the blocks; note that this project would need a design proposal and some research and prototyping.

  • Knowledge Prerequisite: Java and familiarity with GWT and the Android SDK.

  • Difficulty and estimated time: Medium; this would be a whole summer project.

  • Mentor: Potentially Hal Abelson.

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 in Open Source.

Entity Abstractions

  • Brief explanation: To develop a more cohesive approach to data and device management, we would like to provide higher level abstractions in MIT App Inventor representing robots, IoT devices, and data sources, and develop corresponding components that can interact with these entities (see visualization entry above as an example).

  • Expected results: Design and implement interfaces for one of robotics, IoT microcontrollers, or data sources, and some corresponding blocks for manipulating those items.

  • Knowledge Prerequisite: Java, design patterns

  • Difficulty and estimated time: Hard; we anticipate the initial design to go through a few iterations before implementation of a proof of concept. If one project is successful and does not take the whole month, we will use the remainder of the summer to explore similar techniques for the other entity types provided above.

  • Mentor: Evan Patton

Visible Component Extensions

  • Brief explanation: Work has been done during the last few GSoC sessions in developing a Component Developer’s Kit to App Inventor. This facility provides for loading externally developed components into App Inventor. However this work is currently limited in scope. In particular only components that have no visible UI elements can be added. We would like to extend the CDK capabilities to include extensions with UI elements. Extensions are currently only available in English. We would like an enhancement to that extension writers can provide strings in other languages as well, as is the case with builtin components.

  • Expected results: The ability to build and add extensions with text in non-English languages as well as access to UI elements.

  • Knowledge Prerequisite: Java and familiarity with GWT and the Android SDK. Familiarity with systems integration, release management, and systems architecture is a plus.

  • Difficulty and estimated time: Hard; this would be a whole summer project.

  • Mentor: Susan Lane, Evan Patton, and/or Jeff Schiller (https://github.com/jisqyv)

Extensions Library

  • Brief Explanation: As described in the previous project, we now 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.

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

  • Knowledge Prerequisite: Java and familiarity the Android SDK. Knowledge of any devices you might want to interface with.

  • Difficulty and estimated time: Moderate; The exact amount of work will depend on the complexity of the proposed extension.

  • Mentor: Susan Lane, Evan Patton, and/or Jeff Schiller

Storage and System Improvements

Google Drive Storage

Synopsis: Store projects in Google Drive, directly from the Client

  • Brief Explanation: Today MIT App Inventor stores projects in a Google Cloud Storage bucket that is owned and paid for by MIT. This project is to instead store projects directly into an individual’s Google Drive.
  • Expected Results: A working version of MIT App Inventor that stores projects in Google Drive.
  • Knowledge Prerequisite: Java and the Google Web Toolkit. Familiarity with REST APIs and OAuth authentication (or willingness to learn)
  • Difficulty and estimated time: Medium; 1-2 Months
  • Mentor: Potentially Jeff Schiller

Long Operations on the Task Queue

Synopsis: Use the App Engine Task Queue for long running operations such as uploading a project or downloading multiple (or all) projects.

  • Brief Explanation:MIT App Inventor runs on the Google App Engine infrastructure. A limitation of App Engine is that operations must complete in under 60 seconds. However we have some operations, such as downloading multiple projects, that can exceed this time limit. However App Engine does provide a background mechanism, the Task Queue, where longer running operations can happen. This project is to re-factor long running operations to make use of the Task Queue.
  • Expected Results: MIT App Inventor users will be able to download multiple projects, and or upload large projects without triggering the 60 second time limit.
  • Knowledge Prerequisite: Java and the Google Web Toolkit as well as familiarity with Google App Engine.
  • Difficulty and estimated time: Medium: 1-2 Months
  • Mentor: Potentially Jeff Schiller