Difference between revisions of "Short projects"

From Octave
Jump to navigation Jump to search
(Add note do Developer FAQ.)
 
(44 intermediate revisions by 11 users not shown)
Line 1: Line 1:
This is a list of small projects, the type that could be done in a couple of hours, maybe even minutes (no promises, we should all know about how estimates for software development work). This is probably the best place for users who want to start helping with Octave development (please, see also Octave coding guidelines). Please submit a fix to the [https://savannah.gnu.org/bugs/?func=additem&group=octave bug tracker] (not to the mailing list) and add a link to the item in question. Use the [https://savannah.gnu.org/patch/?func=additem&group=octave patch tracker] for submissions unrelated to an existing bug.
+
This is a list of small projects to start helping with Octave development. The following items could be done
 +
* in a reasonable amount of time (a few hours) and
 +
* without Octave development knowledge.
 +
 
 +
{{Note|If you never contributed to Octave before, we suggest to start with our [[Developer FAQ]].}}
 +
 
 +
{{warning|Please do not submit patches/fixes to the Octave mailing lists. Upload your work at the respective Savannah bug tracker pages.  Of course you may always ask questions related to your work on the mailing list.}}
 +
 
 +
Use the [https://savannah.gnu.org/patch/?func=additem&group=octave Savannah patch tracker] for submissions unrelated to an existing bug.
  
 
The list is meant to be dynamic -- please add, remove, and comment on it. And since the things are likely to be of short duration, don't ask if is there is anyone already working on it. Projects of long duration should be added to the [[Projects]] page instead.
 
The list is meant to be dynamic -- please add, remove, and comment on it. And since the things are likely to be of short duration, don't ask if is there is anyone already working on it. Projects of long duration should be added to the [[Projects]] page instead.
  
Most of the small and easy bugs are caught and fixed quickly by the Octave developers. The best way to catch an easy one is then to [https://lists.gnu.org/mailman/listinfo/octave-bug-tracker subscribe to the bug tracker] (note that this has a lot of activity so you'll probably prefer to receive a digest).
+
Another way to catch a small project is to [https://lists.gnu.org/mailman/listinfo/octave-bug-tracker subscribe to the bug tracker] (note that the bug tracker has a lot of activity).  You may find it useful to review the [http://wiki.octave.org/wiki/index.php?title=Short_projects&action=history history] of this short projects page, to give you an idea of past successful short projects.
 +
 
 +
 
 +
== Bugs==
 +
 
 +
Please help with the triage of [https://savannah.gnu.org/bugs/?group=octave existing bugs] to populate the list of easy bugs below.
  
{{warning| do not simply add a patch/file to the bug or patch tracker. Always leave a comment at the same time, even if it just a simple "I prepared a change that should fix it". If there is no comment, it's hard to notice that a patch was added since there will be no notice on the discussion about it.}}
+
* {{bug|41674}} - image package: temporary arrays in imresize are doubles
 +
* {{patch|8368}} - imremap - Change to imremap to reduce memory footprint
 +
* {{patch|8369}} - imresize - Change to imresize to reduce memory footprint
  
 +
== Missing functions / feature requests ==
  
== Bugs==
+
Implement missing Octave functions or implement desired features and general improvements.
Please help with the triage of [https://savannah.gnu.org/bugs/?group=octave existing bugs] to populate the list of easy bugs below. You may find it useful to review the [http://wiki.octave.org/wiki/index.php?title=Short_projects&action=history history] of this short projects page, to give you an idea of past successful short projects.
+
 
 +
* {{bug|32088}} - <code>-ALL</code> option for {{manual|which}}
 +
* {{bug|40211}} - More compact output for structs and cell arrays
 +
* {{bug|41530}} - Editor debug mode could show a dbup/dbdown GUI component
 +
* {{bug|41796}} - extend sub2ind and ind2sub
 +
* {{bug|41844}} - GUI Debug Menu could offer "Stop If..."
 +
* {{bug|47239}} - calling system without shell
 +
* {{bug|57699}} - 'clipboard' function to interact with clipboard contents
 +
* {{bug|39439}}, {{bug|39434}} - Use non-empty identifiers in all warnings and errors issued by Octave
 +
** You may tackle as many or as few IDs as you have time for. As it is a widespread issue, finding occurrences in the source code should give you valuable knowledge about the way Octave files are organized. When raising errors and warnings try to use the ids that are documented in the functions {{manual|warning_005fids|warning_ids}} and {{manual|error_005fids|error_ids}}. If you really need a new id (please, first read the ones already there!), please add it to those functions as well.  If you see other ids used in core that are not given by the functions mentioned above, please, report or submit patch for them, in addition to the patch to the calling functions as well.
 +
* Lists of missing functions for [[:Category:Missing functions|several packages]].
 +
** It would help to group the missing functions in the [[image package]], as per [https://www.mathworks.com/help/images/referencelist.html] (similar to what was done in the [[signal package]] wiki page); please keep the original alphabetical list intact.
 +
 
 +
== Function Compatibility ==
 +
 
 +
A number of functions are implemented, but may have known incompatibilities to Matlab or only partially handled option sets, etc.
  
== Prepare a changeset ==
+
* griddata:  Octave's griddata  functions are only partly Matlab compatible.  There are three un-implemented interpolation methods: 'v4', and 'cubic' for 2D and 'natural' for 2D and 3D. The 2D cases should be straightforward once the correct algorithm is determined. But 3D cases are handled by passing to griddata3 and griddatan, and griddatan does not have a requirement to handle 'natural', so some thought will need to go into how to implement that one.  It may involve removing the griddata3 passthrough altogether.  {{bug|33539}} {{bug|35178}} {{bug|57323}} {{bug|57835}}
Sometimes a standalone file or a diff file is submitted; Octave maintainers prefer a changeset though; preparing a changeset will expedite bug fixing.
 
* {{bug|41674}}, {{patch|8368}}, {{patch|8369}}
 
  
== Missing functions ==
+
== Review or create changesets ==
  
* there is a list of missing functions for the [[image package|image]], [[mapping package|mapping]], [[Optimization package|optimization]], and [[Signal package|signal]] packages.
+
Sometimes a standalone file or a diff file is submitted; Octave maintainers prefer a changeset though; preparing a changeset will expedite bug fixing. See the [[Mercurial]] and [[Commit message guidelines]] page how to do it.
** It would help to group the several missing functions in the [[image package]], as per [http://www.mathworks.com/help/images/functionlist.html] (similar to what was done in the [[signal package]] wiki page); please keep the original alphabetical list intact.
 
* openfig/savefig functions
 
** These should be particularly easy additions as they are really just a wrapper on top of hgload/hgsave.
 
* integral/integral2/integral3 functions
 
** These are basically renamed versions of quad/dblquad/triplequad.  It shouldn't be hard to make new functions which use the new integral naming system from Matlab.  See also {{bug|42037}}.
 
  
== Miscellaneous ==
+
* Sorry none yet.
  
* Use "units.h" from [http://www.gnu.org/software/units/ GNU units] in [http://octave.sourceforge.net/miscellaneous/function/units.html function units] (from the Octave-Forge [http://octave.sourceforge.net/miscellaneous/ miscellaneous package]) rather than making a system call and parsing its output (and having to handle multiple versions of it). This change will make it much more robust. It likely will alleviate the requirement of having [http://www.gnu.org/software/units/ GNU units] installed in the system separately by the user. This requires knowledge of C (units is written on C) and C++ to write its Octave interface. It can be very easy if the units.h truly allows to be used as library or maybe impossible if it does not. This has not been investigated yet.
+
== Write Built-In Self Tests (BISTs) ==
  
* Write self-tests for a single function.  For core Octave see [[Files missing tests|missing test]]; see also [[Projects#Tests]].
+
Writing BISTs improves Octave's regression testing and ensures that we don't break anything when we add new features.
  
* Use non-empty identifiers in all warnings and errors issued by Octave; see {{bug|39439}}, {{bug|39434}}, {{bug|37559}}, {{bug|36861}}. You may tackle as many or as few IDs as you have time for. As it is a widespread issue, finding occurrences in the source code should give you valuable knowledge about the way Octave files are organized.
+
* [[Add_BIST_tests_for_octave_functions_written_in_C%2B%2B| BIST for C++ functions]]
** When raising errors and warnings try to use the ids that are documented in the functions  [http://octave.sourceforge.net/octave/function/warning_ids.html warning_ids] and [http://octave.sourceforge.net/octave/function/error_ids.html error_ids].  If you really need a new id (please, first read the ones already there!), please add it to those functions as well.  If you see other ids used in core that are not given by the functions mentioned above, please, report or submit patch for them, in addition to the patch to the calling functions as well.  
+
* [[BIST for m-files]].  See also [[Projects#Tests]].
  
* extend sub2ind and ind2sub: {{bug|41796}}
+
== Miscellaneous ==
  
[[Category:Development]]
+
* C++ cleanup of packages after the switch to exceptions (late 2015). See [[Invert if/else/error]].
[[Category:Project Ideas]]
 
  
* Convert the m code to C/C++ in {{bug|41843}}
+
* Use "units.h" from [http://www.gnu.org/software/units/ GNU units] in [http://octave.sourceforge.net/miscellaneous/function/units.html function units] (from the Octave-Forge [http://octave.sourceforge.net/miscellaneous/ miscellaneous package]) rather than making a system call and parsing its output (and having to handle multiple versions of it). This change will make it much more robust. It likely will alleviate the requirement of having [http://www.gnu.org/software/units/ GNU units] installed in the system separately by the user. This requires knowledge of C (units is written on C) and C++ to write its Octave interface. It can be very easy if the units.h truly allows to be used as library or maybe impossible if it does not. This has not been investigated yet.
  
The chore is easy and there are approximately 40 files to patch. This is a good way to see what the C++ code in Octave looks like.
+
* Review old bugs: The [http://bugs.octave.org Octave bug tracker] has over 1,000 reports dating all the way back to 2010.  Some have patches submitted but can no longer be directly applied to the current codebase. Some have never had patches developed. Some are old, unfulfilled wish list or missing function requests.  And some may no longer be bugs, having been fixed or rendered irrelevant due to other changes code changes over the years. Reviewing these old bugs, testing the original bug report to see if the same results still occur, if Matlab compatibility has changed, or if submitted patches can still be applied cleanly (and potentially cleaning up patches so they can apply cleanly), can help update and clean up the bug database.
  
== Feature requests ==
+
[[Category:Development]]
* {{bug|41844}}
+
[[Category:Project Ideas]]
* {{bug|41530}}
+
[[Category:Missing functions]]
* {{bug|41470}}
 
* {{bug|40211}}
 
* {{bug|32088}}
 

Latest revision as of 23:26, 10 June 2020

This is a list of small projects to start helping with Octave development. The following items could be done

  • in a reasonable amount of time (a few hours) and
  • without Octave development knowledge.
Info icon.svg
If you never contributed to Octave before, we suggest to start with our Developer FAQ.
Warning icon.svg
Please do not submit patches/fixes to the Octave mailing lists. Upload your work at the respective Savannah bug tracker pages. Of course you may always ask questions related to your work on the mailing list.

Use the Savannah patch tracker for submissions unrelated to an existing bug.

The list is meant to be dynamic -- please add, remove, and comment on it. And since the things are likely to be of short duration, don't ask if is there is anyone already working on it. Projects of long duration should be added to the Projects page instead.

Another way to catch a small project is to subscribe to the bug tracker (note that the bug tracker has a lot of activity). You may find it useful to review the history of this short projects page, to give you an idea of past successful short projects.


Bugs[edit]

Please help with the triage of existing bugs to populate the list of easy bugs below.

  • #41674 - image package: temporary arrays in imresize are doubles
  • #8368 - imremap - Change to imremap to reduce memory footprint
  • #8369 - imresize - Change to imresize to reduce memory footprint

Missing functions / feature requests[edit]

Implement missing Octave functions or implement desired features and general improvements.

  • #32088 - -ALL option for which
  • #40211 - More compact output for structs and cell arrays
  • #41530 - Editor debug mode could show a dbup/dbdown GUI component
  • #41796 - extend sub2ind and ind2sub
  • #41844 - GUI Debug Menu could offer "Stop If..."
  • #47239 - calling system without shell
  • #57699 - 'clipboard' function to interact with clipboard contents
  • #39439, #39434 - Use non-empty identifiers in all warnings and errors issued by Octave
    • You may tackle as many or as few IDs as you have time for. As it is a widespread issue, finding occurrences in the source code should give you valuable knowledge about the way Octave files are organized. When raising errors and warnings try to use the ids that are documented in the functions warning_ids and error_ids. If you really need a new id (please, first read the ones already there!), please add it to those functions as well. If you see other ids used in core that are not given by the functions mentioned above, please, report or submit patch for them, in addition to the patch to the calling functions as well.
  • Lists of missing functions for several packages.
    • It would help to group the missing functions in the image package, as per [1] (similar to what was done in the signal package wiki page); please keep the original alphabetical list intact.

Function Compatibility[edit]

A number of functions are implemented, but may have known incompatibilities to Matlab or only partially handled option sets, etc.

  • griddata: Octave's griddata functions are only partly Matlab compatible. There are three un-implemented interpolation methods: 'v4', and 'cubic' for 2D and 'natural' for 2D and 3D. The 2D cases should be straightforward once the correct algorithm is determined. But 3D cases are handled by passing to griddata3 and griddatan, and griddatan does not have a requirement to handle 'natural', so some thought will need to go into how to implement that one. It may involve removing the griddata3 passthrough altogether. #33539 #35178 #57323 #57835

Review or create changesets[edit]

Sometimes a standalone file or a diff file is submitted; Octave maintainers prefer a changeset though; preparing a changeset will expedite bug fixing. See the Mercurial and Commit message guidelines page how to do it.

  • Sorry none yet.

Write Built-In Self Tests (BISTs)[edit]

Writing BISTs improves Octave's regression testing and ensures that we don't break anything when we add new features.

Miscellaneous[edit]

  • Use "units.h" from GNU units in function units (from the Octave-Forge miscellaneous package) rather than making a system call and parsing its output (and having to handle multiple versions of it). This change will make it much more robust. It likely will alleviate the requirement of having GNU units installed in the system separately by the user. This requires knowledge of C (units is written on C) and C++ to write its Octave interface. It can be very easy if the units.h truly allows to be used as library or maybe impossible if it does not. This has not been investigated yet.
  • Review old bugs: The Octave bug tracker has over 1,000 reports dating all the way back to 2010. Some have patches submitted but can no longer be directly applied to the current codebase. Some have never had patches developed. Some are old, unfulfilled wish list or missing function requests. And some may no longer be bugs, having been fixed or rendered irrelevant due to other changes code changes over the years. Reviewing these old bugs, testing the original bug report to see if the same results still occur, if Matlab compatibility has changed, or if submitted patches can still be applied cleanly (and potentially cleaning up patches so they can apply cleanly), can help update and clean up the bug database.