From b8562bf7b440fc29207d1191d5320df01041e666 Mon Sep 17 00:00:00 2001 From: Tim Abbott Date: Mon, 5 Feb 2024 11:50:51 -0800 Subject: [PATCH] docs: Update main GSoC page. --- docs/outreach/gsoc.md | 236 +++++++++++++++++++++++++++--------------- 1 file changed, 151 insertions(+), 85 deletions(-) diff --git a/docs/outreach/gsoc.md b/docs/outreach/gsoc.md index f8aa548ac6..65d94d3aac 100644 --- a/docs/outreach/gsoc.md +++ b/docs/outreach/gsoc.md @@ -12,19 +12,22 @@ how to apply](./apply.md)** to a Zulip outreach program. As noted in the guide: ## Project size -GSoC offers two project size options: 175 hours and 350 hours. We have -designed all our projects to have incremental milestones that can be -completed throughout the program. Consequently, Zulip projects -described below are generally compatible with either project size. Of -course, the amount of progress you will be expected to make depends on -whether you are doing a 175-hour or 350-hour project. +We have designed all our projects to have incremental milestones that can be +completed throughout the program. Consequently, Zulip projects described below +are generally compatible with both large-sized (350 hours) and medium-sized (175 +hours) projects. Of course, the amount of progress you will be expected to make +depends on whether you are doing a 175-hour or 350-hour project. Because it +takes significant time investment to learn how to contribute complex features to +Zulip's codebase, we are not planning to offer small-size projects. -It's also important to understand that how much progress one can -accomplish over the course of the summer is as much a function of the -project as of the contributor. Contributors who learn to consistently -package their work into [reviewable pull -requests](../contributing/reviewable-prs.md) tend to accomplish the -most during GSoC. +Contributors who master the art of consistently packaging their work +into correct, [reviewable pull +requests](../contributing/reviewable-prs.md) are able to make major +improvements to the Zulip app. If you pay attention to the contributor +guidelines, carefully review your own work before asking anyone else +for review, take the time to clearly communicate your changes, and +apply the feedback you receive to your next contribution, you'll be +amazed at what you can accomplish. ## Focus areas @@ -53,7 +56,100 @@ problems in one part of the Zulip project that we'd love to improve. ### Full stack and web frontend focused projects Code: [github.com/zulip/zulip](https://github.com/zulip/zulip/) -- Python, -Django, JavaScript, and CSS. +Django, TypeScript/JavaScript, and CSS. + +- **Cluster of priority features**. Implement a cluster of new full + stack features for Zulip. The [high priority + label](https://github.com/zulip/zulip/issues?q=is%3Aissue+is%3Aopen+label%3A%22priority%3A+high%22) + documents hundreds of issues that we've identified as important to + the project. A great project can be 3-5 significant features around + a theme (often, but not necessarily, an [area + label](https://github.com/zulip/zulip/labels); the goal will be to + implement and get fully merged a cluster of features with a + meaningful impact on the project. Zulip has a lot of half-finished + PRs, so some features might be completed by reading, understanding, + rebasing, and reviving an existing pull request. 175 or 350 + hours; difficulty will vary. **Skills required**: Depends on the + features; Tim Abbott will help you select an appropriate cluster + once we've gotten to know you and your strengths through your getting + involved in the project. + + Experts: Varies with project area. + +- **Complete some unfinished projects**. This is a variant of the + previous project idea category, but focused on projects with + significant existing work to start from and polish, rather than + projects that have not been seriously attempted previously. + + Recent sweeps through the Zulip server and web app tracker have + identified about 100 older pull requests where a previous + contributor (sometimes via GSoC!) did significant work towards + something valuable, and there's significant feedback from + maintainers, but the project was never finished, and requires + significant further effort from a new contributor in order to + progress. These are tracked via the [completion candidate + label][completion-candidate]. One of our goals for this summer's + GSoC is to complete many of these issues. Start by picking something + that's interesting to you and you feel you have the skills required + to complete, reading the code and the feedback, and then creating + your own PR for the issue, doing your own careful testing and + cross-linking the original work. Remember to credit the original + contributor [as documented in our commit + guidelines](../contributing/commit-discipline.md). We expect to have + a more detailed guide on this process available this Spring. + **Skills required**: Varies with project; a common skill will be + good reading comprehension and organization/communication skills, to + walk maintainers through how you resolved problems, addressed any + pending feedback on the previous PR, and your understanding of the + outstanding questions for a given project. Taking the time to get + really good at resolving merge conflicts is likely to be valuable + here as well. + + Experts: Varies with project area. + +[completion-candidate]: https://github.com/zulip/zulip/pulls?q=is%3Aopen+is%3Apr+label%3A%22completion+candidate%22 + +- Help **migrate our JavaScript codebase to Typescript**. Zulip is in + the process of porting the main web app JavaScript codebase to + TypeScript; at present, about 40% of the project is written in + TypeScript. We've resolved most of the roadblocks to completing this + migration, so it's mostly a matter of carefully translating modules, + putting in the effort with preparatory commits to make it any + refactoring easy to verify. Our goal is to leave the resulting code + more readable than it was before, always test the module works after + the migration, and avoid introducing logic bugs during this large + refactor. [This topic in the Zulip development + community][typescript-migration] is a good place to coordinate work + on this project. Multiple students are possible; 175 or 350 hours; + difficult. **Skills required**: TypeScript and refactoring + expertise; we're specifically interested in students who are a type + theory nerd and are invested in writing types precisely (Often using + [Zod](https://zod.dev/) to parse and verify data received from the + server) and checking their work carefully. + + Experts: Zixuan James Li, Evy Kassirer, Anders Kaseorg + +[typescript-migration]: https://chat.zulip.org/#narrow/stream/6-frontend/topic/typescript.20migration + +- Migrate server's Python codebase from the legacy + `@has_request_variables` decorator to the new `@typed_endpoint` + decorator, and update our contributor documentation to recommend the + new system. The `@typed_endpoint` framework uses [Pydantic + V2](https://docs.pydantic.dev/latest/) in order to better express + how we want to parse API requests and turn them into fully typed + Python objects. **Skills required**: A good understanding of the + Python 3 / mypy type system and Pydantic 2, and the ability to + efficiently read Python code and write clear, structured commits. No + prior Pydantic experience required, but please take the time to go + through the Pydantic upstream tutorials and skim all the existing + endpoints using `typed_endpoint` before doing your first Zulip + changes (likely to migrate a smaller views file to the new + framework; one commit per smaller file is likely to be a good + structure). See the last commits from [the new framework's main + PR](https://github.com/zulip/zulip/pull/26365) for examples of + well-written migration commits. + + Expert: Zixuan James Li, Anders Kaseorg - Contribute to Zulip's [**migration to user groups for permissions**][user-group-permissions]. This migration is intended to replace @@ -72,83 +168,53 @@ Django, JavaScript, and CSS. Attention to detail around code reuse/duplication, thoughtful testing, and splitting large migrations into reviewable chunks. + Experts: Sahil Batra + +- Improve the framework and UI in **Zulip's overlays for managing + streams and groups**. These two components have very parallel design + patterns and implementations (the groups one is quite new!). Coupled + with the user groups permissions migration, the goal of this project + is to make these important settings panels ergonomic for the large + number of new settings that we expect to migrate or add via the + groups migration. See the [user groups + settings][group-settings-issues] and [stream + settings][stream-settings-issues] area labels for starter projects. + Experts: Purushottam Tiwari, Sahil Batra +[group-settings-issues]: https://github.com/zulip/zulip/issues?q=is%3Aissue+is%3Aopen+label%3A%22area%3A+settings+%28user+groups%29%22 +[stream-settings-issues]: https://github.com/zulip/zulip/issues?q=is%3Aopen+is%3Aissue+label%3A%22area%3A+stream+settings%22 [user-group-permissions]: https://github.com/zulip/zulip/issues/19525 [organization-settings-label]: https://github.com/zulip/zulip/issues?q=is%3Aopen+is%3Aissue+label%3A%22area%3A+settings+%28admin%2Forg%29%22 -- Help **migrate our JavaScript codebase to Typescript**. Zulip is in the process of - porting the main web app JavaScript codebase to TypeScript; at present we've - done much of the necessary tooling setup, and about 8% of lines have been - migrated (mostly in libraries used widely); the goal for this project will be - to get that to ~75%. [This topic in the Zulip development - community][typescript-migration] is a good place to coordinate work on this - project. Multiple students are possible; 175 or 350 hours; difficult. - **Skills required**: TypeScript and refactoring expertise; we're specifically - interested in students who are a type theory nerd and are invested in writing - types precisely and checking their work carefully. +- Migrate Zulip's **[direct message recipient data + structures](https://github.com/zulip/zulip/issues/25713)** to a new + model with better performance characteristics and that more + importantly enables personal settings associated with a direct + message conversation, and add several settings (see the linked + issues) enabled by that infrastructure work. **Skills required**: + This project will be deep Python 3/PostgreSQL work. Concretely, + challenging parts of this project include thinking about races and + database transactions, writing database migrations intended to be + run live at scale, complex internal refactors, and carefully + verifying the indexes used by migrated database queries. - Experts: Zixuan James Li, Priyank Patel, Anders Kaseorg + Experts: Tim Abbott, Mateusz Mandera, Prakhar Pratyush -[typescript-migration]: https://chat.zulip.org/#narrow/stream/6-frontend/topic/typescript.20migration +- Add the core infrastructure for **topic-based permissions and settings** + like [pinned topics](https://github.com/zulip/zulip/issues/19483) + and [read-only topics](https://github.com/zulip/zulip/issues/26944), + and then build some of those settings. This project will be a + mixture of Python 3/PostgreSQL work, including thinking about + database transactions and races, writing database migrations + intended to be run live at scale, and complex logic to handle moving + messages correctly in the context of these settings, including + significant changes to the Zulip API and API documentation. -- **Add an Inbox view** to the web app. We intend to add a new - home screen option for the Zulip web application that works like - the mobile app's home screen -- showing just topics containing - unread messages, in an organized fashion, in the web app's center - pane. Details are available in the - [issue](https://github.com/zulip/zulip/issues/22189) and a [draft pull - request](https://github.com/zulip/zulip/pull/22408) with prototyping - towards this was done in GSoC 2022. The goal for this project would be - to extract preparatory refactoring changes to make it nicely - parallel to the similar "Recent conversations" panel so that it can be - merged in a maintainable fashion, work with the community to - integrate those changes, complete the Inbox feature through being - merged, and then spend the remainder of the summer polishing it. 175 - or 350 hours; moderate difficulty. **Skills required**: JavaScript, - CSS, and reading and understanding a complex code path. + **Skills required**: A high level of fluency with writing readable + Python 3 and thinking about corner cases. - Experts: Aman Agrawal, Shlok Patel - -- **Extended notification settings**. Extend Zulip's powerful - notification settings model to support additional configuration - options. The top priorities in this area are [unmuting topics in - muted streams](https://github.com/zulip/zulip/issues/2517) and - [following a topic](https://github.com/zulip/zulip/issues/6027); - these are two of the 5 most requested features for the Zulip project - overall. For this project, one will likely want to start with some - simpler issues in the [notifications (messages) - area][notifications-messages] in order to get familiarity with the - code paths in question. There is enough to do in this project that - we could have two students working in this area. 175 or 350 hours; - moderate difficulty. **Skills required**: Python and JavaScript, - with a bit of CSS, database design, and other aspects of full-stack - feature development. Attention to detail, thinking through subtle - corner cases, designing good abstractions to help ensure - correctness, and writing tests to verify correct behavior in them - will be important for this work. - - Experts: Abhijeet Bodas, Ryan Rehman - -[notifications-messages]: https://github.com/zulip/zulip/labels/area%3A%20notifications%20%28messages%29 - -- **Cluster of priority features**. Implement a cluster of new full - stack features for Zulip. The [high priority - label](https://github.com/zulip/zulip/issues?q=is%3Aissue+is%3Aopen+label%3A%22priority%3A+high%22) - documents hundreds of issues that we've identified as important to - the project. A great project can be 3-5 significant features around - a theme (often, but not necessarily, an [area - label](https://github.com/zulip/zulip/labels); the goal will be to - implement and get fully merged a cluster of features with a - meaningful impact on the project. Zulip has a lot of half-finished - PRs, so some features might be completed by reading, understanding, - rebasing, and reviving an existing pull request. 175 or 350 - hours; difficulty will vary. **Skills required**: Depends on the - features; Tim Abbott will help you select an appropriate cluster - once we've gotten to know you and your strengths through your getting - involved in the project. - - Experts: it depends + Experts: Tim Abbott, Prakhar Pratyush - Zulip's [**REST API documentation**](https://zulip.com/api), which is an important resource for any organization integrating with Zulip, as @@ -187,7 +253,7 @@ Django, JavaScript, and CSS. small, clean improvements to the Zulip UI (whether logged-in or logged-out pages). - Experts: Aman Agrawal, Alya Abbott + Experts: Aman Agrawal, Karl Stolley, Alya Abbott [redesign-label]: https://github.com/zulip/zulip/issues?q=is%3Aopen+is%3Aissue+label%3Aredesign @@ -206,7 +272,7 @@ Django, JavaScript, and CSS. [performance label][perf-label] may be helpful reading for the backend part of this. - Experts: Tim Abbott, Yash RE + Experts: Tim Abbott [perf-label]: https://github.com/zulip/zulip/labels/area%3A%20performance @@ -223,7 +289,7 @@ Django, JavaScript, and CSS. do careful manual testing of third-party products. Fluent English, usability sense and/or technical writing skills are all pluses. - Expert: Zixuan Li + Experts: Zixuan James Li, Lauryn Menard - **Make Zulip integrations easier for nontechnical users to set up**. This includes adding a backend permissions system for managing bot @@ -245,7 +311,7 @@ Django, JavaScript, and CSS. has a bunch of good starter issues to demonstrate your skills if you're interested in this area. - Expert: Zixuan James Li + Experts: Zixuan James Li, Lauryn Menard [all-settings-issues]: https://github.com/zulip/zulip/issues?q=is%3Aopen+is%3Aissue+label%3A%22area%3A+settings+%28admin%2Forg%29%22%2C%22area%3A+settings+%28user%29%22%2C%22area%3A+stream+settings%22%2C%22area%3A+settings+UI%22