Summer of Code - Getting Started: Difference between revisions

Jump to navigation Jump to search
→‎Octave Package management: Rewrite introduction. Mention metadata acquisition.
No edit summary
(→‎Octave Package management: Rewrite introduction. Mention metadata acquisition.)
(6 intermediate revisions by 4 users not shown)
Line 98: Line 98:
|-
|-
! <br />!! !! !! !! !! !!
! <br />!! !! !! !! !! !!
|-
| [[Summer_of_Code_Project_Ideas#Make_specfuns_special_again | Make specfuns special again]] || Marco Caliari || Colin Macdonald, Ankit Raj || Numerical || No || Medium || [https://gsocspecfun.blogspot.de/ GSoC 2017]
|-
|-
| [[Summer_of_Code_Project_Ideas#ode15s_:_Matlab_Compatible_DAE_solver | ode15{i,s} : Matlab Compatible DAE solvers]] || Carlo de Falco || Francesco Faccio, Marco Caliari, Jacopo Corno, Sebastian Schöps || Numerical || No  || Medium || GSoC 2016
| [[Summer_of_Code_Project_Ideas#ode15s_:_Matlab_Compatible_DAE_solver | ode15{i,s} : Matlab Compatible DAE solvers]] || Carlo de Falco || Francesco Faccio, Marco Caliari, Jacopo Corno, Sebastian Schöps || Numerical || No  || Medium || GSoC 2016
|-
|-
| [[Summer_of_Code_Project_Ideas#Improve_logm.2C_sqrtm.2C_funm | Improve logm, sqrtm, funm]] || Jordi Gutiérrez Hermoso || Marco Caliari, Mudit Sharma || Numerical || [https://github.com/RickOne16/matrix No]  || Hard || Independent devs 2016
| [[Summer_of_Code_Project_Ideas#Improve_logm.2C_sqrtm.2C_funm | Improve logm, sqrtm, funm]] || ? || Marco Caliari, Mudit Sharma || Numerical || [https://github.com/RickOne16/matrix No]  || Hard || Independent devs 2016
|-
|-
| [[Summer_of_Code_Project_Ideas#Improve_iterative_methods_for_sparse_linear_systems | Improve iterative methods for sparse linear systems]] || Marco Caliari || Carlo de Falco || Numerical || No  || Hard || SOCIS 2016
| [[Summer_of_Code_Project_Ideas#Improve_iterative_methods_for_sparse_linear_systems | Improve iterative methods for sparse linear systems]] || Marco Caliari || Carlo de Falco || Numerical || No  || Hard || SOCIS 2016
Line 126: Line 124:
|-
|-
| [[Summer_of_Code_Project_Ideas#Chebfun_in_Octave | Chebfun in Octave]] || Colin B. Macdonald || [[User:KaKiLa|KaKiLa]], Ankit Raj, needs core-Octave mentor/comentor || Infrastructure, Numerical || Yes  || Hard || Never
| [[Summer_of_Code_Project_Ideas#Chebfun_in_Octave | Chebfun in Octave]] || Colin B. Macdonald || [[User:KaKiLa|KaKiLa]], Ankit Raj, needs core-Octave mentor/comentor || Infrastructure, Numerical || Yes  || Hard || Never
|-
| [[Summer_of_Code_Project_Ideas#Octave_code_sharing | Octave code sharing]] || [[User:Siko1056|Kai T. Ohlhus]] || ? || Infrastructure || Yes  || Medium || Never
|-
|-
| [[Summer_of_Code_Project_Ideas#GUI Variable Editor and Property Inspector | GUI Property Inspector]] || ? ||  || GUI || Yes  || Medium || Never
| [[Summer_of_Code_Project_Ideas#GUI Variable Editor and Property Inspector | GUI Property Inspector]] || ? ||  || GUI || Yes  || Medium || Never
Line 139: Line 135:


These projects involve implementing certain mathematical functions, primarily in core Octave.
These projects involve implementing certain mathematical functions, primarily in core Octave.
=== Make specfuns special again ===
Traditionally, problem solving environments like Octave provide simple interfaces to numerical linear algebra, special function evaluation, root finding, and other tools.  Special functions (such as Bessel functions, exponential integrals, LambertW, etc) are expected by users to "just work".  But many of Octave's special functions could be improved to improve their numerical accuracy.  Generally a user might expect these to be accurate to full 15 digits.  Software testing is important to Octave; this project would improve the tests of many special functions, in particular by comparing the output with slow-but-accurate symbolic computations.
State: some bugs include [https://savannah.gnu.org/bugs/?48307 #48307] (sinc), [https://savannah.gnu.org/bugs/?47738  #47738] (expint), [https://savannah.gnu.org/bugs/?47800  #47800] (gammainc), [https://savannah.gnu.org/bugs/?48036 #48036] (gammaincinv) [https://savannah.gnu.org/bugs/index.php?48316 #48316] (besselj) ''TODO: add others?''  The unmaintained specfun pkg had some poor implementations (e.g., divergence for large x, see [https://github.com/cbm755/octsympy/issues/416].).  See also the Symbolic functions in `@double`: these probably should have native double implementations.
* '''Required skills'''
: Octave m-file programming, some familiarity with Approximation Theory (a branch of mathematics).
* '''Difficulty'''
: Medium (mathematics needed, but on the other hand, perhaps little or no C++).
* '''Potential mentors'''
: Marco Caliari, Colin Macdonald, others?
How to get started: pick a special function, see if it has tests: contribute a patch that adds more tests, e.g., comparing its values to symbolic computations or other highly accurate solutions


=== ode15{i,s} : Matlab Compatible DAE solvers ===
=== ode15{i,s} : Matlab Compatible DAE solvers ===
Line 167: Line 148:
[http://hg.savannah.gnu.org/hgweb/octave/file/4890b1c4a6bd/scripts/ode/ode15i.m ode15i.m] and
[http://hg.savannah.gnu.org/hgweb/octave/file/4890b1c4a6bd/scripts/ode/ode15i.m ode15i.m] and
[http://hg.savannah.gnu.org/hgweb/octave/file/4890b1c4a6bd/scripts/ode/ode15s.m ode15s.m].
[http://hg.savannah.gnu.org/hgweb/octave/file/4890b1c4a6bd/scripts/ode/ode15s.m ode15s.m].
The list of outsanding tracker tickets concerning this implementation can be found  
The list of outstanding tracker tickets concerning this implementation can be found  
[https://savannah.gnu.org/search/?Search=Search&words=ode15&type_of_search=bugs&only_group_id=1925&exact=1&max_rows=25#options here]
[https://savannah.gnu.org/search/?Search=Search&words=ode15&type_of_search=bugs&only_group_id=1925&exact=1&max_rows=25#options here]


Line 183: Line 164:
to a possible project plan would be improving documentation and tests in odepkg and removing  
to a possible project plan would be improving documentation and tests in odepkg and removing  
overlaps with the documentation in core Octave.
overlaps with the documentation in core Octave.
   
   
* '''Required skills'''
* '''Required skills'''
Line 201: Line 181:
: Difficult.
: Difficult.
* '''Potential mentors'''
* '''Potential mentors'''
: Jordi Gutiérrez Hermoso
: ?


=== Improve iterative methods for sparse linear systems ===
=== Improve iterative methods for sparse linear systems ===
Line 362: Line 342:
=== Octave Package management ===
=== Octave Package management ===


Octave management of installed packages is performed by a single function, {{codeline|pkg}}, which does pretty much everything. This function has a few limitations which are hard to implement with the current codebase, and will most likely require a full rewrite.
[[Packages]] are extensions for Octave, that are mainly maintained by the [[Octave Forge]] community.
To get those extension to work with Octave, there is a single function, {{manual|pkg}}, which does pretty much everything.
This function has a few limitations which are hard to implement with the current codebase, and will most likely require a full rewrite.
A major step forward for a rewritten package manager is the [https://github.com/apjanke/octave-packajoozle/ "packajoozle" project] by Andrew Janke.


The planned improvements are:
The planned improvements (see also {{bug|39479}}) are:


* install from URLs
* install and update from repositories (hg and git)
* install and update from repositories (hg and git)
* automatic handling of dependencies
* automatic handling of dependencies
Line 375: Line 357:
* support for multiple Octave installs
* support for multiple Octave installs
* support for system-wide and user installed packages
* support for system-wide and user installed packages
* testing packages (<code>pkg test <package-name></code>)
* improved metadata acquisition (<code>pkg list -forge</code>) from https://octave.sourceforge.io/


The main objective of this project is to make {{codeline|pkg}} more user friendly and to make it a tool to foster third party participation in Octave.
The main objective of this project is to make {{manual|pkg}} more user friendly and to make it a tool to foster third party participation in Octave.
{{codeline|pkg}} needs to be more flexible and intelligent when dealing with packages, different verisons and different sources, as well as options on how to build and install the package.
However, the current {{manual|pkg}} also performs some maintenance functions which it probably should not.
There are also advance features of pkg that are useful for testing packages. However, the current {{codeline|pkg}} also performs some maintenance functions which it probably should not.
Instead a package for developers should be created with such tools.
Instead a package for developers should be created with such tools.
To do this enhancement effectively, a refactoring of the current {{codeline|pkg}} code will be needed (see [https://github.com/apjanke/octave-packajoozle/ "packajoozle" project]).


To do this enhacenment effectively, a refactoring of the current {{codeline|pkg}} code will be needed.
Many of these problems have been solved in other languages.
[https://bitbucket.org/carandraug/octave/commits/branch/pkg This job was started once], but due to diverging and growing specifications, it stalled.  
Familiarity with how other languages handle this problem will be useful to come up with elegant solutions.
In this project we will focus on the most needed features, keeping the requirements to a minimum.  
In some cases, there are standards to follow.
For example, there are specifications published by freedesktop.org about where files should go ([http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html base directory spec]) and Windows seems to have its own standards.
See bugs {{bug|36477}} and {{bug|40444}} for more details.


Many of these problems have been solved in other languages. Familiarity with how other languages handle this problem will be useful to come up with elegant solutions. In some cases, there are standards to follow. For example, there are specifications published by freedesktop.org about where files should go ([http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html base directory spec]) and Windows seems to have its own standards. See bugs {{bug|36477}} and {{bug|40444}} for more details.
In addition, package names may start to collide very easily.
 
One horrible way to workaround this by is choosing increasingly complex package names that give no hint on the package purpose.
In addition, package names may start to collide very easily. One horrible way to workaround this by is choosing increasingly complex package names that give no hint on the package purpose. A much better is option is providing an Authority category like Perl 6 does. Nested packages is also an easy way to provide packages for specialized subjects (think {{codeline|image::morphology}}). A new {{codeline|pkg}} would think all this things now, or allow their implementation at a later time. Read the [[OEP:pkg|unfinished plan]] for more details.
A much better is option is providing an Authority category like Perl 6 does.
Nested packages is also an easy way to provide packages for specialized subjects (think {{codeline|image::morphology}}).
A new {{manual|pkg}} would think all this things now, or allow their implementation at a later time.
Read the [[OEP:pkg|unfinished plan]] for more details.


* '''Minimum requirements'''
* '''Minimum requirements'''
: Ability to read and write Octave code, experience with Octave packages, and understanding of the basics of autotools. The most important skill is software design.
: Ability to read and write Octave code, experience with Octave packages, and understanding of the basics of autotools. The most important skill is software design.
* '''Difficulty'''
* '''Difficulty'''
: Easy to Medium.
: Medium.
* '''Mentor'''
* '''Mentor'''
: [[User:KaKiLa|KaKiLa]], Carnë Draug, Carlo de Falco, Sebastian Schöps
: [[User:KaKiLa|KaKiLa]], Carnë Draug, Carlo de Falco, Sebastian Schöps
=== Command line suggestion feature ===
Currently Octave has no mechanism for suggesting corrections to typographic errors on the command line. An autocomplete/suggestion function is provided (using the double-TAB shortcut), but recent discussions have indicated a desire for a more proactive measure to catch user error.  Potential applicants are referred to bug {{bug|46881}} regarding the usage of grey vs. gray.
Suggested improvements are:
* provide one or more suggested corrections to the user when a command line entry produces an error.
* recognition and suggested correction for apparent syntax errors
* function suggestion(s) when a 'close' match is found (close remains to be defined)
* multiple suggestions if more than one option seems likely, along with a user-friendly method of selecting the appropriate choice.
* user selectable option to disable and/or customize the suggestion behavior
* correct operation, or graceful degradation, whether Octave is run in GUI or command-line mode.
As mentioned in the bug {{bug|46881}} discussion, this project has little-to-no relation to m-code compatibility. As such, emulation of the behavior of other software is not required, nor even necessarily desired. Octave is free to implement as simple or complex a solution to this feature request as is necessary to provide the best experience to the user. There may be tools, features, or code from other license-compatible projects that can be of use here, and the applicant would be encouraged to identify and leverage such resources as appropriate.
* '''Minimum requirements'''
: TBD
* '''Difficulty'''
: Easy to Medium.
* '''Mentor'''
: Undetermined
=== Octave code sharing ===
Recently, on the [[OctConf_2017]] a [https://rawgit.com/siko1056/Octconf2017/master/octconf2017-publish-ohlhus-slides.pdf talk] about uploading [https://www.gnu.org/software/octave/doc/interpreter/XREFpublish.html published Octave code] to a MediaWiki (like this one) as an easy way to share code was given. With the talk, a [https://github.com/siko1056/OctConf2017 repository] containing example code for the MediaWiki upload is given. This might continue the idea of an unfinished [[Agora]] code sharing website, but one is not restricted to fully stay with the proposed approach. Another, but more ambitious idea is for example [http://central.scipy.org/ Scipy Central] - a website for Scipy code sharing. Their [https://github.com/scipy/SciPyCentral Code] is released under a BSD license.
* '''Minimum requirements'''
: Ability to read and write Octave code, some familiarity with C++ ([https://curl.haxx.se libcurl]), web development (GET/POST/FORM data, cookies), and [https://www.mediawiki.org/wiki/MediaWiki MediaWiki].
* '''Difficulty'''
: Medium.
* '''Mentor'''
: [[User:Siko1056|Kai T. Ohlhus]]


=== SPQR Interface ===
=== SPQR Interface ===
Line 502: Line 458:
=== PolarAxes and Plotting Improvements ===
=== PolarAxes and Plotting Improvements ===


Octave currently provides supports for polar axes by using a Cartesian 2-D axes and adding a significant number of properties and callback listerners to get things to work.  What is needed is a first class implementation of a "polaraxes" object in C++.  This will require creating a new fundamental graphics object type, and programming in C++/OpenGL to render the object.  When "polaraxes" exist as an object type then m-files will be written to access them including polaraxes.m, polarplot.m, rticks.m, rticklabels.m, thetaticks, thetaticklabels.m, rlim.m, thetalim.m
Octave currently provides supports for polar axes by using a Cartesian 2-D axes and adding a significant number of properties and callback listerners to get things to work.  What is needed is a first class implementation of a "polaraxes" object in C++.  This will require creating a new fundamental graphics object type, and programming in C++/OpenGL to render the object.  When "polaraxes" exist as an object type then m-files will be written to access them including polaraxes.m, polarplot.m, rticks.m, rticklabels.m, thetaticks, thetaticklabels.m, rlim.m, thetalim.m.  relates to {{bug|35565}}, {{bug|49804}}, {{bug|52643}}.


* '''Minimum requirements'''
* '''Minimum requirements'''

Navigation menu