Community:SummerOfCode19:Brainstorming

From MozillaWiki
Jump to: navigation, search

Once again, Mozilla intends to apply to participate in Google's Summer Of Code.

Mozilla community members, please submit proposals here for 2019 Google Summer of Code projects with Mozilla. This page is for brainstorming - as we approach the deadline, those ideas that are accepted will be transferred to the official list.)

Our application for summer of 2019 goes into Google on February 4th, so get those project ideas in well ahead of time.

Are you a student looking to apply to GSoC with Mozilla? Your first stop should be the official list of ideas. This page is full of weird ideas, only some of which will make the cut. It could be that they are not properly defined, the wrong size, or don't have a mentor. That makes them less likely to get accepted. You can, of course, also submit your own ideas - you don't have to put an idea on this page and get it 'made official' in order to send in a proposal for it.

How To Write A Good Project Proposal

Before adding an proposal to this list, please consider the following:

  • Be specific. It's hard to understand the impact of, or the size of, vague proposals.
  • Consider size. The student has eight weeks to design, code, test and document the proposal. It needs to fill, but not overfill, that time.
  • Do your research. Support the idea with well-researched links.
  • Don't morph other people's ideas. If you have a related idea, place it next to the existing one, or add a comment.
  • Insert only your own name into the Mentor column, and then only if you are willing to take on the responsibility. If you think the SoC admins won't know who you are, leave contact details.
  • Check back regularly. The administrators may have questions about your idea that you will need to answer.
  • Know when to give up. If you've added the same idea for the last three years and it hasn't made it to the official page, perhaps you can predict what will happen this time.

Suggestion List

Here are the ideas lists from previous years.

Proposals can be in almost any part of the Mozilla project, though they do need to be mostly focused on code.

Here are the proposals. Feel free to add a new one.

2019 Proposed Project List

Title Details Skills Needed Reporter Mentor(s) Additional Comments
Improve Python in the browser The pyodide project allows the Python scientific stack to run in the browser by compiling it to WebAssembly. Help make stuff run better and faster there. Python and JavaScript. Can learn the WebAssembly parts as you go. Michael Droettboom Michael Droettboom There are a number of specific projects we have in mind, but are open to other proposals that are within scope and seem practical within the timeframe. (1) Implement matplotlib's display on top of Web APIs (HTML5 Canvas, etc.) This would allow us to avoid shipping a whole separate rendering engine to the browser. (2) Build WebAssembly support into the conda packaging system to make it easier to distribute new compiled packages for Pyodide. (3) Make multi-dimensional arrays sharable between Python and Javascript. See Pyodide's list of issues for additional ideas. About the mentor: Michael Droettboom is a Staff Data Engineer at Mozilla, and a former lead developer of matplotlib with years of experience building the Python scientific ecosystem.
ReSpec ReSpec is a JS-based tool used to write W3C Specifications (Web Standards) that is widely used by the Web Standards Community. With 6+ years of development, it's heavily depended upon by the W3C community at large (of which Mozilla is an active participant). ReSpec's code is in need of some modernization, optimizations, and bug fixes - and we could use your help! In this project, you would have the opportunity to make ReSpec's UI more accessible, making it leaner and faster using distributed processing with Web Workers, and/or adding new features to make the lives of W3C spec Editor's better. JavaScript, HTML, CSS. Marcos Caceres Marcos Caceres ReSpec offers students the opportunity to work on a large code base that has extensive real world use and impact. The project offers students an extensive range of problems to tackle, from UI design, to concurrent processing (using Web Workers to do distributed text processing), dealing with accessibility and internationalization, writing and learning about unit and integration tests, security, code review, etc. - as well as exposure to the W3C and the web standards community, this project also aims at teaching students about how web standards are put together. To determine if this is a project you would like to be part of, see the list of issues you could work on. It's a great opportunity to learn about all aspects of open source software development, but with the freedom to take on small to large challenges over the Summer (depending on your skill level and level of confidence). About the mentor: Marcos Caceres is a Staff Engineer at Mozilla who has been working on Web Standards for over a decade. Marcos is the lead maintainer of ReSpec. Marcos has extensive experience mentoring developers and has previously successfully mentor a GSO student.
Ship Public Suffix List (PSL) over Remote Settings The list of public domain suffixes (DNS) is shipped with every release, with no way to update it on long term releases for example.

