Skip to content

2018 Ideas

Guillermo Iguaran edited this page Mar 13, 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 are 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.

Mentors: Genadi Samokovarov, Guillermo Iguaran

Skills: Ruby, Rack

Modernizing Error Pages

The Rails website and welcome page got a welcome redesign for the Rails 5 release. However, the current design of error pages doesn'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 act on those errors straight from the error page. The project can introduce the concept of actionable errors and how to implement and integrate them with the new error pages. Your project can also integrate with the Web Console gem to remix the style of the console, so it fits with the whole redesign.

Mentors: Genadi Samokovarov, Guillermo Iguaran

Skills: Ruby, Rack, JavaScript

Long Running Ruby and Rails Benchmarks

During previous Google Summer of Code, we have already launched an improved RubyBench.org but we need more time to polish and refine it. We would like a student to work again on this project. Here are some features that you can include in your proposal:

  1. Allow certain members to run "git bisect" like operation for a custom benchmark script
  2. Improve our reports to the whole community. For example, we could automatically detect performance regressions in our Rails benchmarks and report back to the Rails team
  3. Work on improving micro and macro Rails benchmarks

Another part of this project will consist in reducing memory usage of Rails. Rails 6.0 will depend on Ruby 2.4 and up, this introduces new techniques for reducing memory usage per https://samsaffron.com/archive/2018/02/16/reducing-string-duplication-in-ruby. Perform deep analysis of all hot paths in Rails and apply memory minimization techniques using https://github.com/SamSaffron/memory_profiler.

This project may extend beyond Rails, looking at Bundler, Ruby, and RubyGems as well.

Read Sam Saffron's blog post and visit RubyBench community site for previous discussions.

Mentors: Guo Xiang Tan, Noah Gibbs

Skills: Ruby, Docker, Rails, Linux

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.

The 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!