2018-01-23 20:41:38 +01:00
|
|
|
|
```eval_rst
|
|
|
|
|
:orphan:
|
|
|
|
|
```
|
|
|
|
|
|
2018-01-23 09:33:37 +01:00
|
|
|
|
# Google Summer of Code 2018
|
|
|
|
|
|
|
|
|
|
Zulip
|
|
|
|
|
[was a mentoring organization for GSoC 2017 with 14
|
|
|
|
|
students](https://summerofcode.withgoogle.com/organizations/6508216277008384/)
|
|
|
|
|
and 2016, and we plan to participate in GSoC again in 2018.
|
|
|
|
|
|
|
|
|
|
If you want to apply for GSoC 2018, a great way to get started is to
|
|
|
|
|
skim [the official GSoC
|
|
|
|
|
resources](https://developers.google.com/open-source/gsoc/resources/)
|
|
|
|
|
-- especially [the student
|
|
|
|
|
manual](https://developers.google.com/open-source/gsoc/resources/manual).
|
|
|
|
|
|
|
|
|
|
And keep your eye on
|
|
|
|
|
[the GSoC timeline](https://developers.google.com/open-source/gsoc/timeline). The
|
|
|
|
|
student application deadline is March 27, 2018.
|
|
|
|
|
|
|
|
|
|
## About us
|
|
|
|
|
|
|
|
|
|
[Zulip](https://www.zulip.org) is a powerful, open source team chat
|
|
|
|
|
application. The core web app is written in Python and uses the Django
|
|
|
|
|
framework. We also make a cross-platform mobile app, an Android app, a
|
|
|
|
|
cross-platform desktop app, and many service integrations, all open
|
|
|
|
|
source.
|
|
|
|
|
|
|
|
|
|
Zulip supports both private messaging and group chats via conversation
|
|
|
|
|
streams. Zulip also supports fast search, drag-and-drop file uploads, image
|
|
|
|
|
previews, group private messages, audible notifications, missed-message
|
|
|
|
|
emails, desktop apps, and [much more](https://www.zulip.org/features.html).
|
|
|
|
|
|
|
|
|
|
Zulip has gained a considerable amount of traction
|
|
|
|
|
[since Dropbox released it as open source software in September
|
|
|
|
|
2015](https://blogs.dropbox.com/tech/2015/09/open-sourcing-zulip-a-dropbox-hack-week-project/),
|
|
|
|
|
with contributions from over 400 volunteers from all around the world
|
|
|
|
|
(note: Dropbox is no longer involved in the project). Thousands of
|
|
|
|
|
people use Zulip every single day, and your work on Zulip will have
|
|
|
|
|
impact on the daily experiences of a huge number of people.
|
|
|
|
|
|
|
|
|
|
As an organization, we value high-quality mentorship and making sure our
|
|
|
|
|
product quality is extremely high -- you can expect to learn a lot from
|
|
|
|
|
disciplined code reviews by highly experienced engineers. Since Zulip is a
|
|
|
|
|
group chat product, your GSoC experience with the Zulip project will be
|
|
|
|
|
highly interactive, with a real focus on teaching you the concepts and
|
|
|
|
|
reasoning behind how Zulip is engineered and how to make it better.
|
|
|
|
|
|
|
|
|
|
As part of that commitment, Zulip has over 100,000 words of
|
|
|
|
|
[documentation for developers](../),
|
|
|
|
|
much of it designed to explain not just how Zulip works, but why it
|
|
|
|
|
works the way that it does.
|
|
|
|
|
|
|
|
|
|
Zulip participated in GSoC 2016 and mentored three students officially
|
|
|
|
|
(and 4 more who did their proposed projects unofficially). In 2017,
|
|
|
|
|
we had 14 official students (and 3 more who did their projects
|
|
|
|
|
unofficially). We've also mentored five Outreachy interns and
|
|
|
|
|
hundreds of Google Code-In participants (several of who are major
|
|
|
|
|
contributors to the project today).
|
|
|
|
|
|
|
|
|
|
### Expectations for GSoC students
|
|
|
|
|
|
2018-03-31 21:10:57 +02:00
|
|
|
|
[Our guide for having a great summer with Zulip](../contributing/summer-with-zulip)
|
|
|
|
|
is focused on what one should know once doing a summer project with
|
|
|
|
|
Zulip. But it has a lot of useful advice on how we expect students to
|
|
|
|
|
interact, above and beyond what is discussed in Google's materials.
|
2018-01-23 09:33:37 +01:00
|
|
|
|
|
|
|
|
|
[What makes a great Zulip contributor](../overview/contributing.html#what-makes-a-great-zulip-contributor)
|
|
|
|
|
also has some helpful information on what we look for during the application
|
|
|
|
|
process.
|
|
|
|
|
|
|
|
|
|
## Getting started
|
|
|
|
|
|
|
|
|
|
We have an easy-to-setup development environment, and a library of
|
|
|
|
|
tasks that are great for first-time contributors. Use
|
|
|
|
|
[our first-time Zulip developer guide](../overview/contributing.html#your-first-codebase-contribution)
|
|
|
|
|
to get your Zulip development environment set up and to find your first issue. If you have any
|
|
|
|
|
trouble, please speak up in
|
|
|
|
|
[#GSoC](https://chat.zulip.org/#narrow/stream/GSoC) on
|
2018-02-05 07:40:16 +01:00
|
|
|
|
[the Zulip development community server](../contributing/chat-zulip-org.html)
|
2018-01-23 09:33:37 +01:00
|
|
|
|
(use your name as the topic).
|
|
|
|
|
|
|
|
|
|
# Application tips, and how to be a strong candidate
|
|
|
|
|
|
|
|
|
|
You'll be following
|
|
|
|
|
[GSoC's application process instructions](https://developers.google.com/open-source/gsoc/). And
|
|
|
|
|
we'll be asking you to make at least one successful pull request
|
|
|
|
|
before the application deadline, to help us assess you as a developer.
|
|
|
|
|
Most students who we accept have 5 or more pull requests merged or
|
|
|
|
|
nearly merged (usually including at least one that is significant,
|
|
|
|
|
e.g. having 100+ lines of changes or that shows you have done
|
|
|
|
|
significant debugging).
|
|
|
|
|
|
|
|
|
|
Getting started earlier is better, so you have more time to learn,
|
|
|
|
|
make contributions, and make a good proposal.
|
|
|
|
|
|
|
|
|
|
Your application should include the following:
|
|
|
|
|
|
|
|
|
|
* Details on any experience you have related to the technologies that
|
|
|
|
|
Zulip has, or related to our product approach.
|
|
|
|
|
* Links to materials to help us evaluate your level of experience and
|
|
|
|
|
how you work, such as personal projects of yours, including any
|
|
|
|
|
existing open source or open culture contributions you've made and
|
|
|
|
|
any bug reports you've submitted to open source projects.
|
|
|
|
|
* Some notes on what you are hoping to get out of your twelve-week project.
|
|
|
|
|
* A description of the project you'd like to do, and why you're
|
|
|
|
|
excited about it.
|
|
|
|
|
* Some notes on why you're excited about working on Zulip.
|
|
|
|
|
* A link to the initial contribution(s) you did.
|
|
|
|
|
|
|
|
|
|
We expect applicants to either have experience with the technologies
|
|
|
|
|
relevant to their project or have strong programming experience. We
|
|
|
|
|
also expect applicants to be excited about learning how to do
|
|
|
|
|
disciplined, professional software engineering, where they can
|
|
|
|
|
demonstrate through reasoning and automated tests that their code is
|
|
|
|
|
correct.
|
|
|
|
|
|
|
|
|
|
While only one contribution is required to be considered for the
|
|
|
|
|
program, we find that the strongest applicants make multiple
|
|
|
|
|
contributions throughout the application process, including after the
|
|
|
|
|
application deadline.
|
|
|
|
|
|
|
|
|
|
We are more interested in candidates if we see them submitting good
|
|
|
|
|
contributions to Zulip projects, helping other applicants on GitHub
|
|
|
|
|
and on
|
2018-02-05 07:40:16 +01:00
|
|
|
|
[chat.zulip.org](../contributing/chat-zulip-org.html),
|
2018-01-23 09:33:37 +01:00
|
|
|
|
learning from our suggestions,
|
|
|
|
|
[trying to solve their own obstacles and then asking well-formed
|
|
|
|
|
questions](https://blogs.akamai.com/2013/10/you-must-try-and-then-you-must-ask.html),
|
|
|
|
|
and developing and sharing project ideas and project proposals that
|
|
|
|
|
are plausible and useful.
|
|
|
|
|
|
|
|
|
|
Also, you're going to find that people give you links to pages that
|
|
|
|
|
answer your questions. Here's how that often works:
|
|
|
|
|
|
|
|
|
|
1. you [try to solve your problem until you get stuck, including
|
|
|
|
|
looking through our code and our documentation, then start formulating
|
|
|
|
|
your request for
|
|
|
|
|
help](https://blogs.akamai.com/2013/10/you-must-try-and-then-you-must-ask.html)
|
|
|
|
|
1. you ask your question
|
|
|
|
|
1. someone directs you to a document
|
|
|
|
|
1. you go read that document, and try to use it to answer your question
|
|
|
|
|
1. you find you are confused about a new thing
|
|
|
|
|
1. you ask another question
|
|
|
|
|
1. now that you have demonstrated that you have the ability to read,
|
|
|
|
|
think, and learn new things, someone has a longer talk with you to
|
|
|
|
|
answer your new specific question
|
|
|
|
|
1. you and the other person collaborate to improve the document that you
|
|
|
|
|
read in step 3 :-)
|
|
|
|
|
|
|
|
|
|
This helps us make a balance between person-to-person discussion and
|
|
|
|
|
documentation that everyone can read, so we save time answering common
|
|
|
|
|
questions but also get everyone the personal help they need. This will
|
|
|
|
|
help you understand the rhythm of help we provide in the developers'
|
|
|
|
|
Zulip livechat -- including why we prefer to give you help in public
|
|
|
|
|
mailing lists and Zulip streams, instead of in one-on-one private
|
|
|
|
|
messages or email. We prefer to hear from you and respond to you in
|
|
|
|
|
public places so more people have a chance to answer the question, and
|
|
|
|
|
to see and benefit from the answer. [More about that in this blog
|
|
|
|
|
post.](https://www.harihareswara.net/sumana/2016/10/12/0)
|
|
|
|
|
|
|
|
|
|
## Mentors
|
|
|
|
|
|
|
|
|
|
We have more than a dozen Zulip contributors who are interested in
|
|
|
|
|
mentoring projects. We usually decide which contributors are
|
|
|
|
|
mentoring which projects based in part on who is a good fit for the
|
|
|
|
|
needs of each student as well as technical expertise. You can reach
|
|
|
|
|
us via [#GSoC](https://chat.zulip.org/#narrow/stream/GSoC) on
|
2018-02-05 07:40:16 +01:00
|
|
|
|
[the Zulip development community server](../contributing/chat-zulip-org.html),
|
2018-01-23 09:33:37 +01:00
|
|
|
|
(compose a new stream message with your name as the topic).
|
|
|
|
|
|
|
|
|
|
Zulip operates under group mentorship. That means you should
|
|
|
|
|
generally post in public streams on chat.zulip.org, not send private
|
|
|
|
|
messages, for assistance. Our preferred approach is to just post in a
|
|
|
|
|
public stream on chat.zulip.org and someone will help you. We list
|
|
|
|
|
the Zulip contributors who are experts for various projects by name
|
|
|
|
|
below; they will likely be able to provide you with the best feedback
|
|
|
|
|
on your proposal (feel free to @-mention them in your Zulip post).
|
|
|
|
|
|
|
|
|
|
However, the first and most important thing to do for building a
|
|
|
|
|
strong application is to show your skills by contributing to a large
|
|
|
|
|
open source project like Zulip, to show that you can work effectively
|
|
|
|
|
in a large codebase (it doesn't matter what part of Zulip, and we're
|
|
|
|
|
happy to consider work in other open source projects). The quality of
|
|
|
|
|
your best work is more important to us than the quantity; so be sure
|
|
|
|
|
to test your work before submitting it for review and follow our
|
|
|
|
|
coding guidelines (and don't worry if you make mistakes in your first
|
|
|
|
|
few contributions! Everyone makes mistakes getting started. Just
|
|
|
|
|
make sure you don't make the same mistakes next time).
|
|
|
|
|
|
|
|
|
|
Once you have several PRs merged (or at least one significant PR
|
|
|
|
|
merged), you should start discussing with the Zulip development
|
|
|
|
|
community the project you'd like to do, and developing a specific
|
|
|
|
|
project plan. We recommend discussing what you're thinking in public
|
|
|
|
|
streams on chat.zulip.org, so it's easy to get quick feedback from
|
|
|
|
|
whoever is online.
|
|
|
|
|
|
|
|
|
|
## Project ideas
|
|
|
|
|
|
|
|
|
|
These are the seeds of ideas; you will need to do research on the
|
|
|
|
|
Zulip codebase, read issues on GitHub, and talk with developers to put
|
|
|
|
|
together a complete project proposal. It's also fine for you to come
|
|
|
|
|
up with your own project ideas. As you'll see below, you can put
|
|
|
|
|
together a great project around one of the
|
|
|
|
|
[area labels](https://github.com/zulip/zulip/labels) on GitHub; each
|
|
|
|
|
has a cluster of problems in one part of the Zulip project that we'd
|
|
|
|
|
love to improve.
|
|
|
|
|
|
|
|
|
|
We don't believe in labeling projects by difficulty (e.g. a project
|
|
|
|
|
that involves writing a lot of documentation will be hard for some
|
|
|
|
|
great programmers, and a UI design project might be hard for a great
|
|
|
|
|
backend programmer, while a great writer might have trouble doing
|
|
|
|
|
performance work). To help you find a great project, we list the
|
|
|
|
|
skills needed, and try to emphasize where strong skills with
|
|
|
|
|
particular tools are likely to be important for a given project.
|
|
|
|
|
|
|
|
|
|
For all of our projects, an important skill to develop is a good command
|
|
|
|
|
of Git; read
|
|
|
|
|
[our Git Guide](../git/overview.html) to
|
|
|
|
|
learn how to use it well. Of particular importance is mastering using
|
|
|
|
|
Git rebase so that you can construct commits that are clearly correct
|
|
|
|
|
and explain why they are correct.
|
|
|
|
|
|
|
|
|
|
### Focus areas
|
|
|
|
|
|
|
|
|
|
For 2018, we are particularly interested in GSoC students who have
|
|
|
|
|
strong skills at visual design, HTML/CSS, React Native mobile
|
|
|
|
|
development, and Electron. So if you're a student with those skills
|
|
|
|
|
and are looking for an organization to join, we'd love to talk to you!
|
|
|
|
|
|
|
|
|
|
The Zulip project has a huge surface area, so even when we're focused
|
|
|
|
|
on something, a huge amount of essential work goes into other parts of
|
|
|
|
|
the project. Every area of Zulip could benefit from the work of a
|
|
|
|
|
student with strong programming skills; so don't feel discouraged if
|
|
|
|
|
the areas mentioned above are not your main strength.
|
|
|
|
|
|
|
|
|
|
As a data point, in Summer 2017, we had 4 students working on the
|
|
|
|
|
React Native mobile app (1 focused primarily on visual design), 1 on
|
|
|
|
|
the Electron Desktop app, 2 on bots/integrations, 1 on webapp visual
|
|
|
|
|
design, 2 on our development tooling and automated testing
|
|
|
|
|
infrastructure, and the remaining 4 on various other parts of the
|
|
|
|
|
backend and core webapp.
|
|
|
|
|
|
|
|
|
|
### Full stack and web frontend focused projects
|
|
|
|
|
|
|
|
|
|
Code: [github.com/zulip/zulip -- Python, Django, JavaScript, and
|
|
|
|
|
CSS](https://github.com/zulip/zulip/).
|
|
|
|
|
|
|
|
|
|
- Make Zulip integrations easier for nontechnical users to
|
|
|
|
|
setup. This includes adding a backend permissions system for
|
|
|
|
|
managing bot permissions (and implementing the enforcement
|
|
|
|
|
logic), adding an Oauth system for presenting those controls to
|
|
|
|
|
users, as well as making the /integrations page UI have buttons to
|
|
|
|
|
create a bot, rather than sending users to the administration page.
|
|
|
|
|
**Skills recommended**: Strong Python/Django; JavaScript, CSS, and
|
|
|
|
|
design sense helpful. Understanding of implementing Oauth
|
|
|
|
|
providers, e.g. having built a prototype with
|
|
|
|
|
[the Django Oauth toolkit](https://django-oauth-toolkit.readthedocs.io/en/latest/)
|
|
|
|
|
would be great to demonstrate as part of an application. The
|
2018-02-05 07:40:16 +01:00
|
|
|
|
[Zulip integration writing guide](https://zulipchat.com/api/integration-guide)
|
2018-01-23 09:33:37 +01:00
|
|
|
|
and
|
|
|
|
|
[integration documentation](https://chat.zulip.org/integrations/)
|
|
|
|
|
are useful materials for learning about how things currently work,
|
|
|
|
|
and
|
|
|
|
|
[the integrations label on GitHub](https://github.com/zulip/zulip/labels/area%3A%20integrations)
|
|
|
|
|
has a bunch of good starter issues to demonstrate your skills if
|
|
|
|
|
you're interested in this area. Expert: Steve Howell.
|
|
|
|
|
|
|
|
|
|
- Build a meta-integration that converts the Slack incoming webhook
|
|
|
|
|
API to post messages into Zulip. Zulip has several dozen native
|
|
|
|
|
integrations (https://chat.zulip.org/integrations/), but Slack has a
|
|
|
|
|
ton more. We should build an interface to make all of Slack’s
|
|
|
|
|
numerous third-party integrations work with Zulip as well, by
|
|
|
|
|
basically building a Zulip incoming webhook interface that accepts
|
|
|
|
|
the Slack API (if you just put in a Zulip server URL as your "Slack
|
|
|
|
|
server"). **Skills required**: Strong Python experience; experience
|
|
|
|
|
with the Slack API a plus. Work should include documenting the
|
|
|
|
|
system and advertising it. Expert: Steve Howell.
|
|
|
|
|
|
|
|
|
|
- Visual design work on Zulip's logged-out pages, including /help,
|
|
|
|
|
/apps, /integrations, /api, /login, /register, the zulip.org
|
|
|
|
|
website, etc. We'd love to make these look nicer both through
|
|
|
|
|
polish and potentially through adding fun illustrations to make the product
|
|
|
|
|
more friendly. A project could include work on Zulip's logged-in UI
|
|
|
|
|
as well. **Skills required**: Design, HTML and CSS skills;
|
|
|
|
|
JavaScript and illustration experience are helpful. A great
|
|
|
|
|
application would come with mockups for specific changes, and/or a
|
|
|
|
|
set of PRs making small improvements to the logged-out UI. Expert:
|
|
|
|
|
Brock Whittaker.
|
|
|
|
|
|
|
|
|
|
* Make Zulip's user-facing documentation more awesome. Zulip now has
|
|
|
|
|
a [lot of documentation](https://chat.zulip.org/help/) for users
|
|
|
|
|
(largely written by Google Code-In students!) on how to use the
|
|
|
|
|
various product features, and what features exist, but it could use
|
|
|
|
|
a lot of work on organization, polish, and otherwise making it feel
|
|
|
|
|
nice. The largest part of this, though, would be writing guides for
|
|
|
|
|
new users on how to setup Zulip effectively. One could start with the
|
|
|
|
|
[open user documentation issues](https://github.com/zulip/zulip/labels/area%3A%20documentation%20%28user%29).
|
|
|
|
|
**Skills required**: Strong English writing skills, empathy for
|
|
|
|
|
users, appreciation for the Zulip user experience. Minimal coding
|
|
|
|
|
experience required. Expert: Rishi Gupta.
|
|
|
|
|
|
|
|
|
|
- Build support for outgoing webhooks and slash commands into Zulip to
|
|
|
|
|
improve its chat-ops capabilities. There's an existing
|
|
|
|
|
[pull request](https://github.com/zulip/zulip/pull/1393) with a lot
|
|
|
|
|
of work on the outgoing webhooks piece of this feature that would
|
|
|
|
|
need to be cleaned up and finished, and then we need to build support for slash
|
|
|
|
|
commands, some example integrations, and a full set of
|
|
|
|
|
documentation and tests. Recommended reading includes Slack's
|
|
|
|
|
documentation for these features, the Zulip message sending code
|
|
|
|
|
path, and the linked pull request. **Skills required**: Strong
|
|
|
|
|
Python/Django skills. Expert: Steve Howell.
|
|
|
|
|
|
|
|
|
|
- Build a system for managing Zulip bots entirely on the web.
|
|
|
|
|
Right now, there's a somewhat cumbersome process where you download
|
|
|
|
|
the API bindings, create a bot with an API key, put it in
|
|
|
|
|
configuration files, etc. We'd like to move to a model where a bot
|
|
|
|
|
could easily progress from being a quick prototype to being a third-party extension to
|
|
|
|
|
being built into Zulip. And then for built-in bots, one should be able to click a few
|
|
|
|
|
buttons of configuration on the web to set them up and include them in
|
|
|
|
|
your organization. We've developed a number of example bots
|
|
|
|
|
at `contrib_bots/` in the main Zulip repository that can be used for
|
|
|
|
|
testing; the design document for the deployment part of this vision
|
|
|
|
|
(likely part 1) is
|
2018-02-05 07:40:16 +01:00
|
|
|
|
[here](../subsystems/custom-apps.html).
|
2018-01-23 09:33:37 +01:00
|
|
|
|
**Skills recommended**: Python and JavaScript/CSS, plus devops
|
|
|
|
|
skills (Linux deployment, Docker, puppet etc.) are all useful here.
|
|
|
|
|
Experience writing tools using various popular APIs is helpful for
|
|
|
|
|
being able to make good choices. Experts: Steve Howell.
|
|
|
|
|
|
|
|
|
|
- Redesign the Zulip settings and administration pages to be more
|
|
|
|
|
consistent, performant, and prettier, with nice reusable UI
|
|
|
|
|
components. Right now, each widget has its own look and feel,
|
|
|
|
|
there's too many colorful buttons, and some widgets (like the list
|
|
|
|
|
of all users) can cause loading the admin UI to hang for a few
|
|
|
|
|
seconds in a realm with thousands of users. You can get a great
|
|
|
|
|
sense of what needs to be done by just browsing the administration
|
|
|
|
|
site in a development environment. You can get experience working
|
|
|
|
|
on the subsystem by working on some of
|
|
|
|
|
[our open settings/admin issues](https://github.com/zulip/zulip/labels/area%3A%20admin).
|
|
|
|
|
**Skills recommended**: JavaScript, HTML, CSS, and an eye for visual
|
|
|
|
|
design. Experience using the Timeline tab in the Chrome developer
|
|
|
|
|
tools is useful if you want to focus on the performance side of
|
|
|
|
|
things. The performance issues are primarily on the frontend, so
|
|
|
|
|
Python/Django experience is less important, but still useful.
|
|
|
|
|
Expert: Brock Whittaker.
|
|
|
|
|
|
|
|
|
|
- Optimize frontend performance. Zulip already performs fairly well
|
|
|
|
|
once the site has been loaded, but there are a bunch of ideas for
|
|
|
|
|
how to make it substantially faster. This is likely a particularly
|
|
|
|
|
challenging project to do well, since there are a lot of subtle
|
|
|
|
|
interactions to understand. **Skill recommeded**: Strong debugging,
|
|
|
|
|
communication, and code reading skills are most important here.
|
|
|
|
|
JavaScript experience; some Python/Django experience, some skill
|
|
|
|
|
with CSS, ideally experience using the Chrome Timeline profiling
|
|
|
|
|
tools (but you can pick this up as you go). Expert: Brock
|
|
|
|
|
Whittaker.
|
|
|
|
|
|
|
|
|
|
- Build out the administration pages for Zulip to let admins set a
|
|
|
|
|
retention policy for when old messages should be deleted, audit
|
|
|
|
|
data, etc. ... the sorts of things needed for Zulip to be used at
|
|
|
|
|
larger organizations. We get constant requests for these kinds
|
|
|
|
|
of features from Zulip users. The Zulip bug tracker has almost 50 open issues(
|
|
|
|
|
[settings (admin/org)](https://github.com/zulip/zulip/labels/area%3A%20settings%20%28admin%2Forg%29),
|
|
|
|
|
[settings UI](https://github.com/zulip/zulip/labels/area%3A%20settings%20UI),
|
|
|
|
|
[settings (user)](https://github.com/zulip/zulip/labels/area%3A%20settings%20%28user%29),
|
|
|
|
|
[stream settings](https://github.com/zulip/zulip/labels/area%3A%20stream%20settings)
|
|
|
|
|
) in the space of improving the Zulip administrative UI. Many are
|
|
|
|
|
little bite-size fixes in those pages, which are great for getting a
|
|
|
|
|
feel for things, but a solid project here would be implementing 5-10
|
|
|
|
|
of the major missing features. The first part of this project will
|
|
|
|
|
be refactoring the admin UI interfaces to require writing less
|
|
|
|
|
semi-duplicate code for each feature. **Skills recommended**: A
|
|
|
|
|
good mix of Python/Django and HTML/CSS/JavaScript skill is ideal.
|
|
|
|
|
The system for adding new features is
|
2018-02-05 07:40:16 +01:00
|
|
|
|
[well documented](../tutorials/new-feature-tutorial.html).
|
2018-01-23 09:33:37 +01:00
|
|
|
|
Expert: Tim Abbott.
|
|
|
|
|
|
|
|
|
|
- Rebuild the Zulip web UI using a modern reactive layer like vue.js.
|
|
|
|
|
Strategically, we'd start with self-contained, messy pieces (like the
|
|
|
|
|
presence layer), then move on to more complex pieces (like the
|
|
|
|
|
subscriptions page), and finally attach the main UI. Definitely worth
|
|
|
|
|
reading the vue.js documentation and reading
|
2018-02-05 07:40:16 +01:00
|
|
|
|
[how Zulip's real-time sync works](../subsystems/events-system.html).
|
2018-01-23 09:33:37 +01:00
|
|
|
|
**Skills recommended**: Strong JavaScript experience, good
|
|
|
|
|
communication skills and an eye for detail. We think this would be an
|
|
|
|
|
awesome project, but rewrite projects often introduce lots of bugs, so
|
|
|
|
|
we're interested in particularly careful candidates who have the
|
|
|
|
|
discipline to redo a small component at a time and carefully test for
|
|
|
|
|
regressions. Good ways to demonstrate qualification for this are
|
|
|
|
|
finding and reporting bugs using
|
2018-02-05 07:40:16 +01:00
|
|
|
|
[Zulip's manual UI testing guide](../testing/manual-testing.html)
|
2018-01-23 09:33:37 +01:00
|
|
|
|
and doing
|
|
|
|
|
[refactoring projects](https://github.com/zulip/zulip/labels/area%3A%20refactoring).
|
|
|
|
|
Expert: Tommy Ip, Brock Whittaker, Tim Abbott.
|
|
|
|
|
|
|
|
|
|
- Work on making [Snipe](https://github.com/kcr/snipe), written in
|
|
|
|
|
Python 3, or [Barnowl](https://github.com/barnowl/barnowl), written
|
|
|
|
|
in Perl (on top of C), a really good terminal-based client for
|
|
|
|
|
Zulip. In both cases there is a basic working implementation, and
|
|
|
|
|
the goal of this project would be to build that implementation out
|
|
|
|
|
to be full-featured, well-documented, and something people are
|
|
|
|
|
excited to use. **Skills required**: Python 3 (asyncio) or Perl
|
|
|
|
|
development skills, good communication and project management
|
|
|
|
|
skills, good at reading code. Experts: Karl Ramm (Snipe) or Alex
|
|
|
|
|
Dehnert (Barnowl), but chat with Tim Abbott first if you're
|
|
|
|
|
interested in this project.
|
|
|
|
|
|
|
|
|
|
- Overhaul the Zulip website’s user experience to handle large
|
|
|
|
|
organizations well (e.g. currently, the buddy list always has every
|
|
|
|
|
user in the organization, no matter how big!). While Zulip performs
|
|
|
|
|
similarly to Slack on this front, with a good summer's work, it
|
|
|
|
|
should be possible to make Zulip clearly the world's best group chat
|
|
|
|
|
software for large teams. This project would likely consist of
|
|
|
|
|
several individual sub-projects each taking a few weeks to
|
|
|
|
|
implement, starting with the buddy list, and proceeding with work on
|
|
|
|
|
presence, autocomplete/typeahead optimization, and the "subscribers"
|
|
|
|
|
lists in the stream management UI. **Skills recommended**:
|
|
|
|
|
JavaScript, Python. Experts: Tim Abbott, Brock Whittaker.
|
|
|
|
|
|
|
|
|
|
- Implement analytics so we can see how people use Zulip, see which
|
|
|
|
|
features are valuable, systematically debug performance problems,
|
|
|
|
|
etc. Check out https://chat.zulip.org/stats to see what we've
|
|
|
|
|
implemented so far, and read
|
2018-02-05 07:40:16 +01:00
|
|
|
|
[our analytics doc](../subsystems/analytics.html)
|
2018-01-23 09:33:37 +01:00
|
|
|
|
to understand how the system works. **Skills required**: Good
|
|
|
|
|
Django experience, some JavaScript/CSS experience. Expert: Rishi
|
|
|
|
|
Gupta.
|
|
|
|
|
|
|
|
|
|
- Frontend analytics visualizations: we store a lot of interesting
|
|
|
|
|
data about user activity, stream activity, etc. The projects will be
|
|
|
|
|
around make fun/useful visualizations of the data for users, realm
|
|
|
|
|
admins, and sys admins.
|
|
|
|
|
|
|
|
|
|
- Backend analytics: There is a lot of data in our production tables and
|
|
|
|
|
server logs that needs to be aggregated (e.g. info about stream/user
|
|
|
|
|
activity, performance data for how fast narrowing is, etc.).
|
|
|
|
|
|
|
|
|
|
- Write cool new features for Zulip. Play around with the software, browse
|
|
|
|
|
[the feature suggestions that other users have
|
|
|
|
|
contributed](https://github.com/zulip/zulip/labels/enhancement), and
|
|
|
|
|
suggest something you’d like to build! A great project can combine
|
|
|
|
|
3-5 significant features. Experts: Lots, depending on feature!
|
|
|
|
|
|
|
|
|
|
- Work on Zulip's development and testing infrastructure. Zulip is a
|
|
|
|
|
project that takes great pride in building great tools for
|
|
|
|
|
development, but there's always more to do to make the experience
|
|
|
|
|
delightful. Significantly, a full 10% of Zulip's open issues are ideas
|
|
|
|
|
for how to improve the project, and are
|
|
|
|
|
[in](https://github.com/zulip/zulip/labels/area%3A%20tooling)
|
|
|
|
|
[these](https://github.com/zulip/zulip/labels/area%3A%20testing-coverage)
|
|
|
|
|
[four](https://github.com/zulip/zulip/labels/area%3A%20testing-infrastructure)
|
|
|
|
|
[labels](https://github.com/zulip/zulip/labels/area%3A%20provision)
|
|
|
|
|
for tooling improvements.
|
|
|
|
|
|
|
|
|
|
This is a somewhat unusual project, in that it would likely consist
|
|
|
|
|
of dozens of small improvements to the overall codebase, but this
|
|
|
|
|
sort of work has a huge impact on the experience of other Zulip
|
|
|
|
|
developers and thus the community as a whole (project leader Tim
|
|
|
|
|
Abbott spends more time on the development experience than probably
|
|
|
|
|
anything else).
|
|
|
|
|
|
|
|
|
|
A possible specific larger project in this space is working on
|
2018-02-05 07:40:16 +01:00
|
|
|
|
adding [mypy](../contributing/mypy.html) stubs
|
2018-01-23 09:33:37 +01:00
|
|
|
|
for Django in mypy to make our type checking more powerful. Read
|
|
|
|
|
[our mypy blog post](https://blog.zulip.org/2016/10/13/static-types-in-python-oh-mypy/)
|
|
|
|
|
for details on how mypy works and is integrated into zulip. This
|
|
|
|
|
specific project is ideal for a strong contributor interested in
|
|
|
|
|
type systems.
|
|
|
|
|
|
|
|
|
|
**Skills required**: Python, some DevOps, and a passion for checking
|
|
|
|
|
your work carefully. A strong applicant for this will have
|
|
|
|
|
completed several projects in these areas.
|
|
|
|
|
|
|
|
|
|
Experts: Tim Abbott (provision, testing), Steve Howell (tooling, testing).
|
|
|
|
|
|
|
|
|
|
- Improve scalability and replication support to make Zulip more of a
|
|
|
|
|
distributed system. Currently Zulip has reasonably good database
|
|
|
|
|
scalability but has a few technical changes needed to make it possible
|
|
|
|
|
to run a Zulip installation with ultra-high availability. It should
|
|
|
|
|
be possible to change this in a summer! There's lots of great
|
|
|
|
|
reading in the
|
2018-02-05 07:40:16 +01:00
|
|
|
|
[Zulip production](../production/maintain-secure-upgrade.html)
|
2018-01-23 09:33:37 +01:00
|
|
|
|
documentation,
|
2018-02-05 07:40:16 +01:00
|
|
|
|
[architecture overview](../overview/architecture-overview.html)
|
2018-01-23 09:33:37 +01:00
|
|
|
|
and pages linked to from there. **Skills required**: Python and
|
|
|
|
|
strong DevOps/infrastructure experience; puppet skills are helpful.
|
|
|
|
|
Expert: Tim Abbott.
|
|
|
|
|
|
|
|
|
|
- Build a federation system for users on different Zulip servers to
|
|
|
|
|
exchange messages. See
|
|
|
|
|
[the issue on matrix.org integration](https://github.com/zulip/zulip/issues/356)
|
|
|
|
|
for a lot of details on what's involved; the project would likely be
|
|
|
|
|
jointly mentored with matrix.org. Expert: Tim Abbott
|
|
|
|
|
|
|
|
|
|
- Write more API client libraries in more languages, or improve the
|
|
|
|
|
ones that already exist (in python in `api/` in the Zulip server
|
|
|
|
|
repo, as well as [JavaScript](https://github.com/zulip/zulip-js),
|
|
|
|
|
[PHP](https://packagist.org/packages/mrferos/zulip-php), and
|
|
|
|
|
[Haskell](https://hackage.haskell.org/package/hzulip)). To make this
|
|
|
|
|
a successful project, it would likely also include overhauling
|
|
|
|
|
Zulip's API documentation to have a nice markdown syntax for
|
|
|
|
|
writing docs and fully documenting all the endpoints. **Skills
|
|
|
|
|
required**: Experience with the target language and API design.
|
|
|
|
|
Expert: Depends on language :).
|
|
|
|
|
|
|
|
|
|
- Develop [**@zulipbot**](https://github.com/zulip/zulipbot), the GitHub
|
|
|
|
|
workflow bot for the Zulip organization and its repositories. By utilizing the
|
|
|
|
|
[GitHub API](https://developer.github.com/v3/),
|
|
|
|
|
[**@zulipbot**](https://github.com/zulipbot) improves the experience of Zulip
|
|
|
|
|
contributors by managing the issues and pull requests in the Zulip repositories,
|
|
|
|
|
such as assigning issues to contributors and appropriately labeling issues with
|
|
|
|
|
their current status to help contributors gain a better understanding of which
|
|
|
|
|
issues are being worked on. Since the project is in its early stages of
|
|
|
|
|
development, there are a variety of possible tasks that can be done, including
|
|
|
|
|
adding new features, writing unit tests and creating a testing framework, and
|
|
|
|
|
writing documentation. **Skills required**: Node.js, ECMAScript 6, and API
|
|
|
|
|
experience. Expert: Cynthia Lin, Joshua Pan.
|
|
|
|
|
|
|
|
|
|
### React Native mobile app
|
|
|
|
|
|
|
|
|
|
Code:
|
|
|
|
|
[React Native mobile app](https://github.com/zulip/zulip-mobile).
|
|
|
|
|
Experts: Neeraj Wahi, Boris Yankov.
|
|
|
|
|
|
|
|
|
|
The highest priority for the Zulip project overall is improving the
|
|
|
|
|
Zulip React Native mobile app.
|
|
|
|
|
|
|
|
|
|
- Work on issues and polish for the app. You can see the open issues
|
|
|
|
|
[here](https://github.com/zulip/zulip-mobile/issues), grouped into
|
|
|
|
|
milestones by how pressing they are. There are several dozen open
|
|
|
|
|
issues across the project, and likely many more problems that nobody
|
|
|
|
|
has found yet; in the short term, it needs polish, bug
|
|
|
|
|
finding/squashing, and debugging. So browse the open issues, play
|
|
|
|
|
with the app, and get involved! This is still a relatively
|
|
|
|
|
early-stage project, so in a lot of ways a project is "help build
|
|
|
|
|
the Zulip React Native app". Goals include parity with the webapp
|
|
|
|
|
(in terms of what you can do), parity with Slack (in terms of the
|
|
|
|
|
visuals), world-class scrolling and narrowing performance, and a
|
|
|
|
|
great codebase.
|
|
|
|
|
- A key part of the vision for the app is building a really nice way
|
|
|
|
|
to skim unread conversations, decide which to read, and be able to
|
|
|
|
|
exit (and mark as unread again) ones that you want to process on
|
|
|
|
|
the desktop really quickly. Building and polishing this experience
|
|
|
|
|
would probably be only half a project on its own, but one could add to it.
|
|
|
|
|
|
|
|
|
|
A good project proposal here will bundle together a few focus
|
|
|
|
|
areas that you want to make really great (e.g. the message composing,
|
|
|
|
|
editing, and reacting experience), that you can work on over the summer.
|
|
|
|
|
|
|
|
|
|
**Skills required**: Strong JavaScript experience, specifically React
|
|
|
|
|
experience is awesome for this. iOS or Android development/design
|
|
|
|
|
experience is useful as well. Experience with React Native
|
|
|
|
|
development required, but you're unlikely to know it in advance; you
|
|
|
|
|
can learn it if you're motivated! There's tons of good online
|
|
|
|
|
tutorials, courses, etc.
|
|
|
|
|
|
|
|
|
|
We don't have a lot of specific projects listed here, since we aren't
|
|
|
|
|
expecting to have many strong applicants
|
|
|
|
|
who can program React Native. We'd love to have multiple students
|
|
|
|
|
working on this area if possible; we will extend this list if there is
|
|
|
|
|
significant interest (and see the Android list for a bunch of possible
|
|
|
|
|
features).
|
|
|
|
|
|
|
|
|
|
### Electron Desktop projects
|
|
|
|
|
|
|
|
|
|
Code:
|
|
|
|
|
[cross-platform desktop app written in JavaScript on Electron](https://github.com/zulip/zulip-electron).
|
|
|
|
|
Expert: Akash Nimare
|
|
|
|
|
|
|
|
|
|
We recommend first learning Electron, if you don't know it yet, and
|
|
|
|
|
then contributing to a few minor issues. The Electron desktop app is
|
|
|
|
|
only a few thousand lines of JavaScript code, so reading the entire
|
|
|
|
|
codebase to understand how it works is doable.
|
|
|
|
|
|
|
|
|
|
- Improve our
|
|
|
|
|
[Electron-based desktop client application](https://github.com/zulip/zulip-electron)
|
|
|
|
|
with better design, notifications, and cooler desktop integrations.
|
|
|
|
|
There's a few dozen open issues across the project, and likely many
|
|
|
|
|
more problems that nobody has found yet; mostly it needs polish and
|
|
|
|
|
cross-platform issue debugging. So browse the open issues and get
|
|
|
|
|
involved!
|
|
|
|
|
|
|
|
|
|
**Skills required**: JavaScript experience, Electron experience. You
|
|
|
|
|
can learn electron as part of your application!
|
|
|
|
|
|
|
|
|
|
Good preparation for either project is to (1) try out the app and see
|
|
|
|
|
if you can find bugs or polish problems lacking open issues and report
|
|
|
|
|
them and (2) fix some polish issues in either the Electron app
|
|
|
|
|
or the Zulip web frontend (which is used by the electron app).
|
|
|
|
|
|
|
|
|
|
## Circulating proposals (February-March 2018)
|
|
|
|
|
|
|
|
|
|
If you're applying to GSoC, we'd like for you to publicly post a few
|
|
|
|
|
sections of your proposal -- the project summary, list of
|
|
|
|
|
deliverables, and timeline -- some place public on the Web,
|
|
|
|
|
sometime in February or March. That way,
|
|
|
|
|
the whole developer community -- not just the mentors and
|
|
|
|
|
administrators -- have a chance to give you feedback and help you
|
|
|
|
|
improve your proposal.
|
|
|
|
|
|
|
|
|
|
Where should you publish your draft? We prefer Dropbox Paper or
|
|
|
|
|
Google Docs (or even just a message in Zulip), since those platforms
|
|
|
|
|
allows people to look at the text without having to log in or download
|
|
|
|
|
a particular app, and you can update the draft as you improve your
|
|
|
|
|
idea. In either case, you should post the draft for feedback in
|
|
|
|
|
chat.zulip.org.
|
|
|
|
|
|
|
|
|
|
Rough is fine! The ideal first draft to get feedback from the
|
|
|
|
|
community on should include primarily (1) links to your contributions
|
|
|
|
|
to Zulip (or other projects) and (2) a paragraph or two explaining
|
|
|
|
|
what you plan to work on. Your friends are likely better able to help
|
|
|
|
|
you improve the sections of your application explaining who you are,
|
|
|
|
|
and this helps the community focus feedback on the areas you can most
|
|
|
|
|
improve (e.g. either doing more contributions or adjusting the project
|
|
|
|
|
plan).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
We hope to hear from you! And thanks for being interested in
|
|
|
|
|
Zulip. We're always happy to help volunteers get started contributing
|
|
|
|
|
to our open source project, whether or not they go through GSoC.
|