Summer of Code - Getting Started

From Octave
Revision as of 13:16, 14 February 2012 by JordiGH (talk | contribs) (init)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

The following is distilled from the Projects page for the benefit of potential Summer of Code students. Although students are welcome to attempt any of the projects in that page or any of their own choosing, here we offer some suggestions on what good student projects might be.

General Guidelines

Octave is mostly written in (sadly, mostly undocumented) C++ and its own scripting language (m-scripts), which includes (or should include) most of the Matlab language as a subset. We generally prefer a different Octave house style to the usual Matlab style for m-scripts, but it's mostly a superficial stylistic difference. Additionally, there are bits and pieces of Fortran, Perl, C, awk, and Unix shell scripts here and there. In addition to being familiar with C++ and/or Octave or Matlab's scripting languages, you should probably be familiar or learn about Octave's infrastructure:

  • The GNU build system is used to build Octave. While you generally don't need to understand too much unless you actually want to change how Octave is built, you should be able to understand enough to get a general idea of how to build Octave. If you've ever done a configure && make && make install series of commands, you have already used the GNU build system.
  • Mercurial (abbreviated hg) is the distributed version control system (DVCS) we use for managing our source code. You should have some basic understanding of how a DVCS works, but hg is pretty easy to pick up, especially if you already know a VCS like git or svn.
  • You should also read the same contributing guidelines we have for everyone.
  • We primarily use mailing lists for communication. You should follow basic mailing list etiquette. For us, this mostly means "do not top post".
  • We also have an IRC channel. The atmosphere is more relaxed, and we may talk about things that are not at all related to Octave.
  • In addition, you probably should know some mathematics, engineering, or experimental science or something of the sort. If you've used Matlab before, you probably have already been exposed to the kinds of problems that Octave is used for.

Suggested projects

The following projects are broadly grouped by category and probable skills required to tackle each. Remember to check Projects for more ideas if none of these suit you, and your own ideas are always welcome.


These projects involve implementing certain mathematical functions in Octave.

Required skills: You should understand quite a bit of mathematics. Words like "eigenvalue", "analytic", and "Taylor series" shouldn't scare you at all. There is probably little C++ experience required, and probably much of these problem can be solved with m-scripts.

Possible difficulty: Mid-to-hard depending how much mathematics you know and how well can you read numerical analysis journal articles.

Improve logm, sqrtm, funm

The goal here is to implement some missing Matlab functions related to matrix functions like the matrix exponential. There is a general discusssion of

Generalised eigenvalue problem

Certain calling forms of the eig function are missing. The problem is to understand what those missing forms are and implement them.


Octave is currently working on a new native GUI. It is written in Qt, but it is still not ready for production. There are various ways in which it could be improved.

Required skills: C++ and Qt. Whatever tools you want to use to write Qt code are fine, but Qt Creator is a popular choice nowadays.

Difficulty: Mostly medium, depending if you've had Qt or GUI development experience before.

Finish the Octave GUI

The GUI currently on its own branch in hg. It is not stable enough and its design is still in flux.

Integrate the GUI with the Octave build system

The current GUI build system is independent of Octave. First one builds and installs Octave, and then the GUI. The goal of this project is to integrate the GUI and make it all build together. Good understanding of both the GNU build system and Qt's (qmake and the meta-object compiler) will be necessary here.

Implement a Qt widget for manipulating plots

Octave has had for some time a native OpenGL plotter. The plotter requires some user interaction for manipulating the plots, and it's been using fltk for quite some time. We want to replace this with Qt, so it fits better with the overall GUI look-and-feel and is easier to extend in the future.


Octave has a new native OpenGL plotter (currently via [fltk], but we want to move away from that). There are several possible projects involved with it. Michael Goffioul has expressed interest in mentoring these projects.

Required skills: C++ and OpenGL. General understanding of computer graphics.

Difficulty: Medium, depending on your previous understanding of the topic.

= Lighting

Implement transparency and lighting in OpenGL backend(s). A basic implementation was available in JHandles. This needs to be ported/re-implement/re-engineered/optimized in the C++ OpenGL renderer of Octave.

= Cairo renderer

Implement a Cairo-based renderer for 2D-only graphics, with support for PS/PDF/SVG output (for printing). Naturally this requires understanding or learning how Cairo works.