Short projects: Difference between revisions

From Octave
Jump to navigation Jump to search
(→‎Missing functions: added note to integral bullet)
m (→‎Easy Closes: remove closed bug)
 
(99 intermediate revisions by 25 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 collection of small projects to start contributing to Octave. Projects of long duration are listed in the [[Projects]] page.''


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.
{{Note|If you never contributed to Octave before, we suggest to start with our [[Developer FAQ]].}}


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).
== Review and fix existing bugs ==


{{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.}}
* Review bugs that catch your interest on the [https://savannah.gnu.org/bugs/?group=octave Octave bug tracker] on GNU Savannah.
** A modern interface to the Octave bug tracker is given by [https://octave.space/savannah/ SavannahAPI].
* Discuss with the developers there how to fix that bug or [[Mercurial|upload a patch there]].
* Some bugs have already patches attached.
** Help testing those patches.
** Help updating outdated patches to the latest development version (this requires some [[Mercurial]] knowledge).


== Implement missing Matlab functions ==


== Bugs==
* Use the [https://savannah.gnu.org/patch/?func=additem&group=octave Savannah patch tracker] for submissions unrelated to an existing bug.
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.


== Prepare a changeset ==
== Test Octave functions for proper input handling ==
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 ==
* Many functions either do insufficient input checking or the input requirements have changed over time.
* Contributors can try to break Octave function behavior with different types of input, and document the results.
* Users can check <em>expected behavior</em> according to the Octave help and, if applicable, expected compatible behavior according to [https://www.mathworks.com/help/matlab/ public facing Matlab documentation].
* Inputs to test can be:
** different numeric types - double, single, integer.
** non-numeric types - logical, string, cell, struct
** different input shapes - scalar, row/column vectors, 2D, 3D, & nD arrays, zero size arrays ([], 1x0, and 1x3x0 are all empty but may require different handling).
** char/string parameters: different case handling, partial matching behavior, invalid/nonsense parameters.
* For the input items above, does function behave acceptably? Are numerical or graphical outputs as expected? Is output consistent? Is any error message intelligible/meaningful to the user? 
* Optionally the behavior above can be tested against Matlab function output if it is available. If needed but not available, tests can be submitted to other developers for output checking.
** Note 1: There is much undocumented Matlab behavior.  Because this has the possibility of changing with little notice, fixing incompatibilities related to such undocumented behavior is considered on a case-by-case basis by the developer team. Documentation of such cases is always beneficial, however.
** Note 2: Only Matlab public documentation and function output may be compared.  <em>Internal Matlab code, even if available, should never even be looked at by a contributor. Contributions will be discarded if it is determined such action occurred.</em>
* Contributors can submit bug reports to the [https://savannah.gnu.org/bugs/?group=octave Octave Bug Tracker] documenting their findings.
* An example can be see in bug {{bug|64078}} comment #10 of looking through the /plot/draw functions for how they handle integer and logical inputs to numeric fields.


* there is a list of missing functions for the [[image package|image]], [[mapping package|mapping]], [[Optimization package|optimization]], and [[Signal package|signal]] packages.
** 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}}.
*** one note, the new integral functions do change usage slightly from quad. E.g., quad and quadv were the only integrators that didn't require vectorized functions (as opposed to quadgk, quadcc, etc.).  Also, passing parameters to integrating functions is more uniform than the different quad functions, where some (such as quad) does not include parameter passing. Compatibility should be checked for any wrapper made.


== Miscellaneous ==
== Write Built-In Self Tests (BISTs) ==


* 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.
Writing BISTs improves Octave's regression testing and ensures that we don't break anything when we add new features.


* Write self-tests for a single function.  For core Octave see [[Files missing tests|missing test]]; see also [[Projects#Tests]].
* [[Add_BIST_tests_for_octave_functions_written_in_C%2B%2B| BIST for C++ functions]]
* [[BIST for m-files]].  See also [[Projects#Tests]].


* 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.
== Work on Octave packages ==
** 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.


* extend sub2ind and ind2sub: {{bug|41796}}
* Take a look at https://gnu-octave.github.io/packages/ if you would like to work on some package there.


[[Category:Development]]
== Easy Closes ==
[[Category:Project Ideas]]
Below is a non exhaustive list of bugs which should be looked at and appear to be easy. Completed scrub using 6.1 as non expert.  Status column provides notes from last review to facilitate addressing each bug.  (Reviewing and updating status of items in this list as well as adding new ones are themselves good beginner tasks.)
 
Notes:
*The last full scrub came from hardy for v4.2
*Suspect many java bugs could be closed.
*Appears plotting bugs have been fixed, but not have been reviewed for 5 years.
*Did not include most documentation bugs.
*Experts: rik5, nrjank, etc. will be able to find significantly more to close.
 
{| class="wikitable"
|-
! bug !! bug title !! status
|-
| {{bug|36954}} || datenum / datevec convert date-time string incorrectly during hour lost to DST || siko1056 suggests closing as won't fix. nrjank reverted from Postponed to Confirmed / removed Assigned To tag after dormant for 2 years.
|-
| {{bug|40357}} || OOM when converting from sparse double to sparse logical|| hardy thinks this might be a DUPLICATE, nrjank changed to Need Info, needs better test to determine if the OOM comes from known sparse indexing issue or something else.
|-
| {{bug|48088}} || document that issquare, iscolumn, isempty, etc operate on cell arrays|| documentation patch candidate submitted and needs review.
|-
| {{bug|49886}} || ezplot: octave does not warn when function not vectorized || Rik states This would be easy to fix if {{bug|42691}} was first solved. That bug was closed as fixed in August 2021, so supposedly this one should now be easier manageable. nrjank marked as Needs Info to determine if desired output is just adding a warning, or also matching matlab output.
|-
| {{bug|49360}} || odeset lacks documentation for solver options || Needs someone to review and make a to-do list.
|-
| {{bug|53214}} || area.m needs update to implement ShowBaseline and other properties || nrjank states last remaining task is adjusting the axis limits to fit the data. This has been pushed for area.m. Left remaining is whether to do the same for plot.m which would require checking on/fixing failing tests in other functions.
|-
| {{bug|54437}} || optimset missing documentation for 5 options || Documentation task.  rik states AutoScaling, ComplexEqn, and Updating can be copied from fsolve.m so this would be an improvement.
|-
| {{bug|55065}} || Implement uiopen and uisave || both a patch and m-file versions of the two functions have been separately submitted. they both need to be evaluated for fitness. 
|-
| {{bug|56208}} || GUI Editor autocomplete list could show variables from current workspace || suggested it might be fixed, but appears to still not be meeting summary requst. marked as Needs Info
|-
| {{bug|57352}} || text height for blank line should approximate that of ordinary character || initial patch suggestion provided but still needs some trial and error to get good height behavior
|-
| {{bug|58530}} || missing functions: xline() and yline() || initial patch submitted in 2022, needs rework according to rik's comments
|}
 
The equivalent suggestions for patches.
{| class="wikitable"
|-
! patch !! patch title !! status
|-
|}
A list of patch reports with attachments not marked "Done or Cancelled" can be viewed in the SavannaAPI, [https://octave.space/savannah/api.php?Action=get&Format=HTMLCSS&OrderBy=SubmittedOn&OpenClosed=open&TrackerID=patch&AttachedFiles!=0&Category!=Forge,website&Status!=Done,Cancelled sorted by oldest first] or [https://octave.space/savannah/api.php?Action=get&Format=HTMLCSS&OrderBy=LastComment&OpenClosed=open&TrackerID=patch&AttachedFiles!=0&Category!=Forge,website&Status!=Done,Cancelled sorted by "longest since last comment" first]. While some of these older submissions may still be viable and just need a patch refresh to the current code base, many will have become out of date or rendered inapplicable due to code or function changes, and could be closed as 'Wont Fix'.


* Convert the m code to C/C++ in {{bug|41843}}
== See also ==


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.
* [[Projects]]


== Feature requests ==
[[Category:Development]]
* {{bug|41844}}
[[Category:Project Ideas]]
* {{bug|41530}}
[[Category:Missing functions]]
* {{bug|41470}}
* {{bug|40211}}
* {{bug|32088}}

Latest revision as of 18:35, 14 September 2023

This is a collection of small projects to start contributing to Octave. Projects of long duration are listed in the Projects page.
Info icon.svg
If you never contributed to Octave before, we suggest to start with our Developer FAQ.

Review and fix existing bugs[edit]

  • Review bugs that catch your interest on the Octave bug tracker on GNU Savannah.
    • A modern interface to the Octave bug tracker is given by SavannahAPI.
  • Discuss with the developers there how to fix that bug or upload a patch there.
  • Some bugs have already patches attached.
    • Help testing those patches.
    • Help updating outdated patches to the latest development version (this requires some Mercurial knowledge).

Implement missing Matlab functions[edit]

Test Octave functions for proper input handling[edit]

  • Many functions either do insufficient input checking or the input requirements have changed over time.
  • Contributors can try to break Octave function behavior with different types of input, and document the results.
  • Users can check expected behavior according to the Octave help and, if applicable, expected compatible behavior according to public facing Matlab documentation.
  • Inputs to test can be:
    • different numeric types - double, single, integer.
    • non-numeric types - logical, string, cell, struct
    • different input shapes - scalar, row/column vectors, 2D, 3D, & nD arrays, zero size arrays ([], 1x0, and 1x3x0 are all empty but may require different handling).
    • char/string parameters: different case handling, partial matching behavior, invalid/nonsense parameters.
  • For the input items above, does function behave acceptably? Are numerical or graphical outputs as expected? Is output consistent? Is any error message intelligible/meaningful to the user?
  • Optionally the behavior above can be tested against Matlab function output if it is available. If needed but not available, tests can be submitted to other developers for output checking.
    • Note 1: There is much undocumented Matlab behavior. Because this has the possibility of changing with little notice, fixing incompatibilities related to such undocumented behavior is considered on a case-by-case basis by the developer team. Documentation of such cases is always beneficial, however.
    • Note 2: Only Matlab public documentation and function output may be compared. Internal Matlab code, even if available, should never even be looked at by a contributor. Contributions will be discarded if it is determined such action occurred.
  • Contributors can submit bug reports to the Octave Bug Tracker documenting their findings.
  • An example can be see in bug #64078 comment #10 of looking through the /plot/draw functions for how they handle integer and logical inputs to numeric fields.


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.

Work on Octave packages[edit]

Easy Closes[edit]

Below is a non exhaustive list of bugs which should be looked at and appear to be easy. Completed scrub using 6.1 as non expert. Status column provides notes from last review to facilitate addressing each bug. (Reviewing and updating status of items in this list as well as adding new ones are themselves good beginner tasks.)

Notes:

  • The last full scrub came from hardy for v4.2
  • Suspect many java bugs could be closed.
  • Appears plotting bugs have been fixed, but not have been reviewed for 5 years.
  • Did not include most documentation bugs.
  • Experts: rik5, nrjank, etc. will be able to find significantly more to close.
bug bug title status
#36954 datenum / datevec convert date-time string incorrectly during hour lost to DST siko1056 suggests closing as won't fix. nrjank reverted from Postponed to Confirmed / removed Assigned To tag after dormant for 2 years.
#40357 OOM when converting from sparse double to sparse logical hardy thinks this might be a DUPLICATE, nrjank changed to Need Info, needs better test to determine if the OOM comes from known sparse indexing issue or something else.
#48088 document that issquare, iscolumn, isempty, etc operate on cell arrays documentation patch candidate submitted and needs review.
#49886 ezplot: octave does not warn when function not vectorized Rik states This would be easy to fix if #42691 was first solved. That bug was closed as fixed in August 2021, so supposedly this one should now be easier manageable. nrjank marked as Needs Info to determine if desired output is just adding a warning, or also matching matlab output.
#49360 odeset lacks documentation for solver options Needs someone to review and make a to-do list.
#53214 area.m needs update to implement ShowBaseline and other properties nrjank states last remaining task is adjusting the axis limits to fit the data. This has been pushed for area.m. Left remaining is whether to do the same for plot.m which would require checking on/fixing failing tests in other functions.
#54437 optimset missing documentation for 5 options Documentation task. rik states AutoScaling, ComplexEqn, and Updating can be copied from fsolve.m so this would be an improvement.
#55065 Implement uiopen and uisave both a patch and m-file versions of the two functions have been separately submitted. they both need to be evaluated for fitness.
#56208 GUI Editor autocomplete list could show variables from current workspace suggested it might be fixed, but appears to still not be meeting summary requst. marked as Needs Info
#57352 text height for blank line should approximate that of ordinary character initial patch suggestion provided but still needs some trial and error to get good height behavior
#58530 missing functions: xline() and yline() initial patch submitted in 2022, needs rework according to rik's comments

The equivalent suggestions for patches.

patch patch title status

A list of patch reports with attachments not marked "Done or Cancelled" can be viewed in the SavannaAPI, sorted by oldest first or sorted by "longest since last comment" first. While some of these older submissions may still be viable and just need a patch refresh to the current code base, many will have become out of date or rendered inapplicable due to code or function changes, and could be closed as 'Wont Fix'.

See also[edit]