-
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.
IMPORTANT NOTICE: SciRuby encourages diversity. Scientific progress in general benefits from diversity and software development for science is no exception. We are really happy that the number of people from Asia, Africa and South America applying for GSoC projects is increasing. Our org admin this year is from India, our previous org admin was from Brazil. We have had students from Japan, India, Sri Lanka, Russia, etc. We have women software developers in our programme. We are happy to hear from you all!
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 - Sameer (@v0dro)
-
daru is Ruby gem for data analysis, visualization and manipulation. It has a good amount of functionality as of now that makes it a viable framework for data analysis in Ruby, but much remains to be done to make it a robust solution for data analysis.This sub-project will involve equipping daru with various useful tools that are regularly used in many data analysis tasks, or improving existing tools such that more people find daru useful.
-
A few of the areas where daru can see improvements are listed below:
- Implementing functions for directly importing stock market data from sources like Yahoo Finance and Google Finance and loading into a properly time-indexed DataFrame (or maybe even from multiple remote data sources like in pandas). See more details here.
- Better support for 'wild' data:
- Sorting with missing data present in Vector and DataFrame.
- More methods for handling missing data: fill_missing, drop_missing, etc.
- Support for window functions like Hamming window, Hanning window, etc.
- Time series resampling.
-
Students are free to suggest their own ideas for improvements and new functionality. Brownie points for something that will help make daru more useful for web developers (who constitute a majority of the Ruby community).
-
Recommended skills: Proficiency with Ruby and designing Ruby APIs. Knowledge of data analysis tools like pandas in Python or data.frame in R is a bonus.
- Mentors: Pjotr Prins (@pjotrp), Francesco Strozzi (@fstrozzi)
- JRuby is getting faster and faster and outperforms MRI 4-10x and is getting faster thanks to work by IBM and Oracle. Unfortunately SciRuby does not run on JRuby because of C-libraries. We are looking for a student who can change C-bindings for JVM libraries (of which there are many good alternatives) and port SciRuby with tests to the JVM. This would also open up true multi-threading for SciRuby.
- Recommended skills: You should be comfortable with both Ruby and the JVM.
- 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.