-
-
Notifications
You must be signed in to change notification settings - Fork 2.2k
Google Summer of Code 2024
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.
Our application form for GSoC 2024 is here. Additional instructions are linked from the application form.
Please note that GSoC is not open for proposals until March 18, and our form will not be open for proposals until then.
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).
Brief Explanation: App Inventor has a growing offering of artificial intelligence and data science features. You can find Anomaly Detection, Regression, and Chatbot components currently in the designer. Others exist as Android-only extensions. Re-implement these as core App Inventor components in both Android (most code will be reusable), and iOS (entirely new).
All components should inherit from a common superclass, which can be designed with the help of the App Inventor team.
- Personal Image Classifier (https://appinventor.mit.edu/explore/resources/ai/personal-image-classifier-part1)
- Personal Audio Classifier (http://appinventor.mit.edu/assets/files/voice-authentication-app-tutorial.pdf)
- Facemesh (https://appinventor.mit.edu/explore/resources/ai/facemesh)
- Teachable Machine
Technical Difficulty: Medium
Estimated Time Commitment: 175 hours for two components and 350 for all four.
Knowledge Prerequisites: Swift, Java.
Potential Mentors: David Kim, Evan Patton
Brief Explanation: Our Personal Image Classifer (PIC) and Personal Audio Classifer (PAC) extensions use external websites to build and train models. Those models then have to be exported and imported into App Inventor. It's a cumbersome process.
Build these sites as property editors in core App Inventor.
Technical Difficulty: Hard
Estimated Time Commitment: 350 hours
Knowledge Prerequisites: Java, GWT, Javascript.
Potential Mentors: Jeff Schiller
Improvements for the Designer view. This part of the system is built mainly with Java using the Google Web Toolkit.
Brief Explanation: In 2023, App Inventor rolled out an extensive refactor of our user interface to support GWT's UiBinder framework. This allows us to provide multiple user interface layouts based on device or user preferences. We see a growing number of users accessing App Inventor with mobile phones, and handheld devices are globally more accessible than desktops or laptops. We would like to provide a user interface option that makes App Inventor a more practical option for small screens.
Technical Difficulty: Medium
Estimated Time Commitment: 350 hours
Knowledge Prerequisites: Java, GWT, UiBinder.
Potential Mentors: Susan Lane
Brief Explanation: App Inventor has poor and inconsistent keyboard navigation. We would like to increase our accessibility to users by implementing a consistent system of keyboard-based navigation and hotkeys.
Technical Difficulty: Medium
Estimated Time Commitment: 350 hours
Knowledge Prerequisites: Java, GWT, UiBinder.
Potential Mentors: Susan Lane
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.
Brief Explanation: App Inventor maintains the Blockly workspace-multiselect plugin that allows you to drag, select, and manipulate multiple blocks in the workspace. It was a project for Google Summer of Code 2022, check out this talk at Google Blockly Summit 2023 if you would like to learn more.
Enhancements to plugin:
- (Compulsory) Use IDragger introduced in Blockly 11 for multi-select dragging (https://github.com/mit-cml/workspace-multiselect/issues/39)
- Test the integration with other Blockly plugins, apply fixes whenever applicable (something to start with is https://groups.google.com/g/blockly/c/MuL2Ln8SwDU)
- Fix the known transparent SVG issue related to DragSelect and Blockly (https://github.com/mit-cml/workspace-multiselect?tab=readme-ov-file#known-issues, also described in the talk)
- Possible performance improvement (dragging, connecting) if you find anything to improve.
- Other suggestions welcome
Technical Difficulty: Medium
Estimated Time Commitment: 175 (2 tasks) / 350 (all 4 tasks) hours, the IDragger one is compulsory, others are free to combine.
Knowledge Prerequisites: Javascript
Potential Mentors: Songlin Jiang ([email protected]), Evan Patton
Brief Explanation: App Inventor uses Google's open source Blockly library but actually predates it. Because of this, we have a lot of our own unique functionality layered on top of Blockly. In recent years, Blockly has moved to a plugin system. This functionality needs to be built as Blockly plug-ins and submitted to the Blockly project.
- Warning/Error handler
- Typeblocking
Technical Difficulty: Medium
Estimated Time Commitment: ?? A project can be one or both features.
Knowledge Prerequisites: Javascript
Potential Mentors: Evan Patton
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
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: ???
Technical Difficulty: Medium or Hard
Estimated Time: 175 or 350 hours
Knowledge Prerequisite: Swift
Potential Mentors: Diego or Vishwas
Example Android Sources
- gsoc/connectivity-components: BluetoothAdmin, Download, Network, WiFiAdmin components
- sensor-components: FingerPrint component
- gsoc/utility-components: Encrypt, KeyguardManager, AnimationUtilities components
- gsoc/layout-components: BottomSheet, CardView components
- gsoc/navigation-components: BottomNavigation, TabLayout components
- gsoc/ui-components: Fab, Snackbar, RadioButton components
- gsoc/progress-components: CircularProgress, LinearProgressbar components
This listing is not yet complete
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
Brief Explanation: A previous GSOC project explored implementing visible extensions for App Inventor using nested iframes to embed component logic (https://github.com/mit-cml/appinventor-sources/pull/2223). Before this can be deployed, the security needs to be hardened so that malicious extension code is not run in the user's browser. This involves some architecture and design work with the App Inventor team. Options we have considered include Webworkers, a limited javascript interpreter, web assembly.
Technical Difficulty: Difficult
Estimated Time: 350
Potential Mentors: Jeff Schiller or Evan Patton
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
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