Now that Remote Settings has become a solid solution to ship data, we could use it to publish updates of the PSL. The task consist in migrating the current client code to read from Remote Settings instead of a file, and implement a scheduled job (like Python) to push updates automatically (most likely compiled as a DAFSA file)

JavaScript and some Python basics Mathieu Leplatre Mathieu Leplatre https://bugzilla.mozilla.org/show_bug.cgi?id=1083971
bugbug A platform for machine learning projects applied on Bugzilla, VCS and other software development data. Python Marco Castelluccio (FIRST_NAME@mozilla.com) Marco Castelluccio (FIRST_NAME@mozilla.com) The project will involve one or more of:

i) building additional classifiers (e.g., to detect bugs with no steps to reproduce, or to suggest a developer to assign to a bug, and so on);

ii) improving accuracy/precision/recall of the existing classifiers by implementing other machine learning techniques (e.g., by using convolutional neural networks or recurrent neural networks);

iii) improving accuracy/precision/recall by implementing additional feature extraction steps or making the already existing ones better.

WebSocket Monitor Support for WebSocket monitoring and inspection in Firefox DevTools. JavaScript/React Jan Odvarko Jan Odvarko This project aims at providing support for WebSocket monitoring and inspection in Firefox DevTools. The feature should be built on top of the existing Network panel UI and responsible for visualizing data sent through WebSocket connection (i.e. WS frames). The user should be able to use the UI to see as well as analyse the data (search, filter, etc.).
Helpful crash reporter The crash reporter only allows users to send crash reports but in some cases it might help the user diagnose the crash and solve it on his/her own C++, Javascript Gabriele Svelto Gabriele Svelto There's a few things that could be implemented:
  • A quick test of the memory owned by the crashed process (such as those in memtest86+) might catch faulty memory, a common cause for crashes
  • The crash reporter client might try and validate Firefox files which can sometimes become corrupted (usually because of hardware issues). If they are it can prompt the user to re-install Firefox
  • Many crashes are caused by buggy graphics drivers, while we blacklist the most egregious offenders we can't cover them all. The crash reporter might identify a faulty driver (if a bug for it has already been filed) and point the user to up-to-date drivers
  • For crashes caused by known bugs it should be possible to point the user to the bug filed on bugzilla
