Summer of Code - Getting Started: Difference between revisions

removing the Octave Forge section. Instead, split them across theme (Image analysis, numerial, etc..)
(removing the Octave Forge section. Instead, split them across theme (Image analysis, numerial, etc..))
Line 36: Line 36:
: You will be expected to follow the same procedures as other contributors and core developers.
: You will be expected to follow the same procedures as other contributors and core developers.
: You will be helping current and future Octave developers by using the same style for changes, commit messages, and so on.  You should also read the same [https://www.gnu.org/software/octave/doc/interpreter/Contributing-Guidelines.html contributing] [http://hg.savannah.gnu.org/hgweb/octave/file/tip/etc/HACKING guidelines] we have for everyone.
: You will be helping current and future Octave developers by using the same style for changes, commit messages, and so on.  You should also read the same [https://www.gnu.org/software/octave/doc/interpreter/Contributing-Guidelines.html contributing] [http://hg.savannah.gnu.org/hgweb/octave/file/tip/etc/HACKING guidelines] we have for everyone.
: [[Hg_instructions_for_mentors#Mercurial_Tips_for_SoC_students | This page]] describes the procedures students are expected to use to publicly display their progress in a public mercurial repo during their work.
* '''The Maintainers Mailing List'''
* '''The Maintainers Mailing List'''
: We primarily use [https://lists.gnu.org/mailman/listinfo/octave-maintainers mailing lists] for communication among developers.
: We primarily use [https://lists.gnu.org/mailman/listinfo/octave-maintainers mailing lists] for communication among developers.
Line 156: Line 157:


'''Potential mentor:''' Nir Krakauer
'''Potential mentor:''' Nir Krakauer
=== TISEAN package ===
[http://www.mpipks-dresden.mpg.de/~tisean/Tisean_3.0.1/index.html TISEAN] is a suite of code for nonlinear time series analysis. It is old but there are many algorithms there that haven't been re-implemented as libre software. The objective is to integrate TISEAN as a
octave package as it was done for the Control package.
'''Required skills''': m-file scripting, c/C++ and FORTRAN API knowledge.
'''Difficulty''': easy/medium
'''Potential mentor''': [[User:KaKiLa]]
=== High Precision Arithmetic Computation ===
The Linear Algebra Fortran libraries used by Octave make use of of single (32 bits) and double (64 bits) precision floating point numbers. Many operations are stopped when matrices condition number goes below 1e-16: such matrices are considered as ill-conditioned. There are cases where this is not enough, for instance simulations implying chemical concentrations covering the range 10^4 up to 10^34. There are a number of ways to increase the numerical resolution, like f.i. make use of 128 bits quadruple precision numbers available in GFortran. A simpler option is to build an interface over Gnu MPL arbitrary precision library, which is used internally by gcc and should be available on any platform where gcc runs. Such approach has been made available for MatLab under the name mptoolbox and is licensed under a BSD license. The author kindly provided a copy of the latest version and agreed to have it ported under Octave and re-distributed under GPL v3.0
The architecture consists of an Octave class interface implementing "mp" (multi-precision) objects. Arithmetic operations are forwarded to MPL using MEX files. This is totally transparent to the end user, except when displaying numbers. This implementation needs to be ported and tested under Octave.
'''Required skills''': Octave classes and object programming. C for understanding the MEX glue code.
'''Difficulty''': medium.
'''Potential mentor''': Pascal Dupuis


== GUI ==
== GUI ==
Line 190: Line 213:
When tuning a SISO feedback system it is very helpful to be able to grab a pole or a zero and move them by dragging them with the mouse. As they are moving the software must update all the plotted lines. There should be the ability to display various graphs rlocuse, bode, step, impulse etc. and have them all change dynamically as the mouse is moving. The parameters of the compensator must be displayed and updated.
When tuning a SISO feedback system it is very helpful to be able to grab a pole or a zero and move them by dragging them with the mouse. As they are moving the software must update all the plotted lines. There should be the ability to display various graphs rlocuse, bode, step, impulse etc. and have them all change dynamically as the mouse is moving. The parameters of the compensator must be displayed and updated.
Potential mentor: Doug Stewart
Potential mentor: Doug Stewart
=== Interface to Electronic Circuit Simulator ===
[http://sourceforge.net/projects/qucs/ Qucs] is a C++ based circuit simulation package. This project aims to improve the interface to the Qucs algorithms to allow the transient, i.e. time series, simulation of circuits in Octave within a larger ODE system simulation driven by Octave. Other possible goals would be to make other analysis types available directly from Octave. There is an existing C++ interface which is based on handle class syntax available in the development version of Octave. The Qucs interface is intended to have two modes, synchronous and asynchronous. The asynchronous mode uses qucs to solve a circuit between two given time steps (internally taking as many smaller time steps as required), returning only the final result. This method is well developed. The alternative synchronous mode is intended to give full control of the time steps to Octave, and it is this mode which requires more work. A simple synchronous interface exists which can be built upon.
'''Required skills''': C++ and m-file scripting. Familiarity with new classdef syntax would be useful. May require some modification/adaptation of the Qucs sources. Familiarity with the Octave ODE solvers useful but not essential. Ability to compile Octave from the development sources.
'''Difficulty''': medium.
'''Potential mentor''': <strike>Richard Crozier</strike> ''Unfortunately I can't mentor this year (2014)''
'''Main Goals'''
* Improve the functionality of the transient solver interface by implementing a robust synchronous simulation mode that integrates well with Octave ode solvers, particularly those from the odepkg package from OctaveForge.
* Create interface to other analysis types (AC, DC, S-Parameter and Harmonic Balance)
* Packaging the interface for Octave, to make it available through OctaveForge


== Graphics ==
== Graphics ==
Line 249: Line 287:
=== Improve JIT compiling ===
=== Improve JIT compiling ===


Octave's interpreter is ''very'' slow on some loops. Last year, thanks to Max Brister's work, an initial implement of a just-in-time compiler (JITC) in [http://llvm.org LLVM] for GSoC 2012. This project consists in understanding Max's current implementation and extending it so that functions and exponents  (e.g. 2^z) compile with the JITC. This requires knowledge of compilers, C++, LLVM, and the Octave or Matlab languages. A capable student who demonstrates the ability to acquire this knowledge quickly may also be considered. Max himself will mentor this project. [http://planet.octave.org/octconf2012/jit.pdf Here] is Max's OctConf 2012 presentation about his current implementation. See also [[JIT]].
Octave's interpreter is ''very'' slow on some loops. Recently, thanks to Max Brister's work, an initial implement of a just-in-time compiler (JITC) in [http://llvm.org LLVM] for GSoC 2012. This project consists in understanding Max's current implementation and extending it so that functions and exponents  (e.g. 2^z) compile with the JITC. This requires knowledge of compilers, C++, LLVM, and the Octave or Matlab languages. A capable student who demonstrates the ability to acquire this knowledge quickly may also be considered. Max himself will mentor this project. [http://planet.octave.org/octconf2012/jit.pdf Here] is Max's OctConf 2012 presentation about his current implementation. See also [[JIT]].


=== Improve memory management ===
=== Improve memory management ===
Line 266: Line 304:
* honoring and computing "Sealed" attribute
* honoring and computing "Sealed" attribute
* support for function handle to methods
* support for function handle to methods
=== Improve MPI package ===
Octave Forge's [http://octave.sourceforge.net/mpi/index.html MPI package]
is a wrapper for basic MPI functions for parallel computing. It is implemented
by wrapping MPI function calls in simple DLD functions that map Octave's Datataypes to
MPI Derived Datatypes.
The proposed project deals with improving and extending the Octave MPI package, for example:
* Octave MPI applications can currently be only run in batch mode, add the ability to launch parallel jobs and collect their output in an interactive Octave session.
* Implement functions for non-blocking communication (MPI_Isend, MPI_Irecv)
* Implement one-to-many (Broadcast, Scatter), many-to-one (Reduce, Gather), and many-to-many (All Reduce, Allgather) communication routines
'''Required skills''': C++. Message Passing Interface (MPI).
'''Difficulty''': medium.
'''Potential mentor''': Carlo de Falco, Michael Creel, Sukanta Basu


== Infrastructure ==
== Infrastructure ==
Line 309: Line 364:
'''Difficulty''': Easy
'''Difficulty''': Easy


== Octave-Forge packages ==
== Image Analysis ==
 
=== Improve MPI package ===
Octave Forge's [http://octave.sourceforge.net/mpi/index.html MPI package]
is a wrapper for basic MPI functions for parallel computing. It is implemented
by wrapping MPI function calls in simple DLD functions that map Octave's Datataypes to
MPI Derived Datatypes.
The proposed project deals with improving and extending the Octave MPI package, for example:
* Octave MPI applications can currently be only run in batch mode, add the ability to launch parallel jobs and collect their output in an interactive Octave session.
* Implement functions for non-blocking communication (MPI_Isend, MPI_Irecv)
* Implement one-to-many (Broadcast, Scatter), many-to-one (Reduce, Gather), and many-to-many (All Reduce, Allgather) communication routines
 
'''Required skills''': C++. Message Passing Interface (MPI).
 
'''Difficulty''': medium.
 
'''Potential mentor''': Carlo de Falco, Michael Creel, Sukanta Basu


=== Improvements to N-dimensional image processing ===
=== Improvements to N-dimensional image processing ===
Line 335: Line 374:
'''Required skills''': m-file scripting, and a fair amount of C++ since a lot of image analysis cannot be vectorized. Familiarity with common CS algorithms and willingness to read literature describing new algorithms will be useful.  
'''Required skills''': m-file scripting, and a fair amount of C++ since a lot of image analysis cannot be vectorized. Familiarity with common CS algorithms and willingness to read literature describing new algorithms will be useful.  


'''Difficulty''': difficult.
'''Difficulty''': difficult


'''Potential mentor''': Carnë Draug
'''Potential mentor''': Carnë Draug


=== Interface to Electronic Circuit Simulator ===
[http://sourceforge.net/projects/qucs/ Qucs] is a C++ based circuit simulation package. This project aims to improve the interface to the Qucs algorithms to allow the transient, i.e. time series, simulation of circuits in Octave within a larger ODE system simulation driven by Octave. Other possible goals would be to make other analysis types available directly from Octave. There is an existing C++ interface which is based on handle class syntax available in the development version of Octave. The Qucs interface is intended to have two modes, synchronous and asynchronous. The asynchronous mode uses qucs to solve a circuit between two given time steps (internally taking as many smaller time steps as required), returning only the final result. This method is well developed. The alternative synchronous mode is intended to give full control of the time steps to Octave, and it is this mode which requires more work. A simple synchronous interface exists which can be built upon.
'''Required skills''': C++ and m-file scripting. Familiarity with new classdef syntax would be useful. May require some modification/adaptation of the Qucs sources. Familiarity with the Octave ODE solvers useful but not essential. Ability to compile Octave from the development sources.
'''Difficulty''': medium.
'''Potential mentor''': <strike>Richard Crozier</strike> ''Unfortunately I can't mentor this year (2014)''
'''Main Goals'''
* Improve the functionality of the transient solver interface by implementing a robust synchronous simulation mode that integrates well with Octave ode solvers, particularly those from the odepkg package from OctaveForge.
* Create interface to other analysis types (AC, DC, S-Parameter and Harmonic Balance)
* Packaging the interface for Octave, to make it available through OctaveForge


=== Color management functions in image package ===
=== Color management functions in image package ===
Line 381: Line 406:


'''Possible Mentor''': TBD
'''Possible Mentor''': TBD
=== High Precision Arithmetic Computation ===
The Linear Algebra Fortran libraries used by Octave make use of of single (32 bits) and double (64 bits) precision floating point numbers. Many operations are stopped when matrices condition number goes below 1e-16: such matrices are considered as ill-conditioned. There are cases where this is not enough, for instance simulations implying chemical concentrations covering the range 10^4 up to 10^34. There are a number of ways to increase the numerical resolution, like f.i. make use of 128 bits quadruple precision numbers available in GFortran. A simpler option is to build an interface over Gnu MPL arbitrary precision library, which is used internally by gcc and should be available on any platform where gcc runs. Such approach has been made available for MatLab under the name mptoolbox and is licensed under a BSD license. The author kindly provided a copy of the latest version and agreed to have it ported under Octave and re-distributed under GPL v3.0
The architecture consists of an Octave class interface implementing "mp" (multi-precision) objects. Arithmetic operations are forwarded to MPL using MEX files. This is totally transparent to the end user, except when displaying numbers. This implementation needs to be ported and tested under Octave.
'''Required skills''': Octave classes and object programming. C for understanding the MEX glue code.
'''Difficulty''': medium.
'''Potential mentor''': Pascal Dupuis
=== Mapping package ===
The [[Mapping package]] has started but lacks many functions, see [[Mapping package#Missing functions]].  Source code for some of the calculations has been donated and could be ported, or at least used for testing.  Choose this project if you'd like to learn more about mapping and GPS!
'''Required skills''': m-file scripting
'''Difficulty''': medium
'''Potential mentor''': fgnievinski
=== TISEAN package ===
[http://www.mpipks-dresden.mpg.de/~tisean/Tisean_3.0.1/index.html TISEAN] is a suite of code for nonlinear time series analysis. It is old but there are many algorithms there that haven't been re-implemented as libre software. The objective is to integrate TISEAN as a
octave package as it was done for the Control package.
'''Required skills''': m-file scripting, c/C++ and FORTRAN API knowledge.
'''Difficulty''': easy/medium
'''Potential mentor''': [[User:KaKiLa]]
= HG Procedures for students and mentors =
[[Hg_instructions_for_mentors#Mercurial_Tips_for_SoC_students | This page]] describes the procedures students are expected to use to publicly display their progress in a public mercurial repo during their work.
[[hg instructions for mentors | This page]] describes what mentors should do to review their work.
[[Category:Summer of Code]]
[[Category:Project Ideas]]