Skip to content

2018 Ideas

Robin Dupret edited this page Jan 28, 2018 · 11 revisions

This page hosts the ideas list for Google Summer of Code 2018.

You can discuss the ideas posted here in our mailing list. Don't hesitate to send your original ideas as well!

Here's some ideas to get you started:

Server Timing Middleware

The W3C proposes a new specification called Server Timing which enables the server to communicate performance metrics to the browser. These metrics can be various, from specifying a cache miss to giving the time the database took to load data.

We would love to introduce a new Rack middleware that would add the different HTTP headers needed to bring this API to Rails applications. Your proposal can include the metrics you would find interesting to communicate and eventual settings that could be customized by the user.

Skills: Ruby, Rack

Modernizing Error Pages

The Rails website and welcome page got a welcome for the Rails 5 release. However, the current design of error pages don't follow this new style. We would love to make styling a bit more consistent.

Moreover, some pages display errors that require action from the user like when the migrations are pending. It would be interesting to propose a way for the user to handle certain error pages. Your project can also integrate with the Web-console project to eventually improve the user experience.

Skills: Ruby, Rack, JavaScript

Proactive Rails Update Helper

Every Rails update carries a lot of changes and it may be hard to keep track of them if you don't follow our tracker or newsletter. We would love to power-up a bit of statistical analysis and run through users applications suggesting using the new patterns or updated functionality with examples straight from the user's code.

Your proposal can include output examples and snippets of the potential API used to define new patterns, etc.

Skills: Ruby

Eager Load Action View Templates

Currently Rails always lazily compiles your views, so if you have ERB or HTML templates, those don't get turned to Ruby until a request comes in.

When a request comes in, we look for a template to be rendered and then we look to see whether or not a template has been turned into Ruby. If a template isn't compiled, we compile it on the spot. If it is, we cache it and get it from the cache on subsequent requests.

For this to work, though, we have to lock on threaded web servers, like Puma, because it may lead to a race condition. This is also a problem for forking servers, like Unicorn, because we're wasting memory.

We would want to be able to compile the templates in advance, so we don't have to lock the threaded servers on every request. This will also reduce the memory usage on forking servers.

Interesting resources:

Skills: Ruby, Rack

Improve Rails Testing Ecosystem

Rails 6 will certainly only support Ruby 2.4 and up. This means that, this will cut down a big part of our test suite matrix. That speeds-up test runs, but we can still make the suite better and faster.

In your proposal give suggestions for how to improve the test suite speed. Areas you can look into include parallelizing the tests, running only tests related to changes as well as general speed improvements.

The goal of the project is to make open source contributions easier. We want Travis to shorten the time it takes to see if something broke in a new Pull Request.

A first step at this has been done during the Google Summer of Code 2015 through the ttnt project but this never got integrated into Rails' repository. Your proposal could include ideas to ease integration and use of this tool.

Example of improvements:

Mentors: Robin Dupret

Skills: Ruby, Minitest, Travis-CI

Propose Your Own?

If nothing on this list interests you, you can always propose your own. Drop an email to the mailing list with your idea and see if any mentors would be interested in sponsoring your project.

Keep in mind that a self-directed project like this has a pretty high bar to clear – you would need to be knowledgeable/experienced enough to find the right project to work on, plus you need to be quite motivated/passionate about your project and take the lead. But if that sounds like you, we would love to have you onboard!

Clone this wiki locally