Debugger Inline Variable Preview When the Firefox DevTools debugger is paused, users can hover over variables to get a useful tooltip that details the variable's value at that time. While this popup is very informative, one valuable enhancement would be displaying relevant contextual variables values alongside the variable inline, alleviating the need for tooltips and allowing the user to more quickly get the information they need. The applicant will work alongside the Debugger's team to implement this feature based on UX mockups and be given space to share and implement ideas of their own. Javascript David Walsh David Walsh
GitHub Checks Support Improvements Taskcluster currently supports reporting results to the GitHub Checks API, but only reports success or failure. Let's add support for showing annotations - snippets of log output, more detailed results, images, and so on. We can even add support for additional "actions" on the task, such as re-running with debugging enabled. Server-side JS :dustin :owlish, :dustin
Support GitHub Logins in Taskcluster Taskcluster currently supports logging in with Auth0, the Mozilla login system. We would like to make it useful outside of Mozilla, and most other users do their development on GitHub, making GitHub logins a good solution. This project would involve adding support for signing in with GitHub, as well as the more challenging task of assigning appropriate permissions to users based on the setup of their GitHub account. Server-side JS :dustin :owlish, :dustin
Improve Webdriver support in Servo Servo currently supports a minimal subset of the Webdriver standard. We would like to improve Servo's support, and verify its correctness by passing a set of automated tests. This project would involve writing Rust code to extend the webdriver server inside of Servo, as well as JavaScript and Python to support the testdriver.js testharness. Familiarity with Python & JavaScript; interest in learning Rust Josh Bowman-Matthews Josh Bowman-Matthews Project description
Support importing Instruments profiles in perf.html perf.html visualizes performance data recorded from various performance analysis tools. It is a tool designed to consume performance profiles from Gecko Profiler but can visualize any profiler able to output JSON. It currently supports Gecko, Chrome and perf profile formats. Instruments is a performance analyzer that comes with Xcode. This project would involve adding support for Instruments profile import in perf.html. Familiarity with JavaScript & React Nazım Can Altınova Nazım Can Altınova https://github.com/devtools-html/perf.html/issues/1138
Common Voice - WebAssembly MP3 Encoding Currently Common Voice doesn’t support Safari, which is also why we have an iOS app. The only reason being the missing MediaRecorder API. It could be polyfilled (rebuilt in “userspace”) by compiling an MP3 encoder to WebAssembly. I’ve tried that a couple of times, but never had enough time to fix the opaque bugs happening in Safari. This could also be turned into its own library and would be a nice story overall of how WASM can help with WebCompat and missing APIs. JavaScript Gregor Weber Gregor Weber This GitHub issue lines out some thoughts around how to implement it and you can find references to closed PRs which tried implementing it in various ways.
Common Voice - Voice Wave Avatar We’d like our users to have unique(ish) avatars based either on the characteristics of their voice or a visualization of how their name (or an utterance of their choosing) is pronounced. It could also be a combination of the two ideas. We’re very open to explore this space together, though the a candidate should have some knowledge in sound theory. JavaScript, Some knowledge of sound theory Gregor Weber Gregor Weber
Tab Manager menu in Firefox This project will extend the tab overflow menu - which shows tabs not visible in the browser's tab strip - to allow management of all open tabs across all browser windows. The selected student will be working directly in the Firefox codebase to add functionality and new menu structures to make this easily accessible for end users. JavaScript, CSS, and web experience Sam Foster, Bryan Bell Sam Foster We have UX mockups for this feature, which could be broken into two phases. We also have a bug on file, where discussion has begun. While working on this you will become very familiar with the Browser Toolbox, our own "Inspector" tool for the browser user-interface, as well as writing automated tests for the new feature you're adding. The existing tab overflow code lives in our browser-allTabsMenu.js file, which will be the starting point for the new tab manager. You can look at this and the existing tab code to get an idea of how this currently works.

-

Firefox Reader Redesign The design of Firefox’s Reader Mode has languished behind as Quantum has implemented the new Photon Design System. The interface needs to be rebuilt using new visual and interaction styles to match the Photon Design System. JavaScript, CSS, and web experience Abraham Wallin Eitan Isaacson UX Mockups for this feature are available with visual bugs have been reported here and here. Functional bugs and feature enhancements have been documented here, here, here, and finally here. The request is for an engineering student to implement the designs and tackle the queue of bugs/enhancements within the Firefox code base. Mentors will support with prioritization, design direction/assets, and technical guidance.


An Android file downloader designed for Emerging Markets A lesson learned thanks to our UX team is in Emerging Markets the data plan is dynamic: in late nights we have the most affordable bandwidth. Here's the question: Why not schedule big files and videos and have them downloaded when you're sleeping? The mvp would be an App which we can send urls to. After receiving these urls the App either downloads it directly or defer it to late night. As there are more and more background restrictions enforced on new Android APIs, this should be a fun and challenging journey.

A stretch goal would be to embed this downloader in our browser for Emerging Markets, Firefox Lite. Firefox Lite is not satisfied with the current Android Download Manager in several ways: We'd like to give users the ability to pause/resume a download, we'd like to download a file directly to SDcard (opposed to download it to the main storage and move it into SDcard).

We've also prepared an even more ambitious mission for those who want tough challenges: Design the app and make it dynamic deliverable. With aabs we can satisfy both light and heavy users by defaulting Android Download Manager as the download tool and prepare the aforementioned downloader dynamically so that Firefox Lite itself is still minimized in terms of disk size. Nevin and mTwTm are Android developers who can provide assistance to Android App design.

Android Java/Kotlin mTwTm(Teng-pao Yu) mTwTm(Teng-pao Yu) (mTwTm@mozilla.com), Nevin Chen (nevin@mozilla.com)
Toolkit for sandboxing third-parties libraries in Firefox Firefox supports a long tail of infrequently used image and audio formats to

