Ideas
Below is a list of ideas you can work on this Summer at GNU social. You should pick one (or mix a couple) of them and talk on IRC about it. The community will help you understanding what has to be done so you can put a good proposal together.
Rewrite GNU social using Symfony
Description: The title is pretty much self explanatory. One might either focus in core, plugins or both (this is to say that we may accept two students for this one).
Mentors: Diogo Cordeiro, Alexey Sorokin
Proposal: Make a parallelism between the GS system and Symfony (autoloading, routing, templates, cache, queues, cron, orm/db, ...), indicating how to implement something like our plugin system in such framework.
Proof of Competence: Migrate the avatar system as was done with the media system in the past gsoc and a couple more of backlog tasks. Additional big crunch and bang with a minimally working plugin system would be ideal.
Requirements: PHP7, SQL, Redis, OOP, Declarative and Functional programming. Symfony and Doctrine experience is preferred.
Difficulty: Hard
Study Resources: Refer to the generic ones in "Reliability Engineering". Study Symfony's docs as well as Redis's.
Federation
Description: To implement Federation in v3.
Mentors: Daniel Supernault, Diogo Cordeiro (as secondary)
Proposal: Demonstrate knowledge of {TFNM, ActivityPub, OStatus, Pleroma API}.
Proof of Competence: Finish the TFNM and ensure AP works on v2, write auto tests for these.
Requirements: PHP7, Declarative and Functional programming, HTTP, REST APIs. Guzzle experience is preferred.
Difficulty: Medium
Study Resources: In addition to the generic ones in "Suggest a proposal!": ActivityPub and Pleroma API
APIs
Description: To implement Pleroma API and port Twitter API from v2 to v3.
Mentors: Diogo Cordeiro, Alexey Sorokin (as secondary)
Proposal: Demonstrate knowledge of {Twitter API, Pleroma API, OAuth2, Open ID}.
Proof of Competence: Ensure GNU social's Twitter API.
Requirements: PHP7, Declarative and Functional programming, HTTP, REST APIs. Guzzle experience is preferred.
Difficulty: Medium
Study Resources: In addition to the generic ones in "Suggest a proposal!":
New Frontend Classic
Description: To implement the new interface in v3 compatible with the AnyBrowser campaign and LibreJS.
Get some inspiration from:
NB: While designing, bear in mind three things: fediverse culture, JS is optional, it should be just an improvement of UX when it's supported by the browser (as elaborated in AnyBrowser), accessibility is a must - bear in mind screen readers, colour blindness, etc.
Mentors: Joshua Judson Rosen, Daniel Supernault (secondary)
Proposal: Wireframe and Mockup of the interface. You will definitely want to request community feedback while working on this.
Proof of Competence: Make a new website in Hugo or similar for https://gnusocial.network (which is GNU social's landing page).
Requirements: CSS3 and HTML5. JS and Twig experience is preferred.
Difficulty: Easy
Study Resources: Refer to the generic ones in "Suggest a proposal!".
New Frontend Modern
Description: To implement a GNU social UI for Pleroma API compatible with LibreJS. This will be a plugin in v3.
Get some inspiration from:
NB: While designing, bear in mind the fediverse culture.
Mentors: Daniel Supernault, Joshua Judson Rosen (secondary)
Proposal: Wireframe and Mockup of the interface. You will definitely want to request community feedback while working on this.
Proof of Competence: Make a new website in Hugo or similar for https://gnusocial.network (which is GNU social's landing page). Please follow the same guidelines of the Classic idea for this.
Requirements: CSS3, HTML5, JS, Bootstrap and Pleroma API. Twig, Vue and Webpack experience is preferred.
Difficulty: Easy
Study Resources: Refer to the generic ones in "Suggest a proposal!".
Reliability Engineering
Description: To test v3.
Mentors: Alexey Sorokin, Joshua Judson Rosen (as secondary)
Proposal: Monography on DevOps applied to GNU social v3 Summer (5000 words)
Proof of Competence: Write/review tests of v2, test its security. Develop a platform for daily reports of GNU social SoC students throughout Summer.
Requirements: PHP7, REST APIs, Shell Script. PHPUnit experience is preferred.
Difficulty: Easy
Study Resources: In addition to the generic ones in "Suggest a proposal!":
Suggest a proposal!
Proposal: See issues labeled as "enhancement" in our repo and propose one or more plugins :)
Proof of Competence: Backlog tasks or other more appropriate.
Also, be sure to checkout our TODO if you want to start preparing yourself (or, better yet, contributing early)!
Study Resources:
How to apply?
NB: The "Proof of Competence" has to be done together with the proposal in your application!
First read GNU's guidelines on how to prepare a good proposal.
Suggestion:
- Header:
- Name
- Email
- Other contact forms (IRC, XMPP)
- Timezone
- Project name
- *Proof of Competence link
- Summary
- Benefits
- Deliverables
- *State Of The Art
- *Relevant Research
- Plan
- Tentative Timeline
- Communication
- Qualification
- *References
* - if applicable
N.B.:
- Plan and Timeline may be together
- Deliverables may come up after timeline
- You're allowed to create subsections and even sections
Then please contact us on GS's Development chat to get started on your proposal. For an example proposal, you can refer to Network Services Improvements proposal from last year.
In this year proposal, you should also specify your timezone. With respect to the time you will have to dedicate, GSoC demands 30h to 40h of work per week. GNU social's Summer of Code expects you to work an average of 36.5h/week, you can organize that time as you please, but you must be sure to dedicate that in your weekly work or to be overly productive.
We suggest you to do a four-day work week with 6h of work/day + 3h to document, review/test and report the progress you've done (you usually won't need that much for this and we won't complain as long as you're doing well/being highly productive). As breaks are important, we recommend a 1h lunch break, 15min break after 4h of continuous work and a further 15mins break after 6h of work. These breaks won't be considered as part of your work time.
Note that 6h*4 = 24h, which is below the minimum 30h demanded by Google, if you only do the 24h/week, you'll have to prove your worth. Otherwise, we might require that you either do a 5-day week or that you scale it up to 7.5h in your 4-day week.
In some places, GSoC starts in the middle of college's last exam season, if that's your case, we accept that you do less hours of work in the beginning as long as you compensate those later.
In general, you will always have to work at least 120h/month, ideally 146h/month (or the productively equivalent). We do not accept that you transfer expected work time from a month to another. Nonetheless, an under-performing week will make us request more hours from you in the week after (up to the limit of 40h).
We also suggest that you create an account in the fediverse.
You can contact Diogo either on the above mentioned IRC channel (under the nick: includeals), by email or on his GNU social profile.
If you need a ZNC Bouncer, you can ask enot for one in IRC. Or just use our XMPP bridge, refer to our project's README to learn more.
GO!