Ruby Central Project Ideas for GSoC 2008
Here are some of the ideas that have been kicked around for this year's summer of code. Please don't think that this is an exclusive list. If you'd like to work on something that isn't listed here, please feel free to submit a proposal, many of our past projects have come from student submitted ideas. (If you have additional ideas you'd like us to add to this list, please contact Pat Eyler.)
Adhearsion GUI
Intermediate
Develop an open-source Rails-based GUI that runs atop Adhearsion's very high level abstractions of the Asterisk PBX, a solution for building VoIP applications. This project hopes to radically disrupt a multi-million dollar PBX market with a genuinely open-source alternative based on open-source Ruby technologies. The student should have prior experience with TDD/BDD Rails development. Prior VoIP experience is not necessary but the student should have a keen desire to explore new technologies such as VoIP hacking!
Embed Python in Ruby
Intermediate/Expert
Update or replace this project to work with modern Ruby.
Port Google Web Toolkit (GWT) to RubyJS
Advanced
RDoc wiki
Intermediate
Create a wiki-like interface that would allow in-browser edits of RDocs. This will take some creative thinking (for example, using Git to create branches during editing that are merged back into HEAD to avoid writing a file merging method) and some digging around in RDoc's source.
Replace RDoc or Add ERb templates
Intermediate
RDoc's current template implementation is rather esoteric. As such, there are very few alternative RDoc templates available. Transitioning to something like ERb or another readable template language makes much more sense. You could either completely rewrite the RDoc utility (using as much functionality as possible from the existing implementation) or simply find a way to hack ERb templates into the current utility.
Collaborative Authoring Platform
Beginner/Intermediate
Create a collaborative authoring web application, similar to the software that powers http://manuals.rubyonrails.org/, but offers more features such as truly collaborative editing, PDF output, and so on. This could be used by open source projects to enhance the quality and accessibility of "the middle documentation" like manuals, tutorials, and so on.
Merbtastic
Intermediate / Expert
This project would be a Merb application, that manages many static sites. The static sites are served directly by Nginx, any urls not found are passed back to the managing Merb app. This will allow things like email forms to be included trivially in a mostly static site, without the overhead of a Merb instance for each domain, static site. It also gives flexibility to add additional generic dynamic parts of the app that may be applicable. If you need more info, Wayne or myself can answer questions. It's a very larval concept at the moment.
rSpec/jSpec Integration
Expert
Create a rake task that will run jspec specs for JavaScript directly on the command-line. This can be accomplished via Ruby/SpiderMonkey or XULRunner.
Improve Code Generators
Beginner / Intermediate
This project would take ownership of all the code generators in Merb. You would work to create generators for all the common things you need to do in a Merb app and you would need to make these generators aware of which ORM and template language the app was using and act accordingly.
Microformats in Merb
Intermediate
Merblets (In Progress)
Expert
This project would explore different techniques for running multiple Merb apps in the same merb process. This would include multiple separate routers, one for each app and a way to do vhost style routing to these sub apps. Also a way to share layouts and other assets between the apps would be good.
Globalization
Expert
This project would take on the task of writing a globalization plugin for Merb and abstracting out all error messages and other hard coded text to be multi lingual aware and configurable.
Merb Forum
Intermediate / Expert
This project would aim to write a high quality featureful forum application.
jQuery Flot Plugin for Merb
Intermediate
Flot is a jQuery graphing engine that produces Flash-like charts. This plugin will provide abstractions for Merb that will make it easy to push chart data down to Flot and have it display appropriately.
Remove Rubigen Dependency
Expert
This project would aim to replace rubigen with a custom built code generation framework specifically suited to Merb's unique requirements and configurability. This is a difficult task, but would be extremely helpful for the future, as Merb currently relies on the somewhat finicky rubigen, which was extracted from Rails.
Sequel in MerbfulAuth
Beginner / Intermediate
This project would aim to make Sequel a first class citizen in the merbful_authentication plugin.
Google Maps in Merb
Intermediate
Create a google maps plugin for Merb.
Improve Standard Library Specs
Intermediate
Rubinius has the largest suite of Ruby specs (more than 20,000), but there are a number of missing specs for the Standard Library. Help fill out the stdlib specs.
Improve Standard Library Integration
Advanced
Rubinius is missing support for some elements of the Ruby standard library. Go through the missing libraries and add them (adding tests where they are missing to prevent regressions).
Test DB Adapters Against Subtend
Advanced
Make sure that the C DB adapters commonly used in Rails work with Rubinius' subtend. If they do not work, add the appropriate subtend functions (in C) to make the drivers work with Rubinius. This will require knowledge of C, in addition to advanced knowledge of Ruby.
Improve Gem Support
Intermediate / Advanced
Find gems that are not currently compliant with Rubinius and add necessary features to Rubinius to make them work. This should focus on gems or other projects that are in common use with Rails.
mod_rubinius
Advanced
Assist in development of mod_rubinius.
Specs for Java Integration
Intermediate
Writing a whole suite of specs for current Java integration behavior...and then expanding that suite to include behavior we want to add. This work would go hand-in-hand with a rework of Java Integration we're likely to start soon.
Getting Tools Completed and Gathered
Intermediate
Collect and help round out all the profiling/debugging/etc tools for JRuby and get them to final releasable states. There's several projects in the works, but most of them are stalled and folks need better debugging. This project could also include simply working with existing IDEs (NetBeans, etc) to figure out how to get them to debug compiled Ruby code correctly (currently they won't step into .rb files).
RMagick for JRuby
Intermediate
Continue work on an interface-compatible RMagick port. There's already RMagickJR which has a lot of work into it, but nobody's had time to continue it. A working RMagick gem would ease migration for lots of folks using Ruby.
Useful Rails Benchmarks and JRuby Rails Perf Analysis
Intermediate
Putting together a definitive set of fine and coarse-grained benchmarks for Rails. JRuby on most benchmarks has been faster than Ruby 1.8.6...and yet higher-performance Rails has been elusive. We need better benchmarks and better visibility into core Rails. Bonus work: help nail down what's slower about JRuby.
JRuby Public API Based on Extensions
Intermediate
Survey all existing JRuby extensions and put together an official public API based on core JRuby methods they're using. This would help us reduce the hassle of migrating extensions across JRuby versions.
RDoc Comments Throughout JRuby Source + ri/rdoc in JRuby Distribution
Beginner / Intermediate
Add RDoc comments to all the JRuby versions of Ruby core methods, and get RI/RDocs generating as part of JRuby distribution builds. Then we could ship RI and have it work correctly. Ola Bini has already started some of the work, creating an RDoc annotation we can add to our Ruby-bound methods.
Win32OLE Library for JRuby
Advanced
Implement the win32ole library for JRuby. This would also be an excellent contribution, since there's already libraries like Jacob to take some of the pain out of it, and it would be great to have it working on JRuby. (suggested by sgwong)
Cocoa Bindings for JRuby
Intermediate
Implement a full, compatible set of Apple Cocoa bindings for JRuby. You could use JNA, and I believe there's already Cocoa bindings for Java you could reuse as well, but I'm not familiar with them.
Libraries for Loading and Invoking Native Libs
Intermediate
Complete implementation of the DL library (Ruby's stdlib for programmatic loading and calling native dynamic libraries) and/or Rubinius's FFI (same thing, with a somewhat tidier interface). Here too there's lots of help: I've already partially implemented DL using JNA, and it wouldn't be hard to finish it and/or implement Rubinius's FFI. And implementing Rubinius's FFI would have the added benefit of allowing JRuby to share some of Rubinius's library wrappers.
Security Manager Policy
Intermediate
Craft a reference policy file that loosens enough restrictions to run Rails on Tomcat/Glassfish with the Security Manager enabled. Perhaps several reference policies for various scenarios (e.g. adding JRuby into an existing Java web app)?
sqlite3
Intermediate
Figure out whether jdbc adapter can satisfy this db or use JNA to support it.
Ruby Debugger
Intermediate / Advanced
Ruby 1.9 ships with debug.rb, a debugger totally written in Ruby, using Ruby's trace hooks and tracer library. It is pretty minimal compared to ruby-debug in 1.8 which supports multiple IDE front-ends and remote debugging among other things. Some progress has been made towards aligning improving debug.rb, but there's a lot of work left to do. This work will require hooking into the 1.9 C API to simulate binding() dynamically from the runtime objects. debug.rb requires that the debugged code be compiled with tracing. However another advanced topic would be to add VM bytecode replacement as another way to enter the debugger. ( rubinius does this.) A simpler task would be to extend ruby-debug such as to add gdb-style signal handling. Finally there has been work in improving the Emacs Debugging experience possibly in conjunction with replacing GUD. Right now however work is focussed primarily in Ruby.