support the occasional website that uses them. Each such format requires the Firefox decoder to use a new open source library for parsing and decoding. This, unfortunately, increases the attack surface of Firefox and as we saw in Pwn2Own 2018, Firefox was successfully exploited via a bugs in such libraries (libogg in this case).

This project proposes to sandbox third-party libraries in Firefox by building a new software-fault isolation toolkit. Our tookit will build on the WebAssembly compiler to isolate libraries in Firefox. But, as part of this toolkit we will also develop and apply a library for safely interfacing with sandboxed libraries (and sanitizing data coming from them). with this toolkit we can ensure that any vulnerability in third-party libraries (e.g., libogg or libpng) cannot be used to be used to compromise Firefox.

C/C++, experience with WebAssembly Eric Rahm Nathan Froyd
Test automation our linting tools We have a several linting tools running on Firefox code base, they currently don't have a test suite.

The goal of this project is to make sure that tests are executed. We currently have a similar test automation for static analyzer jobs. The idea would be to extend (or replicate) this model for ./mach lint (which run flake8, eslint, etc) and ./mach clang-format The bug is https://bugzilla.mozilla.org/show_bug.cgi?id=1448008

Python Sylvestre (s@mozilla.com) Andi Postelnicu (andi@mozilla.com)
Firefox Account Security Dashboard Firefox Account administrators and users need an easily digestible view into the important events that have occurred on an account, providing a way to audit for irregularities. JavaScript, HTML, CSS, MySQL Vijay Budhram, Shane Tomlinson Vijay Budhram, Shane Tomlinson The Firefox Account platform tracks security information about an account, but does not surface this information in an easily consumable format. Users and administrators should be able to see a timeline of an account’s security related events, such as connecting devices, signing into services, changing or resetting passwords, and adding or removing 2FA. Each event in the timeline should include a timestamp, IP address, and location information when they occurred.

This project would entail updating our security event API to ensure we track and expose the required data. The first phase is to build a script that consumes the API and pretty prints the timeline. The second phase is to provide a web interface for the security timeline.

Improving FastParquet FastParquet is a Python library that needs improvement to how it writes the parquet file format Python Kyle Lahnakoski Kyle Lahnakoski Read more
Faster Pyparsing Pyparsing is a Python library that provides a DSL for language specification. It could use some optimization. Python Kyle Lahnakoski Kyle Lahnakoski Read more
Regression Detection Use machine learning to guide statistical model selection, then use the model(s) to detect regressions in future data. Machine Learning, Statistics, Python Kyle Lahnakoski Kyle Lahnakoski Read more
Bugzilla Kanban Board Show bugs like post-it notes on a whiteboard. Much like a Kanban board JSX/React Kyle Lahnakoski Kyle Lahnakoski Read more
More ActiveData Recipes Build out the user interface of the active-data-recipes project so that making new recipes is even easier JSX/React some Python Kyle Lahnakoski Kyle Lahnakoski PR with proposal or Read more
TUID service improvments The TUID service handles millions of requests daily from hundreds of machines. It must go faster, and be stabilized. Python/Flask/Sqlite Kyle Lahnakoski Gregory Mierzwinski Read more
Firefox Source Docs Infrastructure Improve the infrastructure underpinning Firefox's in-tree documentation. Python, Sphinx, Rst Andrew Halberstadt Andrew Halberstadt Writing docs for Firefox's in-tree source docs is time consuming and difficult and the end result is difficult to navigate.

With MDN de-prioritizing build and workflow docs, we need a suitable replacement for all of Firefox's contribution and workflow documentation. The great advantage of documentation living in-tree, is that it can be updated along with the source. Unfortunately the current system to build and generate docs is difficult to write for, slow to build and generates poorly organized documentation. These factors discourage developers from creating or updating docs.

This project aims to improve the documentation experience via static analysis tools (e.g hint when docs might need to be updated), enabling linters, faster build times, additional language support and well structured hierarchies. Help make documentation a bigger part of our developer's day to day workflow.

Improve FixMe Improve FixMe, a tool for surfacing meaningful contribution opportunities to new contributors. This project started two years ago as a GSoC project and we are looking into adding more capabilities. The tool currently fetches issues only from GitHub and relays a lot into the tags project maintainers use in their repositories. We want to add gitlab support and come up with a more sophisticated way of identifying technologies and skills needed for new contributors - Backend: Go, Buffalo, Postgresql. - Front-end: React, typescript, Redux Christos Bacharakis Christos Bacharakis Link to front-end source code, link to backend source code. FixMe tool in action
Rust AV1 Encoder (rav1e) Project Mozilla's rav1e Project [1] is a clean room AV1 encoder implementation written in Rust. The goal is to create a production ready AV1 encoder for use with common internet use cases: Video-On-Demand (high latency), Live Streaming (some latency), Interactive Video Conferencing (low latency).
  • C/C++
  • Rust
  • SIMD
Nathan Egge Nathan Egge We are looking for GSoC students to help us research and implement advanced encoding algorithms in rav1e. Areas of interest are:
  • Scene detection
  • Frame type assignment and ordering
  • Encoder complexity analysis and design of speed levels
  • Rate-distortion optimization algorithms
  • Parallelized encoding using Rust fearless concurrency
  • Chunked encoding
Evangelizing best practices for coding the web There’s a team inside Developer Outreach focused on making useful projects for today’s web developers and designers. We are launching a series of small gifts to the world: micro-sites, demos, videos, courses, articles, tools, etc — that teach topics like CSS, accessibility, layout design, understanding the web stack, etc. This project would be a chance for you to join us, and help with an ongoing project, or make one of your own. We are looking for someone with the empathy of a teacher, who studies what other people need, and does their best to provide that. Perhaps you will bring the perspective of a CodeNewbie, a fresh generation or community to our team.
  • HTML, CSS.
  • Maybe ARIA or JavaScript.
  • Experience with creating content to teach people stuff (writing, code demos, video, etc).
  • Knowing how to build and launch a website.
Jen Simmons Jen Simmons We don’t expect you to be an expert. We want someone who is passionate about web design / development, and is passionate about teaching others. Someone who cares about strengthening the technical health of the web by evangelizing best practices. Someone who understands the pain of trying to learn, and wants to ease that pain for others.

Also, this project is about knowing how to use CSS, HTML, etc, and wanting to teach web developers how to build websites. It’s not for someone with a more traditional Computer Science background who hates CSS and wishes the web would transform into a JavaScript application runtime environment. We’ll be creating educational projects, using code to do so, not engineering Mozilla software. We are especially interested in someone who loves CSS and has done a lot of interesting experiments with it, or has the capacity to learn more about CSS quickly.

Firefox Sync for Chrome The idea is to build a platform-agnostic library in JS that will work as a Sync client. Then it will be used to make a Chrome extension that allows using Firefox Sync in Chrome. The goal is to make Firefox Sync the default way to synchronize browsers stuff. Javascript Davide Riva Mentor to be found
Matrix Chat in Thunderbird Matrix is an open, decentralized protocol for instant messaging (and more!) It has bridges to many other networks and protocol, e.g. IRC, Slack, and more. Initial support for Matrix was added in bug 1199855, but there's a lot to do still:
  • Update and re-integrate the Matrix SDK
  • Support more features from the Matrix SDK (room topics, typing notifications, read receipts, etc.)
  • Support one-on-one conversations.
  • Add tests specific to Matrix.
  • Improve the Matrix JS-SDK that Instantbird and Thunderbird depend on.
  • Improving and expanding shared code and APIs used by all JavaScript protocol plugins (IRC, XMPP, Yahoo and Twitter).
  • Improving documentation of the process for adding a protocol to Instantbird/Thunderbird.
  • Using the Matrix protocol on a day-to-day basis to dog-food the code and see what else is missing.
JavaScript, XPCOM, experience using HTTP APIs ryanleesipes clokep, Abdelrhman Ahmed We don't expect you to know how to deal with Thunderbird's XPCOM. We're looking for someone who is interested in Chat and will help you get familiar with hacking on Thunderbird and can connect you with developers on the Matrix project as well.
..your next idea here! some details skills/language reporter mentor comments