-
Notifications
You must be signed in to change notification settings - Fork 79
Google Summer of Code 2016 Ideas
Feel free to reach us by joining #sciruby
on chat.freenode.net or via our mailing list.
See also: GSoC Student Application
We strongly recommend that you pick one of the ideas listed below. We value contributions in advance of GSoC, even if they're just little ones. Go pick out something in one of our trackers and work on it, talk to folks on the listserv, and get an idea for what features are needed.
You don't need to know a lot about Ruby to work on a project: depending on how much you already know, it'll be pretty easy to learn enough to be able to contribute. However, you may need some familiarity with scientific computation. If you don't have any, take a look at "Numerical Recipes in C", which you'll probably find in your university's library.
In any case, if you feel your skills aren't enough for some project, please ask us on our IRC channel (see contact section above) or our Google Group (see sciruby.com to sign up) and we can help you.
Our number-one priority right now as an organization is most likely visualization. If we write good visualization software, SciRuby will become much more accessible to people.
Most of the main SciRuby’s landing page on Github holds the stable version of SciRuby gems but developers and contributors should work on the very latest (bleeding edge) repositories in order to make sure that changes can be committed without conflict arising.
Try reading Finding The SciRuby Development Repositories on Github if you would like a brief introduction on finding the latest development gems to work on from Github. Also go through the coding guidelines before sending your first patch.
Here's a great tutorial: http://www.thinkful.com/learn/github-pull-request-tutorial/
Have a look and feel free to ask if you have any questions.
We used to say "required skills," but realized there may exist cultural as well as gender differences in how people interpret this phrase. We would like you to have at least one of the listed skills. More is better. Remember that GSoC is a learning experience, and we expect that you'll be lacking in some areas of knowledge.
One of the most important skills in science and engineering is knowing how to say, "I don't know." If you don't know something, look it up, try to understand it, and then feel free to ask for help on our listserv or in IRC.
NMatrix is SciRuby's numerical matrix core, implementing dense matrices as well as two types of sparse (linked-list-based and Yale/CSR). NMatrix is a fairly well-established project which has received Summer-of-Code-like grants from both Brighter Planet and the Ruby Association (in other words, from Matz, who created Ruby). Those who contribute to NMatrix will likely eventually become authors of a jointly-published peer-reviewed science article on the library. Additionally, NMatrix is a good place to gain practical C and C++ experience, while also working to improve Ruby.
NMatrix currently relies on ATLAS/CBLAS/CLAPACK and standard LAPACK for several of its linear algebra operations. In some cases, native versions of the functions are implemented, so that the libraries are not required. There are quite a number of areas for growth in terms of the capabilities of NMatrix here.
A colossal amount of data is being generated every minute and having good tools to analyse this data is something that has become an essential feature of any modern language. These projects deal with making Ruby a viable language for data analysis and statistics task.
If you choose to contribute to any of these, you will be exposed to the inner workings of some very useful tools. In addition to this, most of the Ruby community as of now is still waking up to the endless possibilities that Ruby might hold for data analysis, so you will feel an immediate impact of any work that you do in this field. Ruby conferences around the world are opening up to host talks about data tools in Ruby, which will give you a great platform to showcase your work and derive long term career benefits from it.
Following are the ideas under this domain:
Categorical data support for daru, statsample and statsample-glm
Mentors - Alexej (@agisga) | Sameer (@v0dro) | Victor (@zverok)
-
A categorical variable is currently treated like a nominal/ordinal variable in daru, statsample and statsample-glm and thus calculations involving categorical data are not performed accurately.
-
Support for categorical data is very important and is strongly felt in the Ruby community. This mailing list discussion and the issues open here, here and here provide more information about the same.
-
This sub-project will involve two things - implement a new index called CategoricalIndex for Daru similar to that in pandas for supporting categorical data and change the regression methods in statsample and statsample-glm so that they support categorical data supplied by daru.
-
This project can be subdivided into 2 major components:
- Support categorical data with a new
:categorical
data type andCategoricalIndex
index class in daru. - Support operations on categorical data from daru on statsample and statsample-glm.
- Support categorical data with a new
-
Recommended skills: Proficiency with Ruby, Good understanding of designing Ruby APIs, preferably should have worked with data analysis and statistics in the past.
-
Mentors: Maurice Diamantini, Pjotr Prins (@pjotrp)
-
Julia is a new LLVM-based computer language aimed at statistics on large datasets. Julia offers Matlab style linear algebra and libraries for optimizations, graphs etc. It is gaining traction in the scientific community and can be used from R and Python using, so-called, bindings. Rubinius is a Ruby that also targets the LLVM, see Rubinius design. This means that, in principle, has the advantage that methods and data can be called natively between Ruby and Julia, possibly outperforming other bindings. At this point the binding strategy is not decided. One possibility is to generate a wrapper such as was done from Julia to Clang; or in our case from Rubinius to Julia. The output of this project would be a Ruby gem that can bring Julia functionality to Rubinius that avoids copying of large data structures, possibly providing a more Ruby-style interface. The gem does not need to cover all Julia libraries, but it should contain the fundamental bindings that other people can use as templates for future work.
-
Recommended skills: You should be comfortable with Ruby and be willing to learn Julia and the LLVM. Ideally you have some experience with language bindings.
- Mentors: Pjotr Prins (@pjotrp), John Woods (@mohawkjohn)
- Matplotlib is the Python tool of choice for plotting. While it's not the most robust, it's easy to use, and based on MATLAB plotting — such that it's incredibly easy to port code from MATLAB (or from Python). It'd probably be better not to reinvent the wheel and write a whole new Matplotlib, but perhaps there could be a Ruby API for Matplotlib. Some research would need to be done to demonstrate that the concept is viable, but this would be an outstanding project to get working.
- Recommended skills: You should be comfortable with Ruby metaprogramming concepts, or should be prepared to learn them during the application process. Some familiarity with Python or MATLAB might be helpful, but isn't necessary.
- Mentors: Daniel Mendler (@minad)
- Project page: https://github.com/SciRuby/iruby
- Issues/Overview of current development: https://github.com/SciRuby/iruby/issues
- Most important: IPython 3 (Jupyter) has been released recently and this is a major change for different language kernels like IRuby. The integration for other languages has been greatly improved in Jupyter, which is also reflected in the name change which underlines that Jupyter is more agnostic to the underlying kernel language. However there are breaking protocol changes. You can start right now to make IRuby compatible for Jupyter. Start with http://ipython.org/ipython-doc/3/whatsnew/version3.html
- The IRuby system needs to be improved in stability, ease of installation and integration with the other scientific Ruby tools (e.g. plotting).
- The goal of this project is to get IRuby from the current state to something which is ready for production use! I consider this a very important project since IRuby acts (or can act in the future) as a central component of the SciRuby framework which allows you to access all the numerical and plotting functionality in a very beginner friendly way.
- This project will also require a fair amount of communication with the other sciruby projects to help them to integrate better which IRuby and with each other.
- Recommended skills: You should be comfortable with common Ruby programming concepts. It would be helpful if you are interested in other technologies and languages too, e.g. for digging into the IPython code or the 0mq-protocol.
Ruby need efficient tools in scientific domains aside from linear algebra: graph algorithms, mathematical programming, etc. For efficiency, these tools should be either new code written from scratch in C/C++ (with need several years of work) or bind to already existing stable libraries.
- Mentors: Pjotr Prins (@pjotrp), Maurice Diamantini
- The LEMON C++ graph library (Library for Efficient Modeling and Optimization in Networks) is a good candidate as a Ruby binding because it has a clean C++ interface. It also provides a general MIP (Mixed Integer Programming) independent interface to various other free or commercial mathematical solvers (Glpk, Clp, CPLEX, Guroby, and so on). It is well maintained and its integration in the COIN-OR set of tools is a gauge of its quality. Such a binding would be a great advance for the operation research and combinatorial optimization Ruby community.
- Recommended skills: You should be comfortable in C++ and familiar with Ruby.
- Mentors: John Woods (@mohawkjohn)
- The SPICE Toolkit is a NASA library which allows researchers, astrophysicists, and spacecraft navigators to query information on ephemerides (locations, velocities, attitudes, etc.) of planetary bodies and spacecraft. There is at least one Python wrapper, SpicePy, and a very old Ruby wrapper with extremely limited capabilities (which @mohawkjohn has put on Github, though he's not the original author). It'd be great to either update the existing Ruby wrapper or write a totally new one — or possibly even write an auto-generator using FFI to produce Ruby API for this important C library.
- Recommended skills: You should be familiar with both C and Ruby.
- Mentors: John Woods (@mohawkjohn)
- Trick is a NASA simulation library, which can be — among other things — used to test flight software for spacecraft. Think of it as kind of like Kerbal Space Program, but much more realistic. It uses SWIG to generate Python interfaces for simulated devices such as sensors, and for specifying simulation run parameters. This proposed project involves the creation of a Ruby interface to parallel the Python interface.
- The Trick maintainers aren't thrilled about having to support another interface, so options are: (1) creating a fork, or (2) creating an extension or plugin of some kind. There are details in this Trick issue tracker thread.
- Note: While this project does not require you to be a U.S. person, there is possibly additional work that could be done if you are. Namely, you might have the opportunity to help us write the Ruby interface for the simulator for a spacecraft being built by Intuitive Machines.
- Recommended skills: You should be familiar with C, C++, and Ruby. Basic knowledge of Python and SWIG would also be beneficial.