https://wiki.octave.org/wiki/api.php?action=feedcontributions&user=Nir&feedformat=atomOctave - User contributions [en]2024-03-29T15:27:28ZUser contributionsMediaWiki 1.39.2https://wiki.octave.org/wiki/index.php?title=Summer_of_Code_-_Getting_Started&diff=15066Summer of Code - Getting Started2024-02-23T15:59:55Z<p>Nir: update for 2024</p>
<hr />
<div>{{Note|GNU Octave is a [https://summerofcode.withgoogle.com/programs/2024/organizations/gnu-octave mentoring organization for GSoC 2024].}}<br />
<br />
Since 2011 the GNU Octave project has successfully mentored:<br />
* [[Summer of Code | '''42 participants''' ๐]]<br />
* [[Summer of Code | '''44 projects''' ๐]]<br />
in [[Summer of Code]] (SoC) programs by [https://summerofcode.withgoogle.com/ Google] and [https://esa.int/ ESA].<br />
<br />
Those SoC programs aim to advertise open-source software development and to attract potential new Octave developers.<br />
<br />
= Steps toward a successful application =<br />
<br />
# ๐๐ฌ '''We want to get to know you (before the deadline). Communicate with us.'''<br />
#* Join [https://octave.discourse.group/ '''Octave Discourse'''] or [[IRC]] for general discussion and to ask questions (Please do not use the bug tracker for general GSOC inquiries unrelated to specific bugs found with Octave.) Using a nickname is fine.<br />
#* Show us that you're motivated to work on Octave ๐ป. There is no need to present an overwhelming CV ๐; evidence of involvement with Octave is more important.<br />
#* '''<span style="color:darkblue;">If you never talked to us, we will likely reject your proposal</span>''', even it looks good ๐ฎ<br />
# ๐ฉโ๐ฌ '''Get your hands dirty.'''<br />
#* We are curious about your programming skills ๐<br />
#** Your application will be much stronger if you [https://savannah.gnu.org/bugs/?group=octave fix Octave bugs] or [https://savannah.gnu.org/patch/?group=octave submit patches] before or during the application period.<br />
#** You can take a look at the [[short projects]] for some simple bugs to start with.<br />
#* '''Use Octave!'''<br />
#** If you come across something that does not work the way you like โก๏ธ try to fix that ๐ง<br />
#** Or if you find a missing function โก๏ธ try to implement it.<br />
# ๐๐ก '''Tell us what you are going to do.'''<br />
#* Do not write just to say what project you're interested in. Be specific about what you are going to do, include links ๐, show us you know what you are talking about ๐ก, and ask many [http://www.catb.org/esr/faqs/smart-questions.html smart questions] ๐ค<br />
#* Remember, '''we are volunteer developers and not your boss''' ๐<br />
# ๐ '''Prepare your proposal with us.'''<br />
#* Try to show us as early as possible a draft of your proposal ๐<br />
#* If we see your proposal for the first time after the application deadline, it might easily contain some paragraphs not fully clear to us. Ongoing interaction will give us more confidence that you are capable of working on your project ๐๐<br />
#* Then submit the proposal following the applicable rules, e.g. for [https://google.github.io/gsocguides/student/writing-a-proposal GSoC]. ๐จ<br />
<br />
= How do we judge your application? =<br />
<br />
Depending on the mentors and SoC program there are varieties, but typically the main factors considered would be:<br />
<br />
* '''You have demonstrated interest in Octave and an ability to make substantial modifications to Octave'''<br />
*: The most important thing is that you've contributed some interesting code samples to judge your skills. It's OK during the application period to ask for help on how to format these code samples, which normally are Mercurial patches.<br />
<br />
* '''You showed understanding of your topic'''<br />
*: Your proposal should make it clear that you're reasonably well versed in the subject area and won't need all summer just to read up on it.<br />
<br />
* '''Well thought out, adequately detailed, realistic project plan'''<br />
*: "I'm good at this, so trust me" isn't enough. In your proposal, you should describe which algorithms you'll use and how you'll integrate with existing Octave code. You should also prepare a project timeline and goals for the midterm and final evaluations.<br />
<br />
= What you should know about Octave =<br />
<br />
GNU Octave is mostly written in C++ and its own scripting language that is mostly compatible with Matlab. 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 Octave's scripting language, you as successful applicant will be familiar with or able to quickly learn about Octave's infrastructure. You can't spend the whole summer learning how to build Octave or prepare a changeset and still successfully complete your project ๐<br />
<br />
You should know:<br />
# How to build Octave from its source code using [http://en.wikipedia.org/wiki/GNU_build_system the GNU build system].<br />
#* Read in this wiki: [[Developer FAQ]], [[Building]]<br />
#* Tools to know: [https://en.wikipedia.org/wiki/GNU_Compiler_Collection gcc], [https://en.wikipedia.org/wiki/Make_(software) make]<br />
# How to submit patches (changesets).<br />
#* Read in this wiki: [[Contribution guidelines]], [[Mercurial]]<br />
#* Tools to know: [https://en.wikipedia.org/wiki/Mercurial Mercurial (hg)], [https://en.wikipedia.org/wiki/Git git]<br />
<br />
= Suggested projects =<br />
<br />
The following suggested projects are distilled from the [[Projects]] page for the benefit of potential SoC participants. You can also look at our [[Summer of Code|completed past projects]], or the current [https://hg.savannah.gnu.org/hgweb/octave/file/tip/etc/ROADMAP.md | Octave Development Roadmap] for more inspiration.<br />
<br />
{{Note|Do you use Octave at your working place or university? Do you have some numerical project in mind? You are always welcome to '''propose your own projects'''. If you are passionate about your project, it will be easy to find an Octave developer to mentor and guide you. Please note that for such a proposal to be successful it will almost certainly involve initiating pre-proposal discussion over at the [https://octave.discourse.group Octave Discourse forum].}}<br />
<br />
== Adding more Classification classes and implementing missing methods in statistics package ==<br />
<br />
Although a ClassificationKNN class was added in the latest statistics release (1.6.1), it still lacks several methods (only `predict` is available at the moment). This GSoC project aims at implementing more methods, such as crossval, cvloss, lime, loss, margin, partialDependence, plotPartialDependence, etc., as well as adding more classdefs related to classification classes, such as ClassificationGAM, ClassificationDiscriminant, ClassificationSVM, ClassificationNeuralNetwork, ClassificationNaiveBayes, etc. The statistics package, although heavily developed during the past years, still lacks a lot of classdef functionality. The scope is to implement classification classdef objects and their relevant methods in a MATLAB-compatible way. <br />
<br />
* '''Project size''' [[#Project sizes | [?]]] and '''Difficulty'''<br />
: ~350 hours (hard)<br />
* '''Required skills'''<br />
: Octave, classdef, good knowledge of statistical methods<br />
* '''Potential mentors'''<br />
: [https://octave.discourse.group/u/pr0m1th3as Andreas Bertsatos]<br />
<br />
== Custom re-implementation of the texi2html (v.1.82) command line tool ==<br />
<br />
Implement a compiled .oct function to relax the dependency of the pkg-octave-doc package on texi2html (v.1.82) command line tool, which is no longer maintained or further developed but also not readily available to all linux distributions. The idea is to have a `texi2html` function within the pkg-octave-doc package that will replace the functionality of the texi2html (v.1.82) command line tool. This will also help improve the speed of pkg-octave-doc processing large packages, which contain specific tags (such as @math) which are currently handled within Octave code.<br />
<br />
* '''Project size''' [[#Project sizes | [?]]] and '''Difficulty'''<br />
: ~350 hours (hard)<br />
* '''Required skills'''<br />
: Perl, C++, Octave, Texinfo, HTML<br />
* '''Potential mentors'''<br />
: [https://octave.discourse.group/u/pr0m1th3as Andreas Bertsatos]<br />
<br />
<br />
== Port Chebfun to Octave and improve classdef support ==<br />
<br />
[https://www.chebfun.org| Chebfun] uses interpolation to approximate functions to very high accuracy, giving numerical computing that feels like symbolic computing.<br />
The software is implemented as collection of "classdef" classes and is Free and Open Source Software.<br />
However, Chebfun does not yet work with Octave, largely due to differences and issues with Octave's classdef implementation.<br />
This project has two aims: (1) make changes to the Chebfun code to make it work on Octave and (2) improve Octave's classdef functionality.<br />
Some initial steps toward to first goal can be found on [https://github.com/cbm755/chebfun/tree/octave_dev| this octave_dev branch].<br />
The second goal will likely involve a collaborative effort because classdef is a priority on [https://hg.savannah.gnu.org/hgweb/octave/file/tip/etc/ROADMAP.md | Octave's Development Roadmap] and because other proposed projects also involve classdef.<br />
<br />
* '''Project size''' [[#Project sizes | [?]]] and '''Difficulty'''<br />
: ~350 hours (hard)<br />
* '''Required skills'''<br />
: Octave, object-oriented programming, polynomial interpolation and approximation theory, C++.<br />
* '''Potential mentors'''<br />
: [https://octave.discourse.group/u/cbm Colin B. Macdonald]<br />
<br />
<br />
<!--<br />
== ode15{i,s} : Matlab Compatible DAE solvers ==<br />
<br />
An initial implementation of Matlab compatible Differential Algebraic Equations (DAE) solvers, {{manual|ode15i}} and {{manual|ode15s}}, based on [https://computing.llnl.gov/projects/sundials SUNDIALS], <br />
was done by [https://gsoc2016ode15s.blogspot.com/ Francesco Faccio during GSoC 2016]. The code is maintained in the main Octave repository and consists mainly of the following three files: [https://hg.savannah.gnu.org/hgweb/octave/file/tip/libinterp/dldfcn/__ode15__.cc {{path|libinterp/dldfcn/__ode15__.cc}}], [https://hg.savannah.gnu.org/hgweb/octave/file/tip/scripts/ode/ode15i.m {{path|scripts/ode/ode15i.m}}] and [https://hg.savannah.gnu.org/hgweb/octave/file/tip/scripts/ode/ode15s.m {{path|scripts/ode/ode15s.m}}].<br />
<br />
The {{manual|decic}} function for selecting consistent initial conditions for ode15i can be made more Matlab compatible by using [http://dx.doi.org/10.1515/JNMA.2002.291 another algorithm]. Another useful extension is to make ode15{i,s} work with datatypes other than double and to improve interpolation at intermediate time steps.<br />
<br />
* '''Project size''' [[#Project sizes | [?]]] and '''Difficulty'''<br />
: ~350 hours (medium)<br />
* '''Required skills'''<br />
: Octave, C/C++; familiarity with numerical methods for DAEs<br />
* '''Potential mentors'''<br />
: Francesco Faccio, [https://octave.discourse.group/u/cdf Carlo de Falco], [https://octave.discourse.group/u/marco_caliari Marco Caliari], Jacopo Corno, [https://octave.discourse.group/u/schoeps Sebastian Schรถps]<br />
--><br />
<br />
<!--<br />
== PolarAxes and Plotting Improvements ==<br />
<br />
Octave currently provides support for polar axes by using a Cartesian 2-D axes and adding a significant number of properties and callback listeners to get things to work. What is needed is the implementation of a dedicated "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" exists 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. This relates to bug {{bug|49804}}.<br />
<br />
* '''Project size''' [[#Project sizes | [?]]] and '''Difficulty'''<br />
: ~350 hours (medium)<br />
* '''Required skills'''<br />
: Octave, C/C++; optional experience with OpenGL programming<br />
* '''Potential mentors'''<br />
: [https://octave.discourse.group/u/rik Rik]<br />
--><br />
<br />
<!--<br />
== Table datatype ==<br />
<br />
In 2013, Matlab introduced a [https://www.mathworks.com/help/matlab/tables.html new table datatype] to conveniently organize and access data in tabular form. This datatype has not been introduced to Octave yet (see bug {{bug|44571}}). However, there are two initial implementation approaches https://github.com/apjanke/octave-tablicious and https://github.com/gnu-octave/table.<br />
<br />
Based upon the existing approaches, the goal of this project is to define an initial subset of [https://www.mathworks.com/help/matlab/tables.htmlMatlab's table functions], which involve sorting, splitting, merging, and file I/O and implement it within the given time frame.<br />
<br />
* '''Project size''' [[#Project sizes | [?]]] and '''Difficulty'''<br />
: ~350 hours (hard)<br />
* '''Required skills'''<br />
: Octave, C/C++<br />
* '''Potential mentors'''<br />
: ???<br />
--><br />
<br />
<!--<br />
== TISEAN package ==<br />
<br />
The [[TISEAN package]] provides an Octave interface to [https://www.pks.mpg.de/~tisean/Tisean_3.0.1/index.html TISEAN] is a suite of code for nonlinear time series analysis. In 2015, another GSoC project started with the work to create interfaces to many TISEAN functions, but [[TISEAN_package:Procedure | there is still work left to do]]. There are missing functions to do computations on spike trains, to simulate autoregresive models, to create specialized plots, etc. These are of importance for many scientific disciplines involving statistical computations and signal processing.<br />
<br />
* '''Project size''' [[#Project sizes | [?]]] and '''Difficulty'''<br />
: ~350 hours (medium)<br />
* '''Required skills'''<br />
: Octave, C/C++; FORTRAN API knowledge<br />
* '''Potential mentors'''<br />
: [https://octave.discourse.group/u/kakila KaKiLa]<br />
--><br />
<br />
<!--<br />
== Better tab completion ==<br />
<br />
Links: [https://savannah.gnu.org/bugs/index.php?62492 https://savannah.gnu.org/bugs/index.php?62492] and [https://savannah.gnu.org/bugs/?53384 https://savannah.gnu.org/bugs/?53384]<br />
<br />
Description: currently pressing Tab at the Octave command prompt attempts autocompletion of all identifiers in scope (variables, functions, classdefs etc) as well as files and directories in the path. It is not context sensitive.<br />
<br />
Project: Improve tab completion. For example,<br />
<br />
* Typing<br />
: load x<br />
and then pressing tab should ideally give all loadable files and directories starting with x, not unrelated results like variables or functions. <br />
<br />
* Typing<br />
:cd<br />
and tab should only give directories.<br />
<br />
* Any file and directory names that are included in the results should include those with spaces and special characters including those that would be interpreted as operators by Octave.<br />
<br />
* Typing commands like<br />
: axis<br />
or<br />
: format<br />
and pressing tab should give only those options relevant to that command. E.g. format can be followed by short / long / loose / compact etc but not by a file or variable. Similarly axis can be followed by ij / xy / tight / equal / actual limits etc but not by files or directories. And so on for other commands. This should be made possible for both preexisting commands and for yet-to-be-written commands without any rewriting of existing function code or documentation.<br />
<br />
To get more examples, see how bash completion works. You can type git or hg and then tab and it will give the list of available commands. If you type "sort --r" and then tab, it gives the list of options to sort starting with "--r", etc.<br />
<br />
* '''Project size''' [[#Project sizes | [?]]] and '''Difficulty'''<br />
: ~350 hours (medium)<br />
* '''Required skills'''<br />
: ???<br />
* '''Potential mentors'''<br />
: ???<br />
--><br />
<br />
<!--<br />
== Graphics rendering back to front sorting ==<br />
<br />
Several incompatibilities have been identified in how Octave plots transparent objects in 3D, causing certain transparent objects to hide opaque objects behind them even though they're not supposed to. The vast majority of them were isolated to one problem: if the objects to be drawn are rendered such that the one farthest away from the viewer is rendered first and nearer objects are rendered on top of that, then transparency would be automatically achieved, but this needs very careful coding to stay performant and to avoid rendering objects that will be overwritten fully by others. See [https://savannah.gnu.org/bugs/?57980] for a summary.<br />
<br />
* '''Project size''' [[#Project sizes | [?]]] and '''Difficulty'''<br />
: ~350 hours (medium)<br />
* '''Required skills'''<br />
: ???<br />
* '''Potential mentors'''<br />
: ???<br />
--><br />
<br />
<!--<br />
== Symbolic package ==<br />
<br />
The [[Symbolic package]] provides symbolic computing and other [https://en.wikipedia.org/wiki/Computer_algebra_system computer algebra system] tools via the [https://sympy.org SymPy Python library]. GSoC projects in 2016 and 2022 improved the package.<br />
<br />
There are no specific plans for Symbolic in GSoC 2023, but improvements elsewhere that would help Symbolic include:<br />
* Developing the Octave-Pythonic package.<br />
* Fix the storage of non-expressions by working with upstream SymPy: currently we rely on deprecated functionality in SymPy.<br />
* Improvements and fixes to classdef-related issues in Octave itself.<br />
* Developing the Octave Jupyter kernel.<br />
<br />
* '''Project size''' [[#Project sizes | [?]]] and '''Difficulty'''<br />
: ~350 hours (medium)<br />
* '''Required skills'''<br />
: ???<br />
* '''Potential mentors'''<br />
: ???<br />
--><br />
<br />
= Project sizes =<br />
<br />
As of 2024, possible project sizes are 90 (small), 175 (medium), or 350 hours (large) <ref>https://developers.google.com/open-source/gsoc/faq#how_much_time_does_gsoc_participation_take</ref>.<br />
<br />
= Footnotes =<br />
<br />
<references /><br />
<br />
= See also =<br />
<br />
* https://summerofcode.withgoogle.com/<br />
* [https://google.github.io/gsocguides/student/ GSoC Student Guide]<br />
* [https://google.github.io/gsocguides/mentor/ GSoC Mentor Guide]<br />
* [https://developers.google.com/open-source/gsoc/timeline GSoC Timeline]<br />
<br />
[[Category:Summer of Code]]<br />
[[Category:Project Ideas]]</div>Nirhttps://wiki.octave.org/wiki/index.php?title=JIT&diff=15061JIT2024-02-15T18:34:57Z<p>Nir: Update</p>
<hr />
<div>This page should help interested persons who want to start hacking on the JIT implementation in octave. It's '''NOT''' intended for octave users.<br />
<br />
Thanks to Max Brister's work for GSoC 2012, an initial implement of a just-in-time compiler (JITC) was coded in LLVM. [https://web.archive.org/web/20220124015319/http://planet.octave.org/octconf2012/jit.pdf Here] is Max's [[OctConf 2012]] presentation about his implementation.<br />
<br />
The JIT was removed from Octave sources in 2021, see [http://hg.savannah.gnu.org/hgweb/octave/rev/f254c302bb9c here] for the details and justification. It can still be accessed by looking at an older revision of the Octave repository.<br />
<br />
=== Recommended reading ===<br />
* [http://en.wikipedia.org/wiki/Abstract_syntax_tree AST (Abstract Syntax Tree)]<br />
* [http://en.wikipedia.org/wiki/Static_single_assignment_form SSA form (Static single assignment form)]<br />
Both the intermediate Octave IR and LLVM's IR are in SSA form<br />
<br />
=== IRC snippets ===<br />
<br />
JIT currently only is invoked at the start of loops. Basically, JIT works by converting Octave's AST to the LLVM Internal Representation (IR). This code is in libinterp/interp-core/pt-jit.cc. This is achieved by constructing an intermediate IR, which is used for type inference, then converting that intermediate IR to LLVM's IR.<br />
If the conversion fails at any stage, we give up and use the interpreter. Normally, this is done by throwing a jit_fail_exception. The reason why we can't go directly to the LLVM IR, is because Octave's AST does not contain any type information, but LLVM's IR requires it. For example, A = B+C. If B and C are matrices, this has as a drastically different meaning than if B and C are scalars. We use the current types of variables to determine the types of the rest of the variables in the loop.<br />
<br />
=== Source code entries ===<br />
<br />
* libinterp/parse-tree/pt-eval.cc line 317<br />
* libinterp/octave-value/ov-usr-fcn.cc line 385<br />
That just invokes the jit code, which you can find in pt-jit.cc<br />
<br />
===Notes by Amod Mulay(white)===<br />
The snippets above define the point in execution where the jit code is called.<br />
All of the files for jit implementation are in libinterp/interp-core, the main files are:<br />
*pt-jit.cc (& pt-jit.h)<br />
*jit-ir.cc (& jit-ir.h)<br />
*jit-typeinfo.cc (& jit-typeinfo.h)<br />
*jit-util.cc (& jit-util.h)<br />
<br />
I haven't gone through all parts of the code yet and don't understand a lot of it, but my first impression is that it feels like more of a text dump. The various parts need to be separated into different files based on functionality. The current files are a tad too big IMHO. Right now all of the jit parts are in 4 files(+4 header files) which are quite large and a lot of it has no documentation to explain how the different parts come together. <br />
<br />
To be fair my impressions/opinions are that of a beginner level user and you are welcome to have a look and post your own comments.<br />
<br />
=== LLVM Compatibility ===<br />
It seems that LLVM APIs change on a fairly regular basis and this creates build issues for Octave. See [https://savannah.gnu.org/bugs/?41061 Octave fails to build with LLVM 3.5]<br />
<br />
{| class="wikitable"<br />
|-<br />
! Octave Version<br />
! LLVM Version<br />
! Successful Build (Y/N)<br />
|-<br />
| 3.8<br />
| 3.3<br />
| Y<br />
|-<br />
| 3.8<br />
| 3.4.2<br />
| N<br />
|}<br />
[[Category:Development]]</div>Nirhttps://wiki.octave.org/wiki/index.php?title=Summer_of_Code_-_Getting_Started&diff=15057Summer of Code - Getting Started2024-02-12T15:17:45Z<p>Nir: /* Project sizes */</p>
<hr />
<div>{{Note|GNU Octave is a [https://summerofcode.withgoogle.com/programs/2023/organizations/gnu-octave mentoring organization for GSoC 2023].}}<br />
<br />
Since 2011 the GNU Octave project has successfully mentored:<br />
* [[Summer of Code | '''42 participants''' ๐]]<br />
* [[Summer of Code | '''44 projects''' ๐]]<br />
in [[Summer of Code]] (SoC) programs by [https://summerofcode.withgoogle.com/ Google] and [https://esa.int/ ESA].<br />
<br />
Those SoC programs aim to advertise open-source software development and to attract potential new Octave developers.<br />
<br />
= Steps toward a successful application =<br />
<br />
# ๐๐ฌ '''We want to get to know you (before the deadline). Communicate with us.'''<br />
#* Join [https://octave.discourse.group/ '''Octave Discourse'''] or [[IRC]] for general discussion and to ask questions (Please do not use the bug tracker for general GSOC inquiries unrelated to specific bugs found with Octave.) Using a nickname is fine.<br />
#* Show us that you're motivated to work on Octave ๐ป. There is no need to present an overwhelming CV ๐; evidence of involvement with Octave is more important.<br />
#* '''<span style="color:darkblue;">If you never talked to us, we will likely reject your proposal</span>''', even it looks good ๐ฎ<br />
# ๐ฉโ๐ฌ '''Get your hands dirty.'''<br />
#* We are curious about your programming skills ๐<br />
#** Your application will be much stronger if you [https://savannah.gnu.org/bugs/?group=octave fix Octave bugs] or [https://savannah.gnu.org/patch/?group=octave submit patches] before or during the application period.<br />
#** You can take a look at the [[short projects]] for some simple bugs to start with.<br />
#* '''Use Octave!'''<br />
#** If you come across something that does not work the way you like โก๏ธ try to fix that ๐ง<br />
#** Or if you find a missing function โก๏ธ try to implement it.<br />
# ๐๐ก '''Tell us what you are going to do.'''<br />
#* Do not write just to say what project you're interested in. Be specific about what you are going to do, include links ๐, show us you know what you are talking about ๐ก, and ask many [http://www.catb.org/esr/faqs/smart-questions.html smart questions] ๐ค<br />
#* Remember, '''we are volunteer developers and not your boss''' ๐<br />
# ๐ '''Prepare your proposal with us.'''<br />
#* Try to show us as early as possible a draft of your proposal ๐<br />
#* If we see your proposal for the first time after the application deadline, it might easily contain some paragraphs not fully clear to us. Ongoing interaction will give us more confidence that you are capable of working on your project ๐๐<br />
#* Then submit the proposal following the applicable rules, e.g. for [https://google.github.io/gsocguides/student/writing-a-proposal GSoC]. ๐จ<br />
<br />
= How do we judge your application? =<br />
<br />
Depending on the mentors and SoC program there are varieties, but typically the main factors considered would be:<br />
<br />
* '''You have demonstrated interest in Octave and an ability to make substantial modifications to Octave'''<br />
*: The most important thing is that you've contributed some interesting code samples to judge your skills. It's OK during the application period to ask for help on how to format these code samples, which normally are Mercurial patches.<br />
<br />
* '''You showed understanding of your topic'''<br />
*: Your proposal should make it clear that you're reasonably well versed in the subject area and won't need all summer just to read up on it.<br />
<br />
* '''Well thought out, adequately detailed, realistic project plan'''<br />
*: "I'm good at this, so trust me" isn't enough. In your proposal, you should describe which algorithms you'll use and how you'll integrate with existing Octave code. You should also prepare a project timeline and goals for the midterm and final evaluations.<br />
<br />
= What you should know about Octave =<br />
<br />
GNU Octave is mostly written in C++ and its own scripting language that is mostly compatible with Matlab. 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 Octave's scripting language, you as successful applicant will be familiar with or able to quickly learn about Octave's infrastructure. You can't spend the whole summer learning how to build Octave or prepare a changeset and still successfully complete your project ๐<br />
<br />
You should know:<br />
# How to build Octave from its source code using [http://en.wikipedia.org/wiki/GNU_build_system the GNU build system].<br />
#* Read in this wiki: [[Developer FAQ]], [[Building]]<br />
#* Tools to know: [https://en.wikipedia.org/wiki/GNU_Compiler_Collection gcc], [https://en.wikipedia.org/wiki/Make_(software) make]<br />
# How to submit patches (changesets).<br />
#* Read in this wiki: [[Contribution guidelines]], [[Mercurial]]<br />
#* Tools to know: [https://en.wikipedia.org/wiki/Mercurial Mercurial (hg)], [https://en.wikipedia.org/wiki/Git git]<br />
<br />
= Suggested projects =<br />
<br />
The following suggested projects are distilled from the [[Projects]] page for the benefit of potential SoC participants. You can also look at our [[Summer of Code|completed past projects]], or the current [https://hg.savannah.gnu.org/hgweb/octave/file/tip/etc/ROADMAP.md| Octave Development Roadmap] for more inspiration.<br />
<br />
{{Note|Do you use Octave at your working place or university? Do you have some numerical project in mind? You are always welcome to '''propose your own projects'''. If you are passionate about your project, it will be easy to find an Octave developer to mentor and guide you. Please note that for such a proposal to be successful it will almost certainly involve initiating pre-proposal discussion over at the [https://octave.discourse.group Octave Discourse forum].}}<br />
<br />
== Adding more Classification classes and implementing missing methods in statistics package ==<br />
<br />
Although a ClassificationKNN class was added in the latest statistics release (1.6.1), it still lacks several methods (only `predict` is available at the moment). This GSoC project aims at implementing more methods, such as crossval, cvloss, lime, loss, margin, partialDependence, plotPartialDependence, etc., as well as adding more classdefs related to classification classes, such as ClassificationGAM, ClassificationDiscriminant, ClassificationSVM, ClassificationNeuralNetwork, ClassificationNaiveBayes, etc. The statistics package, although heavily developed during the past years, still lacks a lot of classdef functionality. The scope is to implement classification classdef objects and their relevant methods in a MATLAB-compatible way. <br />
<br />
* '''Project size''' [[#Project sizes | [?]]] and '''Difficulty'''<br />
: ~350 hours (hard)<br />
* '''Required skills'''<br />
: Octave, classdef, good knowledge of statistical methods<br />
* '''Potential mentors'''<br />
: [https://octave.discourse.group/u/pr0m1th3as Andreas Bertsatos]<br />
<br />
== Custom re-implementation of the texi2html (v.1.82) command line tool ==<br />
<br />
Implement a compiled .oct function to relax the dependency of the pkg-octave-doc package on texi2html (v.1.82) command line tool, which is no longer maintained or further developed but also not readily available to all linux distributions. The idea is to have a `texi2html` function within the pkg-octave-doc package that will replace the functionality of the texi2html (v.1.82) command line tool. This will also help improve the speed of pkg-octave-doc processing large packages, which contain specific tags (such as @math) which are currently handled within Octave code.<br />
<br />
* '''Project size''' [[#Project sizes | [?]]] and '''Difficulty'''<br />
: ~350 hours (hard)<br />
* '''Required skills'''<br />
: Perl, C++, Octave, Texinfo, HTML<br />
* '''Potential mentors'''<br />
: [https://octave.discourse.group/u/pr0m1th3as Andreas Bertsatos]<br />
<br />
<br />
== Port Chebfun to Octave and improve classdef support ==<br />
<br />
[https://www.chebfun.org| Chebfun] uses interpolation to approximate functions to very high accuracy, giving numerical computing that feels like symbolic computing.<br />
The software is implemented as collection of "classdef" classes and is Free and Open Source Software.<br />
However, Chebfun does not yet work with Octave, largely due to differences and issues with Octave's classdef implementation.<br />
This project has two aims: (1) make changes to the Chebfun code to make it work on Octave and (2) improve Octave's classdef functionality.<br />
Some initial steps toward to first goal can be found on [https://github.com/cbm755/chebfun/tree/octave_dev| this octave_dev branch].<br />
The second goal will likely involve a collaborative effort because classdef is a priority on [https://hg.savannah.gnu.org/hgweb/octave/file/tip/etc/ROADMAP.md| Octave's Development Roadmap] and because other proposed projects also involve classdef.<br />
<br />
* '''Project size''' [[#Project sizes | [?]]] and '''Difficulty'''<br />
: ~350 hours (hard)<br />
* '''Required skills'''<br />
: Octave, object-oriented programming, polynomial interpolation and approximation theory, C++.<br />
* '''Potential mentors'''<br />
: [https://octave.discourse.group/u/cbm Colin B. Macdonald]<br />
<br />
<br />
<!--<br />
== ode15{i,s} : Matlab Compatible DAE solvers ==<br />
<br />
An initial implementation of Matlab compatible Differential Algebraic Equations (DAE) solvers, {{manual|ode15i}} and {{manual|ode15s}}, based on [https://computing.llnl.gov/projects/sundials SUNDIALS], <br />
was done by [https://gsoc2016ode15s.blogspot.com/ Francesco Faccio during GSoC 2016]. The code is maintained in the main Octave repository and consists mainly of the following three files: [https://hg.savannah.gnu.org/hgweb/octave/file/tip/libinterp/dldfcn/__ode15__.cc {{path|libinterp/dldfcn/__ode15__.cc}}], [https://hg.savannah.gnu.org/hgweb/octave/file/tip/scripts/ode/ode15i.m {{path|scripts/ode/ode15i.m}}] and [https://hg.savannah.gnu.org/hgweb/octave/file/tip/scripts/ode/ode15s.m {{path|scripts/ode/ode15s.m}}].<br />
<br />
The {{manual|decic}} function for selecting consistent initial conditions for ode15i can be made more Matlab compatible by using [http://dx.doi.org/10.1515/JNMA.2002.291 another algorithm]. Another useful extension is to make ode15{i,s} work with datatypes other than double and to improve interpolation at intermediate time steps.<br />
<br />
* '''Project size''' [[#Project sizes | [?]]] and '''Difficulty'''<br />
: ~350 hours (medium)<br />
* '''Required skills'''<br />
: Octave, C/C++; familiarity with numerical methods for DAEs<br />
* '''Potential mentors'''<br />
: Francesco Faccio, [https://octave.discourse.group/u/cdf Carlo de Falco], [https://octave.discourse.group/u/marco_caliari Marco Caliari], Jacopo Corno, [https://octave.discourse.group/u/schoeps Sebastian Schรถps]<br />
--><br />
<br />
<!--<br />
== PolarAxes and Plotting Improvements ==<br />
<br />
Octave currently provides support for polar axes by using a Cartesian 2-D axes and adding a significant number of properties and callback listeners to get things to work. What is needed is the implementation of a dedicated "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" exists 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. This relates to bug {{bug|49804}}.<br />
<br />
* '''Project size''' [[#Project sizes | [?]]] and '''Difficulty'''<br />
: ~350 hours (medium)<br />
* '''Required skills'''<br />
: Octave, C/C++; optional experience with OpenGL programming<br />
* '''Potential mentors'''<br />
: [https://octave.discourse.group/u/rik Rik]<br />
--><br />
<br />
<!--<br />
== Table datatype ==<br />
<br />
In 2013, Matlab introduced a [https://www.mathworks.com/help/matlab/tables.html new table datatype] to conveniently organize and access data in tabular form. This datatype has not been introduced to Octave yet (see bug {{bug|44571}}). However, there are two initial implementation approaches https://github.com/apjanke/octave-tablicious and https://github.com/gnu-octave/table.<br />
<br />
Based upon the existing approaches, the goal of this project is to define an initial subset of [https://www.mathworks.com/help/matlab/tables.htmlMatlab's table functions], which involve sorting, splitting, merging, and file I/O and implement it within the given time frame.<br />
<br />
* '''Project size''' [[#Project sizes | [?]]] and '''Difficulty'''<br />
: ~350 hours (hard)<br />
* '''Required skills'''<br />
: Octave, C/C++<br />
* '''Potential mentors'''<br />
: ???<br />
--><br />
<br />
<!--<br />
== TISEAN package ==<br />
<br />
The [[TISEAN package]] provides an Octave interface to [https://www.pks.mpg.de/~tisean/Tisean_3.0.1/index.html TISEAN] is a suite of code for nonlinear time series analysis. In 2015, another GSoC project started with the work to create interfaces to many TISEAN functions, but [[TISEAN_package:Procedure | there is still work left to do]]. There are missing functions to do computations on spike trains, to simulate autoregresive models, to create specialized plots, etc. These are of importance for many scientific disciplines involving statistical computations and signal processing.<br />
<br />
* '''Project size''' [[#Project sizes | [?]]] and '''Difficulty'''<br />
: ~350 hours (medium)<br />
* '''Required skills'''<br />
: Octave, C/C++; FORTRAN API knowledge<br />
* '''Potential mentors'''<br />
: [https://octave.discourse.group/u/kakila KaKiLa]<br />
--><br />
<br />
<!--<br />
== Better tab completion ==<br />
<br />
Links: [https://savannah.gnu.org/bugs/index.php?62492 https://savannah.gnu.org/bugs/index.php?62492] and [https://savannah.gnu.org/bugs/?53384 https://savannah.gnu.org/bugs/?53384]<br />
<br />
Description: currently pressing Tab at the Octave command prompt attempts autocompletion of all identifiers in scope (variables, functions, classdefs etc) as well as files and directories in the path. It is not context sensitive.<br />
<br />
Project: Improve tab completion. For example,<br />
<br />
* Typing<br />
: load x<br />
and then pressing tab should ideally give all loadable files and directories starting with x, not unrelated results like variables or functions. <br />
<br />
* Typing<br />
:cd<br />
and tab should only give directories.<br />
<br />
* Any file and directory names that are included in the results should include those with spaces and special characters including those that would be interpreted as operators by Octave.<br />
<br />
* Typing commands like<br />
: axis<br />
or<br />
: format<br />
and pressing tab should give only those options relevant to that command. E.g. format can be followed by short / long / loose / compact etc but not by a file or variable. Similarly axis can be followed by ij / xy / tight / equal / actual limits etc but not by files or directories. And so on for other commands. This should be made possible for both preexisting commands and for yet-to-be-written commands without any rewriting of existing function code or documentation.<br />
<br />
To get more examples, see how bash completion works. You can type git or hg and then tab and it will give the list of available commands. If you type "sort --r" and then tab, it gives the list of options to sort starting with "--r", etc.<br />
<br />
* '''Project size''' [[#Project sizes | [?]]] and '''Difficulty'''<br />
: ~350 hours (medium)<br />
* '''Required skills'''<br />
: ???<br />
* '''Potential mentors'''<br />
: ???<br />
--><br />
<br />
<!--<br />
== Graphics rendering back to front sorting ==<br />
<br />
Several incompatibilities have been identified in how Octave plots transparent objects in 3D, causing certain transparent objects to hide opaque objects behind them even though they're not supposed to. The vast majority of them were isolated to one problem: if the objects to be drawn are rendered such that the one farthest away from the viewer is rendered first and nearer objects are rendered on top of that, then transparency would be automatically achieved, but this needs very careful coding to stay performant and to avoid rendering objects that will be overwritten fully by others. See [https://savannah.gnu.org/bugs/?57980] for a summary.<br />
<br />
* '''Project size''' [[#Project sizes | [?]]] and '''Difficulty'''<br />
: ~350 hours (medium)<br />
* '''Required skills'''<br />
: ???<br />
* '''Potential mentors'''<br />
: ???<br />
--><br />
<br />
<!--<br />
== Symbolic package ==<br />
<br />
The [[Symbolic package]] provides symbolic computing and other [https://en.wikipedia.org/wiki/Computer_algebra_system computer algebra system] tools via the [https://sympy.org SymPy Python library]. GSoC projects in 2016 and 2022 improved the package.<br />
<br />
There are no specific plans for Symbolic in GSoC 2023, but improvements elsewhere that would help Symbolic include:<br />
* Developing the Octave-Pythonic package.<br />
* Fix the storage of non-expressions by working with upstream SymPy: currently we rely on deprecated functionality in SymPy.<br />
* Improvements and fixes to classdef-related issues in Octave itself.<br />
* Developing the Octave Jupyter kernel.<br />
<br />
* '''Project size''' [[#Project sizes | [?]]] and '''Difficulty'''<br />
: ~350 hours (medium)<br />
* '''Required skills'''<br />
: ???<br />
* '''Potential mentors'''<br />
: ???<br />
--><br />
<br />
= Project sizes =<br />
<br />
As of 2024, possible project sizes are 90 (small), 175 (medium), or 350 hours (large) <ref>https://developers.google.com/open-source/gsoc/faq#how_much_time_does_gsoc_participation_take</ref>.<br />
<br />
= Footnotes =<br />
<br />
<references /><br />
<br />
= See also =<br />
<br />
* https://summerofcode.withgoogle.com/<br />
* [https://google.github.io/gsocguides/student/ GSoC Student Guide]<br />
* [https://google.github.io/gsocguides/mentor/ GSoC Mentor Guide]<br />
* [https://developers.google.com/open-source/gsoc/timeline GSoC Timeline]<br />
<br />
[[Category:Summer of Code]]<br />
[[Category:Project Ideas]]</div>Nirhttps://wiki.octave.org/wiki/index.php?title=Summer_of_Code_-_Getting_Started&diff=15056Summer of Code - Getting Started2024-02-12T15:17:27Z<p>Nir: Updated Google project sizes</p>
<hr />
<div>{{Note|GNU Octave is a [https://summerofcode.withgoogle.com/programs/2023/organizations/gnu-octave mentoring organization for GSoC 2023].}}<br />
<br />
Since 2011 the GNU Octave project has successfully mentored:<br />
* [[Summer of Code | '''42 participants''' ๐]]<br />
* [[Summer of Code | '''44 projects''' ๐]]<br />
in [[Summer of Code]] (SoC) programs by [https://summerofcode.withgoogle.com/ Google] and [https://esa.int/ ESA].<br />
<br />
Those SoC programs aim to advertise open-source software development and to attract potential new Octave developers.<br />
<br />
= Steps toward a successful application =<br />
<br />
# ๐๐ฌ '''We want to get to know you (before the deadline). Communicate with us.'''<br />
#* Join [https://octave.discourse.group/ '''Octave Discourse'''] or [[IRC]] for general discussion and to ask questions (Please do not use the bug tracker for general GSOC inquiries unrelated to specific bugs found with Octave.) Using a nickname is fine.<br />
#* Show us that you're motivated to work on Octave ๐ป. There is no need to present an overwhelming CV ๐; evidence of involvement with Octave is more important.<br />
#* '''<span style="color:darkblue;">If you never talked to us, we will likely reject your proposal</span>''', even it looks good ๐ฎ<br />
# ๐ฉโ๐ฌ '''Get your hands dirty.'''<br />
#* We are curious about your programming skills ๐<br />
#** Your application will be much stronger if you [https://savannah.gnu.org/bugs/?group=octave fix Octave bugs] or [https://savannah.gnu.org/patch/?group=octave submit patches] before or during the application period.<br />
#** You can take a look at the [[short projects]] for some simple bugs to start with.<br />
#* '''Use Octave!'''<br />
#** If you come across something that does not work the way you like โก๏ธ try to fix that ๐ง<br />
#** Or if you find a missing function โก๏ธ try to implement it.<br />
# ๐๐ก '''Tell us what you are going to do.'''<br />
#* Do not write just to say what project you're interested in. Be specific about what you are going to do, include links ๐, show us you know what you are talking about ๐ก, and ask many [http://www.catb.org/esr/faqs/smart-questions.html smart questions] ๐ค<br />
#* Remember, '''we are volunteer developers and not your boss''' ๐<br />
# ๐ '''Prepare your proposal with us.'''<br />
#* Try to show us as early as possible a draft of your proposal ๐<br />
#* If we see your proposal for the first time after the application deadline, it might easily contain some paragraphs not fully clear to us. Ongoing interaction will give us more confidence that you are capable of working on your project ๐๐<br />
#* Then submit the proposal following the applicable rules, e.g. for [https://google.github.io/gsocguides/student/writing-a-proposal GSoC]. ๐จ<br />
<br />
= How do we judge your application? =<br />
<br />
Depending on the mentors and SoC program there are varieties, but typically the main factors considered would be:<br />
<br />
* '''You have demonstrated interest in Octave and an ability to make substantial modifications to Octave'''<br />
*: The most important thing is that you've contributed some interesting code samples to judge your skills. It's OK during the application period to ask for help on how to format these code samples, which normally are Mercurial patches.<br />
<br />
* '''You showed understanding of your topic'''<br />
*: Your proposal should make it clear that you're reasonably well versed in the subject area and won't need all summer just to read up on it.<br />
<br />
* '''Well thought out, adequately detailed, realistic project plan'''<br />
*: "I'm good at this, so trust me" isn't enough. In your proposal, you should describe which algorithms you'll use and how you'll integrate with existing Octave code. You should also prepare a project timeline and goals for the midterm and final evaluations.<br />
<br />
= What you should know about Octave =<br />
<br />
GNU Octave is mostly written in C++ and its own scripting language that is mostly compatible with Matlab. 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 Octave's scripting language, you as successful applicant will be familiar with or able to quickly learn about Octave's infrastructure. You can't spend the whole summer learning how to build Octave or prepare a changeset and still successfully complete your project ๐<br />
<br />
You should know:<br />
# How to build Octave from its source code using [http://en.wikipedia.org/wiki/GNU_build_system the GNU build system].<br />
#* Read in this wiki: [[Developer FAQ]], [[Building]]<br />
#* Tools to know: [https://en.wikipedia.org/wiki/GNU_Compiler_Collection gcc], [https://en.wikipedia.org/wiki/Make_(software) make]<br />
# How to submit patches (changesets).<br />
#* Read in this wiki: [[Contribution guidelines]], [[Mercurial]]<br />
#* Tools to know: [https://en.wikipedia.org/wiki/Mercurial Mercurial (hg)], [https://en.wikipedia.org/wiki/Git git]<br />
<br />
= Suggested projects =<br />
<br />
The following suggested projects are distilled from the [[Projects]] page for the benefit of potential SoC participants. You can also look at our [[Summer of Code|completed past projects]], or the current [https://hg.savannah.gnu.org/hgweb/octave/file/tip/etc/ROADMAP.md| Octave Development Roadmap] for more inspiration.<br />
<br />
{{Note|Do you use Octave at your working place or university? Do you have some numerical project in mind? You are always welcome to '''propose your own projects'''. If you are passionate about your project, it will be easy to find an Octave developer to mentor and guide you. Please note that for such a proposal to be successful it will almost certainly involve initiating pre-proposal discussion over at the [https://octave.discourse.group Octave Discourse forum].}}<br />
<br />
== Adding more Classification classes and implementing missing methods in statistics package ==<br />
<br />
Although a ClassificationKNN class was added in the latest statistics release (1.6.1), it still lacks several methods (only `predict` is available at the moment). This GSoC project aims at implementing more methods, such as crossval, cvloss, lime, loss, margin, partialDependence, plotPartialDependence, etc., as well as adding more classdefs related to classification classes, such as ClassificationGAM, ClassificationDiscriminant, ClassificationSVM, ClassificationNeuralNetwork, ClassificationNaiveBayes, etc. The statistics package, although heavily developed during the past years, still lacks a lot of classdef functionality. The scope is to implement classification classdef objects and their relevant methods in a MATLAB-compatible way. <br />
<br />
* '''Project size''' [[#Project sizes | [?]]] and '''Difficulty'''<br />
: ~350 hours (hard)<br />
* '''Required skills'''<br />
: Octave, classdef, good knowledge of statistical methods<br />
* '''Potential mentors'''<br />
: [https://octave.discourse.group/u/pr0m1th3as Andreas Bertsatos]<br />
<br />
== Custom re-implementation of the texi2html (v.1.82) command line tool ==<br />
<br />
Implement a compiled .oct function to relax the dependency of the pkg-octave-doc package on texi2html (v.1.82) command line tool, which is no longer maintained or further developed but also not readily available to all linux distributions. The idea is to have a `texi2html` function within the pkg-octave-doc package that will replace the functionality of the texi2html (v.1.82) command line tool. This will also help improve the speed of pkg-octave-doc processing large packages, which contain specific tags (such as @math) which are currently handled within Octave code.<br />
<br />
* '''Project size''' [[#Project sizes | [?]]] and '''Difficulty'''<br />
: ~350 hours (hard)<br />
* '''Required skills'''<br />
: Perl, C++, Octave, Texinfo, HTML<br />
* '''Potential mentors'''<br />
: [https://octave.discourse.group/u/pr0m1th3as Andreas Bertsatos]<br />
<br />
<br />
== Port Chebfun to Octave and improve classdef support ==<br />
<br />
[https://www.chebfun.org| Chebfun] uses interpolation to approximate functions to very high accuracy, giving numerical computing that feels like symbolic computing.<br />
The software is implemented as collection of "classdef" classes and is Free and Open Source Software.<br />
However, Chebfun does not yet work with Octave, largely due to differences and issues with Octave's classdef implementation.<br />
This project has two aims: (1) make changes to the Chebfun code to make it work on Octave and (2) improve Octave's classdef functionality.<br />
Some initial steps toward to first goal can be found on [https://github.com/cbm755/chebfun/tree/octave_dev| this octave_dev branch].<br />
The second goal will likely involve a collaborative effort because classdef is a priority on [https://hg.savannah.gnu.org/hgweb/octave/file/tip/etc/ROADMAP.md| Octave's Development Roadmap] and because other proposed projects also involve classdef.<br />
<br />
* '''Project size''' [[#Project sizes | [?]]] and '''Difficulty'''<br />
: ~350 hours (hard)<br />
* '''Required skills'''<br />
: Octave, object-oriented programming, polynomial interpolation and approximation theory, C++.<br />
* '''Potential mentors'''<br />
: [https://octave.discourse.group/u/cbm Colin B. Macdonald]<br />
<br />
<br />
<!--<br />
== ode15{i,s} : Matlab Compatible DAE solvers ==<br />
<br />
An initial implementation of Matlab compatible Differential Algebraic Equations (DAE) solvers, {{manual|ode15i}} and {{manual|ode15s}}, based on [https://computing.llnl.gov/projects/sundials SUNDIALS], <br />
was done by [https://gsoc2016ode15s.blogspot.com/ Francesco Faccio during GSoC 2016]. The code is maintained in the main Octave repository and consists mainly of the following three files: [https://hg.savannah.gnu.org/hgweb/octave/file/tip/libinterp/dldfcn/__ode15__.cc {{path|libinterp/dldfcn/__ode15__.cc}}], [https://hg.savannah.gnu.org/hgweb/octave/file/tip/scripts/ode/ode15i.m {{path|scripts/ode/ode15i.m}}] and [https://hg.savannah.gnu.org/hgweb/octave/file/tip/scripts/ode/ode15s.m {{path|scripts/ode/ode15s.m}}].<br />
<br />
The {{manual|decic}} function for selecting consistent initial conditions for ode15i can be made more Matlab compatible by using [http://dx.doi.org/10.1515/JNMA.2002.291 another algorithm]. Another useful extension is to make ode15{i,s} work with datatypes other than double and to improve interpolation at intermediate time steps.<br />
<br />
* '''Project size''' [[#Project sizes | [?]]] and '''Difficulty'''<br />
: ~350 hours (medium)<br />
* '''Required skills'''<br />
: Octave, C/C++; familiarity with numerical methods for DAEs<br />
* '''Potential mentors'''<br />
: Francesco Faccio, [https://octave.discourse.group/u/cdf Carlo de Falco], [https://octave.discourse.group/u/marco_caliari Marco Caliari], Jacopo Corno, [https://octave.discourse.group/u/schoeps Sebastian Schรถps]<br />
--><br />
<br />
<!--<br />
== PolarAxes and Plotting Improvements ==<br />
<br />
Octave currently provides support for polar axes by using a Cartesian 2-D axes and adding a significant number of properties and callback listeners to get things to work. What is needed is the implementation of a dedicated "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" exists 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. This relates to bug {{bug|49804}}.<br />
<br />
* '''Project size''' [[#Project sizes | [?]]] and '''Difficulty'''<br />
: ~350 hours (medium)<br />
* '''Required skills'''<br />
: Octave, C/C++; optional experience with OpenGL programming<br />
* '''Potential mentors'''<br />
: [https://octave.discourse.group/u/rik Rik]<br />
--><br />
<br />
<!--<br />
== Table datatype ==<br />
<br />
In 2013, Matlab introduced a [https://www.mathworks.com/help/matlab/tables.html new table datatype] to conveniently organize and access data in tabular form. This datatype has not been introduced to Octave yet (see bug {{bug|44571}}). However, there are two initial implementation approaches https://github.com/apjanke/octave-tablicious and https://github.com/gnu-octave/table.<br />
<br />
Based upon the existing approaches, the goal of this project is to define an initial subset of [https://www.mathworks.com/help/matlab/tables.htmlMatlab's table functions], which involve sorting, splitting, merging, and file I/O and implement it within the given time frame.<br />
<br />
* '''Project size''' [[#Project sizes | [?]]] and '''Difficulty'''<br />
: ~350 hours (hard)<br />
* '''Required skills'''<br />
: Octave, C/C++<br />
* '''Potential mentors'''<br />
: ???<br />
--><br />
<br />
<!--<br />
== TISEAN package ==<br />
<br />
The [[TISEAN package]] provides an Octave interface to [https://www.pks.mpg.de/~tisean/Tisean_3.0.1/index.html TISEAN] is a suite of code for nonlinear time series analysis. In 2015, another GSoC project started with the work to create interfaces to many TISEAN functions, but [[TISEAN_package:Procedure | there is still work left to do]]. There are missing functions to do computations on spike trains, to simulate autoregresive models, to create specialized plots, etc. These are of importance for many scientific disciplines involving statistical computations and signal processing.<br />
<br />
* '''Project size''' [[#Project sizes | [?]]] and '''Difficulty'''<br />
: ~350 hours (medium)<br />
* '''Required skills'''<br />
: Octave, C/C++; FORTRAN API knowledge<br />
* '''Potential mentors'''<br />
: [https://octave.discourse.group/u/kakila KaKiLa]<br />
--><br />
<br />
<!--<br />
== Better tab completion ==<br />
<br />
Links: [https://savannah.gnu.org/bugs/index.php?62492 https://savannah.gnu.org/bugs/index.php?62492] and [https://savannah.gnu.org/bugs/?53384 https://savannah.gnu.org/bugs/?53384]<br />
<br />
Description: currently pressing Tab at the Octave command prompt attempts autocompletion of all identifiers in scope (variables, functions, classdefs etc) as well as files and directories in the path. It is not context sensitive.<br />
<br />
Project: Improve tab completion. For example,<br />
<br />
* Typing<br />
: load x<br />
and then pressing tab should ideally give all loadable files and directories starting with x, not unrelated results like variables or functions. <br />
<br />
* Typing<br />
:cd<br />
and tab should only give directories.<br />
<br />
* Any file and directory names that are included in the results should include those with spaces and special characters including those that would be interpreted as operators by Octave.<br />
<br />
* Typing commands like<br />
: axis<br />
or<br />
: format<br />
and pressing tab should give only those options relevant to that command. E.g. format can be followed by short / long / loose / compact etc but not by a file or variable. Similarly axis can be followed by ij / xy / tight / equal / actual limits etc but not by files or directories. And so on for other commands. This should be made possible for both preexisting commands and for yet-to-be-written commands without any rewriting of existing function code or documentation.<br />
<br />
To get more examples, see how bash completion works. You can type git or hg and then tab and it will give the list of available commands. If you type "sort --r" and then tab, it gives the list of options to sort starting with "--r", etc.<br />
<br />
* '''Project size''' [[#Project sizes | [?]]] and '''Difficulty'''<br />
: ~350 hours (medium)<br />
* '''Required skills'''<br />
: ???<br />
* '''Potential mentors'''<br />
: ???<br />
--><br />
<br />
<!--<br />
== Graphics rendering back to front sorting ==<br />
<br />
Several incompatibilities have been identified in how Octave plots transparent objects in 3D, causing certain transparent objects to hide opaque objects behind them even though they're not supposed to. The vast majority of them were isolated to one problem: if the objects to be drawn are rendered such that the one farthest away from the viewer is rendered first and nearer objects are rendered on top of that, then transparency would be automatically achieved, but this needs very careful coding to stay performant and to avoid rendering objects that will be overwritten fully by others. See [https://savannah.gnu.org/bugs/?57980] for a summary.<br />
<br />
* '''Project size''' [[#Project sizes | [?]]] and '''Difficulty'''<br />
: ~350 hours (medium)<br />
* '''Required skills'''<br />
: ???<br />
* '''Potential mentors'''<br />
: ???<br />
--><br />
<br />
<!--<br />
== Symbolic package ==<br />
<br />
The [[Symbolic package]] provides symbolic computing and other [https://en.wikipedia.org/wiki/Computer_algebra_system computer algebra system] tools via the [https://sympy.org SymPy Python library]. GSoC projects in 2016 and 2022 improved the package.<br />
<br />
There are no specific plans for Symbolic in GSoC 2023, but improvements elsewhere that would help Symbolic include:<br />
* Developing the Octave-Pythonic package.<br />
* Fix the storage of non-expressions by working with upstream SymPy: currently we rely on deprecated functionality in SymPy.<br />
* Improvements and fixes to classdef-related issues in Octave itself.<br />
* Developing the Octave Jupyter kernel.<br />
<br />
* '''Project size''' [[#Project sizes | [?]]] and '''Difficulty'''<br />
: ~350 hours (medium)<br />
* '''Required skills'''<br />
: ???<br />
* '''Potential mentors'''<br />
: ???<br />
--><br />
<br />
= Project sizes =<br />
<br />
As of 2024, possible project sizes are 90 (small), 175 (medium), or 350 hours (large) <ref>https://developers.google.com/open-source/gsoc/faq#how_much_time_does_gsoc_participation_take</ref>:<br />
<br />
= Footnotes =<br />
<br />
<references /><br />
<br />
= See also =<br />
<br />
* https://summerofcode.withgoogle.com/<br />
* [https://google.github.io/gsocguides/student/ GSoC Student Guide]<br />
* [https://google.github.io/gsocguides/mentor/ GSoC Mentor Guide]<br />
* [https://developers.google.com/open-source/gsoc/timeline GSoC Timeline]<br />
<br />
[[Category:Summer of Code]]<br />
[[Category:Project Ideas]]</div>Nirhttps://wiki.octave.org/wiki/index.php?title=GSoC_2024_application&diff=15053GSoC 2024 application2024-02-02T15:33:32Z<p>Nir: adapted from 2023</p>
<hr />
<div>__NOTOC__<br />
<br />
Octave's application for GSoC 2024.<br />
<br />
=== Organization name ===<br />
<br />
GNU Octave<br />
<br />
=== OSI approved license? ===<br />
<br />
Yes<br />
<br />
=== Has your organization participated in Google Summer of Code before? ===<br />
<br />
Yes<br />
<br />
=== Please select all years in which your organization participated prior to 2023 ===<br />
<br />
2016-2022, 2014<br />
<br />
=== Website URL ===<br />
<br />
https://www.octave.org<br />
<br />
=== Logo (Must be a 24-bit PNG, minimum height 256 pixels.) ===<br />
<br />
https://upload.wikimedia.org/wikipedia/commons/thumb/6/6a/Gnu-octave-logo.svg/283px-Gnu-octave-logo.svg.png (or generate 256x256 PNG from http://hg.savannah.gnu.org/hgweb/octave/raw-file/155d8e90ee1f/doc/icons/octave-logo.svg with <code>inkscape -z -e octave-logo.png -w 256 -h 256 octave-logo.svg</code>)<br />
<br />
=== Tagline (50 characters) ===<br />
<br />
Free Your Numbers<br />
<br />
=== Primary License ===<br />
<br />
GPL 3.0<br />
<br />
=== What year was your project started? ===<br />
<br />
1992<br />
<br />
=== Source code location === <br />
<br />
https://hg.savannah.gnu.org/hgweb/octave<br />
<br />
<br />
=== Organization Category ===<br />
<br />
Programming Languages, Science<br />
<br />
<br />
=== Technology Tags (the primary specific technologies your organization uses) (up to 5) ===<br />
<br />
C++, hg<br />
<br />
=== Topic Tags (general topics that describe your organization) (up to 5) ===<br />
<br />
mathematics, numerical computation, numerical methods, matlab, scientific computing<br />
<br />
<br />
=== Description ===<br />
<br />
GNU Octave is a high-level interpreted language, primarily intended for numerical computations. It provides capabilities for the numerical solution of linear and nonlinear problems and for performing other numerical experiments. It also provides extensive graphics capabilities for data visualization and manipulation. Octave is normally used through its interactive command line interface, but it can also be used to write non-interactive programs. The Octave language is quite similar to Matlab so that most programs are easily portable.<br />
<br />
Octave is continually being upgraded. Student projects may also involve developing or upgrading Octave Forge packages, which can be loaded to provide additional specialized functions that supplement those provided in Core Octave.<br />
<br />
<br />
=== Contributor guidance / Idea List ===<br />
<br />
https://wiki.octave.org/gsoc<br />
<br />
=== Contact methods ===<br />
<br />
Chat: https://octave.discourse.group/<br />
<br />
Mailing list: https://lists.gnu.org/mailman/listinfo/octave-maintainers<br />
<br />
Email: octave-maintainers@gnu.org<br />
<br />
=== Why does your org want to participate in Google Summer of Code? (1000 chars) ===<br />
<br />
We hope to establish collaborations with talented new contributors. We also want to raise awareness of Octave in the free software community.<br />
<br />
Google Summer of Code represents a unique opportunity to bring new perspectives to the Octave community. As a somewhat older project, we benefit from having new and younger contributors among our developers. We have been able to retain several GSoC participants who have become important contributors to the Octave project and we hope to continue this in the future by engaging effectively with students during both the application and mentoring processes, setting clear standards for what is required for acceptance, and maintaining those standards throughout the project.<br />
<br />
=== What would your org consider to be a successful summer? (500 chars) ===<br />
<br />
We would consider a program successful if we selected promising students, provided adequate mentor supervision, developed desired features in Octave, and facilitated a satisfying experience for the students and mentors. We are more interested in the quality of interactions and contributions than in quantity, although, all else being equal, we would be happy to have more talented students join us.<br />
<br />
<br />
<br />
<br />
<br />
<br />
=== Is your organization part of any government? ===<br />
<br />
No<br />
<br />
<br />
<br />
<br />
<br />
=== How will you keep mentors engaged with their students? (1000 chars) ===<br />
<br />
We will select mentors with proven involvement in Octave and free software and align project topics with the priorities of the core developer team. The vast majority of our mentors have been involved in Octave development for several years, and new mentors will be paired with more experienced ones.<br />
<br />
Each project will include at least one core Octave developer as mentor. These are proven, veteran members of the project who are familiar with the code base and with engaging the maintainer and user community. GNU Octave is a project with applications in very diverse domains, so each project should also include a mentor with expertise in the relevant field.<br />
<br />
=== How will you help your students stay on schedule to complete their projects? (1000 chars) ===<br />
<br />
Previous contributions to Octave (which can be small) are a condition for acceptance. In this way, we hope to select students who are familiar with the codebase and able to start their project quickly.<br />
<br />
A tentative project timeline is required as part of the application, and is checked by mentors for realism during the applicant evaluation process. Once a student is selected, the mentors will work with them to come up with a more detailed timeline, including clear expectations for progress by the midterm and final evaluation periods.<br />
<br />
During the summer, mentors will check with students at least weekly to make sure they are staying on schedule and help with any obstacles that might arise. Students are also expected to regularly update their mentors and the Octave maintainers community on their progress via e-mails and blog posts.<br />
<br />
Overall, the vast majority of our over 30 previous SoC students have finished successfully, making substantive contributions to Octave that have been integrated into our codebase.<br />
<br />
=== How will you get your students involved in your community during GSoC? (1000 chars) ===<br />
<br />
Students will be urged to participate in our chat channel and mailing list. We will set clear expectations on the minimum frequency of email progress updates, typically every two to three days. Students will also set up a blog for longer, weekly, updates which will be aggregated at http://planet.octave.org<br />
<br />
Everything should be completely open. Almost all interactions with the student should be public, e.g. contacting the mentor should happen in the public IRC channel or copy the maintainers mailing list.<br />
<br />
Finally, we organize an annual developers' summit, OctConf, and have in previous years provided support for GSoC students to attend and present. We also hold monthly online developer meetings to discuss Octave's direction and future activities, to which GSoC students would be invited. Such meetings strengthen relationships between community members and the new students.<br />
<br />
=== How many Mentors does your Organization have available to participate in this program? === <br />
<br />
5<br />
<br />
=== Number of students/GSoC contributors accepted in 2023 / still active in community ===<br />
<br />
2 / 1<br />
<br />
<br />
<br />
<br />
<br />
[[Category:Summer of Code]]<br />
[[Category:2024]]</div>Nirhttps://wiki.octave.org/wiki/index.php?title=Summer_of_Code_-_Getting_Started&diff=14854Summer of Code - Getting Started2023-09-04T12:49:24Z<p>Nir: add 2022-2023 project number</p>
<hr />
<div>{{Note|GNU Octave is a [https://summerofcode.withgoogle.com/programs/2023/organizations/gnu-octave mentoring organization for GSoC 2023].}}<br />
<br />
Since 2011 the GNU Octave project has successfully mentored:<br />
* [[Summer of Code | '''42 participants''' ๐]]<br />
* [[Summer of Code | '''44 projects''' ๐]]<br />
in [[Summer of Code]] (SoC) programs by [https://summerofcode.withgoogle.com/ Google] and [https://esa.int/ ESA].<br />
<br />
Those SoC programs aim to advertise open-source software development and to attract potential new Octave developers.<br />
<br />
= Steps toward a successful application =<br />
<br />
# ๐๐ฌ '''We want to get to know you (before the deadline). Communicate with us.'''<br />
#* Join [https://octave.discourse.group/ '''Octave Discourse'''] or [[IRC]] for general discussion and to ask questions (Please do not use the bug tracker for general GSOC inquiries unrelated to specific bugs found with Octave.) Using a nickname is fine.<br />
#* Show us that you're motivated to work on Octave ๐ป. There is no need to present an overwhelming CV ๐; evidence of involvement with Octave is more important.<br />
#* '''<span style="color:darkblue;">If you never talked to us, we will likely reject your proposal</span>''', even it looks good ๐ฎ<br />
# ๐ฉโ๐ฌ '''Get your hands dirty.'''<br />
#* We are curious about your programming skills ๐<br />
#** Your application will be much stronger if you [https://savannah.gnu.org/bugs/?group=octave fix Octave bugs] or [https://savannah.gnu.org/patch/?group=octave submit patches] before or during the application period.<br />
#** You can take a look at the [[short projects]] for some simple bugs to start with.<br />
#* '''Use Octave!'''<br />
#** If you come across something that does not work the way you like โก๏ธ try to fix that ๐ง<br />
#** Or if you find a missing function โก๏ธ try to implement it.<br />
# ๐๐ก '''Tell us what you are going to do.'''<br />
#* Do not write just to say what project you're interested in. Be specific about what you are going to do, include links ๐, show us you know what you are talking about ๐ก, and ask many [http://www.catb.org/esr/faqs/smart-questions.html smart questions] ๐ค<br />
#* Remember, '''we are volunteer developers and not your boss''' ๐<br />
# ๐ '''Prepare your proposal with us.'''<br />
#* Try to show us as early as possible a draft of your proposal ๐<br />
#* If we see your proposal for the first time after the application deadline, it might easily contain some paragraphs not fully clear to us. Ongoing interaction will give us more confidence that you are capable of working on your project ๐๐<br />
#* Then submit the proposal following the applicable rules, e.g. for [https://google.github.io/gsocguides/student/writing-a-proposal GSoC]. ๐จ<br />
<br />
= How do we judge your application? =<br />
<br />
Depending on the mentors and SoC program there are varieties, but typically the main factors considered would be:<br />
<br />
* '''You have demonstrated interest in Octave and an ability to make substantial modifications to Octave'''<br />
*: The most important thing is that you've contributed some interesting code samples to judge your skills. It's OK during the application period to ask for help on how to format these code samples, which normally are Mercurial patches.<br />
<br />
* '''You showed understanding of your topic'''<br />
*: Your proposal should make it clear that you're reasonably well versed in the subject area and won't need all summer just to read up on it.<br />
<br />
* '''Well thought out, adequately detailed, realistic project plan'''<br />
*: "I'm good at this, so trust me" isn't enough. In your proposal, you should describe which algorithms you'll use and how you'll integrate with existing Octave code. You should also prepare a project timeline and goals for the midterm and final evaluations.<br />
<br />
= What you should know about Octave =<br />
<br />
GNU Octave is mostly written in C++ and its own scripting language that is mostly compatible with Matlab. 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 Octave's scripting language, you as successful applicant will be familiar with or able to quickly learn about Octave's infrastructure. You can't spend the whole summer learning how to build Octave or prepare a changeset and still successfully complete your project ๐<br />
<br />
You should know:<br />
# How to build Octave from its source code using [http://en.wikipedia.org/wiki/GNU_build_system the GNU build system].<br />
#* Read in this wiki: [[Developer FAQ]], [[Building]]<br />
#* Tools to know: [https://en.wikipedia.org/wiki/GNU_Compiler_Collection gcc], [https://en.wikipedia.org/wiki/Make_(software) make]<br />
# How to submit patches (changesets).<br />
#* Read in this wiki: [[Contribution guidelines]], [[Mercurial]]<br />
#* Tools to know: [https://en.wikipedia.org/wiki/Mercurial Mercurial (hg)], [https://en.wikipedia.org/wiki/Git git]<br />
<br />
= Suggested projects =<br />
<br />
The following suggested projects are distilled from the [[Projects]] page for the benefit of potential SoC participants. You can also look at our [[Summer of Code|completed past projects]] for more inspiration.<br />
<br />
{{Note|Do you use Octave at your working place or university? Do you have some numerical project in mind? You are always welcome to '''propose your own projects'''. If you are passionate about your project, it will be easy to find an Octave developer to mentor and guide you. Please note that for such a proposal to be successful it will almost certainly involve initiating pre-proposal discussion over at the [https://octave.discourse.group Octave Discourse forum].}}<br />
<br />
== Adding regression GAM and kNN classification functionality in statistics package ==<br />
<br />
Generalized Additive Models and k-Nearest Neighbor algorithms are two important tools in advanced statistics used for regression and classification problems, respectively. The statistics package, although heavily developed during the past year, still lacks any functionality regarding these two algorithms.<br />
The scope is to implement both the respective class def objects as well as the relevant functions in a MATLAB compatible way.<br />
<br />
* '''Project size''' [[#Project sizes | [?]]] and '''Difficulty'''<br />
: ~350 hours (medium)<br />
* '''Required skills'''<br />
: Octave, familiarity with statistical methods<br />
* '''Potential mentors'''<br />
: [https://octave.discourse.group/u/pr0m1th3as Andreas Bertsatos]<br />
<br />
== Custom re-implementation of the texi2html (v.1.82) command line tool ==<br />
<br />
Implement a custom perl script to relax the dependency of the pkg-octave-doc package on texi2html (v.1.82) command line tool, which is no longer maintained or further developed but also not readily available to all linux distributions.<br />
This will also help improve the speed of pkg-octave-doc processing large packages, which contain specific tags (such as @math) which are currently handled within Octave code.<br />
<br />
* '''Project size''' [[#Project sizes | [?]]] and '''Difficulty'''<br />
: ~350 hours (hard)<br />
* '''Required skills'''<br />
: Perl, Octave, Texinfo, HTML<br />
* '''Potential mentors'''<br />
: [https://octave.discourse.group/u/pr0m1th3as Andreas Bertsatos]<br />
<br />
== A function search index website for all Octave Packages ==<br />
<br />
Develop additional functionality for the pkg-octave-doc package than will search all pkg compatible packages listed in Octave Packages, enumerate the available functions from each package, and built a website with search capability that will list all functionsโ names and their respective package(s). The function list should have links corresponding to their documentation or/and source code. This could be integrated in the current Octave Packages website and the implemented tool can be part of the current CI (used for testing a package before merging a new release) and automatically update the website with every package release. Alternatively, it can be a stand alone service which will monitor Octave Packages repository for any merged PR and update the function search index website accordingly.<br />
<br />
* '''Project size''' [[#Project sizes | [?]]] and '''Difficulty'''<br />
: ~350 hours (medium)<br />
* '''Required skills'''<br />
: Octave, Bootstap 5 framework<br />
* '''Potential mentors'''<br />
: [https://octave.discourse.group/u/pr0m1th3as Andreas Bertsatos]<br />
<br />
<!--<br />
== ode15{i,s} : Matlab Compatible DAE solvers ==<br />
<br />
An initial implementation of Matlab compatible Differential Algebraic Equations (DAE) solvers, {{manual|ode15i}} and {{manual|ode15s}}, based on [https://computing.llnl.gov/projects/sundials SUNDIALS], <br />
was done by [https://gsoc2016ode15s.blogspot.com/ Francesco Faccio during GSoC 2016]. The code is maintained in the main Octave repository and consists mainly of the following three files: [https://hg.savannah.gnu.org/hgweb/octave/file/tip/libinterp/dldfcn/__ode15__.cc {{path|libinterp/dldfcn/__ode15__.cc}}], [https://hg.savannah.gnu.org/hgweb/octave/file/tip/scripts/ode/ode15i.m {{path|scripts/ode/ode15i.m}}] and [https://hg.savannah.gnu.org/hgweb/octave/file/tip/scripts/ode/ode15s.m {{path|scripts/ode/ode15s.m}}].<br />
<br />
The {{manual|decic}} function for selecting consistent initial conditions for ode15i can be made more Matlab compatible by using [http://dx.doi.org/10.1515/JNMA.2002.291 another algorithm]. Another useful extension is to make ode15{i,s} work with datatypes other than double and to improve interpolation at intermediate time steps.<br />
<br />
* '''Project size''' [[#Project sizes | [?]]] and '''Difficulty'''<br />
: ~350 hours (medium)<br />
* '''Required skills'''<br />
: Octave, C/C++; familiarity with numerical methods for DAEs<br />
* '''Potential mentors'''<br />
: Francesco Faccio, [https://octave.discourse.group/u/cdf Carlo de Falco], [https://octave.discourse.group/u/marco_caliari Marco Caliari], Jacopo Corno, [https://octave.discourse.group/u/schoeps Sebastian Schรถps]<br />
--><br />
<br />
<!--<br />
== PolarAxes and Plotting Improvements ==<br />
<br />
Octave currently provides support for polar axes by using a Cartesian 2-D axes and adding a significant number of properties and callback listeners to get things to work. What is needed is the implementation of a dedicated "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" exists 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. This relates to bug {{bug|49804}}.<br />
<br />
* '''Project size''' [[#Project sizes | [?]]] and '''Difficulty'''<br />
: ~350 hours (medium)<br />
* '''Required skills'''<br />
: Octave, C/C++; optional experience with OpenGL programming<br />
* '''Potential mentors'''<br />
: [https://octave.discourse.group/u/rik Rik]<br />
--><br />
<br />
<!--<br />
== Table datatype ==<br />
<br />
In 2013, Matlab introduced a [https://www.mathworks.com/help/matlab/tables.html new table datatype] to conveniently organize and access data in tabular form. This datatype has not been introduced to Octave yet (see bug {{bug|44571}}). However, there are two initial implementation approaches https://github.com/apjanke/octave-tablicious and https://github.com/gnu-octave/table.<br />
<br />
Based upon the existing approaches, the goal of this project is to define an initial subset of [https://www.mathworks.com/help/matlab/tables.htmlMatlab's table functions], which involve sorting, splitting, merging, and file I/O and implement it within the given time frame.<br />
<br />
* '''Project size''' [[#Project sizes | [?]]] and '''Difficulty'''<br />
: ~350 hours (hard)<br />
* '''Required skills'''<br />
: Octave, C/C++<br />
* '''Potential mentors'''<br />
: ???<br />
--><br />
<br />
<!--<br />
== TISEAN package ==<br />
<br />
The [[TISEAN package]] provides an Octave interface to [https://www.pks.mpg.de/~tisean/Tisean_3.0.1/index.html TISEAN] is a suite of code for nonlinear time series analysis. In 2015, another GSoC project started with the work to create interfaces to many TISEAN functions, but [[TISEAN_package:Procedure | there is still work left to do]]. There are missing functions to do computations on spike trains, to simulate autoregresive models, to create specialized plots, etc. These are of importance for many scientific disciplines involving statistical computations and signal processing.<br />
<br />
* '''Project size''' [[#Project sizes | [?]]] and '''Difficulty'''<br />
: ~350 hours (medium)<br />
* '''Required skills'''<br />
: Octave, C/C++; FORTRAN API knowledge<br />
* '''Potential mentors'''<br />
: [https://octave.discourse.group/u/kakila KaKiLa]<br />
--><br />
<br />
<!--<br />
== Better tab completion ==<br />
<br />
Links: [https://savannah.gnu.org/bugs/index.php?62492 https://savannah.gnu.org/bugs/index.php?62492] and [https://savannah.gnu.org/bugs/?53384 https://savannah.gnu.org/bugs/?53384]<br />
<br />
Description: currently pressing Tab at the Octave command prompt attempts autocompletion of all identifiers in scope (variables, functions, classdefs etc) as well as files and directories in the path. It is not context sensitive.<br />
<br />
Project: Improve tab completion. For example,<br />
<br />
* Typing<br />
: load x<br />
and then pressing tab should ideally give all loadable files and directories starting with x, not unrelated results like variables or functions. <br />
<br />
* Typing<br />
:cd<br />
and tab should only give directories.<br />
<br />
* Any file and directory names that are included in the results should include those with spaces and special characters including those that would be interpreted as operators by Octave.<br />
<br />
* Typing commands like<br />
: axis<br />
or<br />
: format<br />
and pressing tab should give only those options relevant to that command. E.g. format can be followed by short / long / loose / compact etc but not by a file or variable. Similarly axis can be followed by ij / xy / tight / equal / actual limits etc but not by files or directories. And so on for other commands. This should be made possible for both preexisting commands and for yet-to-be-written commands without any rewriting of existing function code or documentation.<br />
<br />
To get more examples, see how bash completion works. You can type git or hg and then tab and it will give the list of available commands. If you type "sort --r" and then tab, it gives the list of options to sort starting with "--r", etc.<br />
<br />
* '''Project size''' [[#Project sizes | [?]]] and '''Difficulty'''<br />
: ~350 hours (medium)<br />
* '''Required skills'''<br />
: ???<br />
* '''Potential mentors'''<br />
: ???<br />
--><br />
<br />
<!--<br />
== Graphics rendering back to front sorting ==<br />
<br />
Several incompatibilities have been identified in how Octave plots transparent objects in 3D, causing certain transparent objects to hide opaque objects behind them even though they're not supposed to. The vast majority of them were isolated to one problem: if the objects to be drawn are rendered such that the one farthest away from the viewer is rendered first and nearer objects are rendered on top of that, then transparency would be automatically achieved, but this needs very careful coding to stay performant and to avoid rendering objects that will be overwritten fully by others. See [https://savannah.gnu.org/bugs/?57980] for a summary.<br />
<br />
* '''Project size''' [[#Project sizes | [?]]] and '''Difficulty'''<br />
: ~350 hours (medium)<br />
* '''Required skills'''<br />
: ???<br />
* '''Potential mentors'''<br />
: ???<br />
--><br />
<br />
<!--<br />
== Symbolic package ==<br />
<br />
The [[Symbolic package]] provides symbolic computing and other [https://en.wikipedia.org/wiki/Computer_algebra_system computer algebra system] tools via the [https://sympy.org SymPy Python library]. GSoC projects in 2016 and 2022 improved the package.<br />
<br />
There are no specific plans for Symbolic in GSoC 2023, but improvements elsewhere that would help Symbolic include:<br />
* Developing the Octave-Pythonic package.<br />
* Fix the storage of non-expressions by working with upstream SymPy: currently we rely on deprecated functionality in SymPy.<br />
* Improvements and fixes to classdef-related issues in Octave itself.<br />
* Developing the Octave Jupyter kernel.<br />
<br />
* '''Project size''' [[#Project sizes | [?]]] and '''Difficulty'''<br />
: ~350 hours (medium)<br />
* '''Required skills'''<br />
: ???<br />
* '''Potential mentors'''<br />
: ???<br />
--><br />
<br />
= Project sizes =<br />
<br />
Since GSoC 2022 there exist two project sizes<ref>https://groups.google.com/g/google-summer-of-code-announce/c/_ekorpcglB8</ref><ref>https://google.github.io/gsocguides/mentor/defining-a-project-ideas-list</ref>:<br />
* '''~175 hours''' (~12 weeks, Jun 13 - Sept 12)<br />
* '''~350 hours''' (~22 weeks, Jun 13 - Nov 21)<br />
<br />
= Footnotes =<br />
<br />
<references /><br />
<br />
= See also =<br />
<br />
* https://summerofcode.withgoogle.com/<br />
* [https://google.github.io/gsocguides/student/ GSoC Student Guide]<br />
* [https://google.github.io/gsocguides/mentor/ GSoC Mentor Guide]<br />
* [https://developers.google.com/open-source/gsoc/timeline GSoC Timeline]<br />
<br />
[[Category:Summer of Code]]<br />
[[Category:Project Ideas]]</div>Nirhttps://wiki.octave.org/wiki/index.php?title=Summer_of_Code&diff=14816Summer of Code2023-06-01T15:50:46Z<p>Nir: 2023 projects</p>
<hr />
<div>Octave has participated in the [https://summerofcode.withgoogle.com/ Google Summer of Code] (GSoC) since 2011 (as part of GNU in 2011-2013 and 2015) and the [https://step.esa.int/main/esa-socis-2016/ ESA Summer of Code in Space] (SOCIS) since 2012. Both programs continue to bring potential new contributors to Octave and have them work on interesting projects that could be merged into Octave or otherwise benefit the Octave community.<br />
<br />
{{Note|This page lists all '''current and past summer of code projects''' done for Octave.<br>See [[Summer of Code - Getting Started]] if you want to participate.}}<br />
<br />
== Current and Past Projects ==<br />
<br />
=== [https://summerofcode.withgoogle.com/programs/2023/organizations/gnu-octave GSoC 2023] ===<br />
<br />
{| class="wikitable"<br />
!Student<br />
!Project Summary<br />
|-<br />
| Azmat Khan<br />
| [https://summerofcode.withgoogle.com/programs/2023/projects/XDEr4S3N Regression GAM and kNN classification functionality in statistics package] [https://azm999.hashnode.dev/ [blog]]<br />
|-<br />
| Vipul Cariappa <br />
| [https://summerofcode.withgoogle.com/programs/2023/projects/aeEAbtyR Improve octave-pythonic] [https://www.vipulcariappa.xyz/blogs.html [blog]]<br />
|}<br />
<br />
=== [https://summerofcode.withgoogle.com/programs/2022/organizations/gnu-octave GSoC 2022] ===<br />
<br />
{| class="wikitable"<br />
!Student<br />
!Project Summary<br />
|-<br />
| Alex Vong<br />
| [https://summerofcode.withgoogle.com/programs/2022/projects/wzvM80S0 Symbolic package] [https://salsa.debian.org/alexvong243f/gsoc-2022-symbolic-package-blog [blog]] [https://salsa.debian.org/alexvong243f/gsoc-2022-symbolic-package-blog/-/blob/master/final-report.md [final report]]<br />
|-<br />
| Maged Rifaat<br />
| [https://summerofcode.withgoogle.com/programs/2022/projects/EJ2ywyMC Improve TIFF image support] [https://magedrifaat.github.io/ [blog]]<br />
|-<br />
| Sarrah Bastawala<br />
| [https://summerofcode.withgoogle.com/programs/2022/projects/fg4hsOK0 ode15{i,s} : Matlab Compatible DAE solvers] [https://sarrahbasta.home.blog/ [blog]]<br />
|}<br />
<br />
=== [https://summerofcode.withgoogle.com/archive/2021/organizations/5764694136061952 GSoC 2021] ===<br />
<br />
{| class="wikitable"<br />
!Student<br />
!Project Summary<br />
|-<br />
|[[User:Abdallah_Elshamy|Abdallah Elshamy]]<br />
|[https://summerofcode.withgoogle.com/archive/2021/projects/5966212021878784 Jupyter Notebook Integration] [https://abdallahshamy.wordpress.com [blog]]<br />
|}<br />
<br />
=== [https://summerofcode.withgoogle.com/archive/2020/organizations/4670095013445632/ GSoC 2020] ===<br />
<br />
{| class="wikitable"<br />
!Student<br />
!Project Summary<br />
|-<br />
|[[User:Abdallah_Elshamy|Abdallah Elshamy]]<br />
|[https://summerofcode.withgoogle.com/archive/2020/projects/5567022663991296/ JSON encoding/decoding] [https://abdallahshamy.wordpress.com [blog]]<br />
|}<br />
<br />
=== [https://summerofcode.withgoogle.com/archive/2018/organizations/6026712471044096/ GSoC 2018] ===<br />
<br />
{| class="wikitable"<br />
!Student<br />
!Project Summary<br />
|-<br />
|[[User:Batterylow|Sahil Yadav]]<br />
|[http://summerofcode.withgoogle.com/archive/2018/projects/4849718693724160/ Octave Code Sharing] [https://me-ydv-5.github.io/gsoc2018/ [blog]]<br />
|-<br />
|[[User:Sudeepam|P Sudeepam]]<br />
|[http://summerofcode.withgoogle.com/archive/2018/projects/6117799197933568/ A fast and accurate command line suggestion feature] [https://sudeepam.blogspot.com/ [blog]] [final patch: [https://github.com/Sudeepam97/Correction_suggestion @Github] [https://savannah.gnu.org/patch/?10287 @Savannah]]<br />
|-<br />
|[[User:Erigualter|Erivelton Gualter]]<br />
|[http://summerofcode.withgoogle.com/archive/2018/projects/5143121935466496/ Interactive tool for SISO Linear Control System Design] [https://eriveltongualter.github.io/GSoC2018/blog.html [blog]]<br />
|}<br />
<br />
=== [https://summerofcode.withgoogle.com/archive/2017/organizations/6187477526118400/ GSoC 2017] ===<br />
<br />
{| class="wikitable"<br />
!Student<br />
!Project Summary<br />
|-<br />
|PiyushJain<br />
|[https://piyush-jain1.github.io/GeometryPackage/ Boolean operations on polygons]<br />
|-<br />
|Michele Ginesi<br />
|[https://gsocspecfun.blogspot.de/ Make Specfuns special again]<br />
|-<br />
|[[User:Urathai|urathai]]<br />
|[https://gsocinterval.blogspot.de/ Interval arithmetic on N-dimensional arrays]<br />
|-<br />
|Enrico Bertino<br />
|[https://gsocnnet.blogspot.de/ Convolutional neural networks]<br />
|}<br />
<br />
=== GSoC 2016 ===<br />
<br />
{| class="wikitable"<br />
!Student<br />
!Project Summary<br />
|-<br />
|[[User:Bumi|Bumi]]<br />
|Generalized eigenvalue problem<br />
|-<br />
|Chiara Segala<br />
|Exponential integrators<br />
|-<br />
|[[User:Francesco Faccio|Francesco Faccio]]<br />
|ode15s<br />
|-<br />
|[[User:AMR_KELEG|Amr Mohamed]]<br />
|Boolean operations on polygons<br />
|-<br />
|Abhinav Tripathi<br />
|Symbolic package<br />
|}<br />
<br />
=== SOCIS 2016 ===<br />
<br />
{| class="wikitable"<br />
!Student<br />
!Project Summary<br />
|-<br />
|[[User:CristianoDorigo|Cristiano Dorigo]]<br />
|Iterative solvers for sparse linear systems<br />
|}<br />
<br />
=== GSoC 2015 ===<br />
<br />
{| class="wikitable"<br />
!Student<br />
!Project Summary<br />
|-<br />
|[[User:Asma|Asma Afzal]]<br />
|Optimization package: Add Matlab-compatible lsqcurvefit, lsqlin, lsqnonlin, etc.<br />
|-<br />
|[[User:Josiah425|Piotr Held]]<br />
|Interface to the TISEAN library<br />
|-<br />
|[[User:Antonio_Pino|Antonio Pino Robles]]<br />
|Improved performance of funm and related matrix functions<br />
|}<br />
<br />
=== SOCIS 2015 ===<br />
<br />
{| class="wikitable"<br />
!Student<br />
!Project Summary<br />
|-<br />
|[[User:carandraug|Carnรซ Draug]]<br />
|Bioformats for Octave, implement watershed, and improve regionprops and hist3<br />
|}<br />
<br />
=== GSoC 2014 ===<br />
<br />
{| class="wikitable"<br />
!Student<br />
!Project Summary<br />
|-<br />
|Eduardo Fernรกndez<br />
|Incomplete matrix factorizations<br />
|-<br />
|Eugenio Gianniti<br />
|Finite element modeling using an interface to FEniCS<br />
|-<br />
|David Spies<br />
|Improvements to handling of sparse matrices<br />
|}<br />
<br />
=== SOCIS 2014 ===<br />
<br />
{| class="wikitable"<br />
!Student<br />
!Project Summary<br />
|-<br />
|[[User:Jacopo|Jacopo Corno]]<br />
|Matlab-compatible ODE solvers<br />
|}<br />
<br />
=== GSoC 2013 ===<br />
<br />
{| class="wikitable"<br />
!Student<br />
!Project Summary<br />
|-<br />
|Ahsan Said<br />
|Agora Octave web site<br />
|-<br />
|Vytautas Janฤauskas<br />
|Audio processing and file I/O functions<br />
|-<br />
|Gedeone<br />
|General purpose finite element method library<br />
|-<br />
|Andrej Lojdl<br />
|TeX rendering engine for plotting figures<br />
|-<br />
|Carnรซ Draug<br />
|Improve N-dimensional image support in the image package<br />
|-<br />
|Matheus Vieira Portela<br />
|GUI for manipulating closed-loop systems for the control package<br />
|-<br />
|Riupeng Li<br />
|Incomplete sparse LU and Cholesky factorizations<br />
|-<br />
|[[User:Siko1056|Kai Torben Ohlhus]]<br />
|[https://siko1056-gsoc.blogspot.com Other improvements to sparse LU and Cholesky factorizations] and [https://www.google-melange.com/archive/gsoc/2013/orgs/gnu/projects/siko1056.html]<br />
|-<br />
|LYH<br />
|JIT compilation improvements<br />
|}<br />
<br />
=== SOCIS 2013 ===<br />
<br />
{| class="wikitable"<br />
!Student<br />
!Project Summary<br />
|-<br />
|[[User:Robbbs88|Roberto Porcรน]]<br />
|Geometric integrators for Hamiltonian systems and ODE solvers<br />
|}<br />
<br />
=== GSoC 2012 ===<br />
<br />
{| class="wikitable"<br />
!Student<br />
!Project Summary<br />
|-<br />
|Max Brister<br />
|JIT compilation using LLVM<br />
|-<br />
|Jacob Dawid<br />
|Native Octave GUI<br />
|-<br />
|Benjamin Lewis<br />
|Least squares spectral analysis toolbox<br />
|}<br />
<br />
=== SOCIS 2012 ===<br />
<br />
{| class="wikitable"<br />
!Student<br />
!Project Summary<br />
|-<br />
|Wendy Liu<br />
|Agora Octave web site<br />
|-<br />
|Andrius Sutas<br />
|Low-level I/O functions<br />
|}<br />
<br />
=== GSoC 2011 ===<br />
<br />
{| class="wikitable"<br />
!Student<br />
!Project Summary<br />
|-<br />
|Daniel Kraft<br />
|Profiler for the Octave interpreter<br />
|}<br />
<br />
== Patch backlog ==<br />
<br />
A list of GSoC contributions to be merged to core Octave:<br />
<br />
https://octave.space/savannah/?Action=get&ItemID=10278,10276,8974&TrackerID=patch&OrderBy=ItemID&Format=HTMLCSS<br />
<br />
[[Category:Summer of Code]]</div>Nirhttps://wiki.octave.org/wiki/index.php?title=Summer_of_Code_-_Getting_Started&diff=14687Summer of Code - Getting Started2023-02-23T18:34:57Z<p>Nir: </p>
<hr />
<div>{{Note|GNU Octave is a [https://summerofcode.withgoogle.com/programs/2023/organizations/gnu-octave mentoring organization for GSoC 2023].}}<br />
<br />
Since 2011 the GNU Octave project has successfully mentored:<br />
* [[Summer of Code | '''37 participants''' ๐]]<br />
* [[Summer of Code | '''39 projects''' ๐]]<br />
in [[Summer of Code]] (SoC) programs by [https://summerofcode.withgoogle.com/ Google] and [https://esa.int/ ESA].<br />
<br />
Those SoC programs aim to advertise open-source software development and to attract potential new Octave developers.<br />
<br />
= Steps toward a successful application =<br />
<br />
# ๐๐ฌ '''We want to get to know you (before the deadline). Communicate with us.'''<br />
#* Join [https://octave.discourse.group/ '''Octave Discourse'''] or [[IRC]]. Using a nickname is fine.<br />
#* Show us that you're motivated to work on Octave ๐ป. There is no need to present an overwhelming CV ๐; evidence of involvement with Octave is more important.<br />
#* '''<span style="color:darkblue;">If you never talked to us, we will likely reject your proposal</span>''', even it looks good ๐ฎ<br />
# ๐ฉโ๐ฌ '''Get your hands dirty.'''<br />
#* We are curious about your programming skills ๐<br />
#** Your application will be much stronger if you [https://savannah.gnu.org/bugs/?group=octave fix Octave bugs] or [https://savannah.gnu.org/patch/?group=octave submit patches] before or during the application period.<br />
#** You can take a look at the [[short projects]] for some simple bugs to start with.<br />
#* '''Use Octave!'''<br />
#** If you come across something that does not work the way you like โก๏ธ try to fix that ๐ง<br />
#** Or if you find a missing function โก๏ธ try to implement it.<br />
# ๐๐ก '''Tell us what you are going to do.'''<br />
#* Do not write just to say what project you're interested in. Be specific about what you are going to do, include links ๐, show us you know what you are talking about ๐ก, and ask many [http://www.catb.org/esr/faqs/smart-questions.html smart questions] ๐ค<br />
#* Remember, '''we are volunteer developers and not your boss''' ๐<br />
# ๐ '''Prepare your proposal with us.'''<br />
#* Try to show us as early as possible a draft of your proposal ๐<br />
#* If we see your proposal for the first time after the application deadline, it might easily contain some paragraphs not fully clear to us. Ongoing interaction will give us more confidence that you are capable of working on your project ๐๐<br />
#* Then submit the proposal following the applicable rules, e.g. for [https://google.github.io/gsocguides/student/writing-a-proposal GSoC]. ๐จ<br />
<br />
= How do we judge your application? =<br />
<br />
Depending on the mentors and SoC program there are varieties, but typically the main factors considered would be:<br />
<br />
* '''You have demonstrated interest in Octave and an ability to make substantial modifications to Octave'''<br />
*: The most important thing is that you've contributed some interesting code samples to judge your skills. It's OK during the application period to ask for help on how to format these code samples, which normally are Mercurial patches.<br />
<br />
* '''You showed understanding of your topic'''<br />
*: Your proposal should make it clear that you're reasonably well versed in the subject area and won't need all summer just to read up on it.<br />
<br />
* '''Well thought out, adequately detailed, realistic project plan'''<br />
*: "I'm good at this, so trust me" isn't enough. In your proposal, you should describe which algorithms you'll use and how you'll integrate with existing Octave code. You should also prepare a project timeline and goals for the midterm and final evaluations.<br />
<br />
= What you should know about Octave =<br />
<br />
GNU Octave is mostly written in C++ and its own scripting language that is mostly compatible with Matlab. 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 Octave's scripting language, you as successful applicant will be familiar with or able to quickly learn about Octave's infrastructure. You can't spend the whole summer learning how to build Octave or prepare a changeset and still successfully complete your project ๐<br />
<br />
You should know:<br />
# How to build Octave from its source code using [http://en.wikipedia.org/wiki/GNU_build_system the GNU build system].<br />
#* Read in this wiki: [[Developer FAQ]], [[Building]]<br />
#* Tools to know: [https://en.wikipedia.org/wiki/GNU_Compiler_Collection gcc], [https://en.wikipedia.org/wiki/Make_(software) make]<br />
# How to submit patches (changesets).<br />
#* Read in this wiki: [[Contribution guidelines]], [[Mercurial]]<br />
#* Tools to know: [https://en.wikipedia.org/wiki/Mercurial Mercurial (hg)], [https://en.wikipedia.org/wiki/Git git]<br />
<br />
= Suggested projects =<br />
<br />
The following suggested projects are distilled from the [[Projects]] page for the benefit of potential SoC participants. You can also look at our [[Summer of Code|completed past projects]] for more inspiration.<br />
<br />
{{Note|Do you use Octave at your working place or university? Do you have some numerical project in mind? You are always welcome to '''propose your own projects'''. If you are passionate about your project, it will be easy to find an Octave developer to mentor and guide you.}}<br />
<br />
== ode15{i,s} : Matlab Compatible DAE solvers ==<br />
<br />
An initial implementation of Matlab compatible Differential Algebraic Equations (DAE) solvers, {{manual|ode15i}} and {{manual|ode15s}}, based on [https://computing.llnl.gov/projects/sundials SUNDIALS], <br />
was done by [https://gsoc2016ode15s.blogspot.com/ Francesco Faccio during GSoC 2016]. The code is maintained in the main Octave repository and consists mainly of the following three files: [https://hg.savannah.gnu.org/hgweb/octave/file/tip/libinterp/dldfcn/__ode15__.cc {{path|libinterp/dldfcn/__ode15__.cc}}], [https://hg.savannah.gnu.org/hgweb/octave/file/tip/scripts/ode/ode15i.m {{path|scripts/ode/ode15i.m}}] and [https://hg.savannah.gnu.org/hgweb/octave/file/tip/scripts/ode/ode15s.m {{path|scripts/ode/ode15s.m}}].<br />
<br />
The {{manual|decic}} function for selecting consistent initial conditions for ode15i can be made more Matlab compatible by using [http://dx.doi.org/10.1515/JNMA.2002.291 another algorithm]. Another useful extension is to make ode15{i,s} work with datatypes other than double and to improve interpolation at intermediate time steps.<br />
<br />
* '''Project size''' [[#Project sizes | [?]]] and '''Difficulty'''<br />
: ~350 hours (medium)<br />
* '''Required skills'''<br />
: Octave, C/C++; familiarity with numerical methods for DAEs<br />
* '''Potential mentors'''<br />
: Francesco Faccio, [https://octave.discourse.group/u/cdf Carlo de Falco], [https://octave.discourse.group/u/marco_caliari Marco Caliari], Jacopo Corno, [https://octave.discourse.group/u/schoeps Sebastian Schรถps]<br />
<br />
== Symbolic package ==<br />
<br />
The [[Symbolic package]] provides symbolic computing and other [https://en.wikipedia.org/wiki/Computer_algebra_system computer algebra system] tools. The main component of Symbolic is a pure m-file class "@sym" which uses the Python package [https://www.sympy.org SymPy] to do (most of) the actual computations. The package aims to expose much of the functionality of SymPy while also providing a high level of compatibility with the Matlab Symbolic Math Toolbox. The Symbolic package requires communication between Octave and Python. In 2016 a GSoC project successfully re-implemented this communication using the new [[Pythonic|Pythonic package]]. In 2022, a GSoC project revitalized and improved the maintainability of the package.<br />
<br />
Possible ideas for improving the Symbolic package:<br />
* exposing more functionality of SymPy with ''less glue'' in between. For example, we could allow OO-style method calls such as <code>f.diff(x)</code> as well as <code>diff(f, x)</code>.<br />
* Fix the storage of non-expressions by working with upstream SymPy: currently we rely on deprecated functionality in SymPy.<br />
* Fix classdef-related issues in Octave itself.<br />
<br />
== PolarAxes and Plotting Improvements ==<br />
<br />
Octave currently provides supports for polar axes by using a Cartesian 2-D axes and adding a significant number of properties and callback listeners to get things to work. What is needed is the implementation of a dedicated "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" exists 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. This relates to bug {{bug|49804}}.<br />
<br />
* '''Project size''' [[#Project sizes | [?]]] and '''Difficulty'''<br />
: ~350 hours (medium)<br />
* '''Required skills'''<br />
: Octave, C/C++; optional experience with OpenGL programming<br />
* '''Potential mentors'''<br />
: [https://octave.discourse.group/u/rik Rik]<br />
<br />
== Table datatype ==<br />
<br />
In 2013, Matlab introduced a [https://www.mathworks.com/help/matlab/tables.html new table datatype] to conveniently organize and access data in tabular form. This datatype has not been introduced to Octave yet (see bug {{bug|44571}}). However, there are two initial implementation approaches https://github.com/apjanke/octave-tablicious and https://github.com/gnu-octave/table.<br />
<br />
Based upon the existing approaches, the goal of this project is to define an initial subset of [https://www.mathworks.com/help/matlab/tables.htmlMatlab's table functions], which involve sorting, splitting, merging, and file I/O and implement it within the given time frame.<br />
<br />
* '''Project size''' [[#Project sizes | [?]]] and '''Difficulty'''<br />
: ~350 hours (hard)<br />
* '''Required skills'''<br />
: Octave, C/C++<br />
* '''Potential mentors'''<br />
: [https://octave.discourse.group/u/Abdallah_Elshamy Abdallah]<br />
<br />
== TISEAN package ==<br />
<br />
The [[TISEAN package]] provides an Octave interface to [https://www.pks.mpg.de/~tisean/Tisean_3.0.1/index.html TISEAN] is a suite of code for nonlinear time series analysis. In 2015, another GSoC project started with the work to create interfaces to many TISEAN functions, but [[TISEAN_package:Procedure | there is still work left to do]]. There are missing functions to do computations on spike trains, to simulate autoregresive models, to create specialized plots, etc. These are of importance for many scientific disciplines involving statistical computations and signal processing.<br />
<br />
* '''Project size''' [[#Project sizes | [?]]] and '''Difficulty'''<br />
: ~350 hours (medium)<br />
* '''Required skills'''<br />
: Octave, C/C++; FORTRAN API knowledge<br />
* '''Potential mentors'''<br />
: [https://octave.discourse.group/u/kakila KaKiLa]<br />
<br />
== Better tab completion ==<br />
<br />
Links: [https://savannah.gnu.org/bugs/index.php?62492 https://savannah.gnu.org/bugs/index.php?62492] and [https://savannah.gnu.org/bugs/?53384 https://savannah.gnu.org/bugs/?53384]<br />
<br />
Description: currently pressing Tab at the Octave command prompt attempts autocompletion of all identifiers in scope (variables, functions, classdefs etc) as well as files and directories in the path. It is not context sensitive.<br />
<br />
Project: Improve tab completion. For example,<br />
<br />
* Typing<br />
: load x<br />
and then pressing tab should ideally give all loadable files and directories starting with x, not unrelated results like variables or functions. <br />
<br />
* Typing<br />
:cd<br />
and tab should only give directories.<br />
<br />
* Any file and directory names that are included in the results should include those with spaces and special characters including those that would be interpreted as operators by Octave.<br />
<br />
* Typing commands like<br />
: axis<br />
or<br />
: format<br />
and pressing tab should give only those options relevant to that command. E.g. format can be followed by short / long / loose / compact etc but not by a file or variable. Similarly axis can be followed by ij / xy / tight / equal / actual limits etc but not by files or directories. And so on for other commands. This should be made possible for both preexisting commands and for yet-to-be-written commands without any rewriting of existing function code or documentation.<br />
<br />
To get more examples, see how bash completion works. You can type git or hg and then tab and it will give the list of available commands. If you type "sort --r" and then tab, it gives the list of options to sort starting with "--r", etc.<br />
<br />
== Graphics rendering back to front sorting ==<br />
Several incompatibilities have been identified in how Octave plots transparent objects in 3D, causing certain transparent objects to hide opaque objects behind them even though they're not supposed to. The vast majority of them were isolated to one problem: if the objects to be drawn are rendered such that the one farthest away from the viewer is rendered first and nearer objects are rendered on top of that, then transparency would be automatically achieved, but this needs very careful coding to stay performant and to avoid rendering objects that will be overwritten fully by others. See [https://savannah.gnu.org/bugs/?57980] for a summary.<br />
<br />
This project can be a GSoC for a student who understands 3D graphics rendering.<br />
<br />
= Project sizes =<br />
<br />
Since GSoC 2022 there exist two project sizes<ref>https://groups.google.com/g/google-summer-of-code-announce/c/_ekorpcglB8</ref><ref>https://google.github.io/gsocguides/mentor/defining-a-project-ideas-list</ref>:<br />
* '''~175 hours''' (~12 weeks, Jun 13 - Sept 12)<br />
* '''~350 hours''' (~22 weeks, Jun 13 - Nov 21)<br />
<br />
= Footnotes =<br />
<br />
<references /><br />
<br />
= See also =<br />
<br />
* https://summerofcode.withgoogle.com/<br />
* [https://google.github.io/gsocguides/student/ GSoC Student Guide]<br />
* [https://google.github.io/gsocguides/mentor/ GSoC Mentor Guide]<br />
* [https://developers.google.com/open-source/gsoc/timeline GSoC Timeline]<br />
<br />
[[Category:Summer of Code]]<br />
[[Category:Project Ideas]]</div>Nirhttps://wiki.octave.org/wiki/index.php?title=GSoC_2023_application&diff=14600GSoC 2023 application2023-01-30T03:46:48Z<p>Nir: fix format</p>
<hr />
<div>__NOTOC__<br />
<br />
Octave's application for GSoC 2023.<br />
<br />
=== Organization name ===<br />
<br />
GNU Octave<br />
<br />
=== OSI approved license? ===<br />
<br />
Yes<br />
<br />
=== Has your organization participated in Google Summer of Code before? ===<br />
<br />
Yes<br />
<br />
=== Please select all years in which your organization participated prior to 2023 ===<br />
<br />
2016-2022, 2014<br />
<br />
=== Website URL ===<br />
<br />
https://www.octave.org<br />
<br />
=== Logo (Must be a 24-bit PNG, minimum height 256 pixels.) ===<br />
<br />
https://upload.wikimedia.org/wikipedia/commons/thumb/6/6a/Gnu-octave-logo.svg/283px-Gnu-octave-logo.svg.png (or generate 256x256 PNG from http://hg.savannah.gnu.org/hgweb/octave/raw-file/155d8e90ee1f/doc/icons/octave-logo.svg with <code>inkscape -z -e octave-logo.png -w 256 -h 256 octave-logo.svg</code>)<br />
<br />
=== Tagline (50 characters) ===<br />
<br />
Free Your Numbers<br />
<br />
=== Primary License ===<br />
<br />
GPL 3.0<br />
<br />
=== What year was your project started? ===<br />
<br />
1992<br />
<br />
=== Source code location === <br />
<br />
https://hg.savannah.gnu.org/hgweb/octave<br />
<br />
<br />
=== Organization Category ===<br />
<br />
Programming Languages, Science<br />
<br />
<br />
=== Technology Tags (the primary specific technologies your organization uses) (up to 5) ===<br />
<br />
C++, hg<br />
<br />
=== Topic Tags (general topics that describe your organization) (up to 5) ===<br />
<br />
mathematics, numerical computation, numerical methods, matlab, scientific computing<br />
<br />
<br />
=== Description ===<br />
<br />
GNU Octave is a high-level interpreted language, primarily intended for numerical computations. It provides capabilities for the numerical solution of linear and nonlinear problems and for performing other numerical experiments. It also provides extensive graphics capabilities for data visualization and manipulation. Octave is normally used through its interactive command line interface, but it can also be used to write non-interactive programs. The Octave language is quite similar to Matlab so that most programs are easily portable.<br />
<br />
Octave is continually being upgraded. Student projects may also involve developing or upgrading Octave Forge packages, which can be loaded to provide additional specialized functions that supplement those provided in Core Octave.<br />
<br />
<br />
=== Contributor guidance / Idea List ===<br />
<br />
https://wiki.octave.org/gsoc<br />
<br />
=== Contact methods ===<br />
<br />
Chat: https://octave.discourse.group/<br />
<br />
Mailing list: https://lists.gnu.org/mailman/listinfo/octave-maintainers<br />
<br />
Email: octave-maintainers@gnu.org<br />
<br />
=== Why does your org want to participate in Google Summer of Code? (1000 chars) ===<br />
<br />
We hope to establish collaborations with talented new contributors. We also want to raise awareness of Octave in the free software community.<br />
<br />
Google Summer of Code represents a unique opportunity to bring new perspectives to the Octave community. As a somewhat older project, we benefit from having new and younger contributors among our developers. We have been able to retain several GSoC participants who have become important contributors to the Octave project and we hope to continue this in the future by engaging effectively with students during both the application and mentoring processes, setting clear standards for what is required for acceptance, and maintaining those standards throughout the project.<br />
<br />
=== What would your org consider to be a successful summer? (500 chars) ===<br />
<br />
We would consider a program successful if we selected promising students, provided adequate mentor supervision, developed desired features in Octave, and facilitated a satisfying experience for the students and mentors. We are more interested in the quality of interactions and contributions than in quantity, although, all else being equal, we would be happy to have more talented students join us.<br />
<br />
<br />
<br />
<br />
<br />
<br />
=== Is your organization part of any government? ===<br />
<br />
No<br />
<br />
<br />
<br />
<br />
<br />
=== How will you keep mentors engaged with their students? (1000 chars) ===<br />
<br />
We will select mentors with proven involvement in Octave and free software and align project topics with the priorities of the core developer team. The vast majority of our mentors have been involved in Octave development for several years, and new mentors will be paired with more experienced ones.<br />
<br />
Each project will include at least one core Octave developer as mentor. These are proven, veteran members of the project who are familiar with the code base and with engaging the maintainer and user community. GNU Octave is a project with applications in very diverse domains, so each project should also include a mentor with expertise in the relevant field.<br />
<br />
=== How will you help your students stay on schedule to complete their projects? (1000 chars) ===<br />
<br />
Previous contributions to Octave (which can be small) are a condition for acceptance. In this way, we hope to select students who are familiar with the codebase and able to start their project quickly.<br />
<br />
A tentative project timeline is required as part of the application, and is checked by mentors for realism during the applicant evaluation process. Once a student is selected, the mentors will work with them to come up with a more detailed timeline, including clear expectations for progress by the midterm and final evaluation periods.<br />
<br />
During the summer, mentors will check with students at least weekly to make sure they are staying on schedule and help with any obstacles that might arise. Students are also expected to regularly update their mentors and the Octave maintainers community on their progress via e-mails and blog posts.<br />
<br />
Overall, the vast majority of our over 30 previous SoC students have finished successfully, making substantive contributions to Octave that have been integrated into our codebase.<br />
<br />
=== How will you get your students involved in your community during GSoC? (1000 chars) ===<br />
<br />
Students will be urged to participate in our chat channel and mailing list. We will set clear expectations on the minimum frequency of email progress updates, typically every two to three days. Students will also set up a blog for longer, weekly, updates which will be aggregated at http://planet.octave.org<br />
<br />
Everything should be completely open. Almost all interactions with the student should be public, e.g. contacting the mentor should happen in the public IRC channel or copy the maintainers mailing list.<br />
<br />
Finally, we organize an annual developers' summit, OctConf, and have in previous years provided support for GSoC students to attend and present. We also hold monthly online developer meetings to discuss Octave's direction and future activities, to which GSoC students would be invited. Such meetings strengthen relationships between community members and the new students.<br />
<br />
=== How many Mentors does your Organization have available to participate in this program? === <br />
<br />
8<br />
<br />
=== Number of students/GSoC contributors accepted in 2022 / still active in community ===<br />
<br />
3 / 1<br />
<br />
<br />
<br />
<br />
<br />
[[Category:Summer of Code]]<br />
[[Category:2023]]</div>Nirhttps://wiki.octave.org/wiki/index.php?title=GSoC_2023_application&diff=14599GSoC 2023 application2023-01-30T03:46:19Z<p>Nir: add the new questions</p>
<hr />
<div>__NOTOC__<br />
<br />
Octave's application for GSoC 2023.<br />
<br />
=== Organization name ===<br />
<br />
GNU Octave<br />
<br />
=== OSI approved license? ===<br />
<br />
Yes<br />
<br />
=== Has your organization participated in Google Summer of Code before? ===<br />
<br />
Yes<br />
<br />
=== Please select all years in which your organization participated prior to 2023 ===<br />
<br />
2016-2022, 2014<br />
<br />
=== Website URL ===<br />
<br />
https://www.octave.org<br />
<br />
=== Logo (Must be a 24-bit PNG, minimum height 256 pixels.) ===<br />
<br />
https://upload.wikimedia.org/wikipedia/commons/thumb/6/6a/Gnu-octave-logo.svg/283px-Gnu-octave-logo.svg.png (or generate 256x256 PNG from http://hg.savannah.gnu.org/hgweb/octave/raw-file/155d8e90ee1f/doc/icons/octave-logo.svg with <code>inkscape -z -e octave-logo.png -w 256 -h 256 octave-logo.svg</code>)<br />
<br />
=== Tagline (50 characters) ===<br />
<br />
Free Your Numbers<br />
<br />
=== Primary License ===<br />
<br />
GPL 3.0<br />
<br />
=== What year was your project started? ===<br />
<br />
1992<br />
<br />
=== Source code location === <br />
<br />
https://hg.savannah.gnu.org/hgweb/octave<br />
<br />
<br />
=== Organization Category ===<br />
<br />
Programming Languages, Science<br />
<br />
<br />
=== Technology Tags (the primary specific technologies your organization uses) (up to 5) ===<br />
<br />
C++, hg<br />
<br />
=== Topic Tags (general topics that describe your organization) (up to 5) ===<br />
<br />
mathematics, numerical computation, numerical methods, matlab, scientific computing<br />
<br />
<br />
=== Description ===<br />
<br />
GNU Octave is a high-level interpreted language, primarily intended for numerical computations. It provides capabilities for the numerical solution of linear and nonlinear problems and for performing other numerical experiments. It also provides extensive graphics capabilities for data visualization and manipulation. Octave is normally used through its interactive command line interface, but it can also be used to write non-interactive programs. The Octave language is quite similar to Matlab so that most programs are easily portable.<br />
<br />
Octave is continually being upgraded. Student projects may also involve developing or upgrading Octave Forge packages, which can be loaded to provide additional specialized functions that supplement those provided in Core Octave.<br />
<br />
<br />
=== Contributor guidance / Idea List ===<br />
<br />
https://wiki.octave.org/gsoc<br />
<br />
=== Contact methods ===<br />
<br />
Chat: https://octave.discourse.group/<br />
<br />
Mailing list: https://lists.gnu.org/mailman/listinfo/octave-maintainers<br />
<br />
Email: octave-maintainers@gnu.org<br />
<br />
=== Why does your org want to participate in Google Summer of Code? (1000 chars) ===<br />
<br />
We hope to establish collaborations with talented new contributors. We also want to raise awareness of Octave in the free software community.<br />
<br />
Google Summer of Code represents a unique opportunity to bring new perspectives to the Octave community. As a somewhat older project, we benefit from having new and younger contributors among our developers. We have been able to retain several GSoC participants who have become important contributors to the Octave project and we hope to continue this in the future by engaging effectively with students during both the application and mentoring processes, setting clear standards for what is required for acceptance, and maintaining those standards throughout the project.<br />
<br />
=== What would your org consider to be a successful summer? (500 chars) ===<br />
<br />
We would consider a program successful if we selected promising students, provided adequate mentor supervision, developed desired features in Octave, and facilitated a satisfying experience for the students and mentors. We are more interested in the quality of interactions and contributions than in quantity, although, all else being equal, we would be happy to have more talented students join us.<br />
<br />
<br />
<br />
<br />
<br />
<br />
=== Is your organization part of any government? ===<br />
<br />
No<br />
<br />
<br />
<br />
<br />
<br />
=== How will you keep mentors engaged with their students? (1000 chars) ===<br />
<br />
We will select mentors with proven involvement in Octave and free software and align project topics with the priorities of the core developer team. The vast majority of our mentors have been involved in Octave development for several years, and new mentors will be paired with more experienced ones.<br />
<br />
Each project will include at least one core Octave developer as mentor. These are proven, veteran members of the project who are familiar with the code base and with engaging the maintainer and user community. GNU Octave is a project with applications in very diverse domains, so each project should also include a mentor with expertise in the relevant field.<br />
<br />
=== How will you help your students stay on schedule to complete their projects? (1000 chars) ===<br />
<br />
Previous contributions to Octave (which can be small) are a condition for acceptance. In this way, we hope to select students who are familiar with the codebase and able to start their project quickly.<br />
<br />
A tentative project timeline is required as part of the application, and is checked by mentors for realism during the applicant evaluation process. Once a student is selected, the mentors will work with them to come up with a more detailed timeline, including clear expectations for progress by the midterm and final evaluation periods.<br />
<br />
During the summer, mentors will check with students at least weekly to make sure they are staying on schedule and help with any obstacles that might arise. Students are also expected to regularly update their mentors and the Octave maintainers community on their progress via e-mails and blog posts.<br />
<br />
Overall, the vast majority of our over 30 previous SoC students have finished successfully, making substantive contributions to Octave that have been integrated into our codebase.<br />
<br />
=== How will you get your students involved in your community during GSoC? (1000 chars) ===<br />
<br />
Students will be urged to participate in our chat channel and mailing list. We will set clear expectations on the minimum frequency of email progress updates, typically every two to three days. Students will also set up a blog for longer, weekly, updates which will be aggregated at http://planet.octave.org<br />
<br />
Everything should be completely open. Almost all interactions with the student should be public, e.g. contacting the mentor should happen in the public IRC channel or copy the maintainers mailing list.<br />
<br />
Finally, we organize an annual developers' summit, OctConf, and have in previous years provided support for GSoC students to attend and present. We also hold monthly online developer meetings to discuss Octave's direction and future activities, to which GSoC students would be invited. Such meetings strengthen relationships between community members and the new students.<br />
<br />
=== How many Mentors does your Organization have available to participate in this program? === <br />
<br />
8<br />
<br />
== Number of students/GSoC contributors accepted in 2022 / still active in community ==<br />
<br />
3 / 1<br />
<br />
<br />
<br />
<br />
<br />
[[Category:Summer of Code]]<br />
[[Category:2023]]</div>Nirhttps://wiki.octave.org/wiki/index.php?title=GSoC_2023_application&diff=14598GSoC 2023 application2023-01-30T03:29:27Z<p>Nir: Copied 2022 application</p>
<hr />
<div>__NOTOC__<br />
<br />
Octave's application for GSoC 2023.<br />
<br />
=== Organization name ===<br />
<br />
GNU Octave<br />
<br />
=== OSI approved license? ===<br />
<br />
Yes<br />
<br />
=== Has your organization participated in Google Summer of Code before? ===<br />
<br />
Yes<br />
<br />
=== Please select all years in which your organization participated prior to 2023 ===<br />
<br />
2016-2022, 2014<br />
<br />
=== Website URL ===<br />
<br />
https://www.octave.org<br />
<br />
=== Logo (Must be a 24-bit PNG, minimum height 256 pixels.) ===<br />
<br />
https://upload.wikimedia.org/wikipedia/commons/thumb/6/6a/Gnu-octave-logo.svg/283px-Gnu-octave-logo.svg.png (or generate 256x256 PNG from http://hg.savannah.gnu.org/hgweb/octave/raw-file/155d8e90ee1f/doc/icons/octave-logo.svg with <code>inkscape -z -e octave-logo.png -w 256 -h 256 octave-logo.svg</code>)<br />
<br />
=== Tagline (50 characters) ===<br />
<br />
Free Your Numbers<br />
<br />
=== Primary License ===<br />
<br />
GPL 3.0<br />
<br />
=== What year was your project started? ===<br />
<br />
1992<br />
<br />
=== Source code location === <br />
<br />
https://hg.savannah.gnu.org/hgweb/octave<br />
<br />
<br />
=== Organization Category ===<br />
<br />
Programming Languages, Science<br />
<br />
<br />
=== Technology Tags (the primary specific technologies your organization uses) (up to 5) ===<br />
<br />
C++, hg<br />
<br />
=== Topic Tags (general topics that describe your organization) (up to 5) ===<br />
<br />
mathematics, numerical computation, numerical methods, matlab, scientific computing<br />
<br />
<br />
=== Description ===<br />
<br />
GNU Octave is a high-level interpreted language, primarily intended for numerical computations. It provides capabilities for the numerical solution of linear and nonlinear problems and for performing other numerical experiments. It also provides extensive graphics capabilities for data visualization and manipulation. Octave is normally used through its interactive command line interface, but it can also be used to write non-interactive programs. The Octave language is quite similar to Matlab so that most programs are easily portable.<br />
<br />
Octave is continually being upgraded. Student projects may also involve developing or upgrading Octave Forge packages, which can be loaded to provide additional specialized functions that supplement those provided in Core Octave.<br />
<br />
<br />
=== Contributor guidance / Idea List ===<br />
<br />
https://wiki.octave.org/gsoc<br />
<br />
=== Contact methods ===<br />
<br />
Chat: https://octave.discourse.group/<br />
<br />
Mailing list: https://lists.gnu.org/mailman/listinfo/octave-maintainers<br />
<br />
Email: octave-maintainers@gnu.org<br />
<br />
=== Why does your org want to participate in Google Summer of Code? (1000 chars) ===<br />
<br />
We hope to establish collaborations with talented new contributors. We also want to raise awareness of Octave in the free software community.<br />
<br />
Google Summer of Code represents a unique opportunity to bring new perspectives to the Octave community. As a somewhat older project, we benefit from having new and younger contributors among our developers. We have been able to retain several GSoC participants who have become important contributors to the Octave project and we hope to continue this in the future by engaging effectively with students during both the application and mentoring processes, setting clear standards for what is required for acceptance, and maintaining those standards throughout the project.<br />
<br />
=== What would your org consider to be a successful summer? (500 chars) ===<br />
<br />
We would consider a program successful if we selected promising students, provided adequate mentor supervision, developed desired features in Octave, and facilitated a satisfying experience for the students and mentors. We are more interested in the quality of interactions and contributions than in quantity, although, all else being equal, we would be happy to have more talented students join us.<br />
<br />
<br />
<br />
<br />
<br />
<br />
=== Is your organization part of any government? ===<br />
<br />
No<br />
<br />
<br />
<br />
<br />
<br />
=== How will you keep mentors engaged with their students? (1000 chars) ===<br />
<br />
We will select mentors with proven involvement in Octave and free software and align project topics with the priorities of the core developer team. The vast majority of our mentors have been involved in Octave development for several years, and new mentors will be paired with more experienced ones.<br />
<br />
Each project will include at least one core Octave developer as mentor. These are proven, veteran members of the project who are familiar with the code base and with engaging the maintainer and user community. GNU Octave is a project with applications in very diverse domains, so each project should also include a mentor with expertise in the relevant field.<br />
<br />
=== How will you help your students stay on schedule to complete their projects? (1000 chars) ===<br />
<br />
Previous contributions to Octave (which can be small) are a condition for acceptance. In this way, we hope to select students who are familiar with the codebase and able to start their project quickly.<br />
<br />
A tentative project timeline is required as part of the application, and is checked by mentors for realism during the applicant evaluation process. Once a student is selected, the mentors will work with them to come up with a more detailed timeline, including clear expectations for progress by the midterm and final evaluation periods.<br />
<br />
During the summer, mentors will check with students at least weekly to make sure they are staying on schedule and help with any obstacles that might arise. Students are also expected to regularly update their mentors and the Octave maintainers community on their progress via e-mails and blog posts.<br />
<br />
Overall, the vast majority of our over 30 previous SoC students have finished successfully, making substantive contributions to Octave that have been integrated into our codebase.<br />
<br />
=== How will you get your students involved in your community during GSoC? (1000 chars) ===<br />
<br />
Students will be urged to participate in our chat channel and mailing list. We will set clear expectations on the minimum frequency of email progress updates, typically every two to three days. Students will also set up a blog for longer, weekly, updates which will be aggregated at http://planet.octave.org<br />
<br />
Everything should be completely open. Almost all interactions with the student should be public, e.g. contacting the mentor should happen in the public IRC channel or copy the maintainers mailing list.<br />
<br />
Finally, we organize an annual developers' summit, OctConf, and have in previous years provided support for GSoC students to attend and present. We also hold monthly online developer meetings to discuss Octave's direction and future activities, to which GSoC students would be invited. Such meetings strengthen relationships between community members and the new students.<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
[[Category:Summer of Code]]<br />
[[Category:2023]]</div>Nirhttps://wiki.octave.org/wiki/index.php?title=Online_Developer_Meeting_(2022-04-26)&diff=14290Online Developer Meeting (2022-04-26)2022-04-25T17:50:19Z<p>Nir: /* Todays topics */</p>
<hr />
<div>* Date: Tuesday, April 26, 2022 @ 18:00 UTC<br />
* Location: https://meet.jit.si/octave-dev<br />
<br />
== Todays topics ==<br />
<br />
* Meet and greet 5 minutes before meeting (audio testing).<br />
<br />
* Performance over time (Arun, Rik)<br />
** [https://octave.discourse.group/t/a-small-benchmark-for-interpreted-code-for-three-versions-of-octave/2531/4 Discourse thread for background]<br />
** Analysis and profiling of existing code base -- share and solicit experiences.<br />
** Performance benchmark to track speed over time as part of CI?<br />
<br />
* GSoC: call for mentors (Nir/Kai)<br />
<br />
== Previous topics ==<br />
:''The following items were not discussed. Just some links to progress on those items are displayed.''<br />
<br />
=== Octave 7 RC 2 ===<br />
* No major bugs remain, next will be final release.<br />
** Done! jwe uploaded 7.1 on 2022-April-06.<br />
* <strike>Bug {{bug|62207}} "segfault in bug-35881/bug-35881.tst in 32-bit ARM and MIPS" appeared. But maybe not a blocker, as only 32-bit ARM and MIPS seems affected. No Octave maintainer can reproduce due to missing hardware.</strike> Was solved and tested on the platforms.<br />
<br />
=== NumFOCUS ===<br />
<br />
* https://octave.discourse.group/t/apply-for-numfocus-sponsoring/2328<br />
** Kai will reach out for them.<br />
<br />
=== Bus factor problem, revisited ===<br />
* Any infrastructure changes to make in 2022? Web hosting?<br />
** We are looking for options to become less independent on private sponsored web servers, but not need to rush.<br />
* FossHost accepting applications again [https://fosshost.org/]<br />
** <strike>Arun will reach out for them.</strike> Done!<br />
** As of 2022-April-03, Fosshost has offered amd64 and arm64 servers for Octave's use as web servers and buildbots: https://octave.discourse.group/t/project-infrastructure-discussion/1938/14. When it is finalized, Fosshost will notify the Octave devs (Kai?) directly via email.<br />
<br />
=== Octave 8 ===<br />
<br />
* Would it be worthwhile to look into [https://gitlab.com/labinformatica/guieditor Sergio Burgos' gui editor]?<br />
** The authors of the software did not get in contact with the Octave developers.<br />
** The creator of this item did not attend the meeting, thus unclear what should be achieved.<br />
<br />
=== GSoC 2022 ===<br />
<br />
* [https://octave.discourse.group/t/gsoc-2022-symbolic-package-project/2396/3 Maintainers of symbolic package unresponsive]. If no communication gets established by the weekend, this project will be dropped to avoid applicants putting energy in this.<br />
<br />
=== Package problems ===<br />
<br />
* Package problems have to be settled with the package maintainers. Forks are possible anytime: GPL.<br />
<br />
==== Communications ====<br />
<br />
*<strike>bug {{bug|46521}} is still lingering with nir_krakauer and lostbard there has been significant progress.</strike><br />
**<strike>Should some energy be directed to closing this?</strike> Not related to Octave itself. See [https://savannah.gnu.org/bugs/?46521#comment59 note in bug report].<br />
<br />
==== Signal ====<br />
*<strike>There has been tremendous work submitted by Charles Praplan, JWE, and others.</strike><br />
**<strike>However it appears none of this has been incorporated.</strike><br />
**<strike>After release of version 1.4.1; is this no longer being maintained?</strike> Not related to Octave itself. Please reach out for the [https://octave.sourceforge.io/signal/ package maintainer] about future plans. If one is interested she might offer to become new package maintainer.<br />
<br />
== See also ==<br />
<br />
* Next meeting: [[Online Developer Meeting (2022-05-24)]]<br />
* Last meeting: [[Online Developer Meeting (2022-03-22)]]<br />
<br />
[[Category:2022]]<br />
[[Category:Meetings]]</div>Nirhttps://wiki.octave.org/wiki/index.php?title=Summer_of_Code_-_Getting_Started&diff=14203Summer of Code - Getting Started2022-02-10T20:17:32Z<p>Nir: /* TISEAN package */</p>
<hr />
<div>{{Note|GNU Octave will apply as mentoring organization for GSoC 2022.}}<br />
<br />
Since 2011 the GNU Octave project has successfully mentored:<br />
* [[Summer of Code | '''37 participants''' ๐]]<br />
* [[Summer of Code | '''39 projects''' ๐]]<br />
in [[Summer of Code]] (SoC) programs by [https://summerofcode.withgoogle.com/ Google] and [https://esa.int/ ESA].<br />
<br />
Those SoC programs aim to advertise open-source software development and to attract potential new Octave developers.<br />
<br />
= Steps toward a successful application =<br />
<br />
# ๐๐ฌ '''We want to get to know you (before the deadline). Communicate with us.'''<br />
#* Join [https://octave.discourse.group/ '''Octave Discourse'''] or [[IRC]]. Using a nickname is fine.<br />
#* Show us that you're motivated to work on Octave ๐ป. There is no need to present an overwhelming CV ๐; evidence of involvement with Octave is more important.<br />
#* '''<span style="color:darkblue;">If you never talked to us, we will likely reject your proposal</span>''', even it looks good ๐ฎ<br />
# ๐ฉโ๐ฌ '''Get your hands dirty.'''<br />
#* We are curious about your programming skills ๐<br />
#** Your application will be much stronger if you [https://savannah.gnu.org/bugs/?group=octave fix Octave bugs] or [https://savannah.gnu.org/patch/?group=octave submit patches] before or during the application period.<br />
#** You can take a look at the [[short projects]] for some simple bugs to start with.<br />
#* '''Use Octave!'''<br />
#** If you come across something that does not work the way you like โก๏ธ try to fix that ๐ง<br />
#** Or if you find a missing function โก๏ธ try to implement it.<br />
# ๐๐ก '''Tell us what you are going to do.'''<br />
#* Do not write just to say what project you're interested in. Be specific about what you are going to do, include links ๐, show us you know what you are talking about ๐ก, and ask many [http://www.catb.org/esr/faqs/smart-questions.html smart questions] ๐ค<br />
#* Remember, '''we are volunteer developers and not your boss''' ๐<br />
# ๐ '''Prepare your proposal with us.'''<br />
#* If we see your proposal for the first time after the application deadline, it might easily contain some paragraphs not fully clear to us. Ongoing interaction will give us more confidence that you are capable of working on your project ๐<br />
#* Try to show us as early as possible a draft of your proposal ๐<br />
#* Then submit the proposal following the applicable rules, e.g. for [https://google.github.io/gsocguides/student/writing-a-proposal GSoC].<br />
<br />
= How do we judge your application? =<br />
<br />
Depending on the mentors and SoC program there are varieties, but typically the main factors considered would be:<br />
<br />
* '''You have demonstrated interest in Octave and an ability to make substantial modifications to Octave'''<br />
*: The most important thing is that you've contributed some interesting code samples to judge your skills. It's OK during the application period to ask for help on how to format these code samples, which normally are Mercurial patches.<br />
<br />
* '''You showed understanding of your topic'''<br />
*: Your proposal should make it clear that you're reasonably well versed in the subject area and won't need all summer just to read up on it.<br />
<br />
* '''Well thought out, adequately detailed, realistic project plan'''<br />
*: "I'm good at this, so trust me" isn't enough. In your proposal, you should describe which algorithms you'll use and how you'll integrate with existing Octave code. You should also prepare a project timeline and goals for the midterm and final evaluations.<br />
<br />
= What you should know about Octave =<br />
<br />
GNU Octave is mostly written in C++ and its own scripting language that is mostly compatible with Matlab. 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 Octave's scripting language, you as successful applicant will be familiar with or able to quickly learn about Octave's infrastructure. You can't spend the whole summer learning how to build Octave or prepare a changeset and still successfully complete your project ๐<br />
<br />
You should know:<br />
# How to build Octave from its source code using [http://en.wikipedia.org/wiki/GNU_build_system the GNU build system].<br />
#* Read in this wiki: [[Developer FAQ]], [[Building]]<br />
#* Tools to know: [https://en.wikipedia.org/wiki/GNU_Compiler_Collection gcc], [https://en.wikipedia.org/wiki/Make_(software) make]<br />
# How to submit patches (changesets).<br />
#* Read in this wiki: [[Contribution guidelines]], [[Mercurial]]<br />
#* Tools to know: [https://en.wikipedia.org/wiki/Mercurial Mercurial (hg)], [https://en.wikipedia.org/wiki/Git git]<br />
<br />
= Suggested projects =<br />
<br />
The following suggested projects are distilled from the [[Projects]] page for the benefit of potential SoC participants. You can also look at our [[Summer of Code|completed past projects]] for more inspiration.<br />
<br />
{{Note|Do you use Octave at your working place or university? Do you have some numerical project in mind? You are always welcome to '''propose your own projects'''. If you are passionate about your project, it will be easy to find an Octave developer to mentor and guide you.}}<br />
<br />
== ode15{i,s} : Matlab Compatible DAE solvers ==<br />
<br />
An initial implementation of Matlab compatible Differential Algebraic Equations (DAE) solvers, {{manual|ode15i}} and {{manual|ode15s}}, based on [https://computing.llnl.gov/projects/sundials SUNDIALS], <br />
was done by [https://gsoc2016ode15s.blogspot.com/ Francesco Faccio during GSoC 2016]. The code is maintained in the main Octave repository and consists mainly of the following three files: [https://hg.savannah.gnu.org/hgweb/octave/file/tip/libinterp/dldfcn/__ode15__.cc {{path|libinterp/dldfcn/__ode15__.cc}}], [https://hg.savannah.gnu.org/hgweb/octave/file/tip/scripts/ode/ode15i.m {{path|scripts/ode/ode15i.m}}] and [https://hg.savannah.gnu.org/hgweb/octave/file/tip/scripts/ode/ode15s.m {{path|scripts/ode/ode15s.m}}].<br />
<br />
The {{manual|decic}} function for selecting consistent initial conditions for ode15i can be made more Matlab compatible by using [https://faculty.smu.edu/shampine/cic.pdf another algorithm]. Another useful extension is to make ode15{i,s} work with datatypes other than double and to improve interpolation at intermediate time steps.<br />
<br />
* '''Project size''' [[#Project sizes | [?]]]<br />
: ~350 hours<br />
* '''Required skills'''<br />
: Octave, C/C++; familiarity with numerical methods for DAEs<br />
* '''Potential mentors'''<br />
: Francesco Faccio, [https://octave.discourse.group/u/cdf Carlo de Falco], [https://octave.discourse.group/u/marco_caliari Marco Caliari], Jacopo Corno, [https://octave.discourse.group/u/schoeps Sebastian Schรถps]<br />
<br />
== Using Python within Octave ==<br />
<br />
[[Pythonic]] allows one to call Python functions and interact with Python objects from within Octave .m file code and from the Octave command line interface. Pythonic may eventually not be a separate package, but rather a core feature of Octave. This project aims to improve Pythonic with the goal of making the package more stable, maintainable, and full-featured.<br />
<br />
Based on a previous summer project related to Pythonic, this work will consist of fast-paced collaborative software development based on tackling the [https://gitlab.com/mtmiller/octave-pythonic/issues Pythonic issue list]. You would also be expected to participate in software design decisions and discussion, as well as improve documentation, doctests, and unit tests. As an example of the sorts of decisions being made, note that Octave indexes from 1 whereas Python typically indexes from 0; in which cases is it appropriate to make this transparent to the user?<br />
<br />
* '''Project size''' [[#Project sizes | [?]]]<br />
: ~350 hours<br />
* '''Required skills'''<br />
: Octave, C/C++, Python<br />
* '''Potential mentors'''<br />
: [https://octave.discourse.group/u/mtmiller Mike Miller], [https://octave.discourse.group/u/cbm Colin B. Macdonald], Abhinav Tripathi<br />
<br />
== Improve TIFF image support ==<br />
<br />
[https://en.wikipedia.org/wiki/TIFF Tag Image File Format (TIFF)] is the de facto standard for scientific images. Octave uses the [http://www.graphicsmagick.org/ GraphicsMagic] (GM) C++ library to handle [http://www.graphicsmagick.org/formats.html TIFF and many others image formats]. However, GM still has several limitations:<br />
<br />
* GM has build option {{codeline|quantum}} which defines the bitdepth to use when reading an image:<br />
** Building GM with '''high quantum''' means that images of smaller bitdepth will take a lot more memory when reading.<br />
** Building GM with '''low quantum''' will make it impossible to read images of higher bitdepth. It also means that the image needs to always be rescaled to the correct range.<br />
* GM supports unsigned integers only, thus incorrectly reading files such as TIFF with floating-point data.<br />
* GM hides details of the image such as whether the image file is indexed. This makes it hard to access the real data stored on file.<br />
<br />
This project aims to implement better TIFF image support using [https://en.wikipedia.org/wiki/Libtiff libtiff], while leaving GM handle all other image formats. After writing a [https://octave.org/doc/v6.1.0/classdef-Classes.html classdef] interface to libtiff, improve the Octave functions {{manual|imread}}, {{manual|imwrite}}, and {{manual|imfinfo}} to make use of it.<br />
<br />
* '''Project size''' [[#Project sizes | [?]]]<br />
: ~350 hours<br />
* '''Required skills'''<br />
: Octave, C/C++<br />
* '''Potential mentors'''<br />
: [https://octave.discourse.group/u/carandraug Carnรซ Draug]<br />
<br />
== PolarAxes and Plotting Improvements ==<br />
<br />
Octave currently provides supports for polar axes by using a Cartesian 2-D axes and adding a significant number of properties and callback listeners to get things to work. What is needed is the implementation of a dedicated "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" exists 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. This relates to bug {{bug|49804}}.<br />
<br />
* '''Project size''' [[#Project sizes | [?]]]<br />
: ~350 hours<br />
* '''Required skills'''<br />
: Octave, C/C++; optional experience with OpenGL programming<br />
* '''Potential mentors'''<br />
: [https://octave.discourse.group/u/rik Rik]<br />
<br />
== Table datatype ==<br />
<br />
In 2013, Matlab introduced a [https://www.mathworks.com/help/matlab/tables.html new table datatype] to conveniently organize and access data in tabular form. This datatype has not been introduced to Octave yet (see bug {{bug|44571}}). However, there are two initial implementation approaches https://github.com/apjanke/octave-tablicious and https://github.com/gnu-octave/table.<br />
<br />
Based upon the existing approaches, the goal of this project is to define an initial subset of [https://www.mathworks.com/help/matlab/tables.htmlMatlab's table functions], which involve sorting, splitting, merging, and file I/O and implement it within the given time frame.<br />
<br />
* '''Project size''' [[#Project sizes | [?]]]<br />
: ~350 hours<br />
* '''Required skills'''<br />
: Octave, C/C++<br />
* '''Potential mentors'''<br />
: [https://octave.discourse.group/u/siko1056 Kai]<br />
<br />
== YAML encoding/decoding ==<br />
<br />
[https://en.wikipedia.org/wiki/YAML YAML], is a very common human readable and structured data format. Unfortunately, GNU Octave (and Matlab) still lacks of builtin support of that omnipresent data format. Having YAML support, Octave can easily read and write config files, which often use YAML or JSON. The latter JSON format has been [[Summer of Code#GSoC_2020 | successfully implemented for Octave during GSoC 2020]].<br />
<br />
The goal of this project is to repeat the GSoC 2020 success story with [https://github.com/biojppm/rapidyaml Rapid YAML] or another fast C/C++ library.<br />
<br />
The first step is research about existing Octave/Matlab and C/C++ implementations, for example:<br />
<br />
* https://code.google.com/archive/p/yamlmatlab/ (uses Java)<br />
* http://vision.is.tohoku.ac.jp/~kyamagu/ja/software/yaml/ (uses Java)<br />
<br />
Then evaluate (and to cherry pick from) existing implementations above, compare strength and weaknesses. After this, an Octave package containing en- and decoding functions (for example <code>yamlencode</code> and <code>yamldecode</code>) shall be created. This involves proper documentation of the work and unit tests to ensure the correctness of the implementation.<br />
<br />
Finally, the package is considered to be merged into core Octave, probably after the GSoC project. However, it can be used immediately from Octave as package and is backwards-compatible with older Octave versions.<br />
<br />
* '''Project size''' [[#Project sizes | [?]]]<br />
: ~350 hours<br />
* '''Required skills'''<br />
: Octave, C/C++<br />
* '''Potential mentors'''<br />
: [https://octave.discourse.group/u/siko1056 Kai]<br />
<br />
== Symbolic package ==<br />
<br />
The [[Symbolic package]] provides symbolic computing and other [https://en.wikipedia.org/wiki/Computer_algebra_system computer algebra system] tools. The main component of Symbolic is a pure m-file class "@sym" which uses the Python package [https://www.sympy.org SymPy] to do (most of) the actual computations. The package aims to expose the full functionality of SymPy while also providing a high level of compatibility with the Matlab Symbolic Math Toolbox. The Symbolic package requires communication between Octave and Python. In 2016 another GSoC project successfully re-implemented this communication using the new [[Pythonic|Pythonic package]].<br />
<br />
This project proposes to go further: instead of using Pythonic only for the communication layer, we'll use it throughout the Symbolic project. For example, we might make "@sym" a subclass of "@pyobject". We also could stop using the "python_cmd" interface and use Pythonic directly from methods. The main goal was already mentioned: to expose the ''full functionality'' of SymPy. For example, we would allow OO-style method calls such as <code>f.diff(x)</code> instead of <code>diff(f, x)</code>.<br />
<br />
* '''Project size''' [[#Project sizes | [?]]]<br />
: ~350 hours<br />
* '''Required skills'''<br />
: Octave, C/C++, Python; object-oriented programming (OOP) in Octave<br />
* '''Potential mentors'''<br />
: [https://octave.discourse.group/u/cbm Colin B. Macdonald], [https://octave.discourse.group/u/mtmiller Mike Miller], Abhinav Tripathi<br />
<br />
== TISEAN package ==<br />
<br />
The [[TISEAN package]] provides an Octave interface to [https://www.pks.mpg.de/~tisean/Tisean_3.0.1/index.html TISEAN] is a suite of code for nonlinear time series analysis. In 2015, another GSoC project started with the work to create interfaces to many TISEAN functions, but [[TISEAN_package:Procedure | there is still work left to do]]. There are missing functions to do computations on spike trains, to simulate autoregresive models, to create specialized plots, etc. These are of importance for many scientific disciplines involving statistical computations and signal processing.<br />
<br />
* '''Project size''' [[#Project sizes | [?]]]<br />
: ~350 hours<br />
* '''Required skills'''<br />
: Octave, C/C++; FORTRAN API knowledge<br />
* '''Potential mentors'''<br />
: [https://octave.discourse.group/u/kakila KaKiLa]<br />
<br />
= Project sizes =<br />
<br />
Since GSoC 2022 there exist two project sizes<ref>https://groups.google.com/g/google-summer-of-code-announce/c/_ekorpcglB8</ref><ref>https://google.github.io/gsocguides/mentor/defining-a-project-ideas-list</ref>:<br />
* '''~175 hours''' (~12 weeks, Jun 13 - Sept 12)<br />
* '''~350 hours''' (~22 weeks, Jun 13 - Nov 21)<br />
<br />
= Footnotes =<br />
<br />
<references /><br />
<br />
= See also =<br />
<br />
* https://summerofcode.withgoogle.com/<br />
* [https://google.github.io/gsocguides/student/ GSoC Student Guide]<br />
* [https://google.github.io/gsocguides/mentor/ GSoC Mentor Guide]<br />
* [https://developers.google.com/open-source/gsoc/timeline GSoC Timeline]<br />
<br />
[[Category:Summer of Code]]<br />
[[Category:Project Ideas]]</div>Nirhttps://wiki.octave.org/wiki/index.php?title=Summer_of_Code_-_Getting_Started&diff=14202Summer of Code - Getting Started2022-02-10T20:16:01Z<p>Nir: /* What you should know about Octave */</p>
<hr />
<div>{{Note|GNU Octave will apply as mentoring organization for GSoC 2022.}}<br />
<br />
Since 2011 the GNU Octave project has successfully mentored:<br />
* [[Summer of Code | '''37 participants''' ๐]]<br />
* [[Summer of Code | '''39 projects''' ๐]]<br />
in [[Summer of Code]] (SoC) programs by [https://summerofcode.withgoogle.com/ Google] and [https://esa.int/ ESA].<br />
<br />
Those SoC programs aim to advertise open-source software development and to attract potential new Octave developers.<br />
<br />
= Steps toward a successful application =<br />
<br />
# ๐๐ฌ '''We want to get to know you (before the deadline). Communicate with us.'''<br />
#* Join [https://octave.discourse.group/ '''Octave Discourse'''] or [[IRC]]. Using a nickname is fine.<br />
#* Show us that you're motivated to work on Octave ๐ป. There is no need to present an overwhelming CV ๐; evidence of involvement with Octave is more important.<br />
#* '''<span style="color:darkblue;">If you never talked to us, we will likely reject your proposal</span>''', even it looks good ๐ฎ<br />
# ๐ฉโ๐ฌ '''Get your hands dirty.'''<br />
#* We are curious about your programming skills ๐<br />
#** Your application will be much stronger if you [https://savannah.gnu.org/bugs/?group=octave fix Octave bugs] or [https://savannah.gnu.org/patch/?group=octave submit patches] before or during the application period.<br />
#** You can take a look at the [[short projects]] for some simple bugs to start with.<br />
#* '''Use Octave!'''<br />
#** If you come across something that does not work the way you like โก๏ธ try to fix that ๐ง<br />
#** Or if you find a missing function โก๏ธ try to implement it.<br />
# ๐๐ก '''Tell us what you are going to do.'''<br />
#* Do not write just to say what project you're interested in. Be specific about what you are going to do, include links ๐, show us you know what you are talking about ๐ก, and ask many [http://www.catb.org/esr/faqs/smart-questions.html smart questions] ๐ค<br />
#* Remember, '''we are volunteer developers and not your boss''' ๐<br />
# ๐ '''Prepare your proposal with us.'''<br />
#* If we see your proposal for the first time after the application deadline, it might easily contain some paragraphs not fully clear to us. Ongoing interaction will give us more confidence that you are capable of working on your project ๐<br />
#* Try to show us as early as possible a draft of your proposal ๐<br />
#* Then submit the proposal following the applicable rules, e.g. for [https://google.github.io/gsocguides/student/writing-a-proposal GSoC].<br />
<br />
= How do we judge your application? =<br />
<br />
Depending on the mentors and SoC program there are varieties, but typically the main factors considered would be:<br />
<br />
* '''You have demonstrated interest in Octave and an ability to make substantial modifications to Octave'''<br />
*: The most important thing is that you've contributed some interesting code samples to judge your skills. It's OK during the application period to ask for help on how to format these code samples, which normally are Mercurial patches.<br />
<br />
* '''You showed understanding of your topic'''<br />
*: Your proposal should make it clear that you're reasonably well versed in the subject area and won't need all summer just to read up on it.<br />
<br />
* '''Well thought out, adequately detailed, realistic project plan'''<br />
*: "I'm good at this, so trust me" isn't enough. In your proposal, you should describe which algorithms you'll use and how you'll integrate with existing Octave code. You should also prepare a project timeline and goals for the midterm and final evaluations.<br />
<br />
= What you should know about Octave =<br />
<br />
GNU Octave is mostly written in C++ and its own scripting language that is mostly compatible with Matlab. 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 Octave's scripting language, you as successful applicant will be familiar with or able to quickly learn about Octave's infrastructure. You can't spend the whole summer learning how to build Octave or prepare a changeset and still successfully complete your project ๐<br />
<br />
You should know:<br />
# How to build Octave from its source code using [http://en.wikipedia.org/wiki/GNU_build_system the GNU build system].<br />
#* Read in this wiki: [[Developer FAQ]], [[Building]]<br />
#* Tools to know: [https://en.wikipedia.org/wiki/GNU_Compiler_Collection gcc], [https://en.wikipedia.org/wiki/Make_(software) make]<br />
# How to submit patches (changesets).<br />
#* Read in this wiki: [[Contribution guidelines]], [[Mercurial]]<br />
#* Tools to know: [https://en.wikipedia.org/wiki/Mercurial Mercurial (hg)], [https://en.wikipedia.org/wiki/Git git]<br />
<br />
= Suggested projects =<br />
<br />
The following suggested projects are distilled from the [[Projects]] page for the benefit of potential SoC participants. You can also look at our [[Summer of Code|completed past projects]] for more inspiration.<br />
<br />
{{Note|Do you use Octave at your working place or university? Do you have some numerical project in mind? You are always welcome to '''propose your own projects'''. If you are passionate about your project, it will be easy to find an Octave developer to mentor and guide you.}}<br />
<br />
== ode15{i,s} : Matlab Compatible DAE solvers ==<br />
<br />
An initial implementation of Matlab compatible Differential Algebraic Equations (DAE) solvers, {{manual|ode15i}} and {{manual|ode15s}}, based on [https://computing.llnl.gov/projects/sundials SUNDIALS], <br />
was done by [https://gsoc2016ode15s.blogspot.com/ Francesco Faccio during GSoC 2016]. The code is maintained in the main Octave repository and consists mainly of the following three files: [https://hg.savannah.gnu.org/hgweb/octave/file/tip/libinterp/dldfcn/__ode15__.cc {{path|libinterp/dldfcn/__ode15__.cc}}], [https://hg.savannah.gnu.org/hgweb/octave/file/tip/scripts/ode/ode15i.m {{path|scripts/ode/ode15i.m}}] and [https://hg.savannah.gnu.org/hgweb/octave/file/tip/scripts/ode/ode15s.m {{path|scripts/ode/ode15s.m}}].<br />
<br />
The {{manual|decic}} function for selecting consistent initial conditions for ode15i can be made more Matlab compatible by using [https://faculty.smu.edu/shampine/cic.pdf another algorithm]. Another useful extension is to make ode15{i,s} work with datatypes other than double and to improve interpolation at intermediate time steps.<br />
<br />
* '''Project size''' [[#Project sizes | [?]]]<br />
: ~350 hours<br />
* '''Required skills'''<br />
: Octave, C/C++; familiarity with numerical methods for DAEs<br />
* '''Potential mentors'''<br />
: Francesco Faccio, [https://octave.discourse.group/u/cdf Carlo de Falco], [https://octave.discourse.group/u/marco_caliari Marco Caliari], Jacopo Corno, [https://octave.discourse.group/u/schoeps Sebastian Schรถps]<br />
<br />
== Using Python within Octave ==<br />
<br />
[[Pythonic]] allows one to call Python functions and interact with Python objects from within Octave .m file code and from the Octave command line interface. Pythonic may eventually not be a separate package, but rather a core feature of Octave. This project aims to improve Pythonic with the goal of making the package more stable, maintainable, and full-featured.<br />
<br />
Based on a previous summer project related to Pythonic, this work will consist of fast-paced collaborative software development based on tackling the [https://gitlab.com/mtmiller/octave-pythonic/issues Pythonic issue list]. You would also be expected to participate in software design decisions and discussion, as well as improve documentation, doctests, and unit tests. As an example of the sorts of decisions being made, note that Octave indexes from 1 whereas Python typically indexes from 0; in which cases is it appropriate to make this transparent to the user?<br />
<br />
* '''Project size''' [[#Project sizes | [?]]]<br />
: ~350 hours<br />
* '''Required skills'''<br />
: Octave, C/C++, Python<br />
* '''Potential mentors'''<br />
: [https://octave.discourse.group/u/mtmiller Mike Miller], [https://octave.discourse.group/u/cbm Colin B. Macdonald], Abhinav Tripathi<br />
<br />
== Improve TIFF image support ==<br />
<br />
[https://en.wikipedia.org/wiki/TIFF Tag Image File Format (TIFF)] is the de facto standard for scientific images. Octave uses the [http://www.graphicsmagick.org/ GraphicsMagic] (GM) C++ library to handle [http://www.graphicsmagick.org/formats.html TIFF and many others image formats]. However, GM still has several limitations:<br />
<br />
* GM has build option {{codeline|quantum}} which defines the bitdepth to use when reading an image:<br />
** Building GM with '''high quantum''' means that images of smaller bitdepth will take a lot more memory when reading.<br />
** Building GM with '''low quantum''' will make it impossible to read images of higher bitdepth. It also means that the image needs to always be rescaled to the correct range.<br />
* GM supports unsigned integers only, thus incorrectly reading files such as TIFF with floating-point data.<br />
* GM hides details of the image such as whether the image file is indexed. This makes it hard to access the real data stored on file.<br />
<br />
This project aims to implement better TIFF image support using [https://en.wikipedia.org/wiki/Libtiff libtiff], while leaving GM handle all other image formats. After writing a [https://octave.org/doc/v6.1.0/classdef-Classes.html classdef] interface to libtiff, improve the Octave functions {{manual|imread}}, {{manual|imwrite}}, and {{manual|imfinfo}} to make use of it.<br />
<br />
* '''Project size''' [[#Project sizes | [?]]]<br />
: ~350 hours<br />
* '''Required skills'''<br />
: Octave, C/C++<br />
* '''Potential mentors'''<br />
: [https://octave.discourse.group/u/carandraug Carnรซ Draug]<br />
<br />
== PolarAxes and Plotting Improvements ==<br />
<br />
Octave currently provides supports for polar axes by using a Cartesian 2-D axes and adding a significant number of properties and callback listeners to get things to work. What is needed is the implementation of a dedicated "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" exists 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. This relates to bug {{bug|49804}}.<br />
<br />
* '''Project size''' [[#Project sizes | [?]]]<br />
: ~350 hours<br />
* '''Required skills'''<br />
: Octave, C/C++; optional experience with OpenGL programming<br />
* '''Potential mentors'''<br />
: [https://octave.discourse.group/u/rik Rik]<br />
<br />
== Table datatype ==<br />
<br />
In 2013, Matlab introduced a [https://www.mathworks.com/help/matlab/tables.html new table datatype] to conveniently organize and access data in tabular form. This datatype has not been introduced to Octave yet (see bug {{bug|44571}}). However, there are two initial implementation approaches https://github.com/apjanke/octave-tablicious and https://github.com/gnu-octave/table.<br />
<br />
Based upon the existing approaches, the goal of this project is to define an initial subset of [https://www.mathworks.com/help/matlab/tables.htmlMatlab's table functions], which involve sorting, splitting, merging, and file I/O and implement it within the given time frame.<br />
<br />
* '''Project size''' [[#Project sizes | [?]]]<br />
: ~350 hours<br />
* '''Required skills'''<br />
: Octave, C/C++<br />
* '''Potential mentors'''<br />
: [https://octave.discourse.group/u/siko1056 Kai]<br />
<br />
== YAML encoding/decoding ==<br />
<br />
[https://en.wikipedia.org/wiki/YAML YAML], is a very common human readable and structured data format. Unfortunately, GNU Octave (and Matlab) still lacks of builtin support of that omnipresent data format. Having YAML support, Octave can easily read and write config files, which often use YAML or JSON. The latter JSON format has been [[Summer of Code#GSoC_2020 | successfully implemented for Octave during GSoC 2020]].<br />
<br />
The goal of this project is to repeat the GSoC 2020 success story with [https://github.com/biojppm/rapidyaml Rapid YAML] or another fast C/C++ library.<br />
<br />
The first step is research about existing Octave/Matlab and C/C++ implementations, for example:<br />
<br />
* https://code.google.com/archive/p/yamlmatlab/ (uses Java)<br />
* http://vision.is.tohoku.ac.jp/~kyamagu/ja/software/yaml/ (uses Java)<br />
<br />
Then evaluate (and to cherry pick from) existing implementations above, compare strength and weaknesses. After this, an Octave package containing en- and decoding functions (for example <code>yamlencode</code> and <code>yamldecode</code>) shall be created. This involves proper documentation of the work and unit tests to ensure the correctness of the implementation.<br />
<br />
Finally, the package is considered to be merged into core Octave, probably after the GSoC project. However, it can be used immediately from Octave as package and is backwards-compatible with older Octave versions.<br />
<br />
* '''Project size''' [[#Project sizes | [?]]]<br />
: ~350 hours<br />
* '''Required skills'''<br />
: Octave, C/C++<br />
* '''Potential mentors'''<br />
: [https://octave.discourse.group/u/siko1056 Kai]<br />
<br />
== Symbolic package ==<br />
<br />
The [[Symbolic package]] provides symbolic computing and other [https://en.wikipedia.org/wiki/Computer_algebra_system computer algebra system] tools. The main component of Symbolic is a pure m-file class "@sym" which uses the Python package [https://www.sympy.org SymPy] to do (most of) the actual computations. The package aims to expose the full functionality of SymPy while also providing a high level of compatibility with the Matlab Symbolic Math Toolbox. The Symbolic package requires communication between Octave and Python. In 2016 another GSoC project successfully re-implemented this communication using the new [[Pythonic|Pythonic package]].<br />
<br />
This project proposes to go further: instead of using Pythonic only for the communication layer, we'll use it throughout the Symbolic project. For example, we might make "@sym" a subclass of "@pyobject". We also could stop using the "python_cmd" interface and use Pythonic directly from methods. The main goal was already mentioned: to expose the ''full functionality'' of SymPy. For example, we would allow OO-style method calls such as <code>f.diff(x)</code> instead of <code>diff(f, x)</code>.<br />
<br />
* '''Project size''' [[#Project sizes | [?]]]<br />
: ~350 hours<br />
* '''Required skills'''<br />
: Octave, C/C++, Python; object-oriented programming (OOP) in Octave<br />
* '''Potential mentors'''<br />
: [https://octave.discourse.group/u/cbm Colin B. Macdonald], [https://octave.discourse.group/u/mtmiller Mike Miller], Abhinav Tripathi<br />
<br />
== TISEAN package ==<br />
<br />
The [[TISEAN package]] provides an Octave interface to [https://www.pks.mpg.de/~tisean/Tisean_3.0.1/index.html TISEAN] is a suite of code for nonlinear time series analysis. In 2015, another GSoC project started with the work to create interfaces to many TISEAN functions, but [[TISEAN_package:Procedure | there is still work left to do]]. There are missing functions to do computations on spike trains, to simulate autoregresive models, to create specialized plots, etc. Which are of importance for many scientific disciplines involving statistical computations and signal processing.<br />
<br />
* '''Project size''' [[#Project sizes | [?]]]<br />
: ~350 hours<br />
* '''Required skills'''<br />
: Octave, C/C++; FORTRAN API knowledge<br />
* '''Potential mentors'''<br />
: [https://octave.discourse.group/u/kakila KaKiLa]<br />
<br />
= Project sizes =<br />
<br />
Since GSoC 2022 there exist two project sizes<ref>https://groups.google.com/g/google-summer-of-code-announce/c/_ekorpcglB8</ref><ref>https://google.github.io/gsocguides/mentor/defining-a-project-ideas-list</ref>:<br />
* '''~175 hours''' (~12 weeks, Jun 13 - Sept 12)<br />
* '''~350 hours''' (~22 weeks, Jun 13 - Nov 21)<br />
<br />
= Footnotes =<br />
<br />
<references /><br />
<br />
= See also =<br />
<br />
* https://summerofcode.withgoogle.com/<br />
* [https://google.github.io/gsocguides/student/ GSoC Student Guide]<br />
* [https://google.github.io/gsocguides/mentor/ GSoC Mentor Guide]<br />
* [https://developers.google.com/open-source/gsoc/timeline GSoC Timeline]<br />
<br />
[[Category:Summer of Code]]<br />
[[Category:Project Ideas]]</div>Nirhttps://wiki.octave.org/wiki/index.php?title=GSoC_2022_application&diff=14193GSoC 2022 application2022-02-08T16:49:12Z<p>Nir: </p>
<hr />
<div>__NOTOC__<br />
<br />
Octave's application for GSoC 2022.<br />
<br />
=== Organization name ===<br />
<br />
GNU Octave<br />
<br />
=== OSI approved license? ===<br />
<br />
Yes<br />
<br />
=== Has your organization participated in Google Summer of Code before? ===<br />
<br />
Yes<br />
<br />
=== Please select all years in which your organization participated prior to 2022 ===<br />
<br />
2016-2021, 2014<br />
<br />
=== Website URL ===<br />
<br />
http://www.octave.org<br />
<br />
=== Logo (Must be a 24-bit PNG, minimum height 256 pixels.) ===<br />
<br />
https://upload.wikimedia.org/wikipedia/commons/thumb/6/6a/Gnu-octave-logo.svg/283px-Gnu-octave-logo.svg.png (or generate 256x256 PNG from http://hg.savannah.gnu.org/hgweb/octave/raw-file/155d8e90ee1f/doc/icons/octave-logo.svg with <code>inkscape -z -e octave-logo.png -w 256 -h 256 octave-logo.svg</code>)<br />
<br />
=== Tagline (50 characters) ===<br />
<br />
Free Your Numbers<br />
<br />
=== Primary License ===<br />
<br />
GPL 3.0<br />
<br />
=== What year was your project started? ===<br />
<br />
1992<br />
<br />
=== Source code location === <br />
<br />
https://hg.savannah.gnu.org/hgweb/octave<br />
<br />
<br />
=== Organization Category ===<br />
<br />
Programming Languages, Science<br />
<br />
<br />
=== Technology Tags (the primary specific technologies your organization uses) (up to 5) ===<br />
<br />
C++, hg<br />
<br />
=== Topic Tags (general topics that describe your organization) (up to 5) ===<br />
<br />
mathematics, numerical computation, numerical methods, matlab, scientific computing<br />
<br />
<br />
=== Description ===<br />
<br />
GNU Octave is a high-level interpreted language, primarily intended for numerical computations. It provides capabilities for the numerical solution of linear and nonlinear problems and for performing other numerical experiments. It also provides extensive graphics capabilities for data visualization and manipulation. Octave is normally used through its interactive command line interface, but it can also be used to write non-interactive programs. The Octave language is quite similar to Matlab so that most programs are easily portable.<br />
<br />
Octave is continually being upgraded. Student projects may also involve developing or upgrading Octave Forge packages, which can be loaded to provide additional specialized functions that supplement those provided in Core Octave.<br />
<br />
<br />
=== Contributor guidance ===<br />
<br />
https://wiki.octave.org/Summer_of_Code_-_Getting_Started<br />
<br />
<br />
=== Contact methods ===<br />
<br />
Chat: https://octave.discourse.group/<br />
<br />
Mailing list: https://lists.gnu.org/mailman/listinfo/octave-maintainers<br />
<br />
Email: octave-maintainers@gnu.org<br />
<br />
=== Why does your org want to participate in Google Summer of Code? (1000 chars) ===<br />
<br />
We hope to establish collaborations with talented new contributors. We also want to raise awareness of Octave in the free software community.<br />
<br />
Google Summer of Code represents a unique opportunity to bring new perspectives to the Octave community. As a somewhat older project, we benefit from having new and younger contributors among our developers. We have been able to retain several GSoC participants who have become important contributors to the Octave project and we hope to continue this in the future by engaging effectively with students during both the application and mentoring processes, setting clear standards for what is required for acceptance, and maintaining those standards throughout the project.<br />
<br />
=== What would your org consider to be a successful summer? (500 chars) ===<br />
<br />
We would consider a program successful if we selected promising students, provided adequate mentor supervision, developed desired features in Octave, and facilitated a satisfying experience for the students and mentors. We are more interested in the quality of interactions and contributions than in quantity, although, all else being equal, we would be happy to have more talented students join us.<br />
<br />
<br />
<br />
<br />
<br />
<br />
=== Is your organization part of any government? ===<br />
<br />
No<br />
<br />
<br />
<br />
<br />
<br />
=== How will you keep mentors engaged with their students? (1000 chars) ===<br />
<br />
We will select mentors with proven involvement in Octave and free software and align project topics with the priorities of the core developer team. The vast majority of our mentors have been involved in Octave development for several years, and new mentors will be paired with more experienced ones.<br />
<br />
Each project will include at least one core Octave developer as mentor. These are proven, veteran members of the project who are familiar with the code base and with engaging the maintainer and user community. GNU Octave is a project with applications in very diverse domains, so each project should also include a mentor with expertise in the relevant field.<br />
<br />
=== How will you help your students stay on schedule to complete their projects? (1000 chars) ===<br />
<br />
Previous contributions to Octave (which can be small) are a condition for acceptance. In this way, we hope to select students who are familiar with the codebase and able to start their project quickly.<br />
<br />
A tentative project timeline is required as part of the application, and is checked by mentors for realism during the applicant evaluation process. Once a student is selected, the mentors will work with them to come up with a more detailed timeline, including clear expectations for progress by the midterm and final evaluation periods.<br />
<br />
During the summer, mentors will check with students at least weekly to make sure they are staying on schedule and help with any obstacles that might arise. Students are also expected to regularly update their mentors and the Octave maintainers community on their progress via e-mails and blog posts.<br />
<br />
Overall, the vast majority of our over 30 previous SoC students have finished successfully, making substantive contributions to Octave that have been integrated into our codebase.<br />
<br />
=== How will you get your students involved in your community during GSoC? (1000 chars) ===<br />
<br />
Students will be urged to participate in our chat channel and mailing list. We will set clear expectations on the minimum frequency of email progress updates, typically every two to three days. Students will also set up a blog for longer, weekly, updates which will be aggregated at http://planet.octave.org<br />
<br />
Everything should be completely open. Almost all interactions with the student should be public, e.g. contacting the mentor should happen in the public IRC channel or copy the maintainers mailing list.<br />
<br />
Finally, we organize an annual developers' summit, OctConf, and have in previous years provided support for GSoC students to attend and present. We also hold monthly online developer meetings to discuss Octave's direction and future activities, to which GSoC students would be invited. Such meetings strengthen relationships between community members and the new students.<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
[[Category:Summer of Code]]<br />
[[Category:2022]]</div>Nirhttps://wiki.octave.org/wiki/index.php?title=GSoC_2022_application&diff=14192GSoC 2022 application2022-02-08T16:47:16Z<p>Nir: </p>
<hr />
<div>__NOTOC__<br />
<br />
Octave's application for GSoC 2022.<br />
<br />
=== Organization name ===<br />
<br />
GNU Octave<br />
<br />
=== OSI approved license? ===<br />
<br />
Yes<br />
<br />
== Has your organization participated in Google Summer of Code before? ==<br />
<br />
Yes<br />
<br />
== Please select all years in which your organization participated prior to 2022 ==<br />
<br />
2016-2021, 2014<br />
<br />
=== Website URL ===<br />
<br />
http://www.octave.org<br />
<br />
=== Logo (Must be a 24-bit PNG, minimum height 256 pixels.) ===<br />
<br />
https://upload.wikimedia.org/wikipedia/commons/thumb/6/6a/Gnu-octave-logo.svg/283px-Gnu-octave-logo.svg.png (or generate 256x256 PNG from http://hg.savannah.gnu.org/hgweb/octave/raw-file/155d8e90ee1f/doc/icons/octave-logo.svg with <code>inkscape -z -e octave-logo.png -w 256 -h 256 octave-logo.svg</code>)<br />
<br />
=== Tagline (50 characters) ===<br />
<br />
Free Your Numbers<br />
<br />
=== Primary License ===<br />
<br />
GPL 3.0<br />
<br />
=== What year was your project started? ===<br />
<br />
1992<br />
<br />
=== Source code location === <br />
<br />
https://hg.savannah.gnu.org/hgweb/octave<br />
<br />
<br />
=== Organization Category ===<br />
<br />
Programming Languages, Science<br />
<br />
<br />
=== Technology Tags (the primary specific technologies your organization uses) (up to 5) ===<br />
<br />
C++, hg<br />
<br />
=== Topic Tags (general topics that describe your organization) (up to 5) ===<br />
<br />
mathematics, numerical computation, numerical methods, matlab, scientific computing<br />
<br />
<br />
=== Description ===<br />
<br />
GNU Octave is a high-level interpreted language, primarily intended for numerical computations. It provides capabilities for the numerical solution of linear and nonlinear problems and for performing other numerical experiments. It also provides extensive graphics capabilities for data visualization and manipulation. Octave is normally used through its interactive command line interface, but it can also be used to write non-interactive programs. The Octave language is quite similar to Matlab so that most programs are easily portable.<br />
<br />
Octave is continually being upgraded. Student projects may also involve developing or upgrading Octave Forge packages, which can be loaded to provide additional specialized functions that supplement those provided in Core Octave.<br />
<br />
<br />
=== Contributor guidance ===<br />
<br />
https://wiki.octave.org/Summer_of_Code_-_Getting_Started<br />
<br />
<br />
=== Contact methods ===<br />
<br />
Chat: https://octave.discourse.group/<br />
<br />
Mailing list: https://lists.gnu.org/mailman/listinfo/octave-maintainers<br />
<br />
Email: octave-maintainers@gnu.org<br />
<br />
=== Why does your org want to participate in Google Summer of Code? (1000 chars) ===<br />
<br />
We hope to establish collaborations with talented new contributors. We also want to raise awareness of Octave in the free software community.<br />
<br />
Google Summer of Code represents a unique opportunity to bring new perspectives to the Octave community. As a somewhat older project, we benefit from having new and younger contributors among our developers. We have been able to retain several GSoC participants who have become important contributors to the Octave project and we hope to continue this in the future by engaging effectively with students during both the application and mentoring processes, setting clear standards for what is required for acceptance, and maintaining those standards throughout the project.<br />
<br />
=== What would your org consider to be a successful summer? (500 chars) ===<br />
<br />
We would consider a program successful if we selected promising students, provided adequate mentor supervision, developed desired features in Octave, and facilitated a satisfying experience for the students and mentors. We are more interested in the quality of interactions and contributions than in quantity, although, all else being equal, we would be happy to have more talented students join us.<br />
<br />
<br />
<br />
<br />
<br />
<br />
== Is your organization part of any government? ==<br />
<br />
No<br />
<br />
<br />
<br />
<br />
=== Description (180 chars) ===<br />
<br />
GNU Octave is a high-level interpreted language, primarily intended for numerical computations.<br />
<br />
<br />
=== Application instructions (1500 chars) ===<br />
<br />
(Markdown for links)<br />
<br />
<code><br />
<br />
Post on our [mailing list](https://lists.gnu.org/mailman/listinfo/octave-maintainers) or chat on [IRC](https://webchat.freenode.net/?channels=#octave) or [Discourse](https://octave.discourse.group/) to get feedback on your ideas and help with any questions.<br />
<br />
Familiarize yourself with using and building Octave, and with any other skills needed to carry out your proposed project. Demonstrate this familiarity by contributing [bug fixes](https://savannah.gnu.org/bugs/?group=octave) or [patches](https://savannah.gnu.org/patch/?group=octave) before the end of the application period.<br />
<br />
Complete your GSoC application as per Google guidelines.<br />
<br />
For more details, please see the [Octave Wiki](https://wiki.octave.org/Summer_of_Code_-_Getting_Started).<br />
<br />
</code><br />
<br />
=== Proposal Tags (for applicants to use) (up to 10) ===<br />
<br />
Numerical, Infrastructure, Octave Forge, Image analysis, Machine learning, GUI, Graphics, New feature, Performance, Matlab compatibility<br />
<br />
=== How will you keep mentors engaged with their students? (1000 chars) ===<br />
<br />
We will select mentors with proven involvement in Octave and free software and align project topics with the priorities of the core developer team. The vast majority of our mentors have been involved in Octave development for several years, and new mentors will be paired with more experienced ones.<br />
<br />
Each project will include at least one core Octave developer as mentor. These are proven, veteran members of the project who are familiar with the code base and with engaging the maintainer and user community. GNU Octave is a project with applications in very diverse domains, so each project should also include a mentor with expertise in the relevant field.<br />
<br />
=== How will you help your students stay on schedule to complete their projects? (1000 chars) ===<br />
<br />
Previous contributions to Octave (which can be small) are a condition for acceptance. In this way, we hope to select students who are familiar with the codebase and able to start their project quickly.<br />
<br />
A tentative project timeline is required as part of the application, and is checked by mentors for realism during the applicant evaluation process. Once a student is selected, the mentors will work with them to come up with a more detailed timeline, including clear expectations for progress by the midterm and final evaluation periods.<br />
<br />
During the summer, mentors will check with students at least weekly to make sure they are staying on schedule and help with any obstacles that might arise. Students are also expected to regularly update their mentors and the Octave maintainers community on their progress via e-mails and blog posts.<br />
<br />
Overall, the vast majority of our over 30 previous SoC students have finished successfully, making substantive contributions to Octave that have been integrated into our codebase.<br />
<br />
=== How will you get your students involved in your community during GSoC? (1000 chars) ===<br />
<br />
Students will be urged to participate in our chat channel and mailing list. We will set clear expectations on the minimum frequency of email progress updates, typically every two to three days. Students will also set up a blog for longer, weekly, updates which will be aggregated at http://planet.octave.org<br />
<br />
Everything should be completely open. Almost all interactions with the student should be public, e.g. contacting the mentor should happen in the public IRC channel or copy the maintainers mailing list.<br />
<br />
Finally, we organize an annual developers' summit, OctConf, and have in previous years provided support for GSoC students to attend and present. We also hold monthly online developer meetings to discuss Octave's direction and future activities, to which GSoC students would be invited. Such meetings strengthen relationships between community members and the new students.<br />
<br />
=== How will you keep students involved with your community after GSoC? (1000 chars) ===<br />
<br />
We will typically merge their code into our codebase during or soon after the summer. GNU Octave is a project with many tester-users who give constant feedback on new features and report bugs. As participants in the mailing lists and bug tracker, students get the feeling of doing something that is useful to the community from the very start.<br />
<br />
Many of our GSoC students use Octave during the academic year or in their professional careers. As such, they are prone to stay involved with its development, even if at a lower level than during the summer.<br />
<br />
A number of GSoC alumni have continued making regular contributions to GNU Octave, including volunteering to serve as GSoC mentors themselves, and many remain available to help with any problems related to the code they wrote for the project.<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
=== How many potential mentors have agreed to mentor this year? ===<br />
<br />
11-15<br />
<br />
<br />
=== Has your org been accepted as a mentoring org in Google Summer of Code before? ===<br />
<br />
Yes.<br />
<br />
=== How many students did you org accept for 2020? ===<br />
<br />
1<br />
<br />
=== How many of your org's 2020 students have been active in the community in the past 60 days? ===<br />
<br />
0<br />
<br />
=== For each year your organization has participated, provide the counts of successful and total students. ===<br />
<br />
2020 1/1<br />
2019 0/0<br />
2018 3/3<br />
2017 4/4<br />
2016 5/5<br />
2014 3/3<br />
<br />
We have a nice trajectory mentoring projects since 2011 (both as an independent organization and as part of GNU). [http://wiki.octave.org/Summer_of_Code This page] lists the successful projects that have been executed under our mentoring.<br />
<br />
=== If your org has applied for GSoC before but not been accepted, select the years === <br />
<br />
2012, 2013, 2015<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
[[Category:Summer of Code]]<br />
[[Category:2022]]</div>Nirhttps://wiki.octave.org/wiki/index.php?title=GSoC_2022_application&diff=14191GSoC 2022 application2022-02-08T16:22:27Z<p>Nir: </p>
<hr />
<div>__NOTOC__<br />
<br />
Octave's application for GSoC 2022.<br />
<br />
=== Organization name ===<br />
<br />
GNU Octave<br />
<br />
=== OSI approved license? ===<br />
<br />
Yes<br />
<br />
=== Why does your org want to participate in Google Summer of Code? (1000 chars) ===<br />
<br />
We hope to establish collaborations with talented new contributors. We also want to raise awareness of Octave in the free software community.<br />
<br />
Google Summer of Code represents a unique opportunity to bring new perspectives to the Octave community. As a somewhat older project, we benefit from having new and younger contributors among our developers. We have been able to retain several GSoC participants as contributors to the Octave project and we hope to continue this in the future by engaging effectively with students during both the application and mentoring processes, setting clear standards for what is required for acceptance, and maintaining those standards throughout the project.<br />
<br />
=== What would your org consider to be a successful summer? (500 chars) ===<br />
<br />
We would consider a summer successful if we selected promising students, provided adequate mentor supervision, developed desired features in Octave, and facilitated a satisfying experience for the students and mentors. We are more interested in the quality of interactions and contributions than in quantity, although, all else being equal, we would be happy to have more talented students join us.<br />
<br />
<br />
=== How many potential mentors have agreed to mentor this year? ===<br />
<br />
11-15<br />
<br />
=== How will you keep mentors engaged with their students? (1000 chars) ===<br />
<br />
We will select mentors with proven involvement in Octave and free software and align project topics with the priorities of the core developer team. The vast majority of our mentors have been involved in Octave development for several years, and new mentors will be paired with more experienced ones.<br />
<br />
Each project will include at least one core Octave developer as mentor. These are proven, veteran members of the project who are familiar with the code base and with engaging the maintainer and user community. GNU Octave is a project with applications in very diverse domains, so each project should also include a mentor with expertise in the relevant field.<br />
<br />
=== How will you help your students stay on schedule to complete their projects? (1000 chars) ===<br />
<br />
Previous contributions to Octave are a condition for acceptance. In this way, we hope to select students who are familiar with the codebase and able to start their project quickly.<br />
<br />
A tentative project timeline is required as part of the application, and is checked by mentors for realism during the applicant evaluation process. Once a student is selected, the mentor will work with them to come up with a more detailed timeline, including clear expectations for progress by the midterm and final evaluation periods.<br />
<br />
During the summer, mentors will check with students at least weekly to make sure they are staying on schedule and help with any obstacles that might arise. Students are also expected to regularly update their mentors and the Octave maintainers community on their progress via e-mails and blog posts.<br />
<br />
Overall, the vast majority of previous SoC students have finished successfully, making substantive contributions to Octave that have been integrated into our codebase.<br />
<br />
=== How will you get your students involved in your community during GSoC? (1000 chars) ===<br />
<br />
Students will be urged to participate in our IRC channel and mailing list. We will set clear expectations on the minimum frequency of email progress updates, typically every two to three days. Students will also set up a blog for longer, weekly, updates which is aggregated at http://planet.octave.org<br />
<br />
Everything should be completely open. Almost all interactions with the student should be public, e.g. contacting the mentor should happen in the public IRC channel or copy the maintainers mailing list.<br />
<br />
Finally, we organize an annual developers' summit, OctConf, and have in previous years provided support for GSoC students to attend and present. In the past year, we have also held monthly online developer meetings to discuss Octave's direction and future activities, to which GSoC students would be invited. Such meetings strengthen relationships between community members and the new students.<br />
<br />
=== How will you keep students involved with your community after GSoC? (1000 chars) ===<br />
<br />
We will typically merge their code into our codebase during or soon after the summer. GNU Octave is a project with many tester-users who give constant feedback on new features and report bugs. As participants in the mailing lists and bug tracker, students get the feeling of doing something that is useful to the community from the very start.<br />
<br />
Many of our GSoC students use Octave during the academic year or in their professional careers. As such, they are prone to stay involved with its development, even if at a lower level than during the summer.<br />
<br />
A number of GSoC alumni have continued making regular contributions to GNU Octave, including volunteering to serve as GSoC mentors, and many remain available to help with any problems related to the code they wrote for the project.<br />
<br />
<br />
<br />
=== Has your org been accepted as a mentoring org in Google Summer of Code before? ===<br />
<br />
Yes.<br />
<br />
=== How many students did you org accept for 2020? ===<br />
<br />
1<br />
<br />
=== How many of your org's 2020 students have been active in the community in the past 60 days? ===<br />
<br />
0<br />
<br />
=== For each year your organization has participated, provide the counts of successful and total students. ===<br />
<br />
2020 1/1<br />
2019 0/0<br />
2018 3/3<br />
2017 4/4<br />
2016 5/5<br />
2014 3/3<br />
<br />
We have a nice trajectory mentoring projects since 2011 (both as an independent organization and as part of GNU). [http://wiki.octave.org/Summer_of_Code This page] lists the successful projects that have been executed under our mentoring.<br />
<br />
=== If your org has applied for GSoC before but not been accepted, select the years === <br />
<br />
2012, 2013, 2015<br />
<br />
=== What year was your project started? ===<br />
<br />
1992<br />
<br />
=== Where does your source code live? === <br />
<br />
http://hg.savannah.gnu.org/hgweb/octave<br />
<br />
=== Is your organization part of any government? === <br />
<br />
No<br />
<br />
=== Website URL ===<br />
<br />
http://www.octave.org<br />
<br />
=== Tagline (80 characters) ===<br />
<br />
Free Your Numbers<br />
<br />
=== Logo (Must be a 24-bit PNG, minimum height 256 pixels.) ===<br />
<br />
https://upload.wikimedia.org/wikipedia/commons/thumb/6/6a/Gnu-octave-logo.svg/283px-Gnu-octave-logo.svg.png (or generate 256x256 PNG from http://hg.savannah.gnu.org/hgweb/octave/raw-file/155d8e90ee1f/doc/icons/octave-logo.svg with <code>inkscape -z -e octave-logo.png -w 256 -h 256 octave-logo.svg</code>)<br />
<br />
=== Primary License ===<br />
<br />
GPL 3.0<br />
<br />
=== Organization Category ===<br />
<br />
Programming Languages and Development Tools<br />
<br />
=== Technology Tags (the primary specific technologies your organization uses) (up to 5) ===<br />
<br />
C++, hg<br />
<br />
=== Topic Tags (general topics that describe your organization) (up to 5) ===<br />
<br />
mathematics, numerical computation, numerical methods, matlab, scientific computing<br />
<br />
=== Ideas List ===<br />
<br />
https://wiki.octave.org/Summer_of_Code_-_Getting_Started#Suggested_projects<br />
<br />
<br />
=== Description (180 chars) ===<br />
<br />
GNU Octave is a high-level interpreted language, primarily intended for numerical computations.<br />
<br />
=== Description (2000 chars) ===<br />
<br />
GNU Octave is a high-level interpreted language, primarily intended for numerical computations. It provides capabilities for the numerical solution of linear and nonlinear problems and for performing other numerical experiments. It also provides extensive graphics capabilities for data visualization and manipulation. Octave is normally used through its interactive command line interface, but it can also be used to write non-interactive programs. The Octave language is quite similar to Matlab so that most programs are easily portable.<br />
<br />
Octave is continually being upgraded. The current version 6.1 includes a graphical user interface, support for classdef object-oriented programming, and many new and improved functions. Student projects may also involve developing or upgrading Octave Forge packages, which can be loaded to provide additional specialized functions that supplement those provided in Core Octave.<br />
<br />
=== Application instructions (1500 chars) ===<br />
<br />
(Markdown for links)<br />
<br />
<code><br />
<br />
Post on our [mailing list](https://lists.gnu.org/mailman/listinfo/octave-maintainers) or chat on [IRC](https://webchat.freenode.net/?channels=#octave) or [Discourse](https://octave.discourse.group/) to get feedback on your ideas and help with any questions.<br />
<br />
Familiarize yourself with using and building Octave, and with any other skills needed to carry out your proposed project. Demonstrate this familiarity by contributing [bug fixes](https://savannah.gnu.org/bugs/?group=octave) or [patches](https://savannah.gnu.org/patch/?group=octave) before the end of the application period.<br />
<br />
Complete your GSoC application as per Google guidelines.<br />
<br />
For more details, please see the [Octave Wiki](https://wiki.octave.org/Summer_of_Code_-_Getting_Started).<br />
<br />
</code><br />
<br />
=== Proposal Tags (for applicants to use) (up to 10) ===<br />
<br />
Numerical, Infrastructure, Octave Forge, Image analysis, Machine learning, GUI, Graphics, New feature, Performance, Matlab compatibility<br />
<br />
=== Contact methods ===<br />
<br />
Chat: https://octave.discourse.group/<br />
<br />
Mailing list: https://lists.gnu.org/mailman/listinfo/octave-maintainers<br />
<br />
General Email: octave-maintainers@gnu.org<br />
<br />
Blog: https://planet.octave.org/<br />
<br />
[[Category:Summer of Code]]<br />
[[Category:2022]]</div>Nirhttps://wiki.octave.org/wiki/index.php?title=GSoC_2022_application&diff=14190GSoC 2022 application2022-02-08T16:21:54Z<p>Nir: Copied 2021 page</p>
<hr />
<div>_NOTOC__<br />
<br />
Octave's application for GSoC 2022.<br />
<br />
=== Organization name ===<br />
<br />
GNU Octave<br />
<br />
=== OSI approved license? ===<br />
<br />
Yes<br />
<br />
=== Why does your org want to participate in Google Summer of Code? (1000 chars) ===<br />
<br />
We hope to establish collaborations with talented new contributors. We also want to raise awareness of Octave in the free software community.<br />
<br />
Google Summer of Code represents a unique opportunity to bring new perspectives to the Octave community. As a somewhat older project, we benefit from having new and younger contributors among our developers. We have been able to retain several GSoC participants as contributors to the Octave project and we hope to continue this in the future by engaging effectively with students during both the application and mentoring processes, setting clear standards for what is required for acceptance, and maintaining those standards throughout the project.<br />
<br />
=== What would your org consider to be a successful summer? (500 chars) ===<br />
<br />
We would consider a summer successful if we selected promising students, provided adequate mentor supervision, developed desired features in Octave, and facilitated a satisfying experience for the students and mentors. We are more interested in the quality of interactions and contributions than in quantity, although, all else being equal, we would be happy to have more talented students join us.<br />
<br />
<br />
=== How many potential mentors have agreed to mentor this year? ===<br />
<br />
11-15<br />
<br />
=== How will you keep mentors engaged with their students? (1000 chars) ===<br />
<br />
We will select mentors with proven involvement in Octave and free software and align project topics with the priorities of the core developer team. The vast majority of our mentors have been involved in Octave development for several years, and new mentors will be paired with more experienced ones.<br />
<br />
Each project will include at least one core Octave developer as mentor. These are proven, veteran members of the project who are familiar with the code base and with engaging the maintainer and user community. GNU Octave is a project with applications in very diverse domains, so each project should also include a mentor with expertise in the relevant field.<br />
<br />
=== How will you help your students stay on schedule to complete their projects? (1000 chars) ===<br />
<br />
Previous contributions to Octave are a condition for acceptance. In this way, we hope to select students who are familiar with the codebase and able to start their project quickly.<br />
<br />
A tentative project timeline is required as part of the application, and is checked by mentors for realism during the applicant evaluation process. Once a student is selected, the mentor will work with them to come up with a more detailed timeline, including clear expectations for progress by the midterm and final evaluation periods.<br />
<br />
During the summer, mentors will check with students at least weekly to make sure they are staying on schedule and help with any obstacles that might arise. Students are also expected to regularly update their mentors and the Octave maintainers community on their progress via e-mails and blog posts.<br />
<br />
Overall, the vast majority of previous SoC students have finished successfully, making substantive contributions to Octave that have been integrated into our codebase.<br />
<br />
=== How will you get your students involved in your community during GSoC? (1000 chars) ===<br />
<br />
Students will be urged to participate in our IRC channel and mailing list. We will set clear expectations on the minimum frequency of email progress updates, typically every two to three days. Students will also set up a blog for longer, weekly, updates which is aggregated at http://planet.octave.org<br />
<br />
Everything should be completely open. Almost all interactions with the student should be public, e.g. contacting the mentor should happen in the public IRC channel or copy the maintainers mailing list.<br />
<br />
Finally, we organize an annual developers' summit, OctConf, and have in previous years provided support for GSoC students to attend and present. In the past year, we have also held monthly online developer meetings to discuss Octave's direction and future activities, to which GSoC students would be invited. Such meetings strengthen relationships between community members and the new students.<br />
<br />
=== How will you keep students involved with your community after GSoC? (1000 chars) ===<br />
<br />
We will typically merge their code into our codebase during or soon after the summer. GNU Octave is a project with many tester-users who give constant feedback on new features and report bugs. As participants in the mailing lists and bug tracker, students get the feeling of doing something that is useful to the community from the very start.<br />
<br />
Many of our GSoC students use Octave during the academic year or in their professional careers. As such, they are prone to stay involved with its development, even if at a lower level than during the summer.<br />
<br />
A number of GSoC alumni have continued making regular contributions to GNU Octave, including volunteering to serve as GSoC mentors, and many remain available to help with any problems related to the code they wrote for the project.<br />
<br />
<br />
<br />
=== Has your org been accepted as a mentoring org in Google Summer of Code before? ===<br />
<br />
Yes.<br />
<br />
=== How many students did you org accept for 2020? ===<br />
<br />
1<br />
<br />
=== How many of your org's 2020 students have been active in the community in the past 60 days? ===<br />
<br />
0<br />
<br />
=== For each year your organization has participated, provide the counts of successful and total students. ===<br />
<br />
2020 1/1<br />
2019 0/0<br />
2018 3/3<br />
2017 4/4<br />
2016 5/5<br />
2014 3/3<br />
<br />
We have a nice trajectory mentoring projects since 2011 (both as an independent organization and as part of GNU). [http://wiki.octave.org/Summer_of_Code This page] lists the successful projects that have been executed under our mentoring.<br />
<br />
=== If your org has applied for GSoC before but not been accepted, select the years === <br />
<br />
2012, 2013, 2015<br />
<br />
=== What year was your project started? ===<br />
<br />
1992<br />
<br />
=== Where does your source code live? === <br />
<br />
http://hg.savannah.gnu.org/hgweb/octave<br />
<br />
=== Is your organization part of any government? === <br />
<br />
No<br />
<br />
=== Website URL ===<br />
<br />
http://www.octave.org<br />
<br />
=== Tagline (80 characters) ===<br />
<br />
Free Your Numbers<br />
<br />
=== Logo (Must be a 24-bit PNG, minimum height 256 pixels.) ===<br />
<br />
https://upload.wikimedia.org/wikipedia/commons/thumb/6/6a/Gnu-octave-logo.svg/283px-Gnu-octave-logo.svg.png (or generate 256x256 PNG from http://hg.savannah.gnu.org/hgweb/octave/raw-file/155d8e90ee1f/doc/icons/octave-logo.svg with <code>inkscape -z -e octave-logo.png -w 256 -h 256 octave-logo.svg</code>)<br />
<br />
=== Primary License ===<br />
<br />
GPL 3.0<br />
<br />
=== Organization Category ===<br />
<br />
Programming Languages and Development Tools<br />
<br />
=== Technology Tags (the primary specific technologies your organization uses) (up to 5) ===<br />
<br />
C++, hg<br />
<br />
=== Topic Tags (general topics that describe your organization) (up to 5) ===<br />
<br />
mathematics, numerical computation, numerical methods, matlab, scientific computing<br />
<br />
=== Ideas List ===<br />
<br />
https://wiki.octave.org/Summer_of_Code_-_Getting_Started#Suggested_projects<br />
<br />
<br />
=== Description (180 chars) ===<br />
<br />
GNU Octave is a high-level interpreted language, primarily intended for numerical computations.<br />
<br />
=== Description (2000 chars) ===<br />
<br />
GNU Octave is a high-level interpreted language, primarily intended for numerical computations. It provides capabilities for the numerical solution of linear and nonlinear problems and for performing other numerical experiments. It also provides extensive graphics capabilities for data visualization and manipulation. Octave is normally used through its interactive command line interface, but it can also be used to write non-interactive programs. The Octave language is quite similar to Matlab so that most programs are easily portable.<br />
<br />
Octave is continually being upgraded. The current version 6.1 includes a graphical user interface, support for classdef object-oriented programming, and many new and improved functions. Student projects may also involve developing or upgrading Octave Forge packages, which can be loaded to provide additional specialized functions that supplement those provided in Core Octave.<br />
<br />
=== Application instructions (1500 chars) ===<br />
<br />
(Markdown for links)<br />
<br />
<code><br />
<br />
Post on our [mailing list](https://lists.gnu.org/mailman/listinfo/octave-maintainers) or chat on [IRC](https://webchat.freenode.net/?channels=#octave) or [Discourse](https://octave.discourse.group/) to get feedback on your ideas and help with any questions.<br />
<br />
Familiarize yourself with using and building Octave, and with any other skills needed to carry out your proposed project. Demonstrate this familiarity by contributing [bug fixes](https://savannah.gnu.org/bugs/?group=octave) or [patches](https://savannah.gnu.org/patch/?group=octave) before the end of the application period.<br />
<br />
Complete your GSoC application as per Google guidelines.<br />
<br />
For more details, please see the [Octave Wiki](https://wiki.octave.org/Summer_of_Code_-_Getting_Started).<br />
<br />
</code><br />
<br />
=== Proposal Tags (for applicants to use) (up to 10) ===<br />
<br />
Numerical, Infrastructure, Octave Forge, Image analysis, Machine learning, GUI, Graphics, New feature, Performance, Matlab compatibility<br />
<br />
=== Contact methods ===<br />
<br />
Chat: https://octave.discourse.group/<br />
<br />
Mailing list: https://lists.gnu.org/mailman/listinfo/octave-maintainers<br />
<br />
General Email: octave-maintainers@gnu.org<br />
<br />
Blog: https://planet.octave.org/<br />
<br />
[[Category:Summer of Code]]<br />
[[Category:2022]]</div>Nirhttps://wiki.octave.org/wiki/index.php?title=Statistics_package&diff=14095Statistics package2021-12-27T02:49:27Z<p>Nir: update status</p>
<hr />
<div>The {{Forge|statistics|statistics package}} is part of the [[Octave Forge]] project.<br />
<br />
== Core package ==<br />
<br />
We need to decide what to do with the functions in the existing Forge package when they are not implemented or have been removed from the corresponding Matlab Toolbox:<br />
<br />
=== To be decided ===<br />
<br />
{| class="wikitable"<br />
! function<br />
! decision/notes<br />
|-<br />
|anderson_darling_cdf<br />
|<br />
|-<br />
|cl_multinom<br />
|<br />
|-<br />
|dcov<br />
|<br />
|-<br />
| gevfit_lmom<br />
|<br />
|-<br />
| iwishpdf<br />
|<br />
|-<br />
| jsucdf<br />
|<br />
|-<br />
|jsupdf<br />
|<br />
|-<br />
|monotone_smooth<br />
|<br />
|-<br />
|normalise_distribution<br />
|<br />
|-<br />
|princomp<br />
|matlab says that the function has been removed but likely is a lie. We should keep it too.<br />
|-<br />
|qrandn<br />
|<br />
|-<br />
|runstest<br />
|<br />
|-<br />
|sigma_pts<br />
|not yet released<br />
|-<br />
|violin<br />
|<br />
|-<br />
|vmpdf<br />
|<br />
|-<br />
|vmrnd<br />
|<br />
|-<br />
|wishpdf<br />
|<br />
|}<br />
<br />
=== Matlab incompatible ===<br />
<br />
These functions have the same name as Matlab functions but have a different interface<br />
<br />
* boxplot<br />
* gpcdf<br />
* gpinv<br />
* gppdf<br />
* gprnd<br />
<br />
=== Can be reused in other functions ===<br />
<br />
{| class="wikitable"<br />
!forge function<br />
!matlab counterpart<br />
|-<br />
|anderson_darling_test<br />
|adtest<br />
|-<br />
|bbscdf<br />
|BirnbaumSaundersDistribution class<br />
|-<br />
|bbsinv<br />
|BirnbaumSaundersDistribution class<br />
|-<br />
|bbspdf<br />
|BirnbaumSaundersDistribution class<br />
|-<br />
|bbsrnd<br />
|BirnbaumSaundersDistribution class<br />
|-<br />
|binotest<br />
|binofit<br />
|-<br />
|burrcdf<br />
|BurrDistribution class<br />
|-<br />
|burrinv<br />
|BurrDistribution class<br />
|-<br />
|burrpdf<br />
|BurrDistribution class<br />
|-<br />
|burrrnd<br />
|BurrDistribution class<br />
|-<br />
|nakacdf<br />
|NakagamiDistribution class<br />
|-<br />
|nakainv<br />
|NakagamiDistribution class<br />
|-<br />
|nakapdf<br />
|NakagamiDistribution class<br />
|-<br />
|nakarnd - should be used to implement the<br />
|NakagamiDistribution class<br />
|-<br />
|regress_gp<br />
|RegressionGP class<br />
|-<br />
|repanova<br />
|RepeatedMeasuresModel.ranova<br />
|-<br />
|tricdf<br />
|TriangularDistribution class<br />
|-<br />
|triinv<br />
|TriangularDistribution class<br />
|-<br />
|tripdf<br />
|TriangularDistribution class<br />
|-<br />
|trirnd<br />
|TriangularDistribution class<br />
|-<br />
|logistic_cdf<br />
|LogisticDistribution class<br />
|-<br />
|logistic_inv<br />
|LogisticDistribution class<br />
|-<br />
|logistic_pdf<br />
|LogisticDistribution class<br />
|-<br />
|logistic_rnd<br />
|LogisticDistribution class<br />
|-<br />
|stdnormal_cdf<br />
|NormalDistribution class<br />
|-<br />
|stdnormal_inv<br />
|NormalDistribution class<br />
|-<br />
|stdnormal_pdf<br />
|NormalDistribution class<br />
|-<br />
|stdnormal_rnd<br />
|NormalDistribution class<br />
|-<br />
|anova<br />
|anova method in different *Model classes<br />
|-<br />
|manova<br />
|manova methods in different *Model classes<br />
|-<br />
|bartlett_test<br />
|barttest<br />
|-<br />
|kolmogorov_smirnov_test<br />
|ktest<br />
|-<br />
|kolmogorov_smirnov_test_2<br />
|ktest2<br />
|-<br />
|kruskal_wallis_test<br />
|kruskalwallis<br />
|}<br />
<br />
=== Ready to go ===<br />
<br />
These functions seem to be Matlab compatible<br />
<br />
<div style="column-count:4;-moz-column-count:4;-webkit-column-count:4"><br />
* anovan<br />
* betastat<br />
* binostat<br />
* binotest<br />
* canoncorr<br />
* caseread<br />
* casewrite<br />
* cdf<br />
* chi2stat<br />
* cmdscale<br />
* combnk<br />
* copulacdf<br />
* copulapdf<br />
* copularnd<br />
* crossval<br />
* @cvpartition<br />
* dendrogram<br />
* expstat<br />
* ff2n<br />
* fitgmdist<br />
* fstat<br />
* fullfact<br />
* gamfit<br />
* gamlike<br />
* gamstat<br />
* geomean<br />
* geostat<br />
* gevcdf<br />
* gevfit<br />
* gevinv<br />
* gevlike<br />
* gevpdf<br />
* gevrnd<br />
* gevstat<br />
* gmdistribution<br />
* grp2idx<br />
* harmmean<br />
* hist3<br />
* histfit<br />
* hmmestimate<br />
* hmmgenerate<br />
* hmmviterbi<br />
* hygestat<br />
* iwishrnd<br />
* jackknife<br />
* kmeans<br />
* linkage<br />
* lognstat<br />
* mad<br />
* mahal<br />
* mnpdf<br />
* mnrnd<br />
* mvncdf<br />
* mvnpdf<br />
* mvnrnd<br />
* mvtcdf<br />
* mvtpdf<br />
* mvtrnd<br />
* nanmax<br />
* nanmean<br />
* nanmedian<br />
* nanmin<br />
* nanstd<br />
* nansum<br />
* nanvar<br />
* nbinstat<br />
* normplot<br />
* normstat<br />
* pcacov<br />
* pcares<br />
* pdf<br />
* pdist2<br />
* pdist<br />
* plsregress<br />
* poisstat<br />
* random<br />
* randsample<br />
* raylcdf<br />
* raylinv<br />
* raylpdf<br />
* raylrnd<br />
* raylstat<br />
* regress<br />
* signtest<br />
* squareform<br />
* stepwisefit<br />
* tabulate<br />
* tblread<br />
* tblwrite<br />
* trimmean<br />
* tstat<br />
* ttest2<br />
* ttest<br />
* unidstat<br />
* unifstat<br />
* vartest2<br />
* vartest<br />
* wblstat<br />
* wishrnd<br />
* ztest<br />
* prctile<br />
* qqplot<br />
* betacdf<br />
* betainv<br />
* betapdf<br />
* betarnd<br />
* binocdf<br />
* binoinv<br />
* binopdf<br />
* binornd<br />
* chi2cdf<br />
* chi2inv<br />
* chi2pdf<br />
* chi2rnd<br />
* expcdf<br />
* expinv<br />
* exppdf<br />
* exprnd<br />
* fcdf<br />
* finv<br />
* fpdf<br />
* frnd<br />
* gamcdf<br />
* gaminv<br />
* gampdf<br />
* gamrnd<br />
* geocdf<br />
* geoinv<br />
* geopdf<br />
* geornd<br />
* hygecdf<br />
* hygeinv<br />
* hygepdf<br />
* hygernd<br />
* logncdf<br />
* logninv<br />
* lognpdf<br />
* lognrnd<br />
* nbincdf<br />
* nbininv<br />
* nbinpdf<br />
* nbinrnd<br />
* normcdf<br />
* norminv<br />
* normpdf<br />
* normrnd<br />
* poisscdf<br />
* poissinv<br />
* poisspdf<br />
* poissrnd<br />
* tcdf<br />
* tinv<br />
* tpdf<br />
* trnd<br />
* unidcdf<br />
* unidinv<br />
* unidpdf<br />
* unidrnd<br />
* unifcdf<br />
* unifinv<br />
* unifpdf<br />
* unifrnd<br />
* wblcdf<br />
* wblinv<br />
* wblpdf<br />
* wblrnd<br />
</div><br />
<br />
=== In external packages ===<br />
<br />
bootci, bootstrp are implemented in the [https://gnu-octave.github.io/packages/statistics-bootstrap statistics-bootstrap] package<br />
<br />
== Development ==<br />
<br />
Follows an incomplete list of stuff missing in the statistics package to be matlab compatible. Bugs are not listed here, [https://savannah.gnu.org/bugs/?func=search&group=octave search] and [https://savannah.gnu.org/bugs/?func=additem&group=octave report] them on the bug tracker instead.<br />
<br />
{{Note|this entire section is about the current development version. If a Matlab function is missing from the list and does not appear on the current release of the package, confirm that is also missing in the [https://sourceforge.net/p/octave/statistics/ development sources] before adding it.}}<br />
<br />
=== Missing functions ===<br />
<div style="column-count:4;-moz-column-count:4;-webkit-column-count:4"><br />
* ClassificationBaggedEnsemble<br />
* ClassificationDiscriminant<br />
* ClassificationDiscriminant.fit<br />
* ClassificationEnsemble<br />
* ClassificationKNN<br />
* ClassificationKNN.fit<br />
* ClassificationPartitionedEnsemble<br />
* ClassificationPartitionedModel<br />
* ClassificationTree<br />
* ClassificationTree.fit<br />
* CompactClassificationDiscriminant<br />
* CompactClassificationEnsemble<br />
* CompactClassificationTree<br />
* CompactRegressionEnsemble<br />
* CompactRegressionTree<br />
* CompactTreeBagger<br />
* ExhaustiveSearcher<br />
* GeneralizedLinearModel<br />
* GeneralizedLinearModel.fit<br />
* GeneralizedLinearModel.stepwise<br />
* KDTreeSearcher<br />
* LinearMixedModel<br />
* LinearMixedModel.fit<br />
* LinearMixedModel.fitmatrix<br />
* LinearModel<br />
* LinearModel.fit<br />
* LinearModel.stepwise<br />
* NaiveBayes<br />
* NaiveBayes.fit<br />
* NonLinearModel<br />
* NonLinearModel.fit<br />
* ProbDistUnivKernel<br />
* ProbDistUnivParam<br />
* RegressionBaggedEnsemble<br />
* RegressionEnsemble<br />
* RegressionPartitionedEnsemble<br />
* RegressionPartitionedModel<br />
* RegressionTree<br />
* RegressionTree.fit<br />
* TreeBagger<br />
* addTerms<br />
* addedvarplot<br />
* addlevels<br />
* adtest<br />
* andrewsplot<br />
* anova2<br />
* ansaribradley<br />
* aoctool<br />
* barttest<br />
* bbdesign<br />
* betafit<br />
* betalike<br />
* binofit<br />
* biplot<br />
* candexch<br />
* candgen<br />
* capability<br />
* capaplot<br />
* ccdesign<br />
* cdfplot<br />
* cell2dataset<br />
* chi2gof<br />
* cholcov<br />
* classify<br />
* classregtree<br />
* clustering.evaluation.CalinskiHarabaszEvaluation<br />
* clustering.evaluation.DaviesBouldinEvaluation<br />
* clustering.evaluation.GapEvaluation<br />
* clustering.evaluation.SilhouetteEvaluation<br />
* coefCI<br />
* coefTest<br />
* compact<br />
* compare<br />
* controlrules<br />
* copulafit<br />
* copulaparam<br />
* copulastat<br />
* cordexch<br />
* corrcov<br />
* covarianceParameters<br />
* coxphfit<br />
* createns<br />
* crosstab<br />
* dataset<br />
* dataset2cell<br />
* dataset2struct<br />
* dataset2table<br />
* datasetfun<br />
* daugment<br />
* dcovary<br />
* designMatrix<br />
* devianceTest<br />
* dfittool<br />
* disttool<br />
* droplevels<br />
* dummyvar<br />
* dwtest<br />
* ecdf<br />
* ecdfhist<br />
* evcdf<br />
* evfit<br />
* evinv<br />
* evlike<br />
* evpdf<br />
* evrnd<br />
* evstat<br />
* export<br />
* factoran<br />
* fitdist<br />
* fitensemble<br />
* fitglm<br />
* fitlm<br />
* fitlme<br />
* fitlmematrix<br />
* fitnlm<br />
* fitted<br />
* fixedEffects<br />
* fracfact<br />
* fracfactgen<br />
* friedman<br />
* fsurfht<br />
* gagerr<br />
* getlabels<br />
* getlevels<br />
* gline<br />
* glmfit<br />
* glmval<br />
* glyphplot<br />
* gname<br />
* gpcdf<br />
* gpfit<br />
* gpinv<br />
* gplike<br />
* gplotmatrix<br />
* gppdf<br />
* gprnd<br />
* gpstat<br />
* grpstats<br />
* haltonset<br />
* hmmdecode<br />
* hmmtrain<br />
* hougen<br />
* icdf<br />
* interactionplot<br />
* invpred<br />
* islevel<br />
* isundefined<br />
* jbtest<br />
* johnsrnd<br />
* join<br />
* knnsearch<br />
* ksdensity<br />
* kstest<br />
* kstest2<br />
* labels<br />
* lasso<br />
* lassoPlot<br />
* lassoglm<br />
* levelcounts<br />
* leverage<br />
* lhsdesign<br />
* lhsnorm<br />
* lillietest<br />
* linhyptest<br />
* lognfit<br />
* lognlike<br />
* lsline<br />
* mahal<br />
* maineffectsplot<br />
* makedist<br />
* manova1<br />
* manovacluster<br />
* mat2dataset<br />
* mdscale<br />
* mergelevels<br />
* mle<br />
* mlecov<br />
* mnrfit<br />
* mnrval<br />
* multcompare<br />
* multivarichart<br />
* mvregress<br />
* mvregresslike<br />
* nancov<br />
* nbinfit<br />
* ncfcdf<br />
* ncfinv<br />
* ncfpdf<br />
* ncfrnd<br />
* ncfstat<br />
* nctcdf<br />
* nctinv<br />
* nctpdf<br />
* nctrnd<br />
* nctstat<br />
* ncx2cdf<br />
* ncx2inv<br />
* ncx2rnd<br />
* ncx2stat<br />
* negloglik<br />
* nlinfit<br />
* nlintool<br />
* nlmefit<br />
* nlmefitsa<br />
* nlparci<br />
* nlpredci<br />
* nnmf<br />
* nominal<br />
* normfit<br />
* normlike<br />
* normspec<br />
* ordinal<br />
* parallelcoords<br />
* paramci<br />
* paretotails<br />
* partialcorr<br />
* partialcorri<br />
* pdf<br />
* pearsrnd<br />
* perfcurve<br />
* plotAdded<br />
* plotAdjustedResponse<br />
* plotDiagnostics<br />
* plotEffects<br />
* plotInteraction<br />
* plotResiduals<br />
* plotSlice<br />
* poissfit<br />
* polytool<br />
* ppca<br />
* predict<br />
* prob.BetaDistribution<br />
* prob.BinomialDistribution<br />
* prob.BirnbaumSaundersDistribution<br />
* prob.BurrDistribution<br />
* prob.ExponentialDistribution<br />
* prob.ExtremeValueDistribution<br />
* prob.GammaDistribution<br />
* prob.GeneralizedExtremeValueDistribution<br />
* prob.GeneralizedParetoDistribution<br />
* prob.InverseGaussianDistribution<br />
* prob.KernelDistribution<br />
* prob.LogisticDistribution<br />
* prob.LoglogisticDistribution<br />
* prob.LognormalDistribution<br />
* prob.MultinomialDistribution<br />
* prob.NakagamiDistribution<br />
* prob.NegativeBinomialDistribution<br />
* prob.NormalDistribution<br />
* prob.PiecewiseLinearDistribution<br />
* prob.PoissonDistribution<br />
* prob.RayleighDistribution<br />
* prob.RicianDistribution<br />
* prob.TriangularDistribution<br />
* prob.UniformDistribution<br />
* prob.WeibullDistribution<br />
* prob.tLocationScaleDistribution<br />
* probplot<br />
* procrustes<br />
* proflik<br />
* qrandset<br />
* qrandstream<br />
* randomEffects<br />
* randtool<br />
* rangesearch<br />
* ranksum<br />
* raylfit<br />
* rcoplot<br />
* refcurve<br />
* refline<br />
* regstats<br />
* relieff<br />
* removeTerms<br />
* residuals<br />
* response<br />
* ridge<br />
* robustdemo<br />
* robustfit<br />
* rotatefactors<br />
* rowexch<br />
* rsmdemo<br />
* rstool<br />
* sampsizepwr<br />
* scatterhist<br />
* sequentialfs<br />
* setlabels<br />
* signrank<br />
* sobolset<br />
* statget<br />
* statset<br />
* step<br />
* stepwise<br />
* stepwiseglm<br />
* stepwiselm<br />
* struct2dataset<br />
* surfht<br />
* svmclassify<br />
* svmtrain<br />
* table2dataset<br />
* tabulate<br />
* tdfread<br />
* tiedrank<br />
* truncate<br />
* unifit<br />
* vartestn<br />
* wblfit<br />
* wbllike<br />
* x2fx<br />
* xptread<br />
</div><br />
<br />
=== Missing options ===<br />
<br />
*explike: censoring and frequency aren't yet implemented<br />
<br />
[[Category:Octave Forge]]<br />
[[Category:Missing functions]]</div>Nirhttps://wiki.octave.org/wiki/index.php?title=Statistics_package&diff=13879Statistics package2021-08-12T22:46:01Z<p>Nir: /* Development */ updated expfit and explike status</p>
<hr />
<div>The {{Forge|statistics|statistics package}} is part of the [[Octave Forge]] project.<br />
<br />
== Core package ==<br />
<br />
We need to decide what to do with the functions in the existing Forge package when they are not implemented or have been removed from the corresponding Matlab Toolbox:<br />
<br />
=== To be decided ===<br />
<br />
{| class="wikitable"<br />
! function<br />
! decision/notes<br />
|-<br />
|anderson_darling_cdf<br />
|<br />
|-<br />
|cl_multinom<br />
|<br />
|-<br />
|dcov<br />
|<br />
|-<br />
| gevfit_lmom<br />
|<br />
|-<br />
| iwishpdf<br />
|<br />
|-<br />
| jsucdf<br />
|<br />
|-<br />
|jsupdf<br />
|<br />
|-<br />
|monotone_smooth<br />
|<br />
|-<br />
|normalise_distribution<br />
|<br />
|-<br />
|princomp<br />
|matlab says that the function has been removed but likely is a lie. We should keep it too.<br />
|-<br />
|qrandn<br />
|<br />
|-<br />
|runstest<br />
|<br />
|-<br />
|sigma_pts<br />
|not yet released<br />
|-<br />
|violin<br />
|<br />
|-<br />
|vmpdf<br />
|<br />
|-<br />
|vmrnd<br />
|<br />
|-<br />
|wishpdf<br />
|<br />
|}<br />
<br />
=== Matlab incompatible ===<br />
<br />
These functions have the same name as Matlab functions but have a different interface<br />
<br />
* boxplot<br />
* gpcdf<br />
* gpinv<br />
* gppdf<br />
* gprnd<br />
<br />
=== Can be reused in other functions ===<br />
<br />
{| class="wikitable"<br />
!forge function<br />
!matlab counterpart<br />
|-<br />
|anderson_darling_test<br />
|adtest<br />
|-<br />
|bbscdf<br />
|BirnbaumSaundersDistribution class<br />
|-<br />
|bbsinv<br />
|BirnbaumSaundersDistribution class<br />
|-<br />
|bbspdf<br />
|BirnbaumSaundersDistribution class<br />
|-<br />
|bbsrnd<br />
|BirnbaumSaundersDistribution class<br />
|-<br />
|binotest<br />
|binofit<br />
|-<br />
|burrcdf<br />
|BurrDistribution class<br />
|-<br />
|burrinv<br />
|BurrDistribution class<br />
|-<br />
|burrpdf<br />
|BurrDistribution class<br />
|-<br />
|burrrnd<br />
|BurrDistribution class<br />
|-<br />
|nakacdf<br />
|NakagamiDistribution class<br />
|-<br />
|nakainv<br />
|NakagamiDistribution class<br />
|-<br />
|nakapdf<br />
|NakagamiDistribution class<br />
|-<br />
|nakarnd - should be used to implement the<br />
|NakagamiDistribution class<br />
|-<br />
|regress_gp<br />
|RegressionGP class<br />
|-<br />
|repanova<br />
|RepeatedMeasuresModel.ranova<br />
|-<br />
|tricdf<br />
|TriangularDistribution class<br />
|-<br />
|triinv<br />
|TriangularDistribution class<br />
|-<br />
|tripdf<br />
|TriangularDistribution class<br />
|-<br />
|trirnd<br />
|TriangularDistribution class<br />
|-<br />
|logistic_cdf<br />
|LogisticDistribution class<br />
|-<br />
|logistic_inv<br />
|LogisticDistribution class<br />
|-<br />
|logistic_pdf<br />
|LogisticDistribution class<br />
|-<br />
|logistic_rnd<br />
|LogisticDistribution class<br />
|-<br />
|stdnormal_cdf<br />
|NormalDistribution class<br />
|-<br />
|stdnormal_inv<br />
|NormalDistribution class<br />
|-<br />
|stdnormal_pdf<br />
|NormalDistribution class<br />
|-<br />
|stdnormal_rnd<br />
|NormalDistribution class<br />
|-<br />
|anova<br />
|anova method in different *Model classes<br />
|-<br />
|manova<br />
|manova methods in different *Model classes<br />
|-<br />
|bartlett_test<br />
|barttest<br />
|-<br />
|kolmogorov_smirnov_test<br />
|ktest<br />
|-<br />
|kolmogorov_smirnov_test_2<br />
|ktest2<br />
|-<br />
|kruskal_wallis_test<br />
|kruskalwallis<br />
|}<br />
<br />
=== Ready to go ===<br />
<br />
These functions seem to be matlab compatible<br />
<br />
<div style="column-count:4;-moz-column-count:4;-webkit-column-count:4"><br />
* anovan<br />
* betastat<br />
* binostat<br />
* binotest<br />
* canoncorr<br />
* caseread<br />
* casewrite<br />
* cdf<br />
* chi2stat<br />
* cmdscale<br />
* combnk<br />
* copulacdf<br />
* copulapdf<br />
* copularnd<br />
* crossval<br />
* @cvpartition<br />
* dendrogram<br />
* expstat<br />
* ff2n<br />
* fitgmdist<br />
* fstat<br />
* fullfact<br />
* gamfit<br />
* gamlike<br />
* gamstat<br />
* geomean<br />
* geostat<br />
* gevcdf<br />
* gevfit<br />
* gevinv<br />
* gevlike<br />
* gevpdf<br />
* gevrnd<br />
* gevstat<br />
* gmdistribution<br />
* grp2idx<br />
* harmmean<br />
* hist3<br />
* histfit<br />
* hmmestimate<br />
* hmmgenerate<br />
* hmmviterbi<br />
* hygestat<br />
* iwishrnd<br />
* jackknife<br />
* kmeans<br />
* linkage<br />
* lognstat<br />
* mad<br />
* mahal<br />
* mnpdf<br />
* mnrnd<br />
* mvncdf<br />
* mvnpdf<br />
* mvnrnd<br />
* mvtcdf<br />
* mvtpdf<br />
* mvtrnd<br />
* nanmax<br />
* nanmean<br />
* nanmedian<br />
* nanmin<br />
* nanstd<br />
* nansum<br />
* nanvar<br />
* nbinstat<br />
* normplot<br />
* normstat<br />
* pcacov<br />
* pcares<br />
* pdf<br />
* pdist2<br />
* pdist<br />
* plsregress<br />
* poisstat<br />
* random<br />
* randsample<br />
* raylcdf<br />
* raylinv<br />
* raylpdf<br />
* raylrnd<br />
* raylstat<br />
* regress<br />
* signtest<br />
* squareform<br />
* stepwisefit<br />
* tabulate<br />
* tblread<br />
* tblwrite<br />
* trimmean<br />
* tstat<br />
* ttest2<br />
* ttest<br />
* unidstat<br />
* unifstat<br />
* vartest2<br />
* vartest<br />
* wblstat<br />
* wishrnd<br />
* ztest<br />
* prctile<br />
* qqplot<br />
* betacdf<br />
* betainv<br />
* betapdf<br />
* betarnd<br />
* binocdf<br />
* binoinv<br />
* binopdf<br />
* binornd<br />
* chi2cdf<br />
* chi2inv<br />
* chi2pdf<br />
* chi2rnd<br />
* expcdf<br />
* expinv<br />
* exppdf<br />
* exprnd<br />
* fcdf<br />
* finv<br />
* fpdf<br />
* frnd<br />
* gamcdf<br />
* gaminv<br />
* gampdf<br />
* gamrnd<br />
* geocdf<br />
* geoinv<br />
* geopdf<br />
* geornd<br />
* hygecdf<br />
* hygeinv<br />
* hygepdf<br />
* hygernd<br />
* logncdf<br />
* logninv<br />
* lognpdf<br />
* lognrnd<br />
* nbincdf<br />
* nbininv<br />
* nbinpdf<br />
* nbinrnd<br />
* normcdf<br />
* norminv<br />
* normpdf<br />
* normrnd<br />
* poisscdf<br />
* poissinv<br />
* poisspdf<br />
* poissrnd<br />
* tcdf<br />
* tinv<br />
* tpdf<br />
* trnd<br />
* unidcdf<br />
* unidinv<br />
* unidpdf<br />
* unidrnd<br />
* unifcdf<br />
* unifinv<br />
* unifpdf<br />
* unifrnd<br />
* wblcdf<br />
* wblinv<br />
* wblpdf<br />
* wblrnd<br />
</div><br />
<br />
== Development ==<br />
<br />
Follows an incomplete list of stuff missing in the statistics package to be matlab compatible. Bugs are not listed here, [https://savannah.gnu.org/bugs/?func=search&group=octave search] and [https://savannah.gnu.org/bugs/?func=additem&group=octave report] them on the bug tracker instead.<br />
<br />
{{Note|this entire section is about the current development version. If a Matlab function is missing from the list and does not appear on the current release of the package, confirm that is also missing in the [https://sourceforge.net/p/octave/statistics/ development sources] before adding it.}}<br />
<br />
=== Missing functions ===<br />
<div style="column-count:4;-moz-column-count:4;-webkit-column-count:4"><br />
* ClassificationBaggedEnsemble<br />
* ClassificationDiscriminant<br />
* ClassificationDiscriminant.fit<br />
* ClassificationEnsemble<br />
* ClassificationKNN<br />
* ClassificationKNN.fit<br />
* ClassificationPartitionedEnsemble<br />
* ClassificationPartitionedModel<br />
* ClassificationTree<br />
* ClassificationTree.fit<br />
* CompactClassificationDiscriminant<br />
* CompactClassificationEnsemble<br />
* CompactClassificationTree<br />
* CompactRegressionEnsemble<br />
* CompactRegressionTree<br />
* CompactTreeBagger<br />
* ExhaustiveSearcher<br />
* GeneralizedLinearModel<br />
* GeneralizedLinearModel.fit<br />
* GeneralizedLinearModel.stepwise<br />
* KDTreeSearcher<br />
* LinearMixedModel<br />
* LinearMixedModel.fit<br />
* LinearMixedModel.fitmatrix<br />
* LinearModel<br />
* LinearModel.fit<br />
* LinearModel.stepwise<br />
* NaiveBayes<br />
* NaiveBayes.fit<br />
* NonLinearModel<br />
* NonLinearModel.fit<br />
* ProbDistUnivKernel<br />
* ProbDistUnivParam<br />
* RegressionBaggedEnsemble<br />
* RegressionEnsemble<br />
* RegressionPartitionedEnsemble<br />
* RegressionPartitionedModel<br />
* RegressionTree<br />
* RegressionTree.fit<br />
* TreeBagger<br />
* addTerms<br />
* addedvarplot<br />
* addlevels<br />
* adtest<br />
* andrewsplot<br />
* anova1<br />
* anova2<br />
* ansaribradley<br />
* aoctool<br />
* barttest<br />
* bbdesign<br />
* betafit<br />
* betalike<br />
* binofit<br />
* biplot<br />
* bootci<br />
* bootstrp<br />
* candexch<br />
* candgen<br />
* capability<br />
* capaplot<br />
* ccdesign<br />
* cdfplot<br />
* cell2dataset<br />
* chi2gof<br />
* cholcov<br />
* classify<br />
* classregtree<br />
* cluster<br />
* clusterdata<br />
* clustering.evaluation.CalinskiHarabaszEvaluation<br />
* clustering.evaluation.DaviesBouldinEvaluation<br />
* clustering.evaluation.GapEvaluation<br />
* clustering.evaluation.SilhouetteEvaluation<br />
* coefCI<br />
* coefTest<br />
* compact<br />
* compare<br />
* confusionmat<br />
* controlchart<br />
* controlrules<br />
* cophenet<br />
* copulafit<br />
* copulaparam<br />
* copulastat<br />
* cordexch<br />
* corrcov<br />
* covarianceParameters<br />
* coxphfit<br />
* createns<br />
* crosstab<br />
* datasample<br />
* dataset<br />
* dataset2cell<br />
* dataset2struct<br />
* dataset2table<br />
* datasetfun<br />
* daugment<br />
* dcovary<br />
* designMatrix<br />
* devianceTest<br />
* dfittool<br />
* disttool<br />
* droplevels<br />
* dummyvar<br />
* dwtest<br />
* ecdf<br />
* ecdfhist<br />
* evalclusters<br />
* evcdf<br />
* evfit<br />
* evinv<br />
* evlike<br />
* evpdf<br />
* evrnd<br />
* evstat<br />
* export<br />
* factoran<br />
* fitdist<br />
* fitensemble<br />
* fitglm<br />
* fitlm<br />
* fitlme<br />
* fitlmematrix<br />
* fitnlm<br />
* fitted<br />
* fixedEffects<br />
* fracfact<br />
* fracfactgen<br />
* friedman<br />
* fsurfht<br />
* gagerr<br />
* getlabels<br />
* getlevels<br />
* gline<br />
* glmfit<br />
* glmval<br />
* glyphplot<br />
* gname<br />
* gpcdf<br />
* gpfit<br />
* gpinv<br />
* gplike<br />
* gplotmatrix<br />
* gppdf<br />
* gprnd<br />
* gpstat<br />
* grpstats<br />
* gscatter<br />
* haltonset<br />
* hmmdecode<br />
* hmmtrain<br />
* hougen<br />
* icdf<br />
* inconsistent<br />
* interactionplot<br />
* invpred<br />
* islevel<br />
* ismissing<br />
* isundefined<br />
* jbtest<br />
* johnsrnd<br />
* join<br />
* knnsearch<br />
* kruskalwallis<br />
* ksdensity<br />
* kstest<br />
* kstest2<br />
* labels<br />
* lasso<br />
* lassoPlot<br />
* lassoglm<br />
* levelcounts<br />
* leverage<br />
* lhsdesign<br />
* lhsnorm<br />
* lillietest<br />
* linhyptest<br />
* lognfit<br />
* lognlike<br />
* lsline<br />
* mahal<br />
* maineffectsplot<br />
* makedist<br />
* manova1<br />
* manovacluster<br />
* mat2dataset<br />
* mdscale<br />
* mergelevels<br />
* mhsample<br />
* mle<br />
* mlecov<br />
* mnrfit<br />
* mnrval<br />
* multcompare<br />
* multivarichart<br />
* mvregress<br />
* mvregresslike<br />
* nancov<br />
* nbinfit<br />
* ncfcdf<br />
* ncfinv<br />
* ncfpdf<br />
* ncfrnd<br />
* ncfstat<br />
* nctcdf<br />
* nctinv<br />
* nctpdf<br />
* nctrnd<br />
* nctstat<br />
* ncx2cdf<br />
* ncx2inv<br />
* ncx2pdf<br />
* ncx2rnd<br />
* ncx2stat<br />
* negloglik<br />
* nlinfit<br />
* nlintool<br />
* nlmefit<br />
* nlmefitsa<br />
* nlparci<br />
* nlpredci<br />
* nnmf<br />
* nominal<br />
* normfit<br />
* normlike<br />
* normspec<br />
* optimalleaforder<br />
* ordinal<br />
* parallelcoords<br />
* paramci<br />
* paretotails<br />
* partialcorr<br />
* partialcorri<br />
* pca<br />
* pdf<br />
* pearsrnd<br />
* perfcurve<br />
* plotAdded<br />
* plotAdjustedResponse<br />
* plotDiagnostics<br />
* plotEffects<br />
* plotInteraction<br />
* plotResiduals<br />
* plotSlice<br />
* poissfit<br />
* polytool<br />
* ppca<br />
* predict<br />
* prob.BetaDistribution<br />
* prob.BinomialDistribution<br />
* prob.BirnbaumSaundersDistribution<br />
* prob.BurrDistribution<br />
* prob.ExponentialDistribution<br />
* prob.ExtremeValueDistribution<br />
* prob.GammaDistribution<br />
* prob.GeneralizedExtremeValueDistribution<br />
* prob.GeneralizedParetoDistribution<br />
* prob.InverseGaussianDistribution<br />
* prob.KernelDistribution<br />
* prob.LogisticDistribution<br />
* prob.LoglogisticDistribution<br />
* prob.LognormalDistribution<br />
* prob.MultinomialDistribution<br />
* prob.NakagamiDistribution<br />
* prob.NegativeBinomialDistribution<br />
* prob.NormalDistribution<br />
* prob.PiecewiseLinearDistribution<br />
* prob.PoissonDistribution<br />
* prob.RayleighDistribution<br />
* prob.RicianDistribution<br />
* prob.TriangularDistribution<br />
* prob.UniformDistribution<br />
* prob.WeibullDistribution<br />
* prob.tLocationScaleDistribution<br />
* probplot<br />
* procrustes<br />
* proflik<br />
* qrandset<br />
* qrandstream<br />
* randomEffects<br />
* randtool<br />
* rangesearch<br />
* ranksum<br />
* raylfit<br />
* rcoplot<br />
* refcurve<br />
* refline<br />
* regstats<br />
* relieff<br />
* removeTerms<br />
* residuals<br />
* response<br />
* ridge<br />
* robustdemo<br />
* robustfit<br />
* rotatefactors<br />
* rowexch<br />
* rsmdemo<br />
* rstool<br />
* sampsizepwr<br />
* scatterhist<br />
* sequentialfs<br />
* setlabels<br />
* signrank<br />
* silhouette<br />
* slicesample<br />
* sobolset<br />
* statget<br />
* statset<br />
* step<br />
* stepwise<br />
* stepwiseglm<br />
* stepwiselm<br />
* struct2dataset<br />
* surfht<br />
* svmclassify<br />
* svmtrain<br />
* table2dataset<br />
* tabulate<br />
* tdfread<br />
* tiedrank<br />
* truncate<br />
* unifit<br />
* vartestn<br />
* wblfit<br />
* wbllike<br />
* wblplot<br />
* x2fx<br />
* xptread<br />
</div><br />
<br />
=== Missing options ===<br />
<br />
*explike: censoring and frequency aren't yet implemented<br />
<br />
[[Category:Octave Forge]]<br />
[[Category:Missing functions]]</div>Nirhttps://wiki.octave.org/wiki/index.php?title=Statistics_package&diff=13878Statistics package2021-08-12T22:43:58Z<p>Nir: /* Core package */</p>
<hr />
<div>The {{Forge|statistics|statistics package}} is part of the [[Octave Forge]] project.<br />
<br />
== Core package ==<br />
<br />
We need to decide what to do with the functions in the existing Forge package when they are not implemented or have been removed from the corresponding Matlab Toolbox:<br />
<br />
=== To be decided ===<br />
<br />
{| class="wikitable"<br />
! function<br />
! decision/notes<br />
|-<br />
|anderson_darling_cdf<br />
|<br />
|-<br />
|cl_multinom<br />
|<br />
|-<br />
|dcov<br />
|<br />
|-<br />
| gevfit_lmom<br />
|<br />
|-<br />
| iwishpdf<br />
|<br />
|-<br />
| jsucdf<br />
|<br />
|-<br />
|jsupdf<br />
|<br />
|-<br />
|monotone_smooth<br />
|<br />
|-<br />
|normalise_distribution<br />
|<br />
|-<br />
|princomp<br />
|matlab says that the function has been removed but likely is a lie. We should keep it too.<br />
|-<br />
|qrandn<br />
|<br />
|-<br />
|runstest<br />
|<br />
|-<br />
|sigma_pts<br />
|not yet released<br />
|-<br />
|violin<br />
|<br />
|-<br />
|vmpdf<br />
|<br />
|-<br />
|vmrnd<br />
|<br />
|-<br />
|wishpdf<br />
|<br />
|}<br />
<br />
=== Matlab incompatible ===<br />
<br />
These functions have the same name as Matlab functions but have a different interface<br />
<br />
* boxplot<br />
* gpcdf<br />
* gpinv<br />
* gppdf<br />
* gprnd<br />
<br />
=== Can be reused in other functions ===<br />
<br />
{| class="wikitable"<br />
!forge function<br />
!matlab counterpart<br />
|-<br />
|anderson_darling_test<br />
|adtest<br />
|-<br />
|bbscdf<br />
|BirnbaumSaundersDistribution class<br />
|-<br />
|bbsinv<br />
|BirnbaumSaundersDistribution class<br />
|-<br />
|bbspdf<br />
|BirnbaumSaundersDistribution class<br />
|-<br />
|bbsrnd<br />
|BirnbaumSaundersDistribution class<br />
|-<br />
|binotest<br />
|binofit<br />
|-<br />
|burrcdf<br />
|BurrDistribution class<br />
|-<br />
|burrinv<br />
|BurrDistribution class<br />
|-<br />
|burrpdf<br />
|BurrDistribution class<br />
|-<br />
|burrrnd<br />
|BurrDistribution class<br />
|-<br />
|nakacdf<br />
|NakagamiDistribution class<br />
|-<br />
|nakainv<br />
|NakagamiDistribution class<br />
|-<br />
|nakapdf<br />
|NakagamiDistribution class<br />
|-<br />
|nakarnd - should be used to implement the<br />
|NakagamiDistribution class<br />
|-<br />
|regress_gp<br />
|RegressionGP class<br />
|-<br />
|repanova<br />
|RepeatedMeasuresModel.ranova<br />
|-<br />
|tricdf<br />
|TriangularDistribution class<br />
|-<br />
|triinv<br />
|TriangularDistribution class<br />
|-<br />
|tripdf<br />
|TriangularDistribution class<br />
|-<br />
|trirnd<br />
|TriangularDistribution class<br />
|-<br />
|logistic_cdf<br />
|LogisticDistribution class<br />
|-<br />
|logistic_inv<br />
|LogisticDistribution class<br />
|-<br />
|logistic_pdf<br />
|LogisticDistribution class<br />
|-<br />
|logistic_rnd<br />
|LogisticDistribution class<br />
|-<br />
|stdnormal_cdf<br />
|NormalDistribution class<br />
|-<br />
|stdnormal_inv<br />
|NormalDistribution class<br />
|-<br />
|stdnormal_pdf<br />
|NormalDistribution class<br />
|-<br />
|stdnormal_rnd<br />
|NormalDistribution class<br />
|-<br />
|anova<br />
|anova method in different *Model classes<br />
|-<br />
|manova<br />
|manova methods in different *Model classes<br />
|-<br />
|bartlett_test<br />
|barttest<br />
|-<br />
|kolmogorov_smirnov_test<br />
|ktest<br />
|-<br />
|kolmogorov_smirnov_test_2<br />
|ktest2<br />
|-<br />
|kruskal_wallis_test<br />
|kruskalwallis<br />
|}<br />
<br />
=== Ready to go ===<br />
<br />
These functions seem to be matlab compatible<br />
<br />
<div style="column-count:4;-moz-column-count:4;-webkit-column-count:4"><br />
* anovan<br />
* betastat<br />
* binostat<br />
* binotest<br />
* canoncorr<br />
* caseread<br />
* casewrite<br />
* cdf<br />
* chi2stat<br />
* cmdscale<br />
* combnk<br />
* copulacdf<br />
* copulapdf<br />
* copularnd<br />
* crossval<br />
* @cvpartition<br />
* dendrogram<br />
* expstat<br />
* ff2n<br />
* fitgmdist<br />
* fstat<br />
* fullfact<br />
* gamfit<br />
* gamlike<br />
* gamstat<br />
* geomean<br />
* geostat<br />
* gevcdf<br />
* gevfit<br />
* gevinv<br />
* gevlike<br />
* gevpdf<br />
* gevrnd<br />
* gevstat<br />
* gmdistribution<br />
* grp2idx<br />
* harmmean<br />
* hist3<br />
* histfit<br />
* hmmestimate<br />
* hmmgenerate<br />
* hmmviterbi<br />
* hygestat<br />
* iwishrnd<br />
* jackknife<br />
* kmeans<br />
* linkage<br />
* lognstat<br />
* mad<br />
* mahal<br />
* mnpdf<br />
* mnrnd<br />
* mvncdf<br />
* mvnpdf<br />
* mvnrnd<br />
* mvtcdf<br />
* mvtpdf<br />
* mvtrnd<br />
* nanmax<br />
* nanmean<br />
* nanmedian<br />
* nanmin<br />
* nanstd<br />
* nansum<br />
* nanvar<br />
* nbinstat<br />
* normplot<br />
* normstat<br />
* pcacov<br />
* pcares<br />
* pdf<br />
* pdist2<br />
* pdist<br />
* plsregress<br />
* poisstat<br />
* random<br />
* randsample<br />
* raylcdf<br />
* raylinv<br />
* raylpdf<br />
* raylrnd<br />
* raylstat<br />
* regress<br />
* signtest<br />
* squareform<br />
* stepwisefit<br />
* tabulate<br />
* tblread<br />
* tblwrite<br />
* trimmean<br />
* tstat<br />
* ttest2<br />
* ttest<br />
* unidstat<br />
* unifstat<br />
* vartest2<br />
* vartest<br />
* wblstat<br />
* wishrnd<br />
* ztest<br />
* prctile<br />
* qqplot<br />
* betacdf<br />
* betainv<br />
* betapdf<br />
* betarnd<br />
* binocdf<br />
* binoinv<br />
* binopdf<br />
* binornd<br />
* chi2cdf<br />
* chi2inv<br />
* chi2pdf<br />
* chi2rnd<br />
* expcdf<br />
* expinv<br />
* exppdf<br />
* exprnd<br />
* fcdf<br />
* finv<br />
* fpdf<br />
* frnd<br />
* gamcdf<br />
* gaminv<br />
* gampdf<br />
* gamrnd<br />
* geocdf<br />
* geoinv<br />
* geopdf<br />
* geornd<br />
* hygecdf<br />
* hygeinv<br />
* hygepdf<br />
* hygernd<br />
* logncdf<br />
* logninv<br />
* lognpdf<br />
* lognrnd<br />
* nbincdf<br />
* nbininv<br />
* nbinpdf<br />
* nbinrnd<br />
* normcdf<br />
* norminv<br />
* normpdf<br />
* normrnd<br />
* poisscdf<br />
* poissinv<br />
* poisspdf<br />
* poissrnd<br />
* tcdf<br />
* tinv<br />
* tpdf<br />
* trnd<br />
* unidcdf<br />
* unidinv<br />
* unidpdf<br />
* unidrnd<br />
* unifcdf<br />
* unifinv<br />
* unifpdf<br />
* unifrnd<br />
* wblcdf<br />
* wblinv<br />
* wblpdf<br />
* wblrnd<br />
</div><br />
<br />
== Development ==<br />
<br />
Follows an incomplete list of stuff missing in the statistics package to be matlab compatible. Bugs are not listed here, [https://savannah.gnu.org/bugs/?func=search&group=octave search] and [https://savannah.gnu.org/bugs/?func=additem&group=octave report] them on the bug tracker instead.<br />
<br />
{{Note|this entire section is about the current development version. If a Matlab function is missing from the list and does not appear on the current release of the package, confirm that is also missing in the [https://sourceforge.net/p/octave/statistics/ development sources] before adding it.}}<br />
<br />
=== Missing functions ===<br />
<div style="column-count:4;-moz-column-count:4;-webkit-column-count:4"><br />
* ClassificationBaggedEnsemble<br />
* ClassificationDiscriminant<br />
* ClassificationDiscriminant.fit<br />
* ClassificationEnsemble<br />
* ClassificationKNN<br />
* ClassificationKNN.fit<br />
* ClassificationPartitionedEnsemble<br />
* ClassificationPartitionedModel<br />
* ClassificationTree<br />
* ClassificationTree.fit<br />
* CompactClassificationDiscriminant<br />
* CompactClassificationEnsemble<br />
* CompactClassificationTree<br />
* CompactRegressionEnsemble<br />
* CompactRegressionTree<br />
* CompactTreeBagger<br />
* ExhaustiveSearcher<br />
* GeneralizedLinearModel<br />
* GeneralizedLinearModel.fit<br />
* GeneralizedLinearModel.stepwise<br />
* KDTreeSearcher<br />
* LinearMixedModel<br />
* LinearMixedModel.fit<br />
* LinearMixedModel.fitmatrix<br />
* LinearModel<br />
* LinearModel.fit<br />
* LinearModel.stepwise<br />
* NaiveBayes<br />
* NaiveBayes.fit<br />
* NonLinearModel<br />
* NonLinearModel.fit<br />
* ProbDistUnivKernel<br />
* ProbDistUnivParam<br />
* RegressionBaggedEnsemble<br />
* RegressionEnsemble<br />
* RegressionPartitionedEnsemble<br />
* RegressionPartitionedModel<br />
* RegressionTree<br />
* RegressionTree.fit<br />
* TreeBagger<br />
* addTerms<br />
* addedvarplot<br />
* addlevels<br />
* adtest<br />
* andrewsplot<br />
* anova1<br />
* anova2<br />
* ansaribradley<br />
* aoctool<br />
* barttest<br />
* bbdesign<br />
* betafit<br />
* betalike<br />
* binofit<br />
* biplot<br />
* bootci<br />
* bootstrp<br />
* candexch<br />
* candgen<br />
* capability<br />
* capaplot<br />
* ccdesign<br />
* cdfplot<br />
* cell2dataset<br />
* chi2gof<br />
* cholcov<br />
* classify<br />
* classregtree<br />
* cluster<br />
* clusterdata<br />
* clustering.evaluation.CalinskiHarabaszEvaluation<br />
* clustering.evaluation.DaviesBouldinEvaluation<br />
* clustering.evaluation.GapEvaluation<br />
* clustering.evaluation.SilhouetteEvaluation<br />
* coefCI<br />
* coefTest<br />
* compact<br />
* compare<br />
* confusionmat<br />
* controlchart<br />
* controlrules<br />
* cophenet<br />
* copulafit<br />
* copulaparam<br />
* copulastat<br />
* cordexch<br />
* corrcov<br />
* covarianceParameters<br />
* coxphfit<br />
* createns<br />
* crosstab<br />
* datasample<br />
* dataset<br />
* dataset2cell<br />
* dataset2struct<br />
* dataset2table<br />
* datasetfun<br />
* daugment<br />
* dcovary<br />
* designMatrix<br />
* devianceTest<br />
* dfittool<br />
* disttool<br />
* droplevels<br />
* dummyvar<br />
* dwtest<br />
* ecdf<br />
* ecdfhist<br />
* evalclusters<br />
* evcdf<br />
* evfit<br />
* evinv<br />
* evlike<br />
* evpdf<br />
* evrnd<br />
* evstat<br />
* expfit<br />
* explike<br />
* export<br />
* factoran<br />
* fitdist<br />
* fitensemble<br />
* fitglm<br />
* fitlm<br />
* fitlme<br />
* fitlmematrix<br />
* fitnlm<br />
* fitted<br />
* fixedEffects<br />
* fracfact<br />
* fracfactgen<br />
* friedman<br />
* fsurfht<br />
* gagerr<br />
* getlabels<br />
* getlevels<br />
* gline<br />
* glmfit<br />
* glmval<br />
* glyphplot<br />
* gname<br />
* gpcdf<br />
* gpfit<br />
* gpinv<br />
* gplike<br />
* gplotmatrix<br />
* gppdf<br />
* gprnd<br />
* gpstat<br />
* grpstats<br />
* gscatter<br />
* haltonset<br />
* hmmdecode<br />
* hmmtrain<br />
* hougen<br />
* icdf<br />
* inconsistent<br />
* interactionplot<br />
* invpred<br />
* islevel<br />
* ismissing<br />
* isundefined<br />
* jbtest<br />
* johnsrnd<br />
* join<br />
* knnsearch<br />
* kruskalwallis<br />
* ksdensity<br />
* kstest<br />
* kstest2<br />
* labels<br />
* lasso<br />
* lassoPlot<br />
* lassoglm<br />
* levelcounts<br />
* leverage<br />
* lhsdesign<br />
* lhsnorm<br />
* lillietest<br />
* linhyptest<br />
* lognfit<br />
* lognlike<br />
* lsline<br />
* mahal<br />
* maineffectsplot<br />
* makedist<br />
* manova1<br />
* manovacluster<br />
* mat2dataset<br />
* mdscale<br />
* mergelevels<br />
* mhsample<br />
* mle<br />
* mlecov<br />
* mnrfit<br />
* mnrval<br />
* multcompare<br />
* multivarichart<br />
* mvregress<br />
* mvregresslike<br />
* nancov<br />
* nbinfit<br />
* ncfcdf<br />
* ncfinv<br />
* ncfpdf<br />
* ncfrnd<br />
* ncfstat<br />
* nctcdf<br />
* nctinv<br />
* nctpdf<br />
* nctrnd<br />
* nctstat<br />
* ncx2cdf<br />
* ncx2inv<br />
* ncx2pdf<br />
* ncx2rnd<br />
* ncx2stat<br />
* negloglik<br />
* nlinfit<br />
* nlintool<br />
* nlmefit<br />
* nlmefitsa<br />
* nlparci<br />
* nlpredci<br />
* nnmf<br />
* nominal<br />
* normfit<br />
* normlike<br />
* normspec<br />
* optimalleaforder<br />
* ordinal<br />
* parallelcoords<br />
* paramci<br />
* paretotails<br />
* partialcorr<br />
* partialcorri<br />
* pca<br />
* pdf<br />
* pearsrnd<br />
* perfcurve<br />
* plotAdded<br />
* plotAdjustedResponse<br />
* plotDiagnostics<br />
* plotEffects<br />
* plotInteraction<br />
* plotResiduals<br />
* plotSlice<br />
* poissfit<br />
* polytool<br />
* ppca<br />
* predict<br />
* prob.BetaDistribution<br />
* prob.BinomialDistribution<br />
* prob.BirnbaumSaundersDistribution<br />
* prob.BurrDistribution<br />
* prob.ExponentialDistribution<br />
* prob.ExtremeValueDistribution<br />
* prob.GammaDistribution<br />
* prob.GeneralizedExtremeValueDistribution<br />
* prob.GeneralizedParetoDistribution<br />
* prob.InverseGaussianDistribution<br />
* prob.KernelDistribution<br />
* prob.LogisticDistribution<br />
* prob.LoglogisticDistribution<br />
* prob.LognormalDistribution<br />
* prob.MultinomialDistribution<br />
* prob.NakagamiDistribution<br />
* prob.NegativeBinomialDistribution<br />
* prob.NormalDistribution<br />
* prob.PiecewiseLinearDistribution<br />
* prob.PoissonDistribution<br />
* prob.RayleighDistribution<br />
* prob.RicianDistribution<br />
* prob.TriangularDistribution<br />
* prob.UniformDistribution<br />
* prob.WeibullDistribution<br />
* prob.tLocationScaleDistribution<br />
* probplot<br />
* procrustes<br />
* proflik<br />
* qrandset<br />
* qrandstream<br />
* randomEffects<br />
* randtool<br />
* rangesearch<br />
* ranksum<br />
* raylfit<br />
* rcoplot<br />
* refcurve<br />
* refline<br />
* regstats<br />
* relieff<br />
* removeTerms<br />
* residuals<br />
* response<br />
* ridge<br />
* robustdemo<br />
* robustfit<br />
* rotatefactors<br />
* rowexch<br />
* rsmdemo<br />
* rstool<br />
* sampsizepwr<br />
* scatterhist<br />
* sequentialfs<br />
* setlabels<br />
* signrank<br />
* silhouette<br />
* slicesample<br />
* sobolset<br />
* statget<br />
* statset<br />
* step<br />
* stepwise<br />
* stepwiseglm<br />
* stepwiselm<br />
* struct2dataset<br />
* surfht<br />
* svmclassify<br />
* svmtrain<br />
* table2dataset<br />
* tabulate<br />
* tdfread<br />
* tiedrank<br />
* truncate<br />
* unifit<br />
* vartestn<br />
* wblfit<br />
* wbllike<br />
* wblplot<br />
* x2fx<br />
* xptread<br />
</div><br />
<br />
=== Missing options ===<br />
<br />
[[Category:Octave Forge]]<br />
[[Category:Missing functions]]</div>Nirhttps://wiki.octave.org/wiki/index.php?title=Summer_of_Code_-_Getting_Started&diff=13772Summer of Code - Getting Started2021-04-26T14:37:08Z<p>Nir: /* Steps toward a successful application */ rearranging and rewording</p>
<hr />
<div>{{Note|GNU Octave [https://summerofcode.withgoogle.com/organizations/5849336744771584/ has been selected] as mentoring organization for GSoC 2021.}}<br />
<br />
Since 2011 the GNU Octave project has mentored 38 students in [[Summer of Code]] (SoC) programs by [https://summerofcode.withgoogle.com/ Google] and [https://socis.esa.int/ ESA]. Those programs aim to advertise open-source software development and to attract potential new Octave developers.<br />
<br />
= Steps toward a successful application =<br />
<br />
# ๐๐ฌ '''We want to get to know you (before the deadline). Communicate with us.'''<br />
#* Join [https://octave.discourse.group/ '''Octave Discourse'''] or our [https://webchat.freenode.net/?channels=#octave '''IRC channel''']. Using a nickname is fine.<br />
#* Show us that you're motivated to work on Octave ๐ป. There is no need to present an overwhelming CV ๐; evidence of involvement with Octave is more important.<br />
#* '''<span style="color:darkblue;">If you never talked to us, we will likely reject your proposal</span>''', even it looks good ๐ฎ<br />
# ๐ฉโ๐ฌ '''Get your hands dirty.'''<br />
#* We are curious about your programming skills ๐<br />
#** Your application will be much stronger if you [https://savannah.gnu.org/bugs/?group=octave fix Octave bugs] or [https://savannah.gnu.org/patch/?group=octave submit patches] before or during the application period.<br />
#** You can take a look at the [[short projects]] for some simple bugs to start with.<br />
#* '''Use Octave!'''<br />
#** If you come across something that does not work the way you like โก๏ธ try to fix that ๐ง<br />
#** Or if you find a missing function โก๏ธ try to implement it.<br />
# ๐๐ก '''Tell us what you are going to do.'''<br />
#* Do not write just to say what project you're interested in. Be specific about what you are going to do, include links ๐, show us you know what you are talking about ๐ก, and ask many [http://www.catb.org/esr/faqs/smart-questions.html smart questions] ๐ค<br />
#* Remember, '''we are volunteer developers and not your boss''' ๐<br />
# ๐ '''Prepare your proposal with us.'''<br />
#* If we see your proposal for the first time after the application deadline, it might easily contain some paragraphs not fully clear to us. Ongoing interaction will give us more confidence that you are capable of working on your project ๐<br />
#* Try to show us as early as possible a draft of your proposal ๐<br />
#* Then submit the proposal following the applicable rules, e.g. for [https://google.github.io/gsocguides/student/writing-a-proposal GSoC].<br />
<br />
= How do we judge your application? =<br />
<br />
Depending on the mentors and SoC program there are varieties, but typically the main factors considered would be:<br />
<br />
* '''You have demonstrated interest in Octave and an ability to make substantial modifications to Octave'''<br />
*: The most important thing is that you've contributed some interesting code samples to judge your skills. It's OK during the application period to ask for help on how to format these code samples, which normally are Mercurial patches.<br />
<br />
* '''You showed understanding of your topic'''<br />
*: Your proposal should make it clear that you're reasonably well versed in the subject area and won't need all summer just to read up on it.<br />
<br />
* '''Well thought out, adequately detailed, realistic project plan'''<br />
*: "I'm good at this, so trust me" isn't enough. In your proposal, you should describe which algorithms you'll use and how you'll integrate with existing Octave code. You should also prepare a project timeline and goals for the midterm and final evaluations.<br />
<br />
= What you should know about Octave =<br />
<br />
GNU Octave is mostly written in C++ and its own scripting language that is mostly compatible with Matlab. 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 Octave's scripting language, you as successful applicant will be familiar with or able to quickly learn about Octave's infrastructure. You can't spend the whole summer learning how to build Octave or prepare a changeset and still successfully complete your project ๐<br />
<br />
You should know:<br />
# How to build Octave from it's source code using [http://en.wikipedia.org/wiki/GNU_build_system the GNU build system].<br />
#* Read in this wiki: [[Developer FAQ]], [[Building]]<br />
#* Tools to know: [https://en.wikipedia.org/wiki/GNU_Compiler_Collection gcc], [https://en.wikipedia.org/wiki/Make_(software) make]<br />
# How to submit patches (changesets).<br />
#* Read in this wiki: [[Contribution guidelines]], [[Mercurial]]<br />
#* Tools to know: [https://en.wikipedia.org/wiki/Mercurial Mercurial (hg)], [https://en.wikipedia.org/wiki/Git git]<br />
<br />
= Suggested projects =<br />
<br />
The following suggested projects are distilled from the [[Projects]] page for the benefit of potential SoC students. You can also look at our [[Summer of Code|completed past projects]] for more inspiration.<br />
<br />
{{Note|Do you use Octave at your university or do you have some numerical project in mind? You are always welcome to '''propose your own projects'''. If you are passionate about your project, it will be easy to find an Octave developer to mentor and guide you.}}<br />
<br />
== ode15{i,s} : Matlab Compatible DAE solvers ==<br />
<br />
An initial implementation of Matlab compatible Differential Algebraic Equations (DAE) solvers, {{manual|ode15i}} and {{manual|ode15s}}, based on [https://computing.llnl.gov/projects/sundials SUNDIALS], <br />
was done by [https://gsoc2016ode15s.blogspot.com/ Francesco Faccio during GSoC 2016]. The code is maintained in the main Octave repository and consists mainly of the following three files: [https://hg.savannah.gnu.org/hgweb/octave/file/tip/libinterp/dldfcn/__ode15__.cc {{path|libinterp/dldfcn/__ode15__.cc}}], [https://hg.savannah.gnu.org/hgweb/octave/file/tip/scripts/ode/ode15i.m {{path|scripts/ode/ode15i.m}}] and [https://hg.savannah.gnu.org/hgweb/octave/file/tip/scripts/ode/ode15s.m {{path|scripts/ode/ode15s.m}}].<br />
<br />
The {{manual|decic}} function for selecting consistent initial conditions for ode15i can be made more Matlab compatible by using [https://faculty.smu.edu/shampine/cic.pdf another algorithm]. Another useful extension is to make ode15{i,s} work with datatypes other than double and to improve interpolation at intermediate time steps.<br />
<br />
* '''Required skills'''<br />
: Knowledge of Octave, C/C++; familiarity with numerical methods for DAEs<br />
* '''Potential mentors'''<br />
: Francesco Faccio, Carlo de Falco, Marco Caliari, Jacopo Corno, Sebastian Schรถps<br />
<br />
== Using Python within Octave ==<br />
<br />
[[Pythonic]] allows one to call Python functions and interact with Python objects from within Octave .m file code and from the Octave command line interface. Pythonic may eventually not be a separate package, but rather a core feature of Octave. This project aims to improve Pythonic with the goal of making the package more stable, maintainable, and full-featured.<br />
<br />
Based on a previous summer project related to Pythonic, this work will consist of fast-paced collaborative software development based on tackling the [https://gitlab.com/mtmiller/octave-pythonic/issues Pythonic issue list]. You would also be expected to participate in software design decisions and discussion, as well as improve documentation, doctests, and unit tests. As an example of the sorts of decisions being made, note that Octave indexes from 1 whereas Python typically indexes from 0; in which cases is it appropriate to make this transparent to the user?<br />
<br />
* '''Required skills'''<br />
: Knowledge of Octave, C/C++, Python<br />
* '''Potential mentors'''<br />
: Mike Miller, Colin B. Macdonald, Abhinav Tripathi<br />
<br />
== Improve TIFF image support ==<br />
<br />
[https://en.wikipedia.org/wiki/TIFF Tag Image File Format (TIFF)] is the de facto standard for scientific images. Octave uses the [http://www.graphicsmagick.org/ GraphicsMagic] (GM) C++ library to handle [http://www.graphicsmagick.org/formats.html TIFF and many others image formats]. However, GM still has several limitations:<br />
<br />
* GM has build option {{codeline|quantum}} which defines the bitdepth to use when reading an image:<br />
** Building GM with '''high quantum''' means that images of smaller bitdepth will take a lot more memory when reading.<br />
** Building GM with '''low quantum''' will make it impossible to read images of higher bitdepth. It also means that the image needs to always be rescaled to the correct range.<br />
* GM supports unsigned integers only, thus incorrectly reading files such as TIFF with floating-point data.<br />
* GM hides details of the image such as whether the image file is indexed. This makes it hard to access the real data stored on file.<br />
<br />
This project aims to implement better TIFF image support using [https://en.wikipedia.org/wiki/Libtiff libtiff], while leaving GM handle all other image formats. After writing a [https://octave.org/doc/v6.1.0/classdef-Classes.html classdef] interface to libtiff, improve the Octave functions {{manual|imread}}, {{manual|imwrite}}, and {{manual|imfinfo}} to make use of it.<br />
<br />
* '''Required skills'''<br />
: Knowledge of Octave, C/C++<br />
* '''Potential mentors'''<br />
: Carnรซ Draug<br />
<br />
== PolarAxes and Plotting Improvements ==<br />
<br />
Octave currently provides supports for polar axes by using a Cartesian 2-D axes and adding a significant number of properties and callback listeners to get things to work. What is needed is the implementation of a dedicated "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" exists 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. This relates to bug {{bug|49804}}.<br />
<br />
* '''Required skills'''<br />
: Knowledge of Octave, C/C++; optional experience with OpenGL programming<br />
* '''Potential mentors'''<br />
: Rik <br />
<br />
== Table datatype ==<br />
<br />
In 2013, Matlab introduced a [https://www.mathworks.com/help/matlab/tables.html new table datatype] to conveniently organize and access data in tabular form. This datatype has not been introduced to Octave yet (see bug {{bug|44571}}). However, there are two initial implementation approaches https://github.com/apjanke/octave-tablicious and https://github.com/gnu-octave/table.<br />
<br />
Based upon the existing approaches, the goal of this project is to define an initial subset of [https://www.mathworks.com/help/matlab/tables.htmlMatlab's table functions], which involve sorting, splitting, merging, and file I/O and implement it within the given time frame.<br />
<br />
* '''Required skills'''<br />
: Knowledge of Octave, C/C++<br />
* '''Potential mentors'''<br />
: [[User:siko1056|Kai]]<br />
<br />
== Jupyter Notebook Integration ==<br />
<br />
<q>The [https://jupyter.org Jupyter Notebook] is an open-source web application that allows you to create and share documents that contain live code, equations, visualizations and narrative text.</q><br />
<br />
To interactively work with Octave code within Jupyter Notebooks, there already exists an [https://github.com/Calysto/octave_kernel Octave kernel for Jupyter].<br />
<br />
'''This project''' aims to support the '''opposite direction''': running (and filling) Jupyter Notebook within GNU Octave. This would enable Jupyter Notebook users to evaluate '''long running Octave Notebooks''' on a computing server without permanent browser connection, which is [https://github.com/jupyter/notebook/issues/1647 still a pending issue]. To achieve this, different strategies are possible:<br />
<br />
# Synchronize an internal Octave data structure (e.g. classdef object) with the Jupyter Notebook. Probably the safest approach, but does not enable any interactivity from the Octave GUI.<br />
# Import/export a Jupyter Notebook as Octave script (translate non-code sections to comments and vice versa). Files can be edited from the Octave GUI, but probably conversion losses might occur (e.g. embedded graphics).<br />
# A synthesis of both approaches?<br />
<br />
In general a [https://nbformat.readthedocs.io/en/latest/ Jupyter Notebook] is a plain JSON document, which will be supported in Octave 7 (current development version) or through the [https://gnu-octave.github.io/pkg-index/package/pkg-json JSON package] for older Octave versions.<br />
<br />
* '''Required skills'''<br />
: Knowledge of Octave, C/C++<br />
* '''Potential mentors'''<br />
: [[User:siko1056|Kai]]<br />
<br />
== Adding functionality to packages ==<br />
<br />
=== OCS package ===<br />
<br />
The [[Ocs package | OCS package]] is a circuit simulator. The objective of this project is to increase compatibility with [https://en.wikipedia.org/wiki/SPICE SPICE] and improve compatibility with other Octave packages, e.g. the [[Control package]]. Please study the [https://octave.sourceforge.io/ocs/overview.html available functions] of this package. <br />
<br />
* '''Required skills'''<br />
: Knowledge of Octave, C/C++; FORTRAN API knowledge<br />
* '''Potential mentors'''<br />
: Sebastian Schรถps, Carlo de Falco<br />
<br />
=== Symbolic package ===<br />
<br />
The [[Symbolic package]] provides symbolic computing and other [https://en.wikipedia.org/wiki/Computer_algebra_system computer algebra system] tools. The main component of Symbolic is a pure m-file class "@sym" which uses the Python package [https://www.sympy.org SymPy] to do (most of) the actual computations. The package aims to expose the full functionality of SymPy while also providing a high level of compatibility with the Matlab Symbolic Math Toolbox. The Symbolic package requires communication between Octave and Python. In 2016 another GSoC project successfully re-implemented this communication using the new [[Pythonic|Pythonic package]].<br />
<br />
This project proposes to go further: instead of using Pythonic only for the communication layer, we'll use it throughout the Symbolic project. For example, we might make "@sym" a subclass of "@pyobject". We also could stop using the "python_cmd" interface and use Pythonic directly from methods. The main goal was already mentioned: to expose the ''full functionality'' of SymPy. For example, we would allow OO-style method calls such as <code>f.diff(x)</code> instead of <code>diff(f, x)</code>.<br />
<br />
* '''Required skills'''<br />
: Knowledge of Octave, C/C++, Python; object-oriented programming (OOP) in Octave<br />
* '''Potential mentors'''<br />
: Colin B. Macdonald, Mike Miller, Abhinav Tripathi<br />
<br />
=== TISEAN package ===<br />
<br />
The [[TISEAN package]] provides an Octave interface to [https://www.pks.mpg.de/~tisean/Tisean_3.0.1/index.html TISEAN] is a suite of code for nonlinear time series analysis. In 2015, another GSoC project started with the work to create interfaces to many TISEAN functions, but [[TISEAN_package:Procedure | there is still work left to do]]. There are missing functions to do computations on spike trains, to simulate autoregresive models, to create specialized plots, etc. Which are of importance for many scientific disciplines involving statistical computations and signal processing.<br />
<br />
* '''Required skills'''<br />
: Knowledge of Octave, C/C++; FORTRAN API knowledge<br />
* '''Potential mentors'''<br />
: [[User:KaKiLa|KaKiLa]]<br />
<br />
[[Category:Summer of Code]]<br />
[[Category:Project Ideas]]</div>Nirhttps://wiki.octave.org/wiki/index.php?title=Short_projects&diff=13685Short projects2021-03-08T16:29:48Z<p>Nir: /* Miscellaneous */</p>
<hr />
<div>This is a list of small projects to start helping with Octave development. The following items could be done<br />
* in a reasonable amount of time (a few hours) and<br />
* without Octave development knowledge.<br />
<br />
{{Note|If you never contributed to Octave before, we suggest to start with our [[Developer FAQ]].}}<br />
<br />
{{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.}}<br />
<br />
Use the [https://savannah.gnu.org/patch/?func=additem&group=octave Savannah patch tracker] for submissions unrelated to an existing bug.<br />
<br />
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.<br />
<br />
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.<br />
<br />
<br />
== Bugs==<br />
<br />
Please help with the triage of [https://savannah.gnu.org/bugs/?group=octave existing bugs] to populate the list of easy bugs below.<br />
<br />
* {{bug|41674}} - image package: temporary arrays in imresize are doubles<br />
* {{patch|8368}} - imremap - Change to imremap to reduce memory footprint<br />
* {{patch|8369}} - imresize - Change to imresize to reduce memory footprint<br />
<br />
== Missing functions / feature requests ==<br />
<br />
Implement missing Octave functions or implement desired features and general improvements.<br />
<br />
* {{bug|32088}} - <code>-ALL</code> option for {{manual|which}}<br />
* {{bug|40211}} - More compact output for structs and cell arrays<br />
* {{bug|41530}} - Editor debug mode could show a dbup/dbdown GUI component<br />
* {{bug|41796}} - extend sub2ind and ind2sub <br />
* {{bug|41844}} - GUI Debug Menu could offer "Stop If..."<br />
* {{bug|47239}} - calling system without shell<br />
* {{bug|57699}} - 'clipboard' function to interact with clipboard contents<br />
* {{bug|39439}}, {{bug|39434}} - Use non-empty identifiers in all warnings and errors issued by Octave<br />
** 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. <br />
* Lists of missing functions for [[:Category:Missing functions|several packages]].<br />
** 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.<br />
<br />
== Function Compatibility ==<br />
<br />
A number of functions are implemented, but may have known incompatibilities to Matlab or only partially handled option sets, etc.<br />
<br />
* griddata: Octave's griddata functions are only partly Matlab compatible. There are un-implemented interpolation methods: 'cubic' for 2D and 'natural' for 2D and 3D. The 2D case 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|35178}} (also relevant background in {{bug|33539}}, {{bug|57323}}, and {{bug|57835}}.)<br />
<br />
== Review or create changesets ==<br />
<br />
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.<br />
<br />
* Sorry none yet.<br />
<br />
== Write Built-In Self Tests (BISTs) ==<br />
<br />
Writing BISTs improves Octave's regression testing and ensures that we don't break anything when we add new features.<br />
<br />
* [[Add_BIST_tests_for_octave_functions_written_in_C%2B%2B| BIST for C++ functions]]<br />
* [[BIST for m-files]]. See also [[Projects#Tests]].<br />
<br />
== Miscellaneous ==<br />
<br />
* C++ cleanup of packages after the switch to exceptions (late 2015). See [[Invert if/else/error]].<br />
<br />
* 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.<br />
<br />
* 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 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.<br />
<br />
== See also ==<br />
<br />
* [[Projects]]<br />
<br />
[[Category:Development]]<br />
[[Category:Project Ideas]]<br />
[[Category:Missing functions]]</div>Nirhttps://wiki.octave.org/wiki/index.php?title=GSoC_2021_application&diff=13615GSoC 2021 application2021-02-03T23:05:04Z<p>Nir: Updated questions and answers</p>
<hr />
<div>__NOTOC__<br />
<br />
Octave's application for GSoC 2021.<br />
<br />
=== Organization name ===<br />
<br />
GNU Octave<br />
<br />
=== OSI approved license? ===<br />
<br />
Yes<br />
<br />
=== Why does your org want to participate in Google Summer of Code? (1000 chars) ===<br />
<br />
We hope to establish collaborations with talented new contributors. We also want to raise awareness of Octave in the free software community.<br />
<br />
Google Summer of Code represents a unique opportunity to bring new perspectives to the Octave community. As a somewhat older project, we benefit from having new and younger contributors among our developers. We have been able to retain several GSoC participants as contributors to the Octave project and we hope to continue this in the future by engaging effectively with students during both the application and mentoring processes, setting clear standards for what is required for acceptance, and maintaining those standards throughout the project.<br />
<br />
=== What would your org consider to be a successful summer? (500 chars) ===<br />
<br />
We would consider a summer successful if we selected promising students, provided adequate mentor supervision, developed desired features in Octave, and facilitated a satisfying experience for the students and mentors. We are more interested in the quality of interactions and contributions than in quantity, although, all else being equal, we would be happy to have more talented students join us.<br />
<br />
<br />
=== How many potential mentors have agreed to mentor this year? ===<br />
<br />
11-15<br />
<br />
=== How will you keep mentors engaged with their students? (1000 chars) ===<br />
<br />
We will select mentors with proven involvement in Octave and free software and align project topics with the priorities of the core developer team. The vast majority of our mentors have been involved in Octave development for several years, and new mentors will be paired with more experienced ones.<br />
<br />
Each project will include at least one core Octave developer as mentor. These are proven, veteran members of the project who are familiar with the code base and with engaging the maintainer and user community. GNU Octave is a project with applications in very diverse domains, so each project should also include a mentor with expertise in the relevant field.<br />
<br />
=== How will you help your students stay on schedule to complete their projects? (1000 chars) ===<br />
<br />
Previous contributions to Octave are a condition for acceptance. In this way, we hope to select students who are familiar with the codebase and able to start their project quickly.<br />
<br />
A tentative project timeline is required as part of the application, and is checked by mentors for realism during the applicant evaluation process. Once a student is selected, the mentor will work with them to come up with a more detailed timeline, including clear expectations for progress by the midterm and final evaluation periods.<br />
<br />
During the summer, mentors will check with students at least weekly to make sure they are staying on schedule and help with any obstacles that might arise. Students are also expected to regularly update their mentors and the Octave maintainers community on their progress via e-mails and blog posts.<br />
<br />
Overall, the vast majority of previous SoC students have finished successfully, making substantive contributions to Octave that have been integrated into our codebase.<br />
<br />
=== How will you get your students involved in your community during GSoC? (1000 chars) ===<br />
<br />
Students will be urged to participate in our IRC channel and mailing list. We will set clear expectations on the minimum frequency of email progress updates, typically every two to three days. Students will also set up a blog for longer, weekly, updates which is aggregated at http://planet.octave.org<br />
<br />
Everything should be completely open. Almost all interactions with the student should be public, e.g. contacting the mentor should happen in the public IRC channel or copy the maintainers mailing list.<br />
<br />
Finally, we organize an annual developers' summit, OctConf, and have in previous years provided support for GSoC students to attend and present. In the past year, we have also held monthly online developer meetings to discuss Octave's direction and future activities, to which GSoC students would be invited. Such meetings strengthen relationships between community members and the new students.<br />
<br />
=== How will you keep students involved with your community after GSoC? (1000 chars) ===<br />
<br />
We will typically merge their code into our codebase during or soon after the summer. GNU Octave is a project with many tester-users who give constant feedback on new features and report bugs. As participants in the mailing lists and bug tracker, students get the feeling of doing something that is useful to the community from the very start.<br />
<br />
Many of our GSoC students use Octave during the academic year or in their professional careers. As such, they are prone to stay involved with its development, even if at a lower level than during the summer.<br />
<br />
A number of GSoC alumni have continued making regular contributions to GNU Octave, including volunteering to serve as GSoC mentors, and many remain available to help with any problems related to the code they wrote for the project.<br />
<br />
<br />
<br />
=== Has your org been accepted as a mentoring org in Google Summer of Code before? ===<br />
<br />
Yes.<br />
<br />
=== How many students did you org accept for 2020? ===<br />
<br />
1<br />
<br />
=== How many of your org's 2020 students have been active in the community in the past 60 days? ===<br />
<br />
0<br />
<br />
=== For each year your organization has participated, provide the counts of successful and total students. ===<br />
<br />
2020 1/1<br />
2019 0/0<br />
2018 3/3<br />
2017 4/4<br />
2016 5/5<br />
2014 3/3<br />
<br />
We have a nice trajectory mentoring projects since 2011 (both as an independent organization and as part of GNU). [http://wiki.octave.org/Summer_of_Code This page] lists the successful projects that have been executed under our mentoring.<br />
<br />
=== If your org has applied for GSoC before but not been accepted, select the years === <br />
<br />
2012, 2013, 2015<br />
<br />
=== What year was your project started? ===<br />
<br />
1992<br />
<br />
=== Where does your source code live? === <br />
<br />
http://hg.savannah.gnu.org/hgweb/octave<br />
<br />
=== Is your organization part of any government? === <br />
<br />
No<br />
<br />
=== Website URL ===<br />
<br />
http://www.octave.org<br />
<br />
=== Tagline (80 characters) ===<br />
<br />
Free Your Numbers<br />
<br />
=== Logo (Must be a 24-bit PNG, minimum height 256 pixels.) ===<br />
<br />
https://upload.wikimedia.org/wikipedia/commons/thumb/6/6a/Gnu-octave-logo.svg/283px-Gnu-octave-logo.svg.png (or generate 256x256 PNG from http://hg.savannah.gnu.org/hgweb/octave/raw-file/155d8e90ee1f/doc/icons/octave-logo.svg with <code>inkscape -z -e octave-logo.png -w 256 -h 256 octave-logo.svg</code>)<br />
<br />
=== Primary License ===<br />
<br />
GPL 3.0<br />
<br />
=== Organization Category ===<br />
<br />
Programming Languages and Development Tools<br />
<br />
=== Technology Tags (the primary specific technologies your organization uses) (up to 5) ===<br />
<br />
C++, hg<br />
<br />
=== Topic Tags (general topics that describe your organization) (up to 5) ===<br />
<br />
mathematics, numerical computation, numerical methods, matlab, scientific computing<br />
<br />
=== Ideas List ===<br />
<br />
https://wiki.octave.org/Summer_of_Code_-_Getting_Started#Suggested_projects<br />
<br />
<br />
=== Description (180 chars) ===<br />
<br />
GNU Octave is a high-level interpreted language, primarily intended for numerical computations.<br />
<br />
=== Description (2000 chars) ===<br />
<br />
GNU Octave is a high-level interpreted language, primarily intended for numerical computations. It provides capabilities for the numerical solution of linear and nonlinear problems and for performing other numerical experiments. It also provides extensive graphics capabilities for data visualization and manipulation. Octave is normally used through its interactive command line interface, but it can also be used to write non-interactive programs. The Octave language is quite similar to Matlab so that most programs are easily portable.<br />
<br />
Octave is continually being upgraded. The current version 6.1 includes a graphical user interface, support for classdef object-oriented programming, and many new and improved functions. Student projects may also involve developing or upgrading Octave Forge packages, which can be loaded to provide additional specialized functions that supplement those provided in Core Octave.<br />
<br />
=== Application instructions (1500 chars) ===<br />
<br />
(Markdown for links)<br />
<br />
<code><br />
<br />
Post on our [mailing list](https://lists.gnu.org/mailman/listinfo/octave-maintainers) or chat on [IRC](https://webchat.freenode.net/?channels=#octave) or [Discourse](https://octave.discourse.group/) to get feedback on your ideas and help with any questions.<br />
<br />
Familiarize yourself with using and building Octave, and with any other skills needed to carry out your proposed project. Demonstrate this familiarity by contributing [bug fixes](https://savannah.gnu.org/bugs/?group=octave) or [patches](https://savannah.gnu.org/patch/?group=octave) before the end of the application period.<br />
<br />
Complete your GSoC application as per Google guidelines.<br />
<br />
For more details, please see the [Octave Wiki](https://wiki.octave.org/Summer_of_Code_-_Getting_Started).<br />
<br />
</code><br />
<br />
=== Proposal Tags (for applicants to use) (up to 10) ===<br />
<br />
Numerical, Infrastructure, Octave Forge, Image analysis, Machine learning, GUI, Graphics, New feature, Performance, Matlab compatibility<br />
<br />
=== Contact methods ===<br />
<br />
Chat: https://octave.discourse.group/<br />
<br />
Mailing list: https://lists.gnu.org/mailman/listinfo/octave-maintainers<br />
<br />
General Email: octave-maintainers@gnu.org<br />
<br />
Blog: https://planet.octave.org/<br />
<br />
[[Category:Summer of Code]]<br />
[[Category:2021]]</div>Nirhttps://wiki.octave.org/wiki/index.php?title=GSoC_2021_application&diff=13614GSoC 2021 application2021-02-03T22:27:46Z<p>Nir: copied last year's page</p>
<hr />
<div>__NOTOC__<br />
<br />
Octave's application for GSoC 2021.<br />
<br />
=== Why does your org want to participate in Google Summer of Code? (1000 chars) ===<br />
<br />
We hope to establish collaborations with talented new contributors. We also want to raise awareness of Octave in the free software community.<br />
<br />
Google Summer of Code represents a unique opportunity to bring new perspectives to the Octave community. As a somewhat older project, we benefit from having new and younger contributors among our developers. We have been able to retain several GSoC participants as contributors to the Octave project and we hope to continue this in the future by engaging effectively with students during both the application and mentoring processes, setting clear standards for what is required for acceptance, and maintaining those standards throughout the project.<br />
<br />
=== How many potential mentors have agreed to mentor this year? ===<br />
<br />
11-15<br />
<br />
=== How will you keep mentors engaged with their students? (1000 chars) ===<br />
<br />
We will select mentors with proven involvement in Octave and free software and align project topics with the priorities of the core developer team. The vast majority of our mentors have been involved in Octave development for several years, and new mentors will be paired with more experienced ones.<br />
<br />
Each project will include at least one core Octave developer as mentor. These are proven, veteran members of the project who are familiar with the code base and with engaging the maintainer and user community. GNU Octave is a project with applications in very diverse domains, so each project should also include a mentor with expertise in the relevant field.<br />
<br />
=== How will you help your students stay on schedule to complete their projects? (1000 chars) ===<br />
<br />
Previous contributions to Octave are a condition for acceptance. In this way, we hope to select students who are familiar with the codebase and able to start their project quickly.<br />
<br />
A tentative project timeline is required as part of the application, and is checked by mentors for realism during the applicant evaluation process. Once a student is selected, the mentor will work with them to come up with a more detailed timeline, including clear expectations for progress by the midterm and final evaluation periods.<br />
<br />
During the summer, mentors will check with students at least weekly to make sure they are staying on schedule and help with any obstacles that might arise. Students are also expected to regularly update their mentors and the Octave maintainers community on their progress via e-mails and blog posts.<br />
<br />
Overall, the vast majority of previous SoC students have finished successfully, making substantive contributions to Octave that have been integrated into our codebase.<br />
<br />
=== How will you get your students involved in your community during GSoC? (1000 chars) ===<br />
<br />
Students will be urged to participate in our IRC channel and mailing list. We will set clear expectations on the minimum frequency of email progress updates, typically every two to three days. Students will also set up a blog for longer, weekly, updates which is aggregated at http://planet.octave.org<br />
<br />
Everything should be completely open. Almost all interactions with the student should be public, e.g. contacting the mentor should happen in the public IRC channel or copy the maintainers mailing list.<br />
<br />
Finally, we organize an annual developers' summit, OctConf, and have in previous years provided support for GSoC students to attend and present. This strengthens relationships between community members and the new students. <br />
<br />
=== How will you keep students involved with your community after GSoC? (1000 chars) ===<br />
<br />
We will typically merge their code into our codebase during or soon after the summer. GNU Octave is a project with many tester-users who give constant feedback on new features and report bugs. As participants in the mailing lists and bug tracker, students get the feeling of doing something that is useful to the community from the very start.<br />
<br />
Many of our GSoC students use Octave during the academic year or in their professional careers. As such, they are prone to stay involved with its development, even if at a lower level than during the summer.<br />
<br />
A number of GSoC alumni have continued making regular contributions to GNU Octave, including volunteering to serve as GSoC mentors, and many remain available to help with any problems related to the code they wrote for the project.<br />
<br />
=== Has your org been accepted as a mentoring org in Google Summer of Code before? For each year your organization has participated, provide the counts of successful and total students. ===<br />
<br />
Yes.<br />
<br />
2019 0/0<br />
2018 3/3<br />
2017 4/4<br />
2016 5/5<br />
2014 3/3<br />
<br />
We have a nice trajectory mentoring projects since 2011 (both as an independent organization and as part of GNU). [http://wiki.octave.org/Summer_of_Code This page] lists the successful projects that have been executed under our mentoring.<br />
<br />
=== If your org has applied for GSoC before but not been accepted, select the years === <br />
<br />
2012, 2013, 2015<br />
<br />
=== Are you part of a foundation/umbrella organization? ===<br />
<br />
Yes, we are affiliated with GNU.<br />
<br />
=== What year was your project started? ===<br />
<br />
1992<br />
<br />
=== Organization ID ===<br />
<br />
octave<br />
<br />
=== Organization name ===<br />
<br />
GNU Octave<br />
<br />
=== OSI approved license? ===<br />
<br />
Yes<br />
<br />
=== Organization Category ===<br />
<br />
Programming Languages and Development Tools<br />
<br />
=== Tagline (80 characters) ===<br />
<br />
Free Your Numbers<br />
<br />
=== Primary License ===<br />
<br />
GPL 3.0<br />
<br />
=== Technology Tags (the primary specific technologies your organization uses) (up to 5) ===<br />
<br />
C++, hg<br />
<br />
=== Topic Tags (general topics that describe your organization) (up to 5) ===<br />
<br />
mathematics, numerical computation, numerical methods, matlab, scientific computing<br />
<br />
=== Proposal Tags (for applicants to use) (up to 10) ===<br />
<br />
Numerical, Infrastructure, Octave Forge, Image analysis, Machine learning, GUI, Graphics, New feature, Performance, Matlab compatibility<br />
<br />
=== Description (180 chars) ===<br />
<br />
GNU Octave is a high-level interpreted language, primarily intended for numerical computations.<br />
<br />
=== Description (2000 chars) ===<br />
<br />
GNU Octave is a high-level interpreted language, primarily intended for numerical computations. It provides capabilities for the numerical solution of linear and nonlinear problems and for performing other numerical experiments. It also provides extensive graphics capabilities for data visualization and manipulation. Octave is normally used through its interactive command line interface, but it can also be used to write non-interactive programs. The Octave language is quite similar to Matlab so that most programs are easily portable.<br />
<br />
Octave is continually being upgraded. The current version 5.1 includes a graphical user interface, support for classdef object-oriented programming, and many new and improved functions. Student projects may also involve developing or upgrading Octave Forge packages, which can be loaded to provide additional specialized functions that supplement those provided in Core Octave.<br />
<br />
=== Application instructions (1500 chars) ===<br />
<br />
(Markdown for links)<br />
<br />
<code><br />
<br />
Post on our [mailing list](https://lists.gnu.org/mailman/listinfo/octave-maintainers) or chat on [IRC](https://webchat.freenode.net/?channels=#octave) to get feedback on your ideas, and help with any questions.<br />
<br />
Familiarize yourself with using and building Octave, and with any other skills needed to carry out your proposed project. Demonstrate this familiarity by contributing [bug fixes](https://savannah.gnu.org/bugs/?group=octave) or [patches](https://savannah.gnu.org/patch/?group=octave) before the end of the application period.<br />
<br />
[Make an account](https://wiki.octave.org/Special:CreateAccount) on our Wiki and then copy and fill out Octave's [application template](https://wiki.octave.org/Template:Student_application_template_public) on your Wiki user page. Also complete your GSoC application on Melange as per Google guidelines.<br />
<br />
For more details, please see the [Octave Wiki](https://wiki.octave.org/Summer_of_Code_-_Getting_Started).<br />
<br />
</code><br />
<br />
=== Organization urls ===<br />
<br />
http://www.octave.org<br />
<br />
Logo: https://upload.wikimedia.org/wikipedia/commons/thumb/6/6a/Gnu-octave-logo.svg/283px-Gnu-octave-logo.svg.png (or generate 256x256 PNG from http://hg.savannah.gnu.org/hgweb/octave/raw-file/155d8e90ee1f/doc/icons/octave-logo.svg with <code>inkscape -z -e octave-logo.png -w 256 -h 256 octave-logo.svg</code>)<br />
<br />
Blog: http://planet.octave.org/<br />
<br />
Feed: http://planet.octave.org/atom.xml<br />
<br />
IRC Channel: https://webchat.freenode.net/?channels=#octave<br />
<br />
Mailing List: https://lists.gnu.org/mailman/listinfo/octave-maintainers<br />
<br />
General Email: octave-maintainers@gnu.org<br />
<br />
Ideas: https://wiki.octave.org/Summer_of_Code_-_Getting_Started#Suggested_projects<br />
<br />
Application instructions: http://wiki.octave.org/Summer_of_Code_Project_Ideas#Steps_Toward_a_Successful_Application<br />
<br />
Source code: http://hg.savannah.gnu.org/hgweb/octave<br />
<br />
[[Category:Summer of Code]]<br />
[[Category:2021]]</div>Nirhttps://wiki.octave.org/wiki/index.php?title=TISEAN_package:Procedure&diff=13604TISEAN package:Procedure2021-01-23T14:39:09Z<p>Nir: /* External links */ replaced dead link with official repo</p>
<hr />
<div>== Porting TISEAN ==<br />
<br />
<br />
=== Goal of the project ===<br />
The goal of this project is not to port the entire [[TISEAN package]] to octave. That would be a desired outcome though it might not be feasible within the time constraints. The goal of this project is to give the TISEAN package a solid start and to port as many functions as possible to create a solid foundation for the future.<br />
<br />
=== General division ===<br />
As the TISEAN package consists of 74 programs I have divided the first part into three sub-parts: <br />
# FORTRAN ones that can be re-implemented easily in m-files (a good example of such a program is 'henon') -- there are 5 programs in this class <br />
# C programs which also need to be linked to oct files (an example is 'ghkss') -- there are 41 programs in this class<br />
# FORTRAN ones that need to be linked to oct files (an example of such a program is 'project') -- there are 28 programs in this class<br />
They are ordered so that according to my estimates the difficulty rises with the number. This is because typecasting and implicit typing (which is included in most of the FORTRAN files in the TISEAN library) can be problematic sometimes.<br />
<br />
This number can be brought down significantly. This is because some programs are deprecated, others are just C/FORTRAN copies of each other, others are not important in GNU Octave (such as 'compare' and choose'). After taking the factors above into consideration the number of functions that need to be ported drops to 49. I have prepared a detailed discussion of all of those functions [[User:Josiah425:TISEAN_Package:Table_of_functions| here]]. This number will further drop once certain programs are confirmed to have similar programs in GNU Octave or some packages in Octave Forge.<br />
<br />
Apart from the qualitative division I propose a work oriented division. In it each subpart can be tackled separately and create an entity in-and-of-itself. I chose to work along the lines of the articles about implementations of nonlinear timeseries included in the documentation. This article discusses various algorithms and what certain programs mean. It can be found [http://www.mpipks-dresden.mpg.de/~tisean/Tisean_3.0.1/docs/chaospaper/TiseanHTML.html here]. I will discuss in which order I would like to port various topics from this article and where my work currently stands.<br />
==== Nonlinear noise reduction ====<br />
This is the first topic I chose. It is because it contains programs from all three categories. It is also relatively small -- it contains 3 programs: project, lazy, ghkss. I have chosen to further implement addnoise and henon, to demonstrate how project and ghkss work. Thus this topic contains programs from each category: <br />
* Re-implementable in mfile (henon)<br />
* Linkable to FORTRAN (project, addnoise, lazy)<br />
* Linkable to c (ghkss)<br />
I have already started working on this stage. My progress can be viewed at [https://bitbucket.org/josiah425/tisean https://bitbucket.org/josiah425/tisean]. So far I have implemented addnoise, project and re-implemented henon as an mfile. As most work on this topic has been completed I estimate that finishing it up will take around 2 days -- throughout my outline I estimate about 1 day per program (that includes documentation and testing).<br />
<br />
===== Phase space representation =====<br />
This is the next topic that needs to be implemented. This is because it contains programs (especially 'delay') that are used to visualize data. Whenever an example is given in the package the resulting data is routed through 'delay' before it is plotted. Apart from delay it also contains other functions that can divided into the following categories:<br />
* Linkable to c (delay, corr, mutual, false_nearest, pca)<br />
There are two more programs in this section of the article they are: 'autocorr' and 'pc', both implemented in FORTRAN. There is no need to port them as according to the documentation ([http://www.mpipks-dresden.mpg.de/~tisean/Tisean_3.0.1/docs/contents.html here]) they are redundant with other functions. Further more, it is likely 'corr' does not need to be implemented, because 'xcorr' in signal package seems to have similar functionality. This has not been confirmed yet, once that occurs, a definite answer can be given.<br />
Assuming around a day for each function (with testing and documenting the usage) I assume this stage will take a little under a week.<br />
===== Nonlinear prediction =====<br />
This seems like a reasonable next step. It consists of the following programs:<br />
* Linkable to FORTRAN (predict, upo)<br />
* Linkable to C (lzo-test, lzo-gm, lzo-run, lfo-ar, lfo-gm, lfo-run, rbf, polynom, xzero) <br />
Again assuming around a day for each program (with testing, documenting usage and writing examples) I assume this stage will take about two weeks.<br />
===== Lyapunov exponents =====<br />
This stage will include:<br />
* Linkable to C (lyap_r, lyap_k, lyap_spec)<br />
It will take about 2-3 days to complete.<br />
===== Dimensions and entropies =====<br />
This topic is next on the list. Programs it include are as follows:<br />
* Linkable to FORTRAN (c2, c2t, c2d, c2g, c1)<br />
* Linkable to C (d2, boxcount)<br />
This part of the article also mentions 'c2naive' which is implemented in FORTRAN, but it is also described as redundant by the documentation ([http://www.mpipks-dresden.mpg.de/~tisean/Tisean_3.0.1/docs/contents.html here])<br />
This stage should take little over a week. I expect this stage and the previous one to take about two weeks.<br />
===== Testing for nonlinearity =====<br />
This is the last topic I intend to tackle. The following programs are included here:<br />
* Linkable to FORTAN (surrogates, randomize , timerev)<br />
This stage should take me about 3 days to complete.<br />
===== Tutorial =====<br />
I also plan to port all of the functions needed for the four exercises described in the 'Tutorial' section of the documentation. The programs that need to be ported additionally are as follows:<br />
* Linkable to FORTRAN (stp)<br />
* Linkable to C (ar-model, d2, poincare, recurr, nstat_z)<br />
The programs: 'spectrum', 'historgram', 'extrema', 'corr' need to have a confirmed equivalent function in GNU Octave.<br />
This stage should take me about a week.<br />
==== Notes on time estimates ====<br />
Totaling up the above estimates it should take me 6-7 weeks to complete my task as outlined above. <br />
<br />
My estimates might be high, but I believe it is more important to complete the task thoroughly than to port more programs haphazardly.<br />
<br />
=== Details of work on each program ===<br />
* FORTRAN linking<br />
For each FORTRAN program that I intend to link to a oct-file I intend to: <br />
# Strip the program of its input validation and transform it into a subroutine<br />
# Create a .cc program (compiled into an oct-file) that will launch the stripped FORTRAN subroutine; this .cc program will also not contain input validation, it will be for internal use only<br />
# Create a m-file that will perform input validation and launch the .cc and contain usage documentation<br />
* C linking<br />
I intend to do here something similar to the FORTRAN programs, although, it might be better to not create any extra m-files and incorporate the program's existing input validation into the .cc file. This might be a desired course of action. I will make a decision once I complete one such linking program. <br />
* Reimplementing in mfile<br />
This is quite straightforward, although it is important not to make a mistake while taking this approach.<br />
<br />
<br />
== Procedure ==<br />
<br />
This section describes the process employed during porting TISEAN package into an Octave Package. This project was started as part of the Google Summer of Code 2015.<br />
<br />
To aid in understanding the task there are some charts.<br />
<br />
The first chart depicts what to do with each function in the function table. I mainly focuses on those functions that might already implemented in Octave.<br />
<br />
[[File:Work_flow_TISEAN.png|400px|center]]<br />
<br />
The chart below depicts how to decide which type of port should be utilized.<br />
<br />
[[File:Porting_Programs_TISEAN.png|400px|center]] <br />
<br />
Both of those charts can be combined into a large one that shows all of the work together.<br />
<br />
[[File:Flow_Together_TISEAN.png|400px|center]]<br />
== Table of functions ==<br />
In reference to the TISEAN library alphabetical order of programs which is located [http://www.mpipks-dresden.mpg.de/~tisean/Tisean_3.0.1/docs/alphabetical.html here].<br />
<br />
The choice whether a program exist in Octave is based only on comparing package/octave documentation with the TISEAN documentation. As of now I have not compared any code, nor checked if any sample data gives the same results from both functions (the octave ones and the TISEAN ones).<br />
<br />
The legend to understand the table is as follows:<br />
{| class="wikitable" <br />
|-style="background: LightGreen"<br />
|Green means the function is ported, tested or is not needed<br />
|-style="background: LightSalmon"<br />
|Red means the function was thought to have been similar but isn't<br />
|-style="background: Yellow"<br />
|Yellow means that the correlation between the TISEAN and Octave function needs to be verified<br />
|-<br />
|No color means that nothing about this function has been determined<br />
|}<br />
<br />
{| class="wikitable" <br />
|-<br />
! Program Name !! Program Description !! Corresponding Octave Function !! Lanuguage of Origin !! How to port !! Status<br />
|-<br />
| arima-model || Fit and possibly iterate an ARIMA model || generalizes TSA arma functions || C || wrapped in C++/mfile/octfile code ||<br />
|-<br />
|ar-model || Fit and possibly iterate an Autoregessive model || 'aar' in TSA; see also: aarmam, adim, amarma, mvaar from TSA || C || wrapped in C++/mfile/octfile code ||<br />
|-<br />
|ar-run || Iterate an Autoregessive model || Same as above || FORTRAN || wrapped in C++/mfile/octfile code ||<br />
|-style="background: LightGreen"<br />
|av-d2 || Simply smooth output of d2 || Can be implemented with filter in core || C || ||<br />
|-style="background: LightGreen"<br />
|boxcount || Renyi Entopies of Qth order || None in GNU Octave (maybe in info-theory but it is not worth the pain) || C || wrapped in C++/mfile/octfile code ||<br />
|-style="background: LightGreen"<br />
|c1 || Fixed mass estimation of D1 || None in GNU Octave || FORTRAN || wrapped in C++/mfile/octfile code ||<br />
|-style="background: LightGreen"<br />
|c2d || Get local slopes from correlation integral || None in GNU Octave || FORTRAN || wrapped in C++/mfile/octfile code ||<br />
|-style="background: LightGreen"<br />
|c2g || Gaussian kernel of C2 || None in GNU Octave || FORTRAN || wrapped in C++/mfile/octfile code ||<br />
|-style="background: LightGreen"<br />
|c2t || Takens estimator of D2 || None in GNU Octave || FORTRAN || wrapped in C++/mfile/octfile code ||<br />
|-style="background: LightGreen"<br />
|choose || Choose rows and/or columns from a data file || Does not need to be ported || FORTRAN || ----- || Not Needed<br />
|-style="background: LightGreen"<br />
|compare || Compares two data sets || Does not need to be ported || FORTRAN || ------ || Not Needed<br />
|-style="background: LightGreen"<br />
|corr, autocorr || Autocorrelation function || xcorr in signal || corr -C, autocorr (faster according to documentation) - FORTRAN || ------- || Different usage, same result<br />
|-style="background: LightGreen"<br />
|d2 || Correlation dimension d2 || None in GNU Octave || C || wrapped in C++/mfile/octfile code ||<br />
|-style="background: LightGreen"<br />
|delay || Creates delay embedding || None in GNU Octave (easy to implement in Octave but not worth the effort) || C || wrapped in C++/mfile/octfile code || Ported&Tested<br />
|-style="background: LightGreen"<br />
|endtoend || Determine end-to-end mismatch || None in GNU Octave || FORTRAN || wrapped in C++/mfile/octfile code || Ported&Tested<br />
|-<br />
|events || Interval/event conversion || None in GNU Octave || FORTRAN || To be reimplemented as m-file ||<br />
|-style="background: LightSalmon"<br />
|extrema || Determine the extrema of a time series || findpeaks in signal is *not* the same || C || ||<br />
|-style="background: LightGreen"<br />
|false_nearest || The false nearest neighbor algorithm || None in GNU Octave || C || wrapped in C++/mfile/octfile code || Ported&Tested<br />
|-style="background: LightGreen"<br />
|ghkss || Nonlinear noise reduction || None in GNU Octave || C || wrapped in C++/mfile/octfile code || Ported&Tested<br />
|-style="background: LightGreen"<br />
|henon || Create a Hรฉnon time series || None in GNU Octave || FORTRAN || To be reimplemented as m-file || Ported&Checked<br />
|-style="background: LightGreen"<br />
|histogram || Creates histograms || hist in core || C || || Different usage, same result<br />
|-style="background: LightGreen"<br />
|ikeda || Create an Ikeda time series || None in GNU Octave || FORTRAN || To be reimplemented as mfile || Ported&Tested<br />
|-<br />
|intervals || Event/intervcal conversion || Might exist under different name || FORTRAN || To be reimplemented as mfile ||<br />
|-style="background: LightGreen"<br />
|lazy || Simple nonlinear noise reduction || None in GNU Octave || FORTRAN || wrapped in C++/mfile/octfile code || Ported&Tested<br />
|-style="background: LightGreen"<br />
|lfo-ar || Locally first order model vs. global AR model (old ll-ar) || None in GNU Octave || C || wrapped in C++/mfile/octfile code ||<br />
|-style="background: LightGreen"<br />
|lfo-run || Iterate a locally first order model (old nstep) || None in GNU Octave || C || wrapped in C++/mfile/octfile code ||<br />
|-style="background: LightGreen"<br />
|lfo-test || Test a locally first order model (old onestep) || None in GNU Octave || C || wrapped in C++/mfile/octfile code ||<br />
|-style="background: Yellow"<br />
|lorenz || Create a Lorenz time series || Can be implemented in GNU Octave using lsode or odepkg|| FORTRAN || mfile ||<br />
|-<br />
|low121 || Time domain low pass filter || There are lowpass filters in Octave: buttap, cheb1ap, cheb2ap, ellipap, sftrans, but I don't think they perform this task || C || Reimplement as mfile ||<br />
|-style="background: LightGreen"<br />
|lyap_k || Maximal Lyapunov exponent with the Kantz algorithm || None in GNU Octave || C || wrapped in C++/mfile/octfile code ||<br />
|-style="background: LightGreen"<br />
|lyap_r || Maximal Lyapunov exponent with the Rosenstein algorithm || None in GNU Octave || C || wrapped in C++/mfile/octfile code ||<br />
|-style="background: LightGreen"<br />
|lyap_spec || Full spectrum of Lyapunov exponents || None in GNU Octave || C || wrapped in C++/mfile/octfile code ||<br />
|-style="background: LightGreen"<br />
|lzo-gm || Locally zeroth order model vs. global mean || None in GNU Octave || C || wrapped in C++/mfile/octfile code || Ported&Tested<br />
|-style="background: LightGreen"<br />
|lzo-run || Iterate a locally zeroth order model || None in GNU Octave || C || wrapped in C++/mfile/octfile code || Ported&Tested<br />
|-style="background: LightGreen"<br />
|lzo-test || Test a locally zeroth order model (old zeroth) || None in GNU Octave || C || wrapped in C++/mfile/octfile code || Ported&Tested<br />
|-<br />
|makenoise || Produce noise || Rand exists || Should be implemented as mfile using Octave rand functions || wrapped in C++/mfile/octfile code ||<br />
|-<br />
|mem_spec || Power spectrum using the maximum entropy principle || None in GNU Octave || C || wrapped in C++/mfile/octfile code ||<br />
|-style="background: LightGreen"<br />
|mutual || Estimate the mutual information || None in GNU Octave || C || wrapped in C++/mfile/octfile code || Ported&Tested<br />
|-style="background: Yellow"<br />
|notch || Notch filter || pei_tseng_notch, needs to be verified || FORTRAN || wrapped in C++/mfile/octfile code ||<br />
|-<br />
|nstat_z || Nonstationarity testing via cross-prediction || None in GNU Octave || C ||wrapped in C++/mfile/octfile code ||<br />
|-style="background: LightGreen"<br />
|pca, pc || Principle component analysis || 'pcacov' if likely the equivalent; pricomp in statistics || pca - C, pc - FORTRAN || wrapped in C++/mfile/octfile code || Ported&Tested<br />
|-style="background: LightGreen"<br />
|poincare || Create Poincarรฉ sections || None in GNU Octave || C || wrapped in C++/mfile/octfile code || Ported&Tested<br />
|-style="background: LightSalmon"<br />
|polyback || Fit a polynomial model (backward elimination) || polyfit, detrend, wpolyfit are not similar || C || wrapped in C++ || Porting needed<br />
|-style="background: LightGreen"<br />
|polynom || Fit a polynomial model || same as above || C || || Ported&Tested<br />
|-style="background: LightSalmon"<br />
|polynomp || Fit a polynomial model (reads terms to fit from file) || same as above || C || ||<br />
|-style="background: LightSalmon"<br />
|polypar || Creates parameter file for polynomp || same as above || C || ||<br />
|-style="background: LightGreen"<br />
|predict || Forecast discriminating statistics for surrogates || None in GNU Octave || FORTRAN || wrapped in C++/mfile/octfile code || Same as lzo_test; Not Needed<br />
|-<br />
|randomize || General constraint randomization (surrogates) || There are random function, but I don't think this one exists || FORTRAN || wrapped in C++/mfile/octfile code ||<br />
|-<br />
|randomize_spikeauto_exp_random || Surrogate data preserving event time autocorrelations || Same as above || FORTRAN || wrapped in C++/mfile/octfile code ||<br />
|-<br />
|randomize_spikespec_exp_event || Surrogate data preserving event time power spectrum || Same as above || FORTRAN || wrapped in C++/mfile/octfile code ||<br />
|-style="background: LightGreen"<br />
|rbf || Radial basis functions fit || None in GNU Octave || C || wrapped in C++/mfile/octfile code ||<br />
|-<br />
|recurr || Creates a recurrence plot || None in GNU Octave || C || wrapped in C++/mfile/octfile code ||<br />
|-style="background: Yellow"<br />
|resample || Resamples data || interp1 is similar but cannot specify the polynomial order except for some given || C || wrapped in C++/mfile/octfile code ||<br />
|-style="background: LightGreen"<br />
|rescale || Rescale data set || This is just multiplication by scalars || C || wrapped in C++/mfile/octfile code ||Not Needed<br />
|-style="background: LightGreen"<br />
|rms || Rescale data set and get mean, variance and data interval || This should be in Octave, cannot find... || FORTRNAN || wrapped in C++/mfile/octfile code || Not Needed<br />
|-style="background: Yellow"<br />
|sav_gol || Savitzky-Golay filter || sgolayfilt in signal || C || ||<br />
|-style="background: LightGreen"<br />
|spectrum || Power spectrum using FFT || abs (fft (;)) || FORTRAN || Rewrite as m-file || Ported&Tested<br />
|-<br />
|spikeauto || Autocorrelation function of event times || similar to above || FORTRAN || ||<br />
|-<br />
|spikespec || Power spectrum of event times || ar_psd, cpsd is the closest but I do not think they are the same || FORTRAN || ||<br />
|-<br />
|stp || Creates a space-time separation plot || None in GNU Octave || FORTRAN || wrapped in C++/mfile/octfile code ||<br />
|-style="background: LightGreen"<br />
|surrogates || Creates surrogate data || None in GNU Octave || FORTRAN || wrapped in C++/mfile/octfile code || Ported&Tested<br />
|-style="background: LightGreen"<br />
|timerev || Time reversal discrimating statistics for surrogates || None in GNU Octave || FORTRAN || To be reimplemented as mfile || Ported&Tested<br />
|-style="background: LightGreen"<br />
|upo || Finds unstable periodic orbits and estimates their stability || None in GNU Octave || FORTRAN || wrapped in C++/mfile/octfile code || Ported&Tested<br />
|-style="background: LightGreen"<br />
|upoembed || Takes the output of upo and create data files out of it || None in GNU Octave || FORTAN || wrapped in C++/mfile/octfile code || Ported&Tested<br />
|-<br />
|wiener1, wiener2 || Wiener filter || Wiener process exists, might be similar || FORTRAN || wrapped in C++/mfile/octfile code ||<br />
|-<br />
|xc2 || Cross-correlation integral || xcorr2 - Needs to be verified that works the same way || FORTRAN || wrapped in C++/mfile/octfile code ||<br />
|-style="background: Yellow"<br />
|xcor || Cross-correlations || xcorr - Needs to be verified that works same way || C|| wrapped in C++/mfile/octfile code || <br />
|-<br />
|xrecur || Cross-recurrence Plot || xcorr, or xcorr2 or another function might cover this || C || wrapped in C++/mfile/octfile code ||<br />
|-style="background: LightGreen"<br />
|xzero || Locally zeroth order cross-prediction || None in GNU Octave || C || wrapped in C++/mfile/octfile code ||<br />
|}<br />
<br />
<br />
[[Category:Octave Forge]]<br />
<br />
== External links ==<br />
* [https://sourceforge.net/p/octave/tisean/ci/default/tree/ Repository] where the porting is taking place.</div>Nirhttps://wiki.octave.org/wiki/index.php?title=Summer_of_Code_-_Getting_Started&diff=13550Summer of Code - Getting Started2021-01-20T14:55:54Z<p>Nir: minor edits and conformity to shorter GSoC</p>
<hr />
<div>The following is largely distilled from the [[Projects]] page for the benefit of potential [https://summerofcode.withgoogle.com Google] and [https://socis.esa.int/ ESA] Summer of Code (SoC) 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.<br />
<br />
You can also take a look at last years [[Summer of Code]] projects for inspiration.<br />
<br />
= Steps Toward a Successful Application =<br />
<br />
== Help Us Get To Know You == <br />
* If you aren't communicating with us before the application is due, your application will not be accepted.<br />
*:* '''Join the [https://lists.gnu.org/mailman/listinfo/octave-maintainers maintainers mailing list]''' or read the archives and see what topics we discuss and how the developers interact with each other.<br />
*:* '''Hang out in our [https://webchat.freenode.net/?channels=#octave IRC channel]'''. Ask questions, answer questions from users, show us that you are motivated and well-prepared. There will be more applicants than we can effectively mentor, so do ask for feedback on your public application to increase the strength of your proposal!<br />
* '''Do not wait for us to tell you what to do'''<br />
*: You should be doing something that interests you, and should not need us to tell you what to do. Similarly, you shouldn't ask us what to do either.<br />
*:* When you email the list and mentors, do not write just to say in what project you're interested. Be specific about your questions and clear on the email subject. For example, do not write an email with the subject "GSoC student interested in the ND images projects". Such email is likely to be ignored. Instead, show you are already working on the topic, and email "Problem implementing morphological operators with bitpacked ND images".<br />
*:* It is good to ask advice on how to solve something you can't, but you must show some work done. Remember, we are mentors and not your boss. Read [http://www.catb.org/esr/faqs/smart-questions.html How to ask questions the smart way]: <blockquote>''Prepare your question. Think it through. Hasty-sounding questions get hasty answers, or none at all. The more you do to demonstrate that having put thought and effort into solving your problem before seeking help, the more likely you are to actually get help.''</blockquote><br />
*:* It can be difficult at the beginning to think on something to do. This is nature of free and open source software development. You will need to break the mental barrier that prevents you from thinking on what can be done. Once you do that, you will have no lack of ideas for what to do next.<br />
*:* Use Octave. Eventually you will come across something that does not work the way you like. Fix that. Or you will come across a missing function. Implement it. It may be a hard problem (they usually are). While solving that problem, you may find other missing capabilities or smaller bug fixes. Implement and contribute those to Octave.<br />
*:* Take a look at the [[Short projects]] for something that may be simple to start with.<br />
<br />
== Find Something That Interests You == <br />
*: It's '''critical''' that you '''find a project that excites you'''. You'll be spending most of the summer working on it (we expect you to treat the SoC as a job).<br />
*: Don't just tell us how interested you are, show us that you're willing and able to '''contribute''' to Octave. You can do that by [https://savannah.gnu.org/bugs/?group=octave fixing a few bugs] or [https://savannah.gnu.org/patch/?group=octave submitting patches] well before the deadline, in addition to regularly interacting with Octave maintainers and users on the mailing list and IRC. Our experience shows us that successful SoC students demonstrate their interest early and often.<br />
== Prepare Your Proposal With Us ==<br />
*: By working with us to prepare your proposal, you'll be getting to know us and showing us how you approach problems. The best place for this is your Wiki user page and the [https://webchat.freenode.net/?channels=#octave IRC channel].<br />
== Complete Your Application ==<br />
*: Fill out our '''''public''''' application template.<br />
*:* This is best done by '''[[Special:CreateAccount|creating an account at this wiki]]''', and copying the '''[[Template:Student_application_template_public|template]]''' from its page.<br />
*:* You really only need to copy and answer the '''''public''''' part there, there is no need to showcase everything else to everybody reading your user page!<br />
*: Fill out our '''''private''''' application template.<br />
*:* This is best done by copying the '''[[Template:Student_application_template_private|template]]''' from its page and '''adding the required information to your application at Google (melange)''' or at '''ESA'''.<br><br />
*:* Only the organization admin and the possible mentors will see this data. You can still edit it after submitting, until the deadline!<br />
<br />
== Things You'll be Expected to Know or Quickly Learn On Your Own ==<br />
<br />
Octave is mostly written in C++ and its own scripting language that is mostly compatible with Matlab. 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 Octave's scripting language, successful applicants will be familiar with or able to quickly learn about Octave's infrastructure. You can't spend the whole summer learning how to build Octave or prepare a changeset and still successfully complete your project.<br />
<br />
* '''The Build System'''<br />
*: [http://en.wikipedia.org/wiki/GNU_build_system The GNU build system] is used to build Octave.<br />
*: 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.<br />
*: If you've ever done a {{Codeline|./configure && make && make install}} series of commands, you have already used the GNU build system.<br />
*: '''You must demonstrate that you are able to build the development version of Octave from sources before the application deadline.''' Linux is arguably the easiest system to work on. Instructions:<br />
*:* [[Building]]<br />
*:* [https://octave.org/doc/interpreter/Installation.html Octave Manual on Installing Octave]<br />
* '''The Version Control System'''<br />
*: We use [https://www.mercurial-scm.org/ Mercurial] (abbreviated hg).<br />
*: Mercurial is the [http://en.wikipedia.org/wiki/Distributed_Version_Control_System 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.<br />
* '''The Procedure for Contributing Changesets'''<br />
*: You will be expected to follow the same procedures as other contributors and core developers.<br />
*: You will be helping current and future Octave developers by using our standard style for changes, commit messages, and so on. You should also read the same [[Contribution guidelines | contribution]] [https://hg.savannah.gnu.org/hgweb/octave/file/tip/etc/HACKING.md guidelines] we have for everyone.<br />
*: [[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.<br />
* '''The Maintainers Mailing List'''<br />
*: We primarily use [https://lists.gnu.org/mailman/listinfo/octave-maintainers mailing lists] for communication among developers.<br />
*: The mailing list is used most often for discussions about non-trivial changes to Octave, or for setting the direction of development.<br />
*: You should follow basic mailing list etiquette. For us, this mostly means "do not [https://en.wikipedia.org/wiki/Posting_style#Top-posting top post]".<br />
* '''The IRC Channel'''<br />
*: We also have [http://webchat.freenode.net?channels=octave the #octave IRC channel in Freenode].<br />
*: You should be familiar with the IRC channel. It's very helpful for new contributors (you) to get immediate feedback on ideas and code.<br />
*: Unless your primary mentor has a strong preference for some other method of communication, the IRC channel might be your primary means of communicating with your mentor and Octave developers.<br />
* '''The Octave Forge Project'''<br />
*: [https://octave.sourceforge.io/ Octave Forge] is a collection of contributed packages that enhance the capabilities of core Octave. They are somewhat analogous to Matlab's toolboxes.<br />
* '''Related Skills'''<br />
*: In addition, you probably should know '''some''' mathematics, engineering, experimental science, or something of the sort.<br />
*: If so, you probably have already been exposed to the kinds of problems that Octave is used for.<br />
<br />
== Criteria by which applications are judged ==<br />
<br />
These might vary somewhat depending on the mentors and coordinators for a particular Summer of Code, but typically the main factors considered would be:<br />
<br />
* '''Applicant has demonstrated an ability to make substantial modifications to Octave'''<br />
*: The most important thing is that you've contributed some interesting code samples to judge you by. It's OK during the application period to ask for help on how to format these code samples, which normally are Mercurial patches.<br />
<br />
* '''Applicant shows understanding of topic'''<br />
*: Your application should make it clear that you're reasonably well versed in the subject area and won't need all summer just to read up on it.<br />
<br />
* '''Applicant shows understanding of and interest in Octave development'''<br />
*: The best evidence for this is previous contributions and interactions.<br />
<br />
* '''Well thought out, adequately detailed, realistic project plan'''<br />
*: "I'm good at this, so trust me" isn't enough. You should describe which algorithms you'll use and how you'll integrate with existing Octave code. You should also prepare a full timeline and goals for the midterm and final evaluations.<br />
<br />
= Suggested projects =<br />
<br />
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. You can also look at our [[Summer of Code|completed past projects]] for more inspiration.<br />
<br />
{{Note|These are suggested projects but you are welcome to propose your own projects provided you find an Octave mentor}}<br />
<br />
== Summary table ==<br />
<br />
{| class="wikitable sortable" style="text-align: center; width:99%"<br />
|-<br />
!Title<br />
!Mentor<br />
!co-Mentors<br />
!Class<br />
!New?<br />
!Difficulty<br />
!Last active<br />
|-<br />
! <br />!! !! !! !! !! !!<br />
|-<br />
| [[Summer of Code - Getting Started#ode15.7Bi.2Cs.7D_:_Matlab_Compatible_DAE_solvers | ode15{i,s} : Matlab Compatible DAE solvers]] || Carlo de Falco || Francesco Faccio, Marco Caliari, Jacopo Corno, Sebastian Schรถps || Numerical || No || Medium || GSoC 2016<br />
|-<br />
| [[Summer of Code - Getting Started#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<br />
|-<br />
| [[Summer of Code - Getting Started#Improve_iterative_methods_for_sparse_linear_systems | Improve iterative methods for sparse linear systems]] || Marco Caliari || Carlo de Falco || Numerical || No || Hard || SOCIS 2016<br />
|-<br />
| [[Summer of Code - Getting Started#EPA_hydrology_software_suite | EPA hydrology software suite]] || [[User:KaKiLa| KaKiLa]] || ? || Octave Forge || Yes || Medium || Never<br />
|-<br />
| [[Summer of Code - Getting Started#FullSWOF overland flow simulator | FullSWOF overland flow simulator]] || [[User:KaKiLa| KaKiLa]] || ? || Octave Forge || Yes || Medium || Never<br />
|-<br />
| [[Summer of Code - Getting Started#TISEAN_package | TISEAN: Nonlinear Time Series Analysis]] || [[User:KaKiLa|KaKiLa]] || ? || Octave Forge || [[TISEAN_package | No]] || Medium || GSoC 2015<br />
|-<br />
| [[Summer of Code - Getting Started#Octave_Package_management | Octave Package management]] || Sebastian Schรถps || [[User:KaKiLa|KaKiLa]], Carnรซ Draug, Carlo de Falco || Infrastructure || Yes || Medium || Never<br />
|-<br />
| [[Summer of Code - Getting Started#Symbolic_package | Symbolic package]] || Colin B. Macdonald || Mike Miller, Abhinav Tripathi || Octave Forge || [https://github.com/cbm755/octsympy Octsympy] || Medium || GSoC 2016<br />
|-<br />
| [[Summer of Code - Getting Started#OCS | OCS package]] || Sebastian Schรถps || Sebastian Schรถps || Octave Forge, Numerical || Yes || Easy || Never<br />
|-<br />
| [[Summer of Code - Getting Started#Using_Python_within_Octave | Pythonic package]] || Mike Miller || Colin B. Macdonald, Abhinav Tripathi || Infrastructure || No || Medium || some in GSoC 2016<br />
|-<br />
| [[Summer of Code - Getting Started#Jupyter_Notebook_Integration | Jupyter Notebook Integration]] || Mike Miller || Colin B. Macdonald, [[User:Siko1056|Kai T. Ohlhus]] || Infrastructure || Yes || Medium || Never<br />
|-<br />
| [[Summer of Code - Getting Started#Chebfun_in_Octave | Chebfun in Octave]] || Colin B. Macdonald || [[User:KaKiLa|KaKiLa]] || Infrastructure, Numerical || Yes || Hard || Never<br />
|-<br />
| [[Summer of Code - Getting Started#PolarAxes and Plotting Improvements | PolarAxes and Plotting Improvements ]] || ? || Rik || Graphics || Yes || Medium || Never<br />
|}<br />
<br />
== Numerical ==<br />
<br />
These projects involve implementing certain mathematical functions, primarily in core Octave.<br />
<br />
=== ode15{i,s} : Matlab Compatible DAE solvers ===<br />
<br />
An initial implementation of a Matlab compatible ode15{i,s} solver,<br />
based on [http://computation.llnl.gov/projects/sundials SUNDIALS], <br />
was done by Francesco Faccio during<br />
GSOC 2016.<br />
The blog describing the work is [http://gsoc2016ode15s.blogspot.it/ here].<br />
The resulting code has been pushed into the main Octave repository in the development branch and<br />
consists mainly of the following three files<br />
[https://hg.savannah.gnu.org/hgweb/octave/file/tip/libinterp/dldfcn/__ode15__.cc __ode15__.cc],<br />
[https://hg.savannah.gnu.org/hgweb/octave/file/tip/scripts/ode/ode15i.m ode15i.m] and<br />
[https://hg.savannah.gnu.org/hgweb/octave/file/tip/scripts/ode/ode15s.m ode15s.m].<br />
The list of outstanding tracker tickets concerning this implementation can be found <br />
[https://savannah.gnu.org/search/?Search=Search&words=ode15&type_of_search=bugs&only_group_id=1925&exact=1&max_rows=25#options here]<br />
<br />
Possible useful improvements that could be done in a new project include:<br />
<br />
* Implement a better function for selecting consistent initial conditions compatible with Matlab's decic.m. The algorithm to use is described [http://faculty.smu.edu/shampine/cic.pdf here]<br />
<br />
* make ode15{i,s} work with datatypes other than double<br />
<br />
* improve interpolation at intermediate time steps.<br />
<br />
* general code profiling and optimization <br />
<br />
Other tasks, not strictly connected to ode15{i,s} but closely related, that could be added <br />
to a possible project plan would be improving documentation and tests in odepkg and removing <br />
overlaps with the documentation in core Octave.<br />
<br />
* '''Required skills'''<br />
: C++; C; familiarity with numerical methods for DAEs; Basic knowledge of makefiles and/or autotools.<br />
* '''Difficulty'''<br />
: Medium.<br />
* '''Potential mentors'''<br />
: Francesco Faccio, Carlo de Falco, Marco Caliari, Jacopo Corno, Sebastian Schรถps<br />
<br />
=== Improve logm, sqrtm, funm ===<br />
<br />
The goal here is to implement some missing Matlab functions related to matrix functions like the [http://en.wikipedia.org/wiki/Matrix_exponential matrix exponential]. There is [http://octave.1599824.n4.nabble.com/matrix-functions-td3137935.html a general discussion] of the problem. A good starting point for available algorithms and open-source implementations is Higham and Deadman's [http://eprints.ma.man.ac.uk/2102/01/covered/MIMS_ep2014_8.pdf "A Catalogue of Software for Matrix Functions"].<br />
<br />
* '''Required skills'''<br />
: Read and Write both C++ and Octave code, find and read research papers, research experience in numerical analysis, familiarity with analysis of algorithms.<br />
* '''Difficulty'''<br />
: Difficult.<br />
* '''Potential mentors'''<br />
: Marco Caliari, Mudit Sharma<br />
<br />
=== Improve iterative methods for sparse linear systems ===<br />
<br />
GNU Octave currently has the following Krylov subspace methods for sparse linear systems: pcg (spd matrices) and pcr (Hermitian matrices), bicg,<br />
bicgstab, cgs, gmres, and qmr (general matrices). The description of some of them (pcr, qmr) and their error messages are not aligned. Moreover, they have similar blocks of code (input check for instance) which can be written once and for all in common functions. The first step in this project could be a revision and a synchronization of the codes, starting from the [https://socis16octave-improveiterativemethods.blogspot.com/ SOCIS2016] project, which is already merged into Octave (cset {{cset|6266e321ef22}}).<br />
<br />
In Matlab, some additional methods are available: minres and symmlq (symmetric matrices), bicgstabl (general matrices), lsqr (least<br />
squares). The second step in this project could be the implementation of some of these missing functions.<br />
<br />
The [https://www-users.cs.umn.edu/~saad/IterMethBook_2ndEd.pdf reference book by Yousef Saad] is available online.<br />
<br />
* '''Required skills'''<br />
: numerical linear algebra, m-file programming.<br />
* '''Difficulty'''<br />
: Maybe hard the mathematical part, medium the programming part.<br />
* '''Mentor'''<br />
: Marco Caliari, Carlo de Falco<br />
<br />
=== Chebfun in Octave ===<br />
<br />
[https://www.chebfun.org/ Chebfun] is a mathematics and software project for "numerical computing with functions". Basically it approximates functions to machine precision accuracy (10<sup>-15</sup>) using piecewise Chebyshev polynomial interpolants. Operations on those functions (arithmetic, derivatives, root-finding, etc) are then overloaded and return new interpolating polynomials, which are themselves proxies for the actual solution.<br />
<br />
Chebfun makes extensive use of classdef classes, and is one of the largest Free Software projects to do so. Unfortunately it currently only works in Matlab. This project seeks to (1) improve Octave's classdef support and (2) tweak Chebfun to work under Octave, for example, removing undocumented classdef features. The final goal is to have at least basic Chebfun features working on Octave. An additional goal would be making <code>pkg install chebfun.zip</code> work in Octave.<br />
<br />
The impact of this project is improving Octave and allowing Chebfun to be used without proprietary software.<br />
<br />
How to get started:<br />
<br />
* Learn about [https://www.chebfun.org/ Chebfun]<br />
* Browse [https://savannah.gnu.org/bugs/?group=octave Octave's bug list] for "classdef"-related bugs.<br />
<br />
* Clone this Chebfun [https://github.com/cbm755/chebfun/tree/octave_dev octave_dev branch].<br />
** On that, <code>f = chebfun(@(x) sin(x), [-2 6])</code> should work with Octave 4.3.0+ and maybe even with 4.2.1. Check that <code>f(pi)</code> and <code>g = f + 1</code> work.<br />
** A good first task would be to study [https://github.com/cbm755/chebfun/commit/e20b0ad2dc89cfe8e50ba461b864eff7d5bbef17 this commit], a workaround for <code>f.funs{1}</code> using <code>temp = f.funs; temp{1}</code>. <code>2*f</code> is failing, can you fix it, perhaps with this workaround? Or can you make <code>f.funs{1}</code> work by changing something in <code>@chebfun/subsref.m</code>?<br />
<br />
<br />
* '''Required skills'''<br />
: Octave m-file programming, classdef programming, probably C++, some familiarity with Approximation Theory (a branch of mathematics).<br />
* '''Difficulty'''<br />
: Medium (fixing Octave classdef bugs likely harder and requires a deep dive into how Octave supports OOP).<br />
* '''Potential mentors'''<br />
: Colin B. Macdonald, [[User:KaKiLa|KaKiLa]], Mike Miller (?), Carnรซ Draug (?), someone from Chebfun team (?).<br />
<br />
== Adding functionality to Forge packages ==<br />
<br />
<br />
=== EPA hydrology software suite ===<br />
Create native interfaces to the EPA software suites.<br />
<br />
Starting points<br />
* [https://forja.cica.es/projects/epanet-octave/ epanet-octave].<br />
* [https://github.com/OpenWaterAnalytics/ Open Water Analytics]<br />
<br />
* '''SWMM'''<br />
** [https://www.epa.gov/water-research/storm-water-management-model-swmm Official page]<br />
** Check work done in [https://github.com/water-systems/MatSWMM MatSWMM] [http://digital.csic.es/bitstream/10261/132982/1/MatSWMM.pdf article]<br />
<br />
* '''EPANET'''<br />
** [https://www.epa.gov/water-research/epanet Official page]<br />
<br />
* '''Required skills'''<br />
: m-file scripting, C, C++, API knowledge, file I/O, classdef (optional). <br />
<br />
* '''Difficulty'''<br />
: easy/medium<br />
<br />
* '''Mentor'''<br />
: [[User:KaKiLa|KaKiLa]]<br />
<br />
=== FullSWOF overland flow simulator ===<br />
Create scripting tools for (optional: native interfaces).<br />
<br />
Starting points<br />
* [https://www.idpoisson.fr/fullswof/ The FullSWOF Project].<br />
* [https://arxiv.org/abs/1204.3210 FullSWOF: A software for overland flow simulation]<br />
* [https://bitbucket.org/binello7/fswof2d Initial work on Bitbucket]<br />
<br />
* '''Required skills'''<br />
: m-file scripting, C, C++, API knowledge, file I/O, classdef (optional). <br />
<br />
* '''Difficulty'''<br />
: easy/medium<br />
<br />
* '''Mentor'''<br />
: [[User:KaKiLa|KaKiLa]]<br />
<br />
=== TISEAN package ===<br />
<br />
[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 has been [[TISEAN package | partially re-implemented]] as libre software. The objective is to integrate TISEAN as an Octave Forge package, as was done for the Control package.<br />
[[TISEAN_package | A lot has been completed]] but [[TISEAN_package:Procedure | there is still work left to do]].<br />
<br />
There are missing functions to do computations on spike trains, to simulate autoregresive models, to create specialized plots, etc. Do check [[TISEAN_package:Procedure#Table_of_functions|the progress of the project]] to see if you are interested.<br />
<br />
* [http://octave.sourceforge.net/tisean/overview.html Package help at source forge.] <br />
* [https://sourceforge.net/p/octave/tisean/ci/default/tree/ Package repository at source forge.] <br />
<br />
* '''Required skills'''<br />
: m-file scripting, C, C++, and FORTRAN API knowledge. <br />
* '''Difficulty'''<br />
: easy/medium<br />
* '''Mentor'''<br />
: [[User:KaKiLa|KaKiLa]]<br />
<br />
=== Symbolic package ===<br />
<br />
Octave's [https://github.com/cbm755/octsympy Symbolic package] provides symbolic computing and other [https://en.wikipedia.org/wiki/Computer_algebra_system computer algebra system] tools. The main component of Symbolic is a pure m-file class "@sym" which uses the Python package [https://www.sympy.org SymPy] to do (most of) the actual computations. The package aims to expose the full functionality of SymPy while also providing a high level of compatibility with the Matlab Symbolic Math Toolbox. The Symbolic package requires communication between Octave and Python. A GSoC2016 project successfully re-implemented this communication using the new [[Pythonic|Pythonic package]].<br />
<br />
This project proposes to go further: instead of using Pythonic only for the communication layer, we'll use it throughout the Symbolic project. For example, we might make "@sym" a subclass of "@pyobject". We also could stop using the "python_cmd" interface and use Pythonic directly from methods. The main goal was already mentioned: to expose the *full functionality* of SymPy. For example, we would allow OO-style method calls such as "f.diff(x)" instead of "diff(f, x)".<br />
<br />
* '''Required skills'''<br />
: OO-programming with m-files, Python, and possibly C/C++ for improving Pythonic (if needed).<br />
* '''Difficulty'''<br />
: easy/medium<br />
* '''Mentors and/or other team members'''<br />
: Colin B. Macdonald, Mike Miller, Abhinav Tripathi<br />
<br />
=== OCS ===<br />
<br />
[[Ocs package | OCS]] is a circuit simulator for Octave. The objective of this project is to update the code to use modern features of Octave (e.g. classdef), [https://savannah.gnu.org/search/?Search=Search&words=%28ocs%29&type_of_search=bugs&only_group_id=1925&exact=1&max_rows=25#options fix open bugs], increase compatibility with SPICE and improve compatibility with other Octave packages (odepkg, control etc).<br />
<br />
* [http://octave.sourceforge.net/ocs/overview.html Package help at source forge.] <br />
<br />
* '''Required skills'''<br />
: m-file scripting, C, C++, and FORTRAN API knowledge. <br />
* '''Difficulty'''<br />
: easy/medium<br />
* '''Mentor'''<br />
: Sebastian Schรถps, Carlo de Falco<br />
<br />
== Infrastructure ==<br />
<br />
=== Jupyter Notebook Integration ===<br />
<br />
[http://jupyter.org Jupyter Notebook] is a web-based worksheet interface for computing. There is an [https://github.com/Calysto/octave_kernel Octave kernel for Jupyter]. This project seeks to improve that kernel to make Octave a first-class experience within the Jupyter Notebook.<br />
<br />
In general the [https://nbformat.readthedocs.io/en/latest/ Jupyter Notebook Format] is a plain JSON document, which is supported since Octave 7 (current development version). Another valuable project outcome is to run (and fill) those Jupyter Notebooks from within Octave. This would enable Jupyter Notebook users to evaluate long running Octave Notebooks on a computing server without permanent browser connection, which is [https://github.com/jupyter/notebook/issues/1647 still a pending issue].<br />
<br />
* '''Minimum requirements'''<br />
: Octave and Python programming knowledge.<br />
* '''Difficulty'''<br />
: Medium.<br />
* '''Mentors'''<br />
: [[User:Siko1056|Kai T. Ohlhus]], Colin B. Macdonald, Mike Miller<br />
<br />
=== Using Python within Octave ===<br />
<br />
[[Pythonic]] allows one to call Python functions and interact with Python objects from within Octave .m file code and from the Octave command line interface. Pythonic may eventually not be a separate package, but rather a core feature of Octave. This project aims to improve Pythonic with the goal of making the package more stable, maintainable, and full-featured.<br />
<br />
Based on a previous summer project related to Pythonic, this work will consist of fast-paced collaborative software development based on tackling the [https://gitlab.com/mtmiller/octave-pythonic/issues Pythonic issue list]. You would also be expected to participate in software design decisions and discussion, as well as improve documentation, doctests, and unit tests. As an example of the sorts of decisions being made, note that Octave indexes from 1 whereas Python typically indexes from 0; in which cases is it appropriate to make this transparent to the user?<br />
<br />
* '''Mentors'''<br />
: Mike Miller, Colin B. Macdonald, Abhinav Tripathi, others?<br />
<br />
<br />
=== Octave Package management ===<br />
<br />
[[Packages]] are extensions for Octave, that are mainly maintained by the [[Octave Forge]] community.<br />
To get those extension to work with Octave, there is a single function, {{manual|pkg}}, which does pretty much everything.<br />
This function has a few limitations which are hard to implement with the current codebase, and will most likely require a full rewrite.<br />
A major step forward for a rewritten package manager is the [https://github.com/apjanke/octave-packajoozle/ "packajoozle" project] by Andrew Janke.<br />
<br />
The planned improvements (see also {{bug|39479}}) are:<br />
<br />
* install and update from repositories (hg and git)<br />
* automatic handling of dependencies<br />
* easily load, update or check specific package versions<br />
* management of tests and demos in C++ sources of packages<br />
* more flexibility on dependencies, e.g., dependent on specific Octave build options or being dependent in one of multiple packages<br />
* support for multiple version packages<br />
* support for multiple Octave installs<br />
* support for system-wide and user installed packages<br />
* testing packages (<code>pkg test <package-name></code>)<br />
* improved metadata acquisition (<code>pkg list -forge</code>) from https://octave.sourceforge.io/<br />
<br />
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.<br />
However, the current {{manual|pkg}} also performs some maintenance functions which it probably should not.<br />
Instead a package for developers should be created with such tools.<br />
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]).<br />
<br />
Many of these problems have been solved in other languages.<br />
Familiarity with how other languages handle this problem will be useful to come up with elegant solutions.<br />
In some cases, there are standards to follow.<br />
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.<br />
See bugs {{bug|36477}} and {{bug|40444}} for more details.<br />
<br />
In addition, package names may start to collide very easily.<br />
One horrible way to work around this by is choosing increasingly complex package names that give no hint on the package purpose.<br />
A much better is option is providing an Authority category like Perl 6 does.<br />
Nested packages is also an easy way to provide packages for specialized subjects (think {{codeline|image::morphology}}).<br />
A new {{manual|pkg}} would think all this things now, or allow their implementation at a later time.<br />
Read the [[OEP:pkg|unfinished plan]] for more details.<br />
<br />
* '''Minimum requirements'''<br />
: 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.<br />
* '''Difficulty'''<br />
: Medium.<br />
* '''Mentor'''<br />
: [[User:KaKiLa|KaKiLa]], Carnรซ Draug, Carlo de Falco, Sebastian Schรถps<br />
<br />
== Image Analysis ==<br />
<br />
=== Improvements to N-dimensional image processing ===<br />
<br />
The image package has partial functionality for N-dimensional images. These images exist for example in medical imaging where slices from scans are assembled to form anatomical 3D images. If taken over time and at different laser wavelengths or light filters, they can also result in 5D images. Albeit less common, images with even more dimensions also exist. However, their existence is irrelevant since most of the image processing operations are mathematical operations which are independent of the number of dimensions.<br />
<br />
As part of GSoC 2013, the core functions for image IO, {{codeline|imwrite}} and {{codeline|imread}}, were extended to better support this type of images. Likewise, many functions in the image package, mostly morphology operators, were expanded to deal with this type of image. Since then, many other functions have been improved, sometimes completely rewritten, to abstract from the number of dimensions. In a certain way, supporting ND images is also related to choosing good algorithms since such images tend to be quite large.<br />
<br />
This project will build on the previous work, and be mentored by the previous GSoC student and current image package maintainer. Planning the project requires selection of functions lacking ND support and identifying their dependencies. For example, supporting {{codeline|imclose}} and {{codeline|imopen}} was better implemented by supporting {{codeline|imerode}} and {{codeline|imdilate}} which then propagated ND support to all of its dependencies. These dependencies need to be discovered first since often they are not being used yet, and may even be missing functions. This project can also be about implementing functions that have [[Image package#Missing functions | not yet been implemented]]. Also note that while some functions in the image package will accept ND images as input, they are actually not correctly implemented and will give incorrect results.<br />
<br />
* '''Required skills'''<br />
: m-file scripting, and a fair amount of C++ since a lot of image analysis cannot be vectorized. Familiarity with common computer science algorithms and willingness to read literature describing new algorithms will be useful. <br />
* '''Difficulty'''<br />
: Difficult.<br />
* '''Potential mentor'''<br />
: Carnรซ Draug<br />
<br />
=== Improve Octave's image IO ===<br />
<br />
There are a lot of image formats. Octave uses [http://www.graphicsmagick.org/ GraphicsMagic] (GM), a library capable of handling [http://www.graphicsmagick.org/formats.html a lot of them] in a single C++ interface. However, GraphicsMagick still has its limitations. The most important are:<br />
<br />
* GM has build option {{codeline|quantum}} which defines the bitdepth to use when reading an image. Building GM with high quantum means that images of smaller bitdepth will take a lot more memory when reading, but building it too low will make it impossible to read images of higher bitdepth. It also means that the image needs to always be rescaled to the correct range.<br />
* GM supports unsigned integers only, thus incorrectly reading files such as TIFF with floating point data<br />
* GM hides details of the image such as whether the image file is indexed. This makes it hard to access the real data stored on file.<br />
<br />
This project would implement better image IO for scientific file formats while leaving GM handle the others. Since TIFF is the de facto standard for scientific images, this should be done first. Among the targets for the project are:<br />
<br />
* implement the Tiff class, which is a wrapper around libtiff, using classdef. To avoid creating too many private __oct functions, this project could also create a C++ interface to declare new Octave classdef functions.<br />
* improve imread, imwrite, and imfinfo for tiff files using the newly created Tiff class<br />
* port bioformats into Octave and prepare a package for it<br />
* investigate other image IO libraries<br />
* clean up and finish the dicom package to include into Octave core<br />
* prepare a Matlab-compatible implementation of the FITS package for inclusion in Octave core<br />
<br />
* '''Required skills'''<br />
: Knowledge of C++ and C, since most libraries are written in those languages.<br />
* '''Difficulty'''<br />
: Medium.<br />
* '''Potential mentor'''<br />
: Carnรซ Draug<br />
<br />
== Graphics ==<br />
<br />
=== PolarAxes and Plotting Improvements ===<br />
<br />
Octave currently provides supports for polar axes by using a Cartesian 2-D axes and adding a significant number of properties and callback listeners to get things to work. What is needed is the implementation of a dedicated "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" exists 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. This relates to {{bug|35565}}, {{bug|49804}}, {{bug|52643}}.<br />
<br />
* '''Minimum requirements'''<br />
: Ability to read and write C++ code. Ability to read and write Octave code. Experience with OpenGL programming is optional.<br />
* '''Difficulty'''<br />
: Medium.<br />
* '''Mentor'''<br />
: Rik <br />
<br />
<noinclude><br />
[[Category:Summer of Code]]<br />
[[Category:Project Ideas]]<br />
</noinclude></div>Nirhttps://wiki.octave.org/wiki/index.php?title=Communications_package&diff=13513Communications package2020-12-28T17:51:09Z<p>Nir: remove implemented functions</p>
<hr />
<div>The {{Forge|communications}} package is part of the [[Octave Forge]] project and provides digital communications functions for use with Octave. The functions provided by the communications package include creation of signals and noise, channel modeling and equalization, block and convolutional coding, and modulation and demodulation.<br />
<br />
== Missing Functions ==<br />
<br />
This is a list of functions that are not yet implemented in the Octave communications package. This list is subject to change and may not be complete in any sense. However, it is a starting point when looking for missing functionality or for possible projects to work on.<br />
<br />
=== Signals ===<br />
<br />
* alignsignals<br />
* finddelay<br />
<br />
=== Source Coding ===<br />
<br />
* arithdeco<br />
* arithenco<br />
<br />
=== Block Interleaving ===<br />
<br />
* algdeintrlv<br />
* algintrlv<br />
* convdeintrlv<br />
* convintrlv<br />
* heldeintrlv<br />
* muxdeintrlv<br />
* muxintrlv<br />
<br />
=== Block Coding ===<br />
<br />
* bchdec<br />
* bchenc<br />
* bchgenpoly<br />
* bchnumerr<br />
* rsgenpolycoeffs<br />
<br />
=== Convolutional Coding ===<br />
<br />
* iscatastrophic<br />
* vitdec<br />
<br />
=== Modulation ===<br />
<br />
* dpskdemod<br />
* dpskmod<br />
* fskdemod<br />
* fskmod<br />
* modnorm<br />
* oqpskdemod<br />
* oqpskmod<br />
* pmdemod<br />
* pmmod<br />
* ssbdemod<br />
* ssbmod<br />
<br />
=== Channel Filters ===<br />
<br />
* intdump<br />
* rcosflt<br />
* rcosiir<br />
* rectpulse<br />
<br />
=== Galois Fields of Odd Characteristic ===<br />
<br />
* gfadd<br />
* gfconv<br />
* gfcosets<br />
* gfdeconv<br />
* gfdiv<br />
* gffilter<br />
* gflineq<br />
* gfminpol<br />
* gfmul<br />
* gfpretty<br />
* gfprimck<br />
* gfprimdf<br />
* gfprimfd<br />
* gfrank<br />
* gfrepcov<br />
* gfroots<br />
* gfsub<br />
* gftrunc<br />
* gftuple<br />
<br />
=== Utility Functions ===<br />
<br />
* bin2gray<br />
* gray2bin<br />
<br />
=== Equalization ===<br />
<br />
* cma<br />
* dfe<br />
* equalize<br />
* lineareq<br />
* lms<br />
* mlseeq<br />
* normlms<br />
* reset<br />
* rls<br />
* signlms<br />
* varlms<br />
<br />
=== Channel Models ===<br />
<br />
* legacychannelsim<br />
* plot<br />
* rayleighchan<br />
* ricianchan<br />
* stdchan<br />
<br />
=== Measurement and Analysis ===<br />
<br />
* berawgn<br />
* bercoding<br />
* berfading<br />
* berfit<br />
* bersync<br />
* distspec<br />
* noisebw<br />
* semianalytic<br />
<br />
=== Interactive Analysis Tools ===<br />
<br />
* bertool<br />
* EyeScope<br />
<br />
<br />
[[Category:Octave Forge]]<br />
[[Category:Missing functions]]</div>Nirhttps://wiki.octave.org/wiki/index.php?title=Project_-_Documentation&diff=12902Project - Documentation2020-04-22T18:56:26Z<p>Nir: /* Suggested Projects */</p>
<hr />
<div>:''This article contains project ideas related to improve GNU Octave's documentation. For general project ideas, see [[Projects]].''<br />
<br />
== News ==<br />
<br />
[[File:SeasonofDocs Logo SecondaryGrey 300ppi.png|right|200px|link=https://g.co/seasonofdocs]]<br />
* GNU Octave applies for the [https://g.co/seasonofdocs Google Season of Docs (GSoD)] 2020. Potential participation will be announced on '''May 11, 2020 at 12:00 UTC'''. Discuss about your ideas and application with us by<br />
** [https://lists.gnu.org/mailman/listinfo/octave-maintainers <code>maintainers@octave.org</code>] the maintainers mailing-list (please [https://en.wikipedia.org/wiki/Posting_style#Bottom-posting bottom post]!)<br />
** [http://webchat.freenode.net?channels=octave <code>#octave</code> IRC channel] in Freenode<br />
** updating this wiki page<br />
<br />
== Existing Documentation ==<br />
:''For a comprehensive list see [[Publications about Octave]].''<br />
<br />
* [https://www.gnu.org/software/texinfo/ Texinfo] user / developer documentation for the [https://octave.org/doc/interpreter/ Octave interpreter].<br />
<br />
* [[Doxygen]] documentation for the internal C++ classes and external API.<br />
<br />
* This wiki:<br />
** [[FAQ]]<br />
** [[:Category:Resources | Resources: Tutorials, Examples, Tips and Tricks, ...]]<br />
<br />
== Suggested Projects ==<br />
<br />
=== Octave's interpreter documentation ===<br />
<br />
'''Description'''<br />
<br />
The documentation for the interpreter is presumably the oldest, long grown documentation of the GNU Octave project. It is mostly written in [https://www.gnu.org/software/texinfo/ Texinfo] and strongly interleaved in the [[Building | Octave build process]], i.e., it is necessary to build Octave from source to generate included figures. Additionally, large portions of the Texinfo source are auto generated to stay close to the source code and to avoid stale documentation. A special type of this auto generation are the so-called [[Help text | "docstrings"]], which are extracted from both C++ files and Octave's own script files (m-files). <br />
<br />
The resulting Texinfo sources are translated to Info, PDF, PostScript, and HTML, whereas the HTML is further processed to match the [https://doc.qt.io/qt-5/qthelp-framework.html QT Help Framework], which is displayed in the Octave GUI.<br />
<br />
'''Improvements'''<br />
<br />
* Check for inconsistencies in the manual, e.g., outdated descriptions, awkwardly ordered information, ...<br />
* More examples and demo files for using each Octave command.<br />
* More figures to demonstrate Octave's plotting capabilities, but regard doc size and building time.<br />
* Think about a superior organization/splitting of the manual. Currently it covers many topics interleaved: user manual, function reference, developer guide.<br />
** Idea for a function reference including [[Octave Forge]] packages: https://octave.sourceforge.io/docs.php (unmaintained)<br />
* Document the documentation building process (e.g. rename and document involved scripts).<br />
<br />
'''Long term goals / highly controversial within the community'''<br />
<br />
* Syntax, structure, and source-code readability of Texinfo is a burden for some developers and newcomers. In short it is no "fun" editing those. Consider replacement by<br />
** [https://commonmark.org/ CommonMark/Markdown]<br />
** [https://docutils.readthedocs.io/en/sphinx-docs/user/rst/quickstart.html reStructuredText] / [https://www.sphinx-doc.org/ Sphinx]<br />
** ...<br />
<br />
'''Resources'''<br />
<br />
* '''Style Guides'''<br />
: [[Contribution guidelines#Coding style]]<br />
* '''Source code'''<br />
: https://hg.savannah.gnu.org/hgweb/octave/file/tip/doc/interpreter<br />
* '''Required skills'''<br />
: [https://www.gnu.org/software/texinfo/ Texinfo], [https://www.mercurial-scm.org/ hg], [[Building | building Octave from source]]<br />
* '''Potential mentors'''<br />
: [[User:siko1056 | Kai]]<br />
<br />
=== Octave's internal documentation ===<br />
<br />
'''Description'''<br />
<br />
[https://hg.savannah.gnu.org/hgweb/octave/rev/e16080e36cf9 Since 2013], Octave makes use of [http://www.doxygen.nl/ Doxygen], and [https://hg.savannah.gnu.org/hgweb/octave/file/tip/etc/HACKING.md <code>etc/HACKING.md</code>] for its internal documentation. There has been only moderate effort to add Doxygen comments to the entire code base or to create verbose descriptions for key techniques about how Octave works (here an example for [https://octave.org/doxygen/5.2/df/d4d/Macros.html important Octave macros]). Potential reasons for this circumstance are:<br />
# Lack of developer knowledge (code grew over 25 years), many "cryptic" macros, very complex class inheritance trees:<br />
#* [https://octave.org/doxygen/5.2/d0/d26/classArray.html <code>liboctave/Array</code>]<br />
#* [https://octave.org/doxygen/5.2/d6/d68/classoctave__base__value.html <code>libinterp/octave_base_value</code>]<br />
# long Doxygen build time to see results of documentation effort<br />
# huge size (about 2 GB), very impractical to "carry around", [https://octave.org/doxygen] slowly responding<br />
<br />
Nevertheless, there is a need for internal documentation:<br />
# Comprehensive documentation of Octave's [https://octave.org/doc/v5.2.0/External-Code-Interface.html external code interface].<br />
# Enable newcomers (e.g. GSoC students) to study Octave's code easily.<br />
# Avoid knowledge drain ([https://en.wikipedia.org/wiki/Bus_factor bus factor]).<br />
<br />
'''Improvements'''<br />
<br />
* The internal documentation should cover the following topics (a more verbose extension of [https://hg.savannah.gnu.org/hgweb/octave/file/tip/etc/HACKING.md <code>etc/HACKING.md</code>] [https://octave.org/doxygen/5.2/d1/d10/Hacking.html (html)]):<br />
** Overview about the code base (liboctave, libinterp, libgui, ...).<br />
** How Octave is built (necessary tools [versions], involved scripts, ...).<br />
** The release procedure, e.g. [[6.1 Release Checklist]].<br />
* Make the internal documentation '''obvious, easy to study and to extend, avoid effort duplication'''.<br />
** The internal documentation should not be fixed on Doxygen comments only.<br />
** As Octave's GUI makes use of qt, Doxygen might also be replaced by [https://doc.qt.io/qt-5/qdoc-index.html QDoc] with comparable markup.<br />
** Splitting the documentation into a wiki portion, etc., is imaginable, but it must be clearly documented where to find which information, '''avoid duplication''', nobody wants to update information in more than one location.<br />
* Technical goals are:<br />
** Smaller memory footprint for individual documents (unlike current Doxygen with about 2 GB).<br />
** Fast build time.<br />
** Lightweight (existing) documentation system. No heavy preprocessing / code generation by custom scripts.<br />
** As close to the source as necessary. Make it difficult to update the code while not updating its documentation. E.g. no wiki documentation for Octave's C++ files.<br />
<br />
'''Resources'''<br />
<br />
* '''Style Guides'''<br />
: [[C++ style guide#Doxygen]]<br />
* '''Source code'''<br />
: https://hg.savannah.gnu.org/hgweb/octave/file/tip/doc/doxyhtml<br />
* '''Required skills'''<br />
: [http://www.doxygen.nl/ Doxygen], [https://www.mercurial-scm.org/ hg], [[Building | building Octave from source]]<br />
* '''Potential mentors'''<br />
: [[User:siko1056 | Kai]]</div>Nirhttps://wiki.octave.org/wiki/index.php?title=Help_text_style_guide&diff=12883Help text style guide2020-04-21T13:16:37Z<p>Nir: /* Matlab */</p>
<hr />
<div>== Guidelines ==<br />
<br />
The first line of the documentation string should consist of a summary of<br />
the function.<br />
<br />
Subsequent lines may expand the general nature of the function.<br />
<br />
After the introduction there should be paragraphs describing the meaning<br />
and usage of each input, followed by the meaning and usage of each output.<br />
<br />
Finally, there may be more general information such as notes about the<br />
algorithm used, references to scientific papers, notes about any<br />
incompatibilities with Matlab, etc.<br />
<br />
=== First sentence ===<br />
<br />
The first sentence of help text should start with a statement that is like a command. For example, the first sentence of {{Codeline|hist}}:<br />
<pre><br />
Produce histogram counts or plots. # good<br />
Produces histogram counts or plots. # bad<br />
hist produces histogram counts or plots. # bad<br />
</pre><br />
<br />
Usually it looks good to do likewise for the rest of the first paragraph.<br />
Subsequent paragraphs usually look better if they have proper subjects.<br />
<br />
=== Voice ===<br />
<br />
Write documentation strings in the active voice, not the passive, and in<br />
the present tense, not the future. For instance, use "Return a list<br />
containing A and B." instead of "A list containing A and B will be<br />
returned."<br />
<br />
Avoid using the word "cause" (or its equivalents) unnecessarily.<br />
Instead of, "Cause Octave to display text in boldface," just write<br />
"Display text in boldface."<br />
<br />
=== Wording ===<br />
<br />
The documentation string for a variable that is a yes-or-no flag should<br />
start with words such as "Nonzero means...", to make it clear that<br />
all nonzero values are equivalent and indicate explicitly what zero and<br />
nonzero mean.<br />
<br />
=== Whitespace ===<br />
<br />
Use two spaces between the period marking the end of a sentence and the<br />
word which opens the next sentence. This convention has no effect for<br />
typeset formats like Tex, but improves the readability of the documentation<br />
in fixed-width environments such as the Info reader.<br />
<br />
<pre><br />
there is no correct for sentence spacing. But we need a convention # good<br />
there is no correct for sentence spacing. But we need a convention # bad<br />
</pre><br />
<br />
Do not start or end a documentation string with whitespace.<br />
<br />
Do not indent subsequent lines of a documentation string so<br />
that the text is lined up in the source code with the text of the first<br />
line. This looks nice in the source code, but looks bizarre when users<br />
view the documentation. Remember that the indentation before the<br />
starting double-quote is not part of the string!<br />
<br />
=== Line length ===<br />
<br />
Format the documentation string so that it fits within an 80-column screen.<br />
It is a good idea for most lines to be no wider than 60 characters.<br />
<br />
However, rather than simply filling the entire documentation string, you<br />
can make it much more readable by choosing line breaks with care.<br />
Use blank lines between topics if the documentation string is long.<br />
<br />
=== Variable naming ===<br />
<br />
When choosing variable names try to adhere to the following guidelines.<br />
<br />
{| class="wikitable"<br />
! Variable type<br />
! Standard names<br />
|-<br />
|vectors<br />
|x,y,z,t,w<br />
|-<br />
|matrices<br />
|A,B,M<br />
|-<br />
|strings<br />
|str, s<br />
|-<br />
|filename<br />
|fname<br />
|-<br />
|cells<br />
|c<br />
|-<br />
|cellstrs<br />
|cstr<br />
|}<br />
<br />
=== Manual reference ===<br />
<br />
When submitting a function to Octave, a tag for the docstring should be added to some appropriate place in one of the manual's .txi source files (they are all in {{Path|doc/interpreter/}}). Find the most appropriate section in the manual and add the following with the related functions:<br />
{{Code|adding tag for function help text in Octave's manual|<pre><br />
+@DOCSTRING(function_name)<br />
</pre>}}<br />
<br />
If appropriate, also write some text about the function on the manual for better inclusion into the manual.<br />
<br />
<br />
== TexInfo ==<br />
This is the preferred format for help text. There is also a comprehensive [https://www.gnu.org/software/texinfo/manual/texinfo/ TexInfo manual].<br />
<br />
=== Examples ===<br />
<br />
If you give a code example in the documentation written in Texinfo with<br />
the {{codeline|@example}} environment, you should be aware that the text<br />
within such an environment will not be wrapped. It is recommended that<br />
you keep the lines short enough to fit on pages in the generated pdf or<br />
ps documents. That means, keep the lines of examples under 60 characters.<br />
<br />
=== Octave specific macros ===<br />
==== seealso ====<br />
Do not use this macro empty as it will create problems with the {{forge|generate_html}} package.<br />
==== deftypefn ====<br />
This environment will enclose the function help text. It takes as argument the type of function. Typical values are<br />
* Function File -- for functions in .m files<br />
* Loadable Function -- for functions in .oct files<br />
* Accessor method<br />
* Class property<br />
<br />
Besides this environment there is also the alternative {{Codeline|deftypenx}} for alternative forms. Typically these are mentioned at the top of the help text, right after the {{Codeline|deftypen}} although this is not really necessary. Cases where it's acceptable to have them on other sections would be methods on the help text of a class constructor, since they will not always be on a separate file.<br />
<br />
=== Formatting ===<br />
<br />
==== Formulas ====<br />
Do not use the example environment to insert formulas, consider using {{Codeline|@verbatim}} instead. <br />
<br />
{{Code||<pre><br />
@verbatim<br />
E[Z(i,k) ]<br />
IRL(k) = ------------<br />
V(i)<br />
@end verbatim<br />
</pre>}}<br />
<br />
However, this will never print as a nice looking mathematical formula that TeX is known for. It is possible to have Tex formulas but then they won't be displayed on HTML or Info (Octave help) so the following can be done:<br />
<br />
{{Code||<pre><br />
@tex<br />
\def\frac#1#2{{\begingroup#1\endgroup\over#2}}<br />
$$ IRL(k) = \frac{E[Z(i,k)]}{V(i)} $$<br />
@end tex<br />
@ifnottex<br />
@verbatim<br />
E[Z(i,k) ]<br />
IRL(k) = ------------<br />
V(i)<br />
@end verbatim<br />
@end ifnottex<br />
</pre>}}<br />
<br />
==== Plain-tex missing macros ====<br />
When compared to LaTeX, plain TeX is missing some very useful macros for including mathematical notation. The following is a list of their definitions which can be added on a as needed basis:<br />
<br />
* frac<br />
<pre>\def\frac#1#2{{\begingroup#1\endgroup\over#2}}</pre><br />
<br />
=== Special inserts ===<br />
==== Escape characters ====<br />
To escape characters in TexInfo, use the character {{Codeline|@}}. Only the characters '''@''', '''{''' and '''}''' need to be escaped.<br />
<br />
* {{Codeline|<nowiki>@@</nowiki>}} stands for a single '''@''' (do not put braces after an {{Codeline|<nowiki>@@</nowiki>}} command)<br />
* {{Codeline|<nowiki>@{</nowiki>}} stands for a single '''{'''<br />
* {{Codeline|<nowiki>@}</nowiki>}} stands for a single '''}'''<br />
<br />
In certain contexts (such as {{Codeline|@acronym}} or {{Codeline|@xref}}), commas may need to be escaped. In such situations, use {{Codeline|<nowiki>@comma{}</nowiki>}}.<br />
<br />
==== Ellipsis (...) ====<br />
Ellipsis are frequently used in octave help text, especially when defining a function API. Use the {{Codeline|<nowiki>@dots{}</nowiki>}} rather than three dots.<br />
<br />
{{Code||<pre><br />
@deftypefn {Function File} {} imhist (@var{I})<br />
@deftypefnx {Function File} {[@var{counts}, @var{x}] =} imhist (@dots{})<br />
</pre>}}<br />
<br />
==== Matlab ====<br />
Sometimes it is needed to mention Matlab in the help text. An example might be to mention that a weird behavior needs to be kept for Matlab compatibility. In such case, small caps should be used. For example, the following is used in the {{Codeline|length}} help text:<br />
<br />
{{Code||<pre><br />
For matrix objects, the length is the number of rows or columns, whichever is<br />
greater (this odd definition is used for compatibility with @sc{matlab}).<br />
</pre>}}<br />
<br />
[[Category:Development]]</div>Nirhttps://wiki.octave.org/wiki/index.php?title=Help_text_style_guide&diff=12870Help text style guide2020-04-18T15:32:55Z<p>Nir: /* Ellipsis (...) */</p>
<hr />
<div>== Guidelines ==<br />
<br />
The first line of the documentation string should consist of a summary of<br />
the function.<br />
<br />
Subsequent lines may expand the general nature of the function.<br />
<br />
After the introduction there should be paragraphs describing the meaning<br />
and usage of each input, followed by the meaning and usage of each output.<br />
<br />
Finally, there may be more general information such as notes about the<br />
algorithm used, references to scientific papers, notes about any<br />
incompatibilities with Matlab, etc.<br />
<br />
=== First sentence ===<br />
<br />
The first sentence of help text should start with a statement that is like a command. For example, the first sentence of {{Codeline|hist}}:<br />
<pre><br />
Produce histogram counts or plots. # good<br />
Produces histogram counts or plots. # bad<br />
hist produces histogram counts or plots. # bad<br />
</pre><br />
<br />
Usually it looks good to do likewise for the rest of the first paragraph.<br />
Subsequent paragraphs usually look better if they have proper subjects.<br />
<br />
=== Voice ===<br />
<br />
Write documentation strings in the active voice, not the passive, and in<br />
the present tense, not the future. For instance, use "Return a list<br />
containing A and B." instead of "A list containing A and B will be<br />
returned."<br />
<br />
Avoid using the word "cause" (or its equivalents) unnecessarily.<br />
Instead of, "Cause Octave to display text in boldface," just write<br />
"Display text in boldface."<br />
<br />
=== Wording ===<br />
<br />
The documentation string for a variable that is a yes-or-no flag should<br />
start with words such as "Nonzero means...", to make it clear that<br />
all nonzero values are equivalent and indicate explicitly what zero and<br />
nonzero mean.<br />
<br />
=== Whitespace ===<br />
<br />
Use two spaces between the period marking the end of a sentence and the<br />
word which opens the next sentence. This convention has no effect for<br />
typeset formats like Tex, but improves the readability of the documentation<br />
in fixed-width environments such as the Info reader.<br />
<br />
<pre><br />
there is no correct for sentence spacing. But we need a convention # good<br />
there is no correct for sentence spacing. But we need a convention # bad<br />
</pre><br />
<br />
Do not start or end a documentation string with whitespace.<br />
<br />
Do not indent subsequent lines of a documentation string so<br />
that the text is lined up in the source code with the text of the first<br />
line. This looks nice in the source code, but looks bizarre when users<br />
view the documentation. Remember that the indentation before the<br />
starting double-quote is not part of the string!<br />
<br />
=== Line length ===<br />
<br />
Format the documentation string so that it fits within an 80-column screen.<br />
It is a good idea for most lines to be no wider than 60 characters.<br />
<br />
However, rather than simply filling the entire documentation string, you<br />
can make it much more readable by choosing line breaks with care.<br />
Use blank lines between topics if the documentation string is long.<br />
<br />
=== Variable naming ===<br />
<br />
When choosing variable names try to adhere to the following guidelines.<br />
<br />
{| class="wikitable"<br />
! Variable type<br />
! Standard names<br />
|-<br />
|vectors<br />
|x,y,z,t,w<br />
|-<br />
|matrices<br />
|A,B,M<br />
|-<br />
|strings<br />
|str, s<br />
|-<br />
|filename<br />
|fname<br />
|-<br />
|cells<br />
|c<br />
|-<br />
|cellstrs<br />
|cstr<br />
|}<br />
<br />
=== Manual reference ===<br />
<br />
When submitting a function to Octave, a tag for the docstring should be added to some appropriate place in one of the manual's .txi source files (they are all in {{Path|doc/interpreter/}}). Find the most appropriate section in the manual and add the following with the related functions:<br />
{{Code|adding tag for function help text in Octave's manual|<pre><br />
+@DOCSTRING(function_name)<br />
</pre>}}<br />
<br />
If appropriate, also write some text about the function on the manual for better inclusion into the manual.<br />
<br />
<br />
== TexInfo ==<br />
This is the preferred format for help text. There is also a comprehensive [https://www.gnu.org/software/texinfo/manual/texinfo/ TexInfo manual].<br />
<br />
=== Examples ===<br />
<br />
If you give a code example in the documentation written in Texinfo with<br />
the {{codeline|@example}} environment, you should be aware that the text<br />
within such an environment will not be wrapped. It is recommended that<br />
you keep the lines short enough to fit on pages in the generated pdf or<br />
ps documents. That means, keep the lines of examples under 60 characters.<br />
<br />
=== Octave specific macros ===<br />
==== seealso ====<br />
Do not use this macro empty as it will create problems with the {{forge|generate_html}} package.<br />
==== deftypefn ====<br />
This environment will enclose the function help text. It takes as argument the type of function. Typical values are<br />
* Function File -- for functions in .m files<br />
* Loadable Function -- for functions in .oct files<br />
* Accessor method<br />
* Class property<br />
<br />
Besides this environment there is also the alternative {{Codeline|deftypenx}} for alternative forms. Typically these are mentioned at the top of the help text, right after the {{Codeline|deftypen}} although this is not really necessary. Cases where it's acceptable to have them on other sections would be methods on the help text of a class constructor, since they will not always be on a separate file.<br />
<br />
=== Formatting ===<br />
<br />
==== Formulas ====<br />
Do not use the example environment to insert formulas, consider using {{Codeline|@verbatim}} instead. <br />
<br />
{{Code||<pre><br />
@verbatim<br />
E[Z(i,k) ]<br />
IRL(k) = ------------<br />
V(i)<br />
@end verbatim<br />
</pre>}}<br />
<br />
However, this will never print as a nice looking mathematical formula that TeX is known for. It is possible to have Tex formulas but then they won't be displayed on HTML or Info (Octave help) so the following can be done:<br />
<br />
{{Code||<pre><br />
@tex<br />
\def\frac#1#2{{\begingroup#1\endgroup\over#2}}<br />
$$ IRL(k) = \frac{E[Z(i,k)]}{V(i)} $$<br />
@end tex<br />
@ifnottex<br />
@verbatim<br />
E[Z(i,k) ]<br />
IRL(k) = ------------<br />
V(i)<br />
@end verbatim<br />
@end ifnottex<br />
</pre>}}<br />
<br />
==== Plain-tex missing macros ====<br />
When compared to LaTeX, plain TeX is missing some very useful macros for including mathematical notation. The following is a list of their definitions which can be added on a as needed basis:<br />
<br />
* frac<br />
<pre>\def\frac#1#2{{\begingroup#1\endgroup\over#2}}</pre><br />
<br />
=== Special inserts ===<br />
==== Escape characters ====<br />
To escape characters in TexInfo, use the character {{Codeline|@}}. Only the characters '''@''', '''{''' and '''}''' need to be escaped.<br />
<br />
* {{Codeline|<nowiki>@@</nowiki>}} stands for a single '''@''' (do not put braces after an {{Codeline|<nowiki>@@</nowiki>}} command)<br />
* {{Codeline|<nowiki>@{</nowiki>}} stands for a single '''{'''<br />
* {{Codeline|<nowiki>@}</nowiki>}} stands for a single '''}'''<br />
<br />
In certain contexts (such as {{Codeline|@acronym}} or {{Codeline|@xref}}), commas may need to be escaped. In such situations, use {{Codeline|<nowiki>@comma{}</nowiki>}}.<br />
<br />
==== Ellipsis (...) ====<br />
Ellipsis are frequently used in octave help text, especially when defining a function API. Use the {{Codeline|<nowiki>@dots{}</nowiki>}} rather than three dots.<br />
<br />
{{Code||<pre><br />
@deftypefn {Function File} {} imhist (@var{I})<br />
@deftypefnx {Function File} {[@var{counts}, @var{x}] =} imhist (@dots{})<br />
</pre>}}<br />
<br />
==== Matlab ====<br />
Sometimes it is need to mention matlab in the help text. For example, to mention that a weird behavior needs to be kept for matlab compatibility. In such case, small caps should be used. For example, the following is used in the {{Codeline|length}} help text:<br />
<br />
{{Code||<pre><br />
For matrix objects, the length is the number of rows or columns, whichever is<br />
greater (this odd definition is used for compatibility with @sc{matlab}).<br />
</pre>}}<br />
<br />
[[Category:Development]]</div>Nirhttps://wiki.octave.org/wiki/index.php?title=GSoD_2020_application&diff=12869GSoD 2020 application2020-04-18T14:40:29Z<p>Nir: </p>
<hr />
<div><br />
for [https://developers.google.com/season-of-docs/docs/admin-guide Google Season of Docs]<br />
<br />
=== Organization name ===<br />
<br />
GNU Octave<br />
<br />
=== Description ===<br />
<br />
GNU Octave is a high-level interpreted language, primarily intended for numerical computations.<br />
<br />
== What previous experience has your organization had in documentation or collaborating with technical writers? ==<br />
<br />
GNU Octave has a considerable amount of existing documentation, including a large manual, which is linked in our ideas page. This documentation was for the most part produced by programmer contributors to the project, rather than dedicated technical writers. However, improving documentation has long been recognized within the project as an area that would benefit from contributions by more people. Maintaining and improving documentation have been part of the code sprints that we hold in conjunction with our annual meeting and periodically. Anyone is also welcome to contribute documentation improvements through our bug and patch trackers, from which they are reviewed and may be added to the Octave code base. Thus, we have experience in managing documentation contributions from both veteran and new contributors.<br />
<br />
== What previous experience has your organization had mentoring individuals? ==<br />
<br />
We have a nice trajectory mentoring GSoC projects since 2011 (both as an independent organization and as part of GNU). We have also mentored some ESA Summer of Code in Space projects. [http://wiki.octave.org/Summer_of_Code This page] lists the successful projects that have been executed under our mentoring. The vast majority of these previous mentees finished their projects successfully, making substantive contributions to GNU Octave that have been integrated into our codebase. A number of GSoC alumni have continued making regular contributions to Octave, including volunteering to serve as mentors, and many remain available to help with any problems related to the code they wrote for the project.<br />
<br />
This experience has led to the development of a culture of good practices around mentoring. Each project will include at least one core Octave developer as mentor. These are proven, veteran members of the project who are familiar with the code base and with engaging the maintainer and user community. GNU Octave has applications in very diverse domains, so projects should also include a mentor with expertise in the relevant field. We set clear expectations on the minimum frequency of email and blog progress updates. We strive to have everything should be completely open. Almost all interactions should be public, e.g. contacting the mentor should happen in the public IRC channel or copy the maintainers mailing list.<br />
<br />
<br />
== How many technical writers does your organization want to mentor this year? == <br />
<br />
(1 or 2)<br />
<br />
=== Organization urls ===<br />
<br />
https://www.octave.org<br />
<br />
General Email: octave-maintainers@gnu.org<br />
<br />
Ideas: https://wiki.octave.org/Project_-_Documentation</div>Nirhttps://wiki.octave.org/wiki/index.php?title=GSoD_2020_application&diff=12868GSoD 2020 application2020-04-18T14:29:03Z<p>Nir: Created page with "s th === Organization name === GNU Octave === Description === GNU Octave is a high-level interpreted language, primarily intended for numerical computations. == What previ..."</p>
<hr />
<div>s th<br />
=== Organization name ===<br />
<br />
GNU Octave<br />
<br />
=== Description ===<br />
<br />
GNU Octave is a high-level interpreted language, primarily intended for numerical computations.<br />
<br />
== What previous experience has your organization had in documentation or collaborating with technical writers? ==<br />
<br />
GNU Octave has a considerable amount of existing documentation, including a large manual, which is linked in our ideas page. This documentation was for the most part produced by programmer contributors to the project, rather than dedicated technical writers. However, improving documentation has long been recognized within the project as an area that would benefit from contributions by more people. Maintaining and improving documentation have been part of the code sprints that we hold in conjunction with our annual meeting and periodically. Anyone is also welcome to contribute documentation improvements through our bug and patch trackers, from which they are reviewed and may be added to the Octave code base. Thus, we have experience in managing documentation contributions from both veteran and new contributors.<br />
<br />
== What previous experience has your organization had mentoring individuals? ==<br />
<br />
We have a nice trajectory mentoring GSoC projects since 2011 (both as an independent organization and as part of GNU). We have also mentored some ESA Summer of Code in Space projects. [http://wiki.octave.org/Summer_of_Code This page] lists the successful projects that have been executed under our mentoring. The vast majority of these previous mentees finished their projects successfully, making substantive contributions to GNU Octave that have been integrated into our codebase. A number of GSoC alumni have continued making regular contributions to Octave, including volunteering to serve as mentors, and many remain available to help with any problems related to the code they wrote for the project.<br />
<br />
This experience has led to the development of a culture of good practices around mentoring. Each project will include at least one core Octave developer as mentor. These are proven, veteran members of the project who are familiar with the code base and with engaging the maintainer and user community. GNU Octave has applications in very diverse domains, so projects should also include a mentor with expertise in the relevant field. We set clear expectations on the minimum frequency of email and blog progress updates. We strive to have everything should be completely open. Almost all interactions should be public, e.g. contacting the mentor should happen in the public IRC channel or copy the maintainers mailing list.<br />
<br />
<br />
== How many technical writers does your organization want to mentor this year? == <br />
<br />
(1 or 2)<br />
<br />
=== Organization urls ===<br />
<br />
https://www.octave.org<br />
<br />
General Email: octave-maintainers@gnu.org<br />
<br />
Ideas: https://wiki.octave.org/Project_-_Documentation</div>Nirhttps://wiki.octave.org/wiki/index.php?title=Template:Student_application_template_public&diff=12718Template:Student application template public2020-03-08T14:46:33Z<p>Nir: revert page</p>
<hr />
<div>= Public application template =<br />
This part should be answered in public on your '''[[Special:MyPage|user page]]'''. Please '''copy''' its source ('''edit''' tab) and then fill. '''DO NOT MAKE CHANGES TO THIS PAGE!''' Delete any examples and annotations (''this markup'') afterwards. Same for questions that do not apply to your situation.<br />
<br />
== A: An introduction ==<br />
* Please describe yourself in three sentences, one of them regarding your current studies.<br />
** Which languages do you speak?<br />
** What's your overall background? ''The general field you work in or are studying, e.g. computer science, physics, artificial intelligence, control theory...''<br />
*Why do you want to participate in the Google Summer of Code? What do you hope to gain by doing so?<br />
**Please also describe your previous experience with the GSoC, if any. ''Includes any community-bonding, mentor experience or application, not necessarily accepted. We use this subquestion to identify which students are unfamiliar with how the program goes, providing further support. It has no negative impact on your rating!''<br />
* Why are you choosing Octave?<br />
<br />
== C: Contact ==<br />
* Please state the (unique and identical where possible) nick you use on IRC and any other communication channel related to Octave. ''We really want unique nicks. You might want to bold it.''<br />
* Which time zone do you live in? Will that change over GSoC duration? ''Perhaps DST adjustment or a relocation. Note that both UTC and GMT are not aware of daylight saving time! Please state UTC+x or -x.''<br />
* Please state the timeframe (in UTC+0) when you feel most comfortable working during GSoC. Where are your time buffers? <br />
** ''Example: I usually code around 9.00 to 18.00 and could also try to start earlier (~7.00) for few days ;-)''<br />
<br />
== E: Coding experience ==<br />
This part is one of the more important ones in your application. You are allowed to be as verbose as you want, as long as you stay on topic ;-)<br />
* Please describe your experience with C++, Octave or Matlab m-scripts, OpenGL and Qt.<br />
* Please describe your experience with other programming languages.<br />
* Please describe your experience with being in a development team. ''Do you have experience working with open source or free projects?''<br />
* Please describe the biggest project you have written code for and what you learned by doing so. Also, describe your role in that project over time.<br />
* Please state the commits and patches you already contributed to Octave. ''This question (one of the most important parts by the way) is the only part of your application our wiki admins will edit for you even after the application deadline. Code sometimes speaks louder than many words do.''<br />
<br />
== F: Feeling fine ==<br />
* Please describe (in short) your experience with the following tools: ''We only use this question to determine where you need guidance, not for rating! We by no means expect you to be familiar with all of these and you won't necessarily need all of them while working with us.''<br />
** IRC and mailing lists <br />
** Mercurial or other source code management systems<br />
** Mediawiki or other wiki software<br />
** make, gcc, gdb or other development tools<br />
<br />
* What will make you actively stay in our community after this GSoC is over? ''You can also tell us after applications close and we'll happily try to fulfill :-)''<br />
<br />
== O: Only out of interest ==<br />
* Did you ever hear about Octave before? <br />
** If so, when and where? How far have you been involved already?<br />
** If not, where would you expect or advise us to do advertising?<br />
* What was the first question concerning Octave you could not find an answer to rather quickly? ''Of course more than one question can be stated. We try to improve based on this each year! Includes learning how to use it, code, website, GSoC application, โฆ''<br />
<br />
== P: Prerequisites ==<br />
* Please state the operating system you work with.<br />
* Please estimate an average time per day you will be able to access<br />
** an internet connection<br />
** a computer<br />
** a computer with your progressing work on<br />
<br />
* Please describe the degree to which you can install new software on computers you have access to.<br />
<br />
== S: Self-assessment ==<br />
* Please describe how useful criticism looks from your point of view as committing student.<br />
* How autonomous are you when developing:<br />
** Do you like to discuss changes intensively and not start coding until you know what you want to do?<br />
** Do you like to code a proof of concept to 'see how it turns out', modifying that and taking the risk of having work thrown away if it doesn't match what the project or original proponent had in mind?<br />
<br />
== Y: Your task ==<br />
* Did you select a task from our list of proposals and ideas?<br />
** If yes, what task did you choose? Please describe what part of it you especially want to focus on if you can already provide this information. ''Please also wiki-link the page for your elaborated proposal here.''<br />
* Please provide a rough estimated timeline for your work on the task. ''This should include the GSoC midterms and personal commitments like exams or vacation ("non-coding time"). If possible, include two or three milestones you expect.''<br />
[[Category: Summer of Code]]</div>Nirhttps://wiki.octave.org/wiki/index.php?title=GNU_Octave_Wiki&diff=12667GNU Octave Wiki2020-02-20T21:57:47Z<p>Nir: GSoC news</p>
<hr />
<div>[https://www.gnu.org/software/octave/ GNU Octave] is a high-level interpreted language, primarily intended for numerical computations. It provides capabilities for the numerical solution of linear and nonlinear problems, and for performing other numerical experiments. It also provides extensive graphics capabilities for data visualization and manipulation. GNU Octave is normally used through its interactive interface ([https://en.wikipedia.org/wiki/Command-line_interface CLI] and [https://en.wikipedia.org/wiki/Graphical_user_interface GUI]), but it can also be used to write non-interactive programs. The GNU Octave language is quite similar to Matlab so that most programs are easily portable.<br />
<br />
== [[:Category:Installation|Installing]] ==<br />
<br />
Installation instructions for:<br />
* [[Octave for macOS|macOS]]<br />
* [[Octave for GNU/Linux|GNU/Linux]], [[Octave for Android|Android]], and [[Octave for other Unix systems|other Unix systems]]<br />
* [[Octave for Microsoft_Windows|Microsoft Windows]]<br />
<br />
Get installers and sources from https://www.octave.org/download.<br />
<br />
{{Note|'''GNU Octave {{Release}}''' is the current stable release.}}<br />
<br />
Are you using an old version of Octave? Check the [[Release History]] page to see how old it is.<br />
<br />
== [https://www.gnu.org/software/octave/news.html News] ==<br />
<br />
* GNU Octave is a mentor organization for [https://summerofcode.withgoogle.com/ Google Summer of Code 2020]. Student applications are due March 31.<br />
* {{Release Date}} '''GNU Octave {{Release}}''' has been released (see above)!<br />
<br />
== Getting help ==<br />
<br />
* [[FAQ|Frequently asked questions (FAQ)]]<br />
* [https://www.gnu.org/software/octave/doc/interpreter GNU Octave documentation]<br />
* [https://www.gnu.org/software/octave/support.html Other support options]<br />
<br />
== [[:Category:Resources|Getting started]] ==<br />
<br />
* [[Publications using Octave#Books|Books]]<br />
* [[Video tutorials|Videos]]<br />
* [https://bagustris.github.io/octave-tutorial Short course]<br />
<br />
[[File:Octave-flower.svg|right|frame|[[:Category:Octave Forge|Octave Forge]] is a collection of high quality packages for GNU Octave.]]<br />
<br />
== [[Packages]] / [[:Category:Octave Forge|Octave Forge]] ==<br />
<br />
* [https://octave.org/doc/interpreter/Installing-and-Removing-Packages.html Installing packages]<br />
* [[Creating packages]]<br />
* '''[[:Category:Octave Forge|Octave Forge]]''' &mdash; A collection of high quality packages for GNU Octave.<br />
<br />
== [[:Category:Development|Development]] ==<br />
<br />
We always need more help improving Octave and there are many ways [https://www.gnu.org/software/octave/get-involved.html you can contribute]. You can help by fixing bugs, developing new features, answering questions on the mailing list or IRC channel, helping to improve this wiki or other web pages.<br />
<br />
* Get an overview about the [[:Category:Development|GNU Octave development]].<br />
* Take a look at our [[Projects|project ideas]] and [[Summer of Code Project Ideas|Summer of Code project ideas]].<br />
<br />
== [[:Category:Academia|Academia]] ==<br />
<br />
* [[Publications using Octave]] &mdash; A compilation of scientific publications making reference to GNU Octave (add yours!).<br />
<br />
== External Links ==<br />
<br />
* [https://www.gnu.org/software/octave/ Octave Homepage]<br />
* [https://octave.sourceforge.io/ Octave Forge]<br />
* [https://savannah.gnu.org/bugs/?group=octave Bug Tracker]<br />
* [https://savannah.gnu.org/task/?group=octave Task Tracker]<br />
* [https://savannah.gnu.org/patch/?group=octave Patch Tracker]<br />
* [https://savannah.gnu.org/hg/?group=octave Development Repositories]<br />
* [https://planet.octave.org/ Planet Octave] - A collection of blog feeds featuring Octave developers and [[Summer of Code]] students.</div>Nirhttps://wiki.octave.org/wiki/index.php?title=Summer_of_Code_-_Getting_Started&diff=12595Summer of Code - Getting Started2020-01-29T23:10:52Z<p>Nir: </p>
<hr />
<div>The following is distilled from the [[Projects]] page for the benefit of potential [https://summerofcode.withgoogle.com Google] and [https://socis.esa.int/ ESA] Summer of Code (SoC) 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.<br />
<br />
You can also take a look at last years [[Summer of Code]] projects for inspiration.<br />
<br />
= Steps Toward a Successful Application =<br />
<br />
== Help Us Get To Know You == <br />
*: If you aren't communicating with us before the application is due, your application will not be accepted.<br />
*:* '''Join the [https://lists.gnu.org/mailman/listinfo/octave-maintainers maintainers mailing list]''' or read the archives and see what topics we discuss and how the developers interact with each other.<br />
*:* '''Hang out in our [https://webchat.freenode.net/?channels=#octave IRC channel]'''. Ask questions, answer questions from users, show us that you are motivated, and well-prepared. There will be more applicants than we can effectively mentor, so do ask for feedback on your public application to increase the strength of your proposal!<br />
* '''Do not wait for us to tell you what to do'''<br />
*: You should be doing something that interests you, and should not need us to tell you what to do. Similarly, you shouldn't ask us what to do either.<br />
*:* When you email the list and mentors, do not write it to say in what project you're interested. Be specific about your questions and clear on the email subject. For example, do not write an email with the subject "GSoC student interested in the ND images projects". Such email is likely be ignored. Instead, show you are already working on the topic, and email "Problem implementing morphological operators with bitpacked ND images".<br />
*:* It is good to ask advice on how to solve something you can't but you must show some work done. Remember, we are mentors and not your boss. Read [http://www.catb.org/esr/faqs/smart-questions.html How to ask questions the smart way]:<br />
*:*: <blockquote cite="http://www.catb.org/esr/faqs/smart-questions.html">''Prepare your question. Think it through. Hasty-sounding questions get hasty answers, or none at all. The more you do to demonstrate that having put thought and effort into solving your problem before seeking help, the more likely you are to actually get help.''</blockquote><br />
*:* It can be difficult at the beginning to think on something to do. This is nature of free and open source software development. You will need to break the mental barrier that prevents you from thinking on what can be done. Once you do that, you will have no lack of ideas for what to do next.<br />
*:* Use Octave. Eventually you will come across something that does not work the way you like. Fix that. Or you will come across a missing function. Implement it. It may be a hard problem (they usually are). While solving that problem, you may find other missing capabilities or smaller bug fixes. Implement and contribute those to Octave.<br />
*:* Take a look at the [[Short projects]] for something that may be simple to start with.<br />
<br />
== Find Something That Interests You == <br />
*: It's '''critical''' that you '''find a project that excites you'''. You'll be spending most of the summer working on it (we expect you to treat the SoC as a full-time job).<br />
*: Don't just tell us how interested you are, show us that you're willing and able to '''contribute''' to Octave. You can do that by [https://savannah.gnu.org/bugs/?group=octave fixing a few bugs] or [http://savannah.gnu.org/patch/?group=octave submitting patches] well before the deadline, in addition to regularly interacting with Octave maintainers and users on the mailing list and IRC. Our experience shows us that successful SoC students demonstrate their interest early and often.<br />
== Prepare Your Proposal With Us ==<br />
*: By working with us to prepare your proposal, you'll be getting to know us and showing us how you approach problems. The best place for this is your Wiki user page and the [https://webchat.freenode.net/?channels=#octave IRC channel].<br />
== Complete Your Application ==<br />
*: Fill out our '''''public''''' application template.<br />
*:* This is best done by '''[[Special:CreateAccount|creating an account at this wiki]]''', and copying the '''[[Template:Student_application_template_public|template]]''' from its page.<br />
*:* You really only need to copy and answer the '''''public''''' part there, there is no need to showcase everything else to everybody reading your user page!<br />
*: Fill out our '''''private''''' application template.<br />
*:* This is best done by copying the '''[[Template:Student_application_template_private|template]]''' from its page and '''adding the required information to your application at Google (melange)''' or at '''ESA'''.<br><br />
*:* Only the organization admin and the possible mentors will see this data. You can still edit it after submitting until the deadline!<br />
<br />
== Things You'll be Expected to Know or Quickly Learn On Your Own ==<br />
<br />
Octave is mostly written in C++ and its own scripting language that is mostly compatible with Matlab. 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 Octave's scripting language, successful applicants will be familiar with or able to quickly learn about Octave's infrastructure. You can't spend the whole summer learning how to build Octave or prepare a changeset and still successfully complete your project.<br />
<br />
* '''The Build System'''<br />
*: [http://en.wikipedia.org/wiki/GNU_build_system The GNU build system] is used to build Octave.<br />
*: 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.<br />
*: If you've ever done a {{Codeline|./configure && make && make install}} series of commands, you have already used the GNU build system.<br />
*: '''You must demonstrate that you are able to build the development version of Octave from sources before the application deadline.''' Linux is arguably the easiest system to work on. Instructions:<br />
*:* [[Building]]<br />
*:* [https://www.gnu.org/software/octave/doc/interpreter/Installation.html Octave Manual on Installing Octave]<br />
* '''The Version Control System'''<br />
*: We use [https://www.mercurial-scm.org/ Mercurial] (abbreviated hg).<br />
*: Mercurial is the [http://en.wikipedia.org/wiki/Distributed_Version_Control_System 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.<br />
* '''The Procedure for Contributing Changesets'''<br />
*: You will be expected to follow the same procedures as other contributors and core developers.<br />
*: You will be helping current and future Octave developers by using our standard style for changes, commit messages, and so on. You should also read the same [[Contribution guidelines | contribution]] [http://hg.savannah.gnu.org/hgweb/octave/file/tip/etc/HACKING.md guidelines] we have for everyone.<br />
*: [[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.<br />
* '''The Maintainers Mailing List'''<br />
*: We primarily use [https://lists.gnu.org/mailman/listinfo/octave-maintainers mailing lists] for communication among developers.<br />
*: The mailing list is used most often for discussions about non-trivial changes to Octave, or for setting the direction of development.<br />
*: You should follow basic mailing list etiquette. For us, this mostly means "do not [https://en.wikipedia.org/wiki/Posting_style#Top-posting top post]".<br />
* '''The IRC Channel'''<br />
*: We also have [http://webchat.freenode.net?channels=octave the #octave IRC channel in Freenode].<br />
*: You should be familiar with the IRC channel. It's very helpful for new contributors (you) to get immediate feedback on ideas and code.<br />
*: Unless your primary mentor has a strong preference for some other method of communication, the IRC channel will likely be your primary means of communicating with your mentor and Octave developers.<br />
* '''The Octave Forge Project'''<br />
*: [https://octave.sourceforge.io/ Octave-Forge] is a collection of contributed packages that enhance the capabilities of core Octave. They are somewhat analogous to Matlab's toolboxes.<br />
* '''Related Skills'''<br />
*: In addition, you probably should know '''some''' mathematics, engineering, experimental science, or something of the sort.<br />
*: If so, you probably have already been exposed to the kinds of problems that Octave is used for.<br />
<br />
== Criteria by which applications are judged ==<br />
<br />
These might vary somewhat depending on the mentors and coordinators for a particular Summer of Code, but typically the main factors considered would be:<br />
<br />
* '''Applicant has demonstrated an ability to make substantial modifications to Octave'''<br />
*: The most important thing is that you've contributed some interesting code samples to judge you by. It's OK during the application period to ask for help on how to format these code samples, which normally are Mercurial patches.<br />
<br />
* '''Applicant shows understanding of topic'''<br />
*: Your application should make it clear that you're reasonably well versed in the subject area and won't need all summer just to read up on it.<br />
<br />
* '''Applicant shows understanding of and interest in Octave development'''<br />
*: The best evidence for this is previous contributions and interactions.<br />
<br />
* '''Well thought out, adequately detailed, realistic project plan'''<br />
*: "I'm good at this, so trust me" isn't enough. You should describe which algorithms you'll use and how you'll integrate with existing Octave code. You should also prepare a full timeline and goals for the midterm and final evaluations.<br />
<br />
= Suggested projects =<br />
<br />
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. You can also look at our [[Summer of Code|completed past projects]] for more inspiration.<br />
<br />
{{Note|these are suggested projects but you are welcome to propose your own projects provided you find an Octave mentor}}<br />
<br />
== Summary table ==<br />
<br />
{| class="wikitable sortable" style="text-align: center; width:99%"<br />
|-<br />
!Title<br />
!Mentor<br />
!co-Mentors<br />
!Class<br />
!New?<br />
!Difficulty<br />
!Last active<br />
|-<br />
! <br />!! !! !! !! !! !!<br />
|-<br />
| [[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<br />
|-<br />
| [[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<br />
|-<br />
| [[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<br />
|-<br />
| [[Summer_of_Code_Project_Ideas#EPA_hydrology_software_suite | EPA hydrology software suite]] || [[User:KaKiLa| KaKiLa]] || ? || Octave Forge || Yes || Medium || Never<br />
|-<br />
| [[Summer_of_Code_Project_Ideas#FullSWOF overland flow simulator | FullSWOF overland flow simulator]] || [[User:KaKiLa| KaKiLa]] || ? || Octave Forge || Yes || Medium || Never<br />
|-<br />
| [[Summer_of_Code_Project_Ideas#TISEAN_package | TISEAN: Nonlinear Time Series Analysis]] || [[User:KaKiLa|KaKiLa]] || ? || Octave Forge || [[TISEAN_package | No]] || Medium || GSoC 2015<br />
|-<br />
| [[Summer_of_Code_Project_Ideas#Octave_Package_management | Octave Package management]] || Sebastian Schรถps || [[User:KaKiLa|KaKiLa]], Carnรซ Draug, Carlo de Falco || Infrastructure || Yes || Medium || Never<br />
|-<br />
| [[Summer_of_Code_Project_Ideas#Symbolic_package | Symbolic package]] || Colin B. Macdonald || Mike Miller, Abhinav Tripathi || Octave Forge || [https://github.com/cbm755/octsympy Octsympy] || Medium || GSoC 2016<br />
|-<br />
| [[Summer_of_Code_Project_Ideas#Interval_package | Interval package]] || [[User:oheim|Oliver Heimlich]] || [[User:Siko1056|Kai T. Ohlhus]] || Octave Forge, Numerical || No || Medium || [https://gsocinterval.blogspot.de/ GSoC 2017]<br />
|-<br />
| [[Summer_of_Code_Project_Ideas#OCS | OCS package]] || Sebastian Schรถps || Sebastian Schรถps || Octave Forge, Numerical || Yes || Easy || Never<br />
|-<br />
| [[Summer_of_Code_Project_Ideas#Using_Python_within_Octave | Pytave project]] || Mike Miller || Colin B. Macdonald, Abhinav Tripathi || Infrastructure || No || Medium || some in GSoC 2016<br />
|-<br />
| [[Summer_of_Code_Project_Ideas#Jupyter_Integration | Jupyter integration]] || Mike Miller || Colin B. Macdonald, Ankit Raj || Infrastructure || Yes || Medium || Never<br />
|-<br />
| [[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<br />
|-<br />
| [[Summer_of_Code_Project_Ideas#GUI Variable Editor and Property Inspector | GUI Property Inspector]] || ? || || GUI || Yes || Medium || Never<br />
|-<br />
| [[Summer_of_Code_Project_Ideas#SPQR Interface | Write API to SPQR Library]] || ? || || Infrastructure || Yes || Medium || Never<br />
|-<br />
| [[Summer_of_Code_Project_Ideas#PolarAxes and Plotting Improvements | PolarAxes and Plotting Improvements ]] || ? || Rik || Graphics || Yes || Medium || Never<br />
|}<br />
<br />
== Numerical ==<br />
<br />
These projects involve implementing certain mathematical functions, primarily in core Octave.<br />
<br />
=== ode15{i,s} : Matlab Compatible DAE solvers ===<br />
<br />
An initial implementation of a Matlab compatible ode15{i,s} solver,<br />
based on [http://computation.llnl.gov/projects/sundials SUNDIALS], <br />
was done by Francesco Faccio during<br />
GSOC 2016.<br />
The blog describing the work is [http://gsoc2016ode15s.blogspot.it/ here].<br />
The resulting code has been pushed into the main Octave repository in the development branch and<br />
consists mainly of the following three files<br />
[http://hg.savannah.gnu.org/hgweb/octave/file/4890b1c4a6bd/libinterp/dldfcn/__ode15__.cc __ode15__.cc],<br />
[http://hg.savannah.gnu.org/hgweb/octave/file/4890b1c4a6bd/scripts/ode/ode15i.m ode15i.m] and<br />
[http://hg.savannah.gnu.org/hgweb/octave/file/4890b1c4a6bd/scripts/ode/ode15s.m ode15s.m].<br />
The list of outstanding tracker tickets concerning this implementation can be found <br />
[https://savannah.gnu.org/search/?Search=Search&words=ode15&type_of_search=bugs&only_group_id=1925&exact=1&max_rows=25#options here]<br />
<br />
Possible useful improvements that could be done in a new project include:<br />
<br />
* Implement a better function for selecting consistent initial conditions compatible with Matlab's decic.m. The algorithm to use is described [http://faculty.smu.edu/shampine/cic.pdf here]<br />
<br />
* make ode15{i,s} with datatypes other than double<br />
<br />
* improve interpolation at intermediate time steps.<br />
<br />
* general code profiling and optimization <br />
<br />
Other tasks, not strictly connected to ode15{i,s} but closely related that could be added <br />
to a possible project plan would be improving documentation and tests in odepkg and removing <br />
overlaps with the documentation in core Octave.<br />
<br />
* '''Required skills'''<br />
: C++; C; familiarity with numerical methods for DAEs; Basic knowledge of makefiles and/or autotools.<br />
* '''Difficulty'''<br />
: Medium.<br />
* '''Potential mentors'''<br />
: Francesco Faccio, Carlo de Falco, Marco Caliari, Jacopo Corno, Sebastian Schรถps<br />
<br />
=== Improve logm, sqrtm, funm ===<br />
<br />
The goal here is to implement some missing Matlab functions related to matrix functions like the [http://en.wikipedia.org/wiki/Matrix_exponential matrix exponential]. There is [http://octave.1599824.n4.nabble.com/matrix-functions-td3137935.html a general discussion] of the problem. A good starting point for available algorithms and open-source implementations is Higham and Deadman's [http://eprints.ma.man.ac.uk/2102/01/covered/MIMS_ep2014_8.pdf "A Catalogue of Software for Matrix Functions"].<br />
<br />
* '''Required skills'''<br />
: Read and Write both C++ and Octave code, find and read research papers, research experience in numerical analysis, familiarity with analysis of algorithms.<br />
* '''Difficulty'''<br />
: Difficult.<br />
* '''Potential mentors'''<br />
: ?<br />
<br />
=== Improve iterative methods for sparse linear systems ===<br />
<br />
GNU Octave currently has the following Krylov subspace methods for sparse linear systems: pcg (spd matrices) and pcr (Hermitian matrices), bicg,<br />
bicgstab, cgs, gmres, and qmr (general matrices). The description of some of them (pcr, qmr) and their error messages are not aligned. Moreover, they have similar blocks of code (input check for instance) which can be written once and for all in common functions. The first step in this project could be a revision and a synchronization of the codes, starting from the project [http://planet.octave.org/#tag:blogger.com,1999:blog-1297699247151766814.post-8054019978706480250 SOCIS2016], whose latest patch, still to be included, is [https://savannah.gnu.org/patch/?9108 here].<br />
<br />
In Matlab, some additional methods are available: minres and symmlq (symmetric matrices), bicgstabl (general matrices), lsqr (least<br />
squares). The second step in this project could be the implementation of some of these missing functions.<br />
<br />
The reference book is available [www-users.cs.umn.edu/~saad/IterMethBook_2ndEd.pdf here]<br />
<br />
* '''Required skills'''<br />
: numerical linear algebra, m-file programming.<br />
* '''Difficulty'''<br />
: Maybe hard the mathematical part, medium the programming part.<br />
* '''Mentor'''<br />
:<br />
<br />
=== Chebfun in Octave ===<br />
<br />
[http://chebfun.org Chebfun] is a mathematics and software project for "numerical computing with functions". Basically it approximates functions to machine precision accuracy (10<sup>-15</sup>) using piecewise Chebyshev polynomial interpolants. Operations on those functions (arithmetic, derivatives, root-finding, etc) are then overloaded and return new interpolating polynomials, which are themselves proxies for the actual solution.<br />
<br />
Chebfun makes extensive use of classdef classes, and is one of the largest Free Software projects to do so. Unfortunately it currently only works in Matlab. This project seeks to (1) improve Octave's classdef support and (2) tweak Chebfun to work under Octave, for example, removing undocumented classdef features. The final goal is to have at least basic Chebfun features working on Octave. An additional goal would be making "pkg install chebfun.zip" work in Octave.<br />
<br />
The impact of this project is improving Octave and allowing Chebfun to be used without proprietary software.<br />
<br />
* '''Required skills'''<br />
: Octave m-file programming, classdef programming, probably C++, some familiarity with Approximation Theory (a branch of mathematics).<br />
* '''Difficulty'''<br />
: Medium (fixing Octave classdef bugs likely harder and requires a deep dive into how Octave supports OOP).<br />
* '''Potential mentors'''<br />
: Colin B. Macdonald, [[User:KaKiLa|KaKiLa]], Mike Miller (?), Carnรซ Draug (?), someone from Chebfun team (?).<br />
<br />
How to get started: learn about Chebfun, browse Octave's bug list for classdef-related bugs.<br />
<br />
First steps: clone this Chebfun [https://github.com/cbm755/chebfun/tree/octave_dev octave_dev branch]. On that, "f = chebfun(@(x) sin(x), [-2 6])" should work with Octave 4.3.0+ and maybe even with 4.2.1. Check that "f(pi)" and "g = f + 1" work. A good first task would be to study [https://github.com/cbm755/chebfun/commit/e20b0ad2dc89cfe8e50ba461b864eff7d5bbef17 this commit], a workaround for "f.funs{1}" using "temp = f.funs; temp{1}". "2*f" is failing, can you fix it, perhaps with this workaround? Or can you make "f.funs{1}" work by changing something in "@chebfun/subsref.m"?<br />
<br />
== Adding functionality to Forge packages ==<br />
<br />
<br />
=== EPA hydrology software suite ===<br />
Create native interfaces to the EPA software suites.<br />
<br />
Starting points<br />
* [https://forja.cica.es/projects/epanet-octave/ epanet-octave].<br />
* [https://github.com/OpenWaterAnalytics/ Open Water Analytics]<br />
<br />
* '''SWMM'''<br />
** [https://www.epa.gov/water-research/storm-water-management-model-swmm Official page]<br />
** Check work done in [https://github.com/water-systems/MatSWMM MatSWMM] [http://digital.csic.es/bitstream/10261/132982/1/MatSWMM.pdf article]<br />
<br />
* '''EPANET'''<br />
** [https://www.epa.gov/water-research/epanet Official page]<br />
<br />
* '''Required skills'''<br />
: m-file scripting, C, C++, API knowledge, file I/O, classdef (optional). <br />
<br />
* '''Difficulty'''<br />
: easy/medium<br />
<br />
* '''Mentor'''<br />
: [[User:KaKiLa|KaKiLa]]<br />
<br />
=== FullSWOF overland flow simulator ===<br />
Create scripting tools for (optional: native interfaces).<br />
<br />
Starting points<br />
* [http://www.univ-orleans.fr/mapmo/soft/FullSWOF/ The FullSWOF Project].<br />
* [https://arxiv.org/abs/1204.3210 FullSWOF: A software for overland flow simulation]<br />
* [https://bitbucket.org/binello7/fswof2d Initial work on Bitbucket]<br />
<br />
* '''Required skills'''<br />
: m-file scripting, C, C++, API knowledge, file I/O, classdef (optional). <br />
<br />
* '''Difficulty'''<br />
: easy/medium<br />
<br />
* '''Mentor'''<br />
: [[User:KaKiLa|KaKiLa]]<br />
<br />
=== TISEAN package ===<br />
<br />
[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 has been [[TISEAN package | partially re-implemented]] as libre software. The objective is to integrate TISEAN as an Octave Forge package, as was done for the Control package.<br />
[[TISEAN_package | A lot has been completed]] but [[TISEAN_package:Procedure | there is still work left to do]].<br />
<br />
There are missing functions to do computations on spike trains, to simulate autoregresive models, to create specialized plots, etc. Do check [[TISEAN_package:Procedure#Table_of_functions|the progress of the project]] to see if you are interested.<br />
<br />
* [http://octave.sourceforge.net/tisean/overview.html Package help at source forge.] <br />
* [https://sourceforge.net/p/octave/tisean/ci/default/tree/ Package repository at source forge.] <br />
<br />
* '''Required skills'''<br />
: m-file scripting, C, C++, and FORTRAN API knowledge. <br />
* '''Difficulty'''<br />
: easy/medium<br />
* '''Mentor'''<br />
: [[User:KaKiLa|KaKiLa]]<br />
<br />
=== Symbolic package ===<br />
<br />
Octave's [https://github.com/cbm755/octsympy Symbolic package] handles symbolic computing and other CAS tools. The main component of Symbolic is a pure m-file class "@sym" which uses the Python package [https://www.sympy.org SymPy] to do (most of) the actual computations. The package aims to expose the full functionality of SymPy while also providing a high-level of compatibility with the Matlab Symbolic Math Toolbox. The Symbolic package requires communication between Octave and Python. Recently, a GSoC2016 project successfully re-implemented this communication using the new [https://bitbucket.org/mtmiller/pytave Pytave tool].<br />
<br />
This project proposes to go further: instead of using Pytave only for the communication layer, we'll use it throughout the Symbolic project. For example, we might make "@sym" a subclass of "@pyobject". We also could stop using the "python_cmd" interface and use Pytave directly from methods. The main goal was already mentioned: to expose the *full functionality* of SymPy. For example, we would allow OO-style method calls such as "f.diff(x)" instead of "diff(f, x)".<br />
<br />
* '''Required skills'''<br />
: OO-programming with m-files, Python, and possibly C/C++ for improving Pytave (if needed).<br />
* '''Difficulty'''<br />
: easy/medium<br />
* '''Mentors and/or other team members'''<br />
: Colin B. Macdonald, Mike Miller, Abhinav Tripathi<br />
<br />
=== Interval package ===<br />
<br />
The [[Interval_package|interval package]] provides several arithmetic functions with accurate and guaranteed error bounds. Its development started in the end of 2014 and there is some fundamental functionality left to be implemented. See the [https://octave.sourceforge.io/interval/overview.html list of functions], basically any missing numeric Octave function could be implemented as an interval extension in the package. Potential projects:<br />
* Implement missing algorithms (as m-files)-difficulty and whether knowledge in interval analysis is required depends on the particular function. Of course, you may use papers which present such algorithms.<br />
* Improve existing algorithms (support more options for plotting, support more options for optimizers, increase accuracy, โฆ)<br />
* Integrate functions from VERSOFT [http://uivtx.cs.cas.cz/~rohn/matlab/] in the package (some work has already been done and current progress is tracked in [[Interval_package#VERSOFT]]). This basically involves conversion of the documentation into Texinfo format, use [[Contribution_guidelines#Coding_style|Octave coding guidelines]] and to make sure that any called functions are available in the interval package. VERSOFT is originally based on INTLAB [http://www.ti3.tu-harburg.de/rump/intlab/], a proprietary Octave/Matlab package. Some functions may be missing. Also, the interval package doesn't support complex numbers, so it might not be possible to migrate some functions.<br />
* List more interesting use cases of interval arithmetic in the package's manual [https://octave.sourceforge.io/interval/package_doc/Examples.html]<br />
<br />
* '''Required skills'''<br />
: m-file scripting, basic knowledge of computer arithmetics (especially floating-point computations), interval analysis (depending on the functions to implement).<br />
* '''Difficulty'''<br />
: Medium.<br />
* '''Mentor and co-mentor'''<br />
: [[User:oheim|Oliver Heimlich]], [[User:Siko1056|Kai T. Ohlhus]]<br />
<br />
=== OCS ===<br />
<br />
[[Ocs package | OCS]] is a circuit simulator for Octave. The objective of this project is to update the code to use modern features of Octave (e.g. classdef), fix open bugs, increase compatibility with SPICE and improve compatibility with other Octave packages (odepkg, control etc).<br />
<br />
* [http://octave.sourceforge.net/ocs/overview.html Package help at source forge.] <br />
<br />
* '''Required skills'''<br />
: m-file scripting, C, C++, and FORTRAN API knowledge. <br />
* '''Difficulty'''<br />
: easy/medium<br />
* '''Mentor'''<br />
: Sebastian Schรถps, Carlo de Falco<br />
<br />
== Infrastructure ==<br />
<br />
=== Jupyter Integration ===<br />
<br />
[http://jupyter.org Jupyter Notebook] is a web-based worksheet interface for computing. There is a [https://github.com/Calysto/octave_kernel Octave kernel for Jupyter]. This project seeks to improve that kernel to make Octave a first-class experience within the Jupyter Notebook.<br />
<br />
* '''Mentors'''<br />
: Colin B. Macdonald, Mike Miller, others?<br />
<br />
<br />
=== Using Python within Octave ===<br />
<br />
[https://bitbucket.org/mtmiller/pytave Pytave] allows one to call Python functions and interact with Python objects from within Octave .m file code and from the Octave command line interface. Ideally, Pytave will not be a separate project, but rather a core feature of Octave. This project aims to improve Pytave with the goal of merging the code into the core Octave code base. <br />
<br />
Based on a previous summer project related to Pytave, this work will consist of fast-paced collaborative software development based on tackling the [https://bitbucket.org/mtmiller/pytave/issues?status=new&status=open pytave issue list]. You would also be expected to participate in software design decisions and discussion, as well as improve documentation, doctests and unit tests. As an example of the sorts of decision decisions being made, note that Octave indexes from 1 whereas Python typically indexes from 0; in which cases is it appropriate to make this transparent to the user?<br />
<br />
* '''Mentors'''<br />
: Mike Miller, Colin B. Macdonald, Abhinav Tripathi, others?<br />
<br />
<br />
=== Octave Package management ===<br />
<br />
[[Packages]] are extensions for Octave, that are mainly maintained by the [[Octave Forge]] community.<br />
To get those extension to work with Octave, there is a single function, {{manual|pkg}}, which does pretty much everything.<br />
This function has a few limitations which are hard to implement with the current codebase, and will most likely require a full rewrite.<br />
A major step forward for a rewritten package manager is the [https://github.com/apjanke/octave-packajoozle/ "packajoozle" project] by Andrew Janke.<br />
<br />
The planned improvements (see also {{bug|39479}}) are:<br />
<br />
* install and update from repositories (hg and git)<br />
* automatic handling of dependencies<br />
* easily load, update or check specific package versions<br />
* management of tests and demos in C++ sources of packages<br />
* more flexibility on dependencies, e.g., dependent on specific Octave build options or being dependent in one of multiple packages<br />
* support for multiple version packages<br />
* support for multiple Octave installs<br />
* support for system-wide and user installed packages<br />
* testing packages (<code>pkg test <package-name></code>)<br />
* improved metadata acquisition (<code>pkg list -forge</code>) from https://octave.sourceforge.io/<br />
<br />
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.<br />
However, the current {{manual|pkg}} also performs some maintenance functions which it probably should not.<br />
Instead a package for developers should be created with such tools.<br />
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]).<br />
<br />
Many of these problems have been solved in other languages.<br />
Familiarity with how other languages handle this problem will be useful to come up with elegant solutions.<br />
In some cases, there are standards to follow.<br />
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.<br />
See bugs {{bug|36477}} and {{bug|40444}} for more details.<br />
<br />
In addition, package names may start to collide very easily.<br />
One horrible way to workaround this by is choosing increasingly complex package names that give no hint on the package purpose.<br />
A much better is option is providing an Authority category like Perl 6 does.<br />
Nested packages is also an easy way to provide packages for specialized subjects (think {{codeline|image::morphology}}).<br />
A new {{manual|pkg}} would think all this things now, or allow their implementation at a later time.<br />
Read the [[OEP:pkg|unfinished plan]] for more details.<br />
<br />
* '''Minimum requirements'''<br />
: 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.<br />
* '''Difficulty'''<br />
: Medium.<br />
* '''Mentor'''<br />
: [[User:KaKiLa|KaKiLa]], Carnรซ Draug, Carlo de Falco, Sebastian Schรถps<br />
<br />
=== SPQR Interface ===<br />
<br />
Octave implements QR factorization for sparse matrices, but it does so with an older library. This has caused fundamental issues, including segfaults as recorded here (https://savannah.gnu.org/bugs/?func=detailitem&item_id=51950). The goal of this project is to program an interface to the API for the SQPR library (http://faculty.cse.tamu.edu/davis/suitesparse.html). This is the same library that Matlab uses for this purpose.<br />
<br />
* '''Minimum requirements'''<br />
: Ability to read and write C++ code.<br />
* '''Difficulty'''<br />
: Medium.<br />
* '''Mentor'''<br />
: <br />
<br />
== Image Analysis ==<br />
<br />
=== Improvements to N-dimensional image processing ===<br />
<br />
The image package has partial functionality for N-dimensional images. These images exist for example in medical imaging where slices from scans are assembled to form anatomical 3D images. If taken over time and at different laser wavelengths or light filters, they can also result in 5D images. Albeit less common, images with even more dimensions also exist. However, their existence is irrelevant since most of the image processing operations are mathematical operations which are independent of the number of dimensions.<br />
<br />
As part of GSoC 2013, the core functions for image IO, {{codeline|imwrite}} and {{codeline|imread}}, were extended to better support this type of images. Likewise, many functions in the image package, mostly morphology operators, were expanded to deal with this type of image. Since then, many other functions have been improved, sometimes completely rewritten, to abstract from the number of dimensions. In a certain way, supporting ND images is also related to choosing good algorithms since such large images tend to be quite large.<br />
<br />
This project will continue on the previous work, and be mentored by the previous GSoC student and current image package maintainer. Planning the project requires selection of functions lacking ND support and identifying their dependencies. For example, supporting {{codeline|imclose}} and {{codeline|imopen}} was better implemented by supporting {{codeline|imerode}} and {{codeline|imdilate}} which then propagated ND support to all of its dependencies. These dependencies need to be discovered first since often they are not being used yet, and may even be missing function. This project can also be about implementing functions that have [[Image package#Missing functions | not yet been implemented]]. Also note that while some functions in the image package will accept ND images as input, they are actually not correctly implemented and will give incorrect results.<br />
<br />
* '''Required skills'''<br />
: 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. <br />
* '''Difficulty'''<br />
: Difficult.<br />
* '''Potential mentor'''<br />
: Carnรซ Draug<br />
<br />
=== Improve Octave's image IO ===<br />
<br />
There are a lot of image formats. To handle this, Octave uses [http://www.graphicsmagick.org/ GraphicsMagic] (GM), a library capable of handling [http://www.graphicsmagick.org/formats.html a lot of them] in a single C++ interface. However, GraphicsMagick still has its limitations. The most important are:<br />
<br />
* GM has build option {{codeline|quantum}} which defines the bitdepth to use when reading an image. Building GM with high quantum means that images of smaller bitdepth will take a lot more memory when reading, but building it too low will make it impossible to read images of higher bitdepth. It also means that the image needs to always be rescaled to the correct range.<br />
* GM supports unsigned integers only thus incorrectly reading files such as TIFF with floating point data<br />
* GM hides away details of the image such as whether the image file is indexed. This makes it hard to access the real data stored on file.<br />
<br />
This project would implement better image IO for scientific file formats while leaving GM handle the others. Since TIFF is the de facto standard for scientific images, this should be done first. Among the targets for the project are:<br />
<br />
* implement the Tiff class which is a wrap around libtiff, using classdef. To avoid creating too many private __oct functions, this project could also create a C++ interface to declare new Octave classdef functions.<br />
* improve imread, imwrite, and imfinfo for tiff files using the newly created Tiff class<br />
* port the bioformats into Octave and prepare a package for it<br />
* investigate other image IO libraries<br />
* clean up and finish the dicom package to include into Octave core<br />
* prepare a matlab compatible implementation of the FITS package for inclusion in Octave core<br />
<br />
* '''Required skills'''<br />
: Knowledge of C++ and C since most libraries are written in those languages.<br />
* '''Difficulty'''<br />
: Medium.<br />
* '''Potential mentor'''<br />
: Carnรซ Draug<br />
<br />
== GUI ==<br />
<br />
=== GUI Variable Editor and Property Inspector ===<br />
<br />
Octave has a preliminary implementation of a Variable Editor: a spreadsheet-like tool for quickly editing and visualizing variables. The initial phase of the project will be learning how the implementation was done.<br />
<br />
With the knowledge gained, the second part of the project will be to implement a Property Inspector. This is a spreadsheet like interface to the many, many graphics properties that exist and are different on a per-object basis. The goal would be not only the concise-display of the existing properties, but a reasonable user interface to change them. As examples, boolean properties should be able to be toggled with a double-click; Radio properties should have a drop-down list of only the supported options; Other properties that can be modified should have the constraints built-in (for example, Linewidth must be a scalar, while Position must be a 1x4 vector). It would also be important to have easy access to the documentation of a property.<br />
<br />
For reference, Matlab has a similar Property Inspector (https://www.mathworks.com/help/matlab/ref/inspect.html).<br />
<br />
* '''Minimum requirements'''<br />
: Ability to read and write C++ code. Experience with Qt toolkit and GUI programming is optional, but desirable.<br />
* '''Difficulty'''<br />
: Medium.<br />
* '''Mentor'''<br />
:<br />
<br />
== Graphics ==<br />
<br />
=== PolarAxes and Plotting Improvements ===<br />
<br />
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}}.<br />
<br />
* '''Minimum requirements'''<br />
: Ability to read and write C++ code. Ability to read and write Octave code. Experience with OpenGL programming is optional.<br />
* '''Difficulty'''<br />
: Medium.<br />
* '''Mentor'''<br />
: Rik <br />
<br />
<noinclude><br />
[[Category:Summer of Code]]<br />
[[Category:Project Ideas]]<br />
</noinclude></div>Nirhttps://wiki.octave.org/wiki/index.php?title=GSoC_2020_application&diff=12594GSoC 2020 application2020-01-29T23:07:01Z<p>Nir: /* Application instructions (1500 chars) */</p>
<hr />
<div>__NOTOC__<br />
<br />
Octave's application for GSoC 2020.<br />
<br />
=== Why does your org want to participate in Google Summer of Code? (1000 chars) ===<br />
<br />
We hope to establish collaborations with talented new contributors. We also want to raise awareness of Octave in the free software community.<br />
<br />
Google Summer of Code represents a unique opportunity to bring new perspectives to the Octave community. As a somewhat older project, we benefit from having new and younger contributors among our developers. We have been able to retain several GSoC participants as contributors to the Octave project and we hope to continue this in the future by engaging effectively with students during both the application and mentoring processes, setting clear standards for what is required for acceptance, and maintaining those standards throughout the project.<br />
<br />
=== How many potential mentors have agreed to mentor this year? ===<br />
<br />
11-15<br />
<br />
=== How will you keep mentors engaged with their students? (1000 chars) ===<br />
<br />
We will select mentors with proven involvement in Octave and free software and align project topics with the priorities of the core developer team. The vast majority of our mentors have been involved in Octave development for several years, and new mentors will be paired with more experienced ones.<br />
<br />
Each project will include at least one core Octave developer as mentor. These are proven, veteran members of the project who are familiar with the code base and with engaging the maintainer and user community. GNU Octave is a project with applications in very diverse domains, so each project should also include a mentor with expertise in the relevant field.<br />
<br />
=== How will you help your students stay on schedule to complete their projects? (1000 chars) ===<br />
<br />
Previous contributions to Octave are a condition for acceptance. In this way, we hope to select students who are familiar with the codebase and able to start their project quickly.<br />
<br />
A tentative project timeline is required as part of the application, and is checked by mentors for realism during the applicant evaluation process. Once a student is selected, the mentor will work with them to come up with a more detailed timeline, including clear expectations for progress by the midterm and final evaluation periods.<br />
<br />
During the summer, mentors will check with students at least weekly to make sure they are staying on schedule and help with any obstacles that might arise. Students are also expected to regularly update their mentors and the Octave maintainers community on their progress via e-mails and blog posts.<br />
<br />
Overall, the vast majority of previous SoC students have finished successfully, making substantive contributions to Octave that have been integrated into our codebase.<br />
<br />
=== How will you get your students involved in your community during GSoC? (1000 chars) ===<br />
<br />
Students will be urged to participate in our IRC channel and mailing list. We will set clear expectations on the minimum frequency of email progress updates, typically every two to three days. Students will also set up a blog for longer, weekly, updates which is aggregated at http://planet.octave.org<br />
<br />
Everything should be completely open. Almost all interactions with the student should be public, e.g. contacting the mentor should happen in the public IRC channel or copy the maintainers mailing list.<br />
<br />
Finally, we organize an annual developers' summit, OctConf, and have in previous years provided support for GSoC students to attend and present. This strengthens relationships between community members and the new students. <br />
<br />
=== How will you keep students involved with your community after GSoC? (1000 chars) ===<br />
<br />
We will typically merge their code into our codebase during or soon after the summer. GNU Octave is a project with many tester-users who give constant feedback on new features and report bugs. As participants in the mailing lists and bug tracker, students get the feeling of doing something that is useful to the community from the very start.<br />
<br />
Many of our GSoC students use Octave during the academic year or in their professional careers. As such, they are prone to stay involved with its development, even if at a lower level than during the summer.<br />
<br />
A number of GSoC alumni have continued making regular contributions to GNU Octave, including volunteering to serve as GSoC mentors, and many remain available to help with any problems related to the code they wrote for the project.<br />
<br />
=== Has your org been accepted as a mentoring org in Google Summer of Code before? For each year your organization has participated, provide the counts of successful and total students. ===<br />
<br />
Yes.<br />
<br />
2019 0/0<br />
2018 3/3<br />
2017 4/4<br />
2016 5/5<br />
2014 3/3<br />
<br />
We have a nice trajectory mentoring projects since 2011 (both as an independent organization and as part of GNU). [http://wiki.octave.org/Summer_of_Code This page] lists the successful projects that have been executed under our mentoring.<br />
<br />
=== If your org has applied for GSoC before but not been accepted, select the years === <br />
<br />
2012, 2013, 2015<br />
<br />
=== Are you part of a foundation/umbrella organization? ===<br />
<br />
Yes, we are affiliated with GNU.<br />
<br />
=== What year was your project started? ===<br />
<br />
1992<br />
<br />
=== Organization ID ===<br />
<br />
octave<br />
<br />
=== Organization name ===<br />
<br />
GNU Octave<br />
<br />
=== OSI approved license? ===<br />
<br />
Yes<br />
<br />
=== Organization Category ===<br />
<br />
Programming Languages and Development Tools<br />
<br />
=== Tagline (80 characters) ===<br />
<br />
Free Your Numbers<br />
<br />
=== Primary License ===<br />
<br />
GPL 3.0<br />
<br />
=== Technology Tags (the primary specific technologies your organization uses) (up to 5) ===<br />
<br />
C++, hg<br />
<br />
=== Topic Tags (general topics that describe your organization) (up to 5) ===<br />
<br />
mathematics, numerical computation, numerical methods, matlab, scientific computing<br />
<br />
=== Proposal Tags (for applicants to use) (up to 10) ===<br />
<br />
Numerical, Infrastructure, Octave Forge, Image analysis, Machine learning, GUI, Graphics, New feature, Performance, Matlab compatibility<br />
<br />
=== Description (180 chars) ===<br />
<br />
GNU Octave is a high-level interpreted language, primarily intended for numerical computations.<br />
<br />
=== Description (2000 chars) ===<br />
<br />
GNU Octave is a high-level interpreted language, primarily intended for numerical computations. It provides capabilities for the numerical solution of linear and nonlinear problems and for performing other numerical experiments. It also provides extensive graphics capabilities for data visualization and manipulation. Octave is normally used through its interactive command line interface, but it can also be used to write non-interactive programs. The Octave language is quite similar to Matlab so that most programs are easily portable.<br />
<br />
Octave is continually being upgraded. The current version 5.1 includes a graphical user interface, support for classdef object-oriented programming, and many new and improved functions. Student projects may also involve developing or upgrading Octave Forge packages, which can be loaded to provide additional specialized functions that supplement those provided in Core Octave.<br />
<br />
=== Application instructions (1500 chars) ===<br />
<br />
(Markdown for links)<br />
<br />
<code><br />
<br />
Post on our [mailing list](https://lists.gnu.org/mailman/listinfo/octave-maintainers) or chat on [IRC](https://webchat.freenode.net/?channels=#octave) to get feedback on your ideas, and help with any questions.<br />
<br />
Familiarize yourself with using and building Octave, and with any other skills needed to carry out your proposed project. Demonstrate this familiarity by contributing [bug fixes](https://savannah.gnu.org/bugs/?group=octave) or [patches](https://savannah.gnu.org/patch/?group=octave) before the end of the application period.<br />
<br />
[Make an account](https://wiki.octave.org/Special:CreateAccount) on our Wiki and then copy and fill out Octave's [application template](https://wiki.octave.org/Template:Student_application_template_public) on your Wiki user page. Also complete your GSoC application on Melange as per Google guidelines.<br />
<br />
For more details, please see the [Octave Wiki](https://wiki.octave.org/Summer_of_Code_-_Getting_Started).<br />
<br />
</code><br />
<br />
=== Organization urls ===<br />
<br />
http://www.octave.org<br />
<br />
Logo: https://upload.wikimedia.org/wikipedia/commons/thumb/6/6a/Gnu-octave-logo.svg/283px-Gnu-octave-logo.svg.png (or generate 256x256 PNG from http://hg.savannah.gnu.org/hgweb/octave/raw-file/155d8e90ee1f/doc/icons/octave-logo.svg with <code>inkscape -z -e octave-logo.png -w 256 -h 256 octave-logo.svg</code>)<br />
<br />
Blog: http://planet.octave.org/<br />
<br />
Feed: http://planet.octave.org/atom.xml<br />
<br />
IRC Channel: https://webchat.freenode.net/?channels=#octave<br />
<br />
Mailing List: https://lists.gnu.org/mailman/listinfo/octave-maintainers<br />
<br />
General Email: octave-maintainers@gnu.org<br />
<br />
Ideas: https://wiki.octave.org/Summer_of_Code_-_Getting_Started#Suggested_projects<br />
<br />
Application instructions: http://wiki.octave.org/Summer_of_Code_Project_Ideas#Steps_Toward_a_Successful_Application<br />
<br />
Source code: http://hg.savannah.gnu.org/hgweb/octave<br />
<br />
[[Category:Summer of Code]]<br />
[[Category:2020]]</div>Nirhttps://wiki.octave.org/wiki/index.php?title=GSoC_2020_application&diff=12593GSoC 2020 application2020-01-29T23:04:35Z<p>Nir: /* Organization urls */</p>
<hr />
<div>__NOTOC__<br />
<br />
Octave's application for GSoC 2020.<br />
<br />
=== Why does your org want to participate in Google Summer of Code? (1000 chars) ===<br />
<br />
We hope to establish collaborations with talented new contributors. We also want to raise awareness of Octave in the free software community.<br />
<br />
Google Summer of Code represents a unique opportunity to bring new perspectives to the Octave community. As a somewhat older project, we benefit from having new and younger contributors among our developers. We have been able to retain several GSoC participants as contributors to the Octave project and we hope to continue this in the future by engaging effectively with students during both the application and mentoring processes, setting clear standards for what is required for acceptance, and maintaining those standards throughout the project.<br />
<br />
=== How many potential mentors have agreed to mentor this year? ===<br />
<br />
11-15<br />
<br />
=== How will you keep mentors engaged with their students? (1000 chars) ===<br />
<br />
We will select mentors with proven involvement in Octave and free software and align project topics with the priorities of the core developer team. The vast majority of our mentors have been involved in Octave development for several years, and new mentors will be paired with more experienced ones.<br />
<br />
Each project will include at least one core Octave developer as mentor. These are proven, veteran members of the project who are familiar with the code base and with engaging the maintainer and user community. GNU Octave is a project with applications in very diverse domains, so each project should also include a mentor with expertise in the relevant field.<br />
<br />
=== How will you help your students stay on schedule to complete their projects? (1000 chars) ===<br />
<br />
Previous contributions to Octave are a condition for acceptance. In this way, we hope to select students who are familiar with the codebase and able to start their project quickly.<br />
<br />
A tentative project timeline is required as part of the application, and is checked by mentors for realism during the applicant evaluation process. Once a student is selected, the mentor will work with them to come up with a more detailed timeline, including clear expectations for progress by the midterm and final evaluation periods.<br />
<br />
During the summer, mentors will check with students at least weekly to make sure they are staying on schedule and help with any obstacles that might arise. Students are also expected to regularly update their mentors and the Octave maintainers community on their progress via e-mails and blog posts.<br />
<br />
Overall, the vast majority of previous SoC students have finished successfully, making substantive contributions to Octave that have been integrated into our codebase.<br />
<br />
=== How will you get your students involved in your community during GSoC? (1000 chars) ===<br />
<br />
Students will be urged to participate in our IRC channel and mailing list. We will set clear expectations on the minimum frequency of email progress updates, typically every two to three days. Students will also set up a blog for longer, weekly, updates which is aggregated at http://planet.octave.org<br />
<br />
Everything should be completely open. Almost all interactions with the student should be public, e.g. contacting the mentor should happen in the public IRC channel or copy the maintainers mailing list.<br />
<br />
Finally, we organize an annual developers' summit, OctConf, and have in previous years provided support for GSoC students to attend and present. This strengthens relationships between community members and the new students. <br />
<br />
=== How will you keep students involved with your community after GSoC? (1000 chars) ===<br />
<br />
We will typically merge their code into our codebase during or soon after the summer. GNU Octave is a project with many tester-users who give constant feedback on new features and report bugs. As participants in the mailing lists and bug tracker, students get the feeling of doing something that is useful to the community from the very start.<br />
<br />
Many of our GSoC students use Octave during the academic year or in their professional careers. As such, they are prone to stay involved with its development, even if at a lower level than during the summer.<br />
<br />
A number of GSoC alumni have continued making regular contributions to GNU Octave, including volunteering to serve as GSoC mentors, and many remain available to help with any problems related to the code they wrote for the project.<br />
<br />
=== Has your org been accepted as a mentoring org in Google Summer of Code before? For each year your organization has participated, provide the counts of successful and total students. ===<br />
<br />
Yes.<br />
<br />
2019 0/0<br />
2018 3/3<br />
2017 4/4<br />
2016 5/5<br />
2014 3/3<br />
<br />
We have a nice trajectory mentoring projects since 2011 (both as an independent organization and as part of GNU). [http://wiki.octave.org/Summer_of_Code This page] lists the successful projects that have been executed under our mentoring.<br />
<br />
=== If your org has applied for GSoC before but not been accepted, select the years === <br />
<br />
2012, 2013, 2015<br />
<br />
=== Are you part of a foundation/umbrella organization? ===<br />
<br />
Yes, we are affiliated with GNU.<br />
<br />
=== What year was your project started? ===<br />
<br />
1992<br />
<br />
=== Organization ID ===<br />
<br />
octave<br />
<br />
=== Organization name ===<br />
<br />
GNU Octave<br />
<br />
=== OSI approved license? ===<br />
<br />
Yes<br />
<br />
=== Organization Category ===<br />
<br />
Programming Languages and Development Tools<br />
<br />
=== Tagline (80 characters) ===<br />
<br />
Free Your Numbers<br />
<br />
=== Primary License ===<br />
<br />
GPL 3.0<br />
<br />
=== Technology Tags (the primary specific technologies your organization uses) (up to 5) ===<br />
<br />
C++, hg<br />
<br />
=== Topic Tags (general topics that describe your organization) (up to 5) ===<br />
<br />
mathematics, numerical computation, numerical methods, matlab, scientific computing<br />
<br />
=== Proposal Tags (for applicants to use) (up to 10) ===<br />
<br />
Numerical, Infrastructure, Octave Forge, Image analysis, Machine learning, GUI, Graphics, New feature, Performance, Matlab compatibility<br />
<br />
=== Description (180 chars) ===<br />
<br />
GNU Octave is a high-level interpreted language, primarily intended for numerical computations.<br />
<br />
=== Description (2000 chars) ===<br />
<br />
GNU Octave is a high-level interpreted language, primarily intended for numerical computations. It provides capabilities for the numerical solution of linear and nonlinear problems and for performing other numerical experiments. It also provides extensive graphics capabilities for data visualization and manipulation. Octave is normally used through its interactive command line interface, but it can also be used to write non-interactive programs. The Octave language is quite similar to Matlab so that most programs are easily portable.<br />
<br />
Octave is continually being upgraded. The current version 5.1 includes a graphical user interface, support for classdef object-oriented programming, and many new and improved functions. Student projects may also involve developing or upgrading Octave Forge packages, which can be loaded to provide additional specialized functions that supplement those provided in Core Octave.<br />
<br />
=== Application instructions (1500 chars) ===<br />
<br />
(Markdown for links)<br />
<br />
<code><br />
<br />
Post on our [mailing list](https://lists.gnu.org/mailman/listinfo/octave-maintainers) or chat on [IRC](https://webchat.freenode.net/?channels=#octave) to get feedback on your ideas, and help with any questions.<br />
<br />
Familiarize yourself with using and building Octave, and with any other skills needed to carry out your proposed project. Demonstrate this familiarity by contributing [bug fixes](https://savannah.gnu.org/bugs/?group=octave) or [patches](https://savannah.gnu.org/patch/?group=octave) before the end of the application period.<br />
<br />
[Make an account](https://wiki.octave.org/Special:CreateAccount) on our Wiki and then copy and fill out Octave's [application template](https://wiki.octave.org/Template:Student_application_template_public) on your Wiki user page. Also complete your GSoC application on Melange as per Google guidelines.<br />
<br />
For more details, please see the [Octave Wiki](https://wiki.octave.org/Summer_of_Code_Project_Ideas#Steps_Toward_a_Successful_Application).<br />
<br />
</code><br />
<br />
=== Organization urls ===<br />
<br />
http://www.octave.org<br />
<br />
Logo: https://upload.wikimedia.org/wikipedia/commons/thumb/6/6a/Gnu-octave-logo.svg/283px-Gnu-octave-logo.svg.png (or generate 256x256 PNG from http://hg.savannah.gnu.org/hgweb/octave/raw-file/155d8e90ee1f/doc/icons/octave-logo.svg with <code>inkscape -z -e octave-logo.png -w 256 -h 256 octave-logo.svg</code>)<br />
<br />
Blog: http://planet.octave.org/<br />
<br />
Feed: http://planet.octave.org/atom.xml<br />
<br />
IRC Channel: https://webchat.freenode.net/?channels=#octave<br />
<br />
Mailing List: https://lists.gnu.org/mailman/listinfo/octave-maintainers<br />
<br />
General Email: octave-maintainers@gnu.org<br />
<br />
Ideas: https://wiki.octave.org/Summer_of_Code_-_Getting_Started#Suggested_projects<br />
<br />
Application instructions: http://wiki.octave.org/Summer_of_Code_Project_Ideas#Steps_Toward_a_Successful_Application<br />
<br />
Source code: http://hg.savannah.gnu.org/hgweb/octave<br />
<br />
[[Category:Summer of Code]]<br />
[[Category:2020]]</div>Nirhttps://wiki.octave.org/wiki/index.php?title=GSoC_2020_application&diff=12586GSoC 2020 application2020-01-27T18:05:55Z<p>Nir: </p>
<hr />
<div>__NOTOC__<br />
<br />
Octave's application for GSoC 2020.<br />
<br />
=== Why does your org want to participate in Google Summer of Code? (1000 chars) ===<br />
<br />
We hope to establish collaborations with talented new contributors. We also want to raise awareness of Octave in the free software community.<br />
<br />
Google Summer of Code represents a unique opportunity to bring new perspectives to the Octave community. As a somewhat older project, we benefit from having new and younger contributors among our developers. We have been able to retain several GSoC participants as contributors to the Octave project and we hope to continue this in the future by engaging effectively with students during both the application and mentoring processes, setting clear standards for what is required for acceptance, and maintaining those standards throughout the project.<br />
<br />
=== How many potential mentors have agreed to mentor this year? ===<br />
<br />
11-15<br />
<br />
=== How will you keep mentors engaged with their students? (1000 chars) ===<br />
<br />
We will select mentors with proven involvement in Octave and free software and align project topics with the priorities of the core developer team. The vast majority of our mentors have been involved in Octave development for several years, and new mentors will be paired with more experienced ones.<br />
<br />
Each project will include at least one core Octave developer as mentor. These are proven, veteran members of the project who are familiar with the code base and with engaging the maintainer and user community. GNU Octave is a project with applications in very diverse domains, so each project should also include a mentor with expertise in the relevant field.<br />
<br />
=== How will you help your students stay on schedule to complete their projects? (1000 chars) ===<br />
<br />
Previous contributions to Octave are a condition for acceptance. In this way, we hope to select students who are familiar with the codebase and able to start their project quickly.<br />
<br />
A tentative project timeline is required as part of the application, and is checked by mentors for realism during the applicant evaluation process. Once a student is selected, the mentor will work with them to come up with a more detailed timeline, including clear expectations for progress by the midterm and final evaluation periods.<br />
<br />
During the summer, mentors will check with students at least weekly to make sure they are staying on schedule and help with any obstacles that might arise. Students are also expected to regularly update their mentors and the Octave maintainers community on their progress via e-mails and blog posts.<br />
<br />
Overall, the vast majority of previous SoC students have finished successfully, making substantive contributions to Octave that have been integrated into our codebase.<br />
<br />
=== How will you get your students involved in your community during GSoC? (1000 chars) ===<br />
<br />
Students will be urged to participate in our IRC channel and mailing list. We will set clear expectations on the minimum frequency of email progress updates, typically every two to three days. Students will also set up a blog for longer, weekly, updates which is aggregated at http://planet.octave.org<br />
<br />
Everything should be completely open. Almost all interactions with the student should be public, e.g. contacting the mentor should happen in the public IRC channel or copy the maintainers mailing list.<br />
<br />
Finally, we organize an annual developers' summit, OctConf, and have in previous years provided support for GSoC students to attend and present. This strengthens relationships between community members and the new students. <br />
<br />
=== How will you keep students involved with your community after GSoC? (1000 chars) ===<br />
<br />
We will typically merge their code into our codebase during or soon after the summer. GNU Octave is a project with many tester-users who give constant feedback on new features and report bugs. As participants in the mailing lists and bug tracker, students get the feeling of doing something that is useful to the community from the very start.<br />
<br />
Many of our GSoC students use Octave during the academic year or in their professional careers. As such, they are prone to stay involved with its development, even if at a lower level than during the summer.<br />
<br />
A number of GSoC alumni have continued making regular contributions to GNU Octave, including volunteering to serve as GSoC mentors, and many remain available to help with any problems related to the code they wrote for the project.<br />
<br />
=== Has your org been accepted as a mentoring org in Google Summer of Code before? For each year your organization has participated, provide the counts of successful and total students. ===<br />
<br />
Yes.<br />
<br />
2019 0/0<br />
2018 3/3<br />
2017 4/4<br />
2016 5/5<br />
2014 3/3<br />
<br />
We have a nice trajectory mentoring projects since 2011 (both as an independent organization and as part of GNU). [http://wiki.octave.org/Summer_of_Code This page] lists the successful projects that have been executed under our mentoring.<br />
<br />
=== If your org has applied for GSoC before but not been accepted, select the years === <br />
<br />
2012, 2013, 2015<br />
<br />
=== Are you part of a foundation/umbrella organization? ===<br />
<br />
Yes, we are affiliated with GNU.<br />
<br />
=== What year was your project started? ===<br />
<br />
1992<br />
<br />
=== Organization ID ===<br />
<br />
octave<br />
<br />
=== Organization name ===<br />
<br />
GNU Octave<br />
<br />
=== OSI approved license? ===<br />
<br />
Yes<br />
<br />
=== Organization Category ===<br />
<br />
Programming Languages and Development Tools<br />
<br />
=== Tagline (80 characters) ===<br />
<br />
Free Your Numbers<br />
<br />
=== Primary License ===<br />
<br />
GPL 3.0<br />
<br />
=== Technology Tags (the primary specific technologies your organization uses) (up to 5) ===<br />
<br />
C++, hg<br />
<br />
=== Topic Tags (general topics that describe your organization) (up to 5) ===<br />
<br />
mathematics, numerical computation, numerical methods, matlab, scientific computing<br />
<br />
=== Proposal Tags (for applicants to use) (up to 10) ===<br />
<br />
Numerical, Infrastructure, Octave Forge, Image analysis, Machine learning, GUI, Graphics, New feature, Performance, Matlab compatibility<br />
<br />
=== Description (180 chars) ===<br />
<br />
GNU Octave is a high-level interpreted language, primarily intended for numerical computations.<br />
<br />
=== Description (2000 chars) ===<br />
<br />
GNU Octave is a high-level interpreted language, primarily intended for numerical computations. It provides capabilities for the numerical solution of linear and nonlinear problems and for performing other numerical experiments. It also provides extensive graphics capabilities for data visualization and manipulation. Octave is normally used through its interactive command line interface, but it can also be used to write non-interactive programs. The Octave language is quite similar to Matlab so that most programs are easily portable.<br />
<br />
Octave is continually being upgraded. The current version 5.1 includes a graphical user interface, support for classdef object-oriented programming, and many new and improved functions. Student projects may also involve developing or upgrading Octave Forge packages, which can be loaded to provide additional specialized functions that supplement those provided in Core Octave.<br />
<br />
=== Application instructions (1500 chars) ===<br />
<br />
(Markdown for links)<br />
<br />
<code><br />
<br />
Post on our [mailing list](https://lists.gnu.org/mailman/listinfo/octave-maintainers) or chat on [IRC](https://webchat.freenode.net/?channels=#octave) to get feedback on your ideas, and help with any questions.<br />
<br />
Familiarize yourself with using and building Octave, and with any other skills needed to carry out your proposed project. Demonstrate this familiarity by contributing [bug fixes](https://savannah.gnu.org/bugs/?group=octave) or [patches](https://savannah.gnu.org/patch/?group=octave) before the end of the application period.<br />
<br />
[Make an account](https://wiki.octave.org/Special:CreateAccount) on our Wiki and then copy and fill out Octave's [application template](https://wiki.octave.org/Template:Student_application_template_public) on your Wiki user page. Also complete your GSoC application on Melange as per Google guidelines.<br />
<br />
For more details, please see the [Octave Wiki](https://wiki.octave.org/Summer_of_Code_Project_Ideas#Steps_Toward_a_Successful_Application).<br />
<br />
</code><br />
<br />
=== Organization urls ===<br />
<br />
http://www.octave.org<br />
<br />
Logo: https://upload.wikimedia.org/wikipedia/commons/thumb/6/6a/Gnu-octave-logo.svg/283px-Gnu-octave-logo.svg.png (or generate 256x256 PNG from http://hg.savannah.gnu.org/hgweb/octave/raw-file/155d8e90ee1f/doc/icons/octave-logo.svg with <code>inkscape -z -e octave-logo.png -w 256 -h 256 octave-logo.svg</code>)<br />
<br />
Blog: http://planet.octave.org/<br />
<br />
Feed: http://planet.octave.org/atom.xml<br />
<br />
IRC Channel: https://webchat.freenode.net/?channels=#octave<br />
<br />
Mailing List: https://lists.gnu.org/mailman/listinfo/octave-maintainers<br />
<br />
General Email: octave-maintainers@gnu.org<br />
<br />
Ideas: http://wiki.octave.org/Summer_of_Code_Project_Ideas<br />
<br />
Application instructions: http://wiki.octave.org/Summer_of_Code_Project_Ideas#Steps_Toward_a_Successful_Application<br />
<br />
Source code: http://hg.savannah.gnu.org/hgweb/octave<br />
<br />
[[Category:Summer of Code]]<br />
[[Category:2020]]</div>Nirhttps://wiki.octave.org/wiki/index.php?title=GNU_Octave_Wiki&diff=12584GNU Octave Wiki2020-01-27T17:29:08Z<p>Nir: /* Development */</p>
<hr />
<div>[https://www.gnu.org/software/octave/ GNU Octave] is a high-level interpreted language, primarily intended for numerical computations. It provides capabilities for the numerical solution of linear and nonlinear problems, and for performing other numerical experiments. It also provides extensive graphics capabilities for data visualization and manipulation. GNU Octave is normally used through its interactive interface ([https://en.wikipedia.org/wiki/Command-line_interface CLI] and [https://en.wikipedia.org/wiki/Graphical_user_interface GUI]), but it can also be used to write non-interactive programs. The GNU Octave language is quite similar to Matlab so that most programs are easily portable.<br />
<br />
== [[:Category:Installation|Installing]] ==<br />
<br />
Installation instructions for:<br />
* [[Octave for macOS|macOS]]<br />
* [[Octave for GNU/Linux|GNU/Linux]], [[Octave for Android|Android]], and [[Octave for other Unix systems|other Unix systems]]<br />
* [[Octave for Microsoft_Windows|Microsoft Windows]]<br />
<br />
Get installers and sources from https://www.octave.org/download.<br />
<br />
{{Note|'''GNU Octave {{Release}}''' is the current stable release.}}<br />
<br />
Are you using an old version of Octave? Check the [[Release History]] page to see how old it is.<br />
<br />
== [https://www.gnu.org/software/octave/news.html News] ==<br />
<br />
* January 16, 2020 The new release candidate '''GNU Octave 5.1.90''' is [https://alpha.gnu.org/gnu/octave now available online]. Test the new [https://alpha.gnu.org/gnu/octave/octave-5.1.90-w64-installer.exe MS Windows Installer] now! The final release is scheduled for '''end of January 2020'''.<br />
* {{Release Date}} '''GNU Octave {{Release}}''' has been released (see above)!<br />
<br />
== Getting help ==<br />
<br />
* [[FAQ|Frequently asked questions (FAQ)]]<br />
* [https://www.gnu.org/software/octave/doc/interpreter GNU Octave documentation]<br />
* [https://www.gnu.org/software/octave/support.html Other support options]<br />
<br />
== [[:Category:Resources|Getting started]] ==<br />
<br />
* [[Publications using Octave#Books|Books]]<br />
* [[Video tutorials|Videos]]<br />
* [https://bagustris.github.io/octave-tutorial Short course]<br />
<br />
[[File:Octave-flower.svg|right|frame|[[:Category:Octave Forge|Octave Forge]] is a collection of high quality packages for GNU Octave.]]<br />
<br />
== [[Packages]] / [[:Category:Octave Forge|Octave Forge]] ==<br />
<br />
* [https://octave.org/doc/interpreter/Installing-and-Removing-Packages.html Installing packages]<br />
* [[Creating packages]]<br />
* '''[[:Category:Octave Forge|Octave Forge]]''' &mdash; A collection of high quality packages for GNU Octave.<br />
<br />
== [[:Category:Development|Development]] ==<br />
<br />
We always need more help improving Octave and there are many ways [https://www.gnu.org/software/octave/get-involved.html you can contribute]. You can help by fixing bugs, developing new features, answering questions on the mailing list or IRC channel, helping to improve this wiki or other web pages.<br />
<br />
* Get an overview about the [[:Category:Development|GNU Octave development]].<br />
* Take a look at our [[Projects|project ideas]] and [[Summer of Code Project Ideas|Summer of Code project ideas]].<br />
<br />
== [[:Category:Academia|Academia]] ==<br />
<br />
* [[Publications using Octave]] &mdash; A compilation of scientific publications making reference to GNU Octave (add yours!).<br />
<br />
== External Links ==<br />
<br />
* [https://www.gnu.org/software/octave/ Octave Homepage]<br />
* [https://octave.sourceforge.io/ Octave Forge]<br />
* [https://savannah.gnu.org/bugs/?group=octave Bug Tracker]<br />
* [https://savannah.gnu.org/task/?group=octave Task Tracker]<br />
* [https://savannah.gnu.org/patch/?group=octave Patch Tracker]<br />
* [https://savannah.gnu.org/hg/?group=octave Development Repositories]<br />
* [https://planet.octave.org/ Planet Octave] - A collection of blog feeds featuring Octave developers and [[Summer of Code]] students.</div>Nirhttps://wiki.octave.org/wiki/index.php?title=Summer_of_Code_-_Getting_Started&diff=12583Summer of Code - Getting Started2020-01-27T17:25:55Z<p>Nir: /* Suggested projects */</p>
<hr />
<div>The following is distilled from the [[Projects]] page for the benefit of potential [https://summerofcode.withgoogle.com Google] and [http://sophia.estec.esa.int/socis ESA] Summer of Code (SoC) 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.<br />
<br />
You can also take a look at last years [[Summer of Code]] projects for inspiration.<br />
<br />
= Steps Toward a Successful Application =<br />
<br />
== Help Us Get To Know You == <br />
*: If you aren't communicating with us before the application is due, your application will not be accepted.<br />
*:* '''Join the [https://lists.gnu.org/mailman/listinfo/octave-maintainers maintainers mailing list]''' or read the archives and see what topics we discuss and how the developers interact with each other.<br />
*:* '''Hang out in our [https://webchat.freenode.net/?channels=#octave IRC channel]'''. Ask questions, answer questions from users, show us that you are motivated, and well-prepared. There will be more applicants than we can effectively mentor, so do ask for feedback on your public application to increase the strength of your proposal!<br />
* '''Do not wait for us to tell you what to do'''<br />
*: You should be doing something that interests you, and should not need us to tell you what to do. Similarly, you shouldn't ask us what to do either.<br />
*:* When you email the list and mentors, do not write it to say in what project you're interested. Be specific about your questions and clear on the email subject. For example, do not write an email with the subject "GSoC student interested in the ND images projects". Such email is likely be ignored. Instead, show you are already working on the topic, and email "Problem implementing morphological operators with bitpacked ND images".<br />
*:* It is good to ask advice on how to solve something you can't but you must show some work done. Remember, we are mentors and not your boss. Read [http://www.catb.org/esr/faqs/smart-questions.html How to ask questions the smart way]:<br />
*:*: <blockquote cite="http://www.catb.org/esr/faqs/smart-questions.html">''Prepare your question. Think it through. Hasty-sounding questions get hasty answers, or none at all. The more you do to demonstrate that having put thought and effort into solving your problem before seeking help, the more likely you are to actually get help.''</blockquote><br />
*:* It can be difficult at the beginning to think on something to do. This is nature of free and open source software development. You will need to break the mental barrier that prevents you from thinking on what can be done. Once you do that, you will have no lack of ideas for what to do next.<br />
*:* Use Octave. Eventually you will come across something that does not work the way you like. Fix that. Or you will come across a missing function. Implement it. It may be a hard problem (they usually are). While solving that problem, you may find other missing capabilities or smaller bug fixes. Implement and contribute those to Octave.<br />
*:* Take a look at the [[Short projects]] for something that may be simple to start with.<br />
<br />
== Find Something That Interests You == <br />
*: It's '''critical''' that you '''find a project that excites you'''. You'll be spending most of the summer working on it (we expect you to treat the SoC as a full-time job).<br />
*: Don't just tell us how interested you are, show us that you're willing and able to '''contribute''' to Octave. You can do that by [https://savannah.gnu.org/bugs/?group=octave fixing a few bugs] or [http://savannah.gnu.org/patch/?group=octave submitting patches] well before the deadline, in addition to regularly interacting with Octave maintainers and users on the mailing list and IRC. Our experience shows us that successful SoC students demonstrate their interest early and often.<br />
== Prepare Your Proposal With Us ==<br />
*: By working with us to prepare your proposal, you'll be getting to know us and showing us how you approach problems. The best place for this is your Wiki user page and the [https://webchat.freenode.net/?channels=#octave IRC channel].<br />
== Complete Your Application ==<br />
*: Fill out our '''''public''''' application template.<br />
*:* This is best done by '''[[Special:CreateAccount|creating an account at this wiki]]''', and copying the '''[[Template:Student_application_template_public|template]]''' from its page.<br />
*:* You really only need to copy and answer the '''''public''''' part there, there is no need to showcase everything else to everybody reading your user page!<br />
*: Fill out our '''''private''''' application template.<br />
*:* This is best done by copying the '''[[Template:Student_application_template_private|template]]''' from its page and '''adding the required information to your application at Google (melange)''' or at '''ESA'''.<br><br />
*:* Only the organization admin and the possible mentors will see this data. You can still edit it after submitting until the deadline!<br />
<br />
== Things You'll be Expected to Know or Quickly Learn On Your Own ==<br />
<br />
Octave is mostly written in C++ and its own scripting language that is mostly compatible with Matlab. 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 Octave's scripting language, successful applicants will be familiar with or able to quickly learn about Octave's infrastructure. You can't spend the whole summer learning how to build Octave or prepare a changeset and still successfully complete your project.<br />
<br />
* '''The Build System'''<br />
*: [http://en.wikipedia.org/wiki/GNU_build_system The GNU build system] is used to build Octave.<br />
*: 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.<br />
*: If you've ever done a {{Codeline|./configure && make && make install}} series of commands, you have already used the GNU build system.<br />
*: '''You must demonstrate that you are able to build the development version of Octave from sources before the application deadline.''' Linux is arguably the easiest system to work on. Instructions:<br />
*:* [[Building]]<br />
*:* [https://www.gnu.org/software/octave/doc/interpreter/Installation.html Octave Manual on Installing Octave]<br />
* '''The Version Control System'''<br />
*: We use [https://www.mercurial-scm.org/ Mercurial] (abbreviated hg).<br />
*: Mercurial is the [http://en.wikipedia.org/wiki/Distributed_Version_Control_System 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.<br />
* '''The Procedure for Contributing Changesets'''<br />
*: You will be expected to follow the same procedures as other contributors and core developers.<br />
*: You will be helping current and future Octave developers by using our standard style for changes, commit messages, and so on. You should also read the same [[Contribution guidelines | contribution]] [http://hg.savannah.gnu.org/hgweb/octave/file/tip/etc/HACKING.md guidelines] we have for everyone.<br />
*: [[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.<br />
* '''The Maintainers Mailing List'''<br />
*: We primarily use [https://lists.gnu.org/mailman/listinfo/octave-maintainers mailing lists] for communication among developers.<br />
*: The mailing list is used most often for discussions about non-trivial changes to Octave, or for setting the direction of development.<br />
*: You should follow basic mailing list etiquette. For us, this mostly means "do not [https://en.wikipedia.org/wiki/Posting_style#Top-posting top post]".<br />
* '''The IRC Channel'''<br />
*: We also have [http://webchat.freenode.net?channels=octave the #octave IRC channel in Freenode].<br />
*: You should be familiar with the IRC channel. It's very helpful for new contributors (you) to get immediate feedback on ideas and code.<br />
*: Unless your primary mentor has a strong preference for some other method of communication, the IRC channel will likely be your primary means of communicating with your mentor and Octave developers.<br />
* '''The Octave Forge Project'''<br />
*: [https://octave.sourceforge.io/ Octave-Forge] is a collection of contributed packages that enhance the capabilities of core Octave. They are somewhat analogous to Matlab's toolboxes.<br />
* '''Related Skills'''<br />
*: In addition, you probably should know '''some''' mathematics, engineering, experimental science, or something of the sort.<br />
*: If so, you probably have already been exposed to the kinds of problems that Octave is used for.<br />
<br />
== Criteria by which applications are judged ==<br />
<br />
These might vary somewhat depending on the mentors and coordinators for a particular Summer of Code, but typically the main factors considered would be:<br />
<br />
* '''Applicant has demonstrated an ability to make substantial modifications to Octave'''<br />
*: The most important thing is that you've contributed some interesting code samples to judge you by. It's OK during the application period to ask for help on how to format these code samples, which normally are Mercurial patches.<br />
<br />
* '''Applicant shows understanding of topic'''<br />
*: Your application should make it clear that you're reasonably well versed in the subject area and won't need all summer just to read up on it.<br />
<br />
* '''Applicant shows understanding of and interest in Octave development'''<br />
*: The best evidence for this is previous contributions and interactions.<br />
<br />
* '''Well thought out, adequately detailed, realistic project plan'''<br />
*: "I'm good at this, so trust me" isn't enough. You should describe which algorithms you'll use and how you'll integrate with existing Octave code. You should also prepare a full timeline and goals for the midterm and final evaluations.<br />
<br />
= Suggested projects =<br />
<br />
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. You can also look at our [[Summer of Code|completed past projects]] for more inspiration.<br />
<br />
{{Note|these are suggested projects but you are welcome to propose your own projects provided you find an Octave mentor}}<br />
<br />
== Summary table ==<br />
<br />
{| class="wikitable sortable" style="text-align: center; width:99%"<br />
|-<br />
!Title<br />
!Mentor<br />
!co-Mentors<br />
!Class<br />
!New?<br />
!Difficulty<br />
!Last active<br />
|-<br />
! <br />!! !! !! !! !! !!<br />
|-<br />
| [[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<br />
|-<br />
| [[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<br />
|-<br />
| [[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<br />
|-<br />
| [[Summer_of_Code_Project_Ideas#EPA_hydrology_software_suite | EPA hydrology software suite]] || [[User:KaKiLa| KaKiLa]] || ? || Octave Forge || Yes || Medium || Never<br />
|-<br />
| [[Summer_of_Code_Project_Ideas#FullSWOF overland flow simulator | FullSWOF overland flow simulator]] || [[User:KaKiLa| KaKiLa]] || ? || Octave Forge || Yes || Medium || Never<br />
|-<br />
| [[Summer_of_Code_Project_Ideas#TISEAN_package | TISEAN: Nonlinear Time Series Analysis]] || [[User:KaKiLa|KaKiLa]] || ? || Octave Forge || [[TISEAN_package | No]] || Medium || GSoC 2015<br />
|-<br />
| [[Summer_of_Code_Project_Ideas#Octave_Package_management | Octave Package management]] || Sebastian Schรถps || [[User:KaKiLa|KaKiLa]], Carnรซ Draug, Carlo de Falco || Infrastructure || Yes || Medium || Never<br />
|-<br />
| [[Summer_of_Code_Project_Ideas#Symbolic_package | Symbolic package]] || Colin B. Macdonald || Mike Miller, Abhinav Tripathi || Octave Forge || [https://github.com/cbm755/octsympy Octsympy] || Medium || GSoC 2016<br />
|-<br />
| [[Summer_of_Code_Project_Ideas#Interval_package | Interval package]] || [[User:oheim|Oliver Heimlich]] || [[User:Siko1056|Kai T. Ohlhus]] || Octave Forge, Numerical || No || Medium || [https://gsocinterval.blogspot.de/ GSoC 2017]<br />
|-<br />
| [[Summer_of_Code_Project_Ideas#OCS | OCS package]] || Sebastian Schรถps || Sebastian Schรถps || Octave Forge, Numerical || Yes || Easy || Never<br />
|-<br />
| [[Summer_of_Code_Project_Ideas#Using_Python_within_Octave | Pytave project]] || Mike Miller || Colin B. Macdonald, Abhinav Tripathi || Infrastructure || No || Medium || some in GSoC 2016<br />
|-<br />
| [[Summer_of_Code_Project_Ideas#Jupyter_Integration | Jupyter integration]] || Mike Miller || Colin B. Macdonald, Ankit Raj || Infrastructure || Yes || Medium || Never<br />
|-<br />
| [[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<br />
|-<br />
| [[Summer_of_Code_Project_Ideas#GUI Variable Editor and Property Inspector | GUI Property Inspector]] || ? || || GUI || Yes || Medium || Never<br />
|-<br />
| [[Summer_of_Code_Project_Ideas#SPQR Interface | Write API to SPQR Library]] || ? || || Infrastructure || Yes || Medium || Never<br />
|-<br />
| [[Summer_of_Code_Project_Ideas#PolarAxes and Plotting Improvements | PolarAxes and Plotting Improvements ]] || ? || Rik || Graphics || Yes || Medium || Never<br />
|}<br />
<br />
== Numerical ==<br />
<br />
These projects involve implementing certain mathematical functions, primarily in core Octave.<br />
<br />
=== ode15{i,s} : Matlab Compatible DAE solvers ===<br />
<br />
An initial implementation of a Matlab compatible ode15{i,s} solver,<br />
based on [http://computation.llnl.gov/projects/sundials SUNDIALS], <br />
was done by Francesco Faccio during<br />
GSOC 2016.<br />
The blog describing the work is [http://gsoc2016ode15s.blogspot.it/ here].<br />
The resulting code has been pushed into the main Octave repository in the development branch and<br />
consists mainly of the following three files<br />
[http://hg.savannah.gnu.org/hgweb/octave/file/4890b1c4a6bd/libinterp/dldfcn/__ode15__.cc __ode15__.cc],<br />
[http://hg.savannah.gnu.org/hgweb/octave/file/4890b1c4a6bd/scripts/ode/ode15i.m ode15i.m] and<br />
[http://hg.savannah.gnu.org/hgweb/octave/file/4890b1c4a6bd/scripts/ode/ode15s.m ode15s.m].<br />
The list of outstanding tracker tickets concerning this implementation can be found <br />
[https://savannah.gnu.org/search/?Search=Search&words=ode15&type_of_search=bugs&only_group_id=1925&exact=1&max_rows=25#options here]<br />
<br />
Possible useful improvements that could be done in a new project include:<br />
<br />
* Implement a better function for selecting consistent initial conditions compatible with Matlab's decic.m. The algorithm to use is described [http://faculty.smu.edu/shampine/cic.pdf here]<br />
<br />
* make ode15{i,s} with datatypes other than double<br />
<br />
* improve interpolation at intermediate time steps.<br />
<br />
* general code profiling and optimization <br />
<br />
Other tasks, not strictly connected to ode15{i,s} but closely related that could be added <br />
to a possible project plan would be improving documentation and tests in odepkg and removing <br />
overlaps with the documentation in core Octave.<br />
<br />
* '''Required skills'''<br />
: C++; C; familiarity with numerical methods for DAEs; Basic knowledge of makefiles and/or autotools.<br />
* '''Difficulty'''<br />
: Medium.<br />
* '''Potential mentors'''<br />
: Francesco Faccio, Carlo de Falco, Marco Caliari, Jacopo Corno, Sebastian Schรถps<br />
<br />
=== Improve logm, sqrtm, funm ===<br />
<br />
The goal here is to implement some missing Matlab functions related to matrix functions like the [http://en.wikipedia.org/wiki/Matrix_exponential matrix exponential]. There is [http://octave.1599824.n4.nabble.com/matrix-functions-td3137935.html a general discussion] of the problem. A good starting point for available algorithms and open-source implementations is Higham and Deadman's [http://eprints.ma.man.ac.uk/2102/01/covered/MIMS_ep2014_8.pdf "A Catalogue of Software for Matrix Functions"].<br />
<br />
* '''Required skills'''<br />
: Read and Write both C++ and Octave code, find and read research papers, research experience in numerical analysis, familiarity with analysis of algorithms.<br />
* '''Difficulty'''<br />
: Difficult.<br />
* '''Potential mentors'''<br />
: ?<br />
<br />
=== Improve iterative methods for sparse linear systems ===<br />
<br />
GNU Octave currently has the following Krylov subspace methods for sparse linear systems: pcg (spd matrices) and pcr (Hermitian matrices), bicg,<br />
bicgstab, cgs, gmres, and qmr (general matrices). The description of some of them (pcr, qmr) and their error messages are not aligned. Moreover, they have similar blocks of code (input check for instance) which can be written once and for all in common functions. The first step in this project could be a revision and a synchronization of the codes, starting from the project [http://planet.octave.org/#tag:blogger.com,1999:blog-1297699247151766814.post-8054019978706480250 SOCIS2016], whose latest patch, still to be included, is [https://savannah.gnu.org/patch/?9108 here].<br />
<br />
In Matlab, some additional methods are available: minres and symmlq (symmetric matrices), bicgstabl (general matrices), lsqr (least<br />
squares). The second step in this project could be the implementation of some of these missing functions.<br />
<br />
The reference book is available [www-users.cs.umn.edu/~saad/IterMethBook_2ndEd.pdf here]<br />
<br />
* '''Required skills'''<br />
: numerical linear algebra, m-file programming.<br />
* '''Difficulty'''<br />
: Maybe hard the mathematical part, medium the programming part.<br />
* '''Mentor'''<br />
:<br />
<br />
=== Chebfun in Octave ===<br />
<br />
[http://chebfun.org Chebfun] is a mathematics and software project for "numerical computing with functions". Basically it approximates functions to machine precision accuracy (10<sup>-15</sup>) using piecewise Chebyshev polynomial interpolants. Operations on those functions (arithmetic, derivatives, root-finding, etc) are then overloaded and return new interpolating polynomials, which are themselves proxies for the actual solution.<br />
<br />
Chebfun makes extensive use of classdef classes, and is one of the largest Free Software projects to do so. Unfortunately it currently only works in Matlab. This project seeks to (1) improve Octave's classdef support and (2) tweak Chebfun to work under Octave, for example, removing undocumented classdef features. The final goal is to have at least basic Chebfun features working on Octave. An additional goal would be making "pkg install chebfun.zip" work in Octave.<br />
<br />
The impact of this project is improving Octave and allowing Chebfun to be used without proprietary software.<br />
<br />
* '''Required skills'''<br />
: Octave m-file programming, classdef programming, probably C++, some familiarity with Approximation Theory (a branch of mathematics).<br />
* '''Difficulty'''<br />
: Medium (fixing Octave classdef bugs likely harder and requires a deep dive into how Octave supports OOP).<br />
* '''Potential mentors'''<br />
: Colin B. Macdonald, [[User:KaKiLa|KaKiLa]], Mike Miller (?), Carnรซ Draug (?), someone from Chebfun team (?).<br />
<br />
How to get started: learn about Chebfun, browse Octave's bug list for classdef-related bugs.<br />
<br />
First steps: clone this Chebfun [https://github.com/cbm755/chebfun/tree/octave_dev octave_dev branch]. On that, "f = chebfun(@(x) sin(x), [-2 6])" should work with Octave 4.3.0+ and maybe even with 4.2.1. Check that "f(pi)" and "g = f + 1" work. A good first task would be to study [https://github.com/cbm755/chebfun/commit/e20b0ad2dc89cfe8e50ba461b864eff7d5bbef17 this commit], a workaround for "f.funs{1}" using "temp = f.funs; temp{1}". "2*f" is failing, can you fix it, perhaps with this workaround? Or can you make "f.funs{1}" work by changing something in "@chebfun/subsref.m"?<br />
<br />
== Adding functionality to Forge packages ==<br />
<br />
<br />
=== EPA hydrology software suite ===<br />
Create native interfaces to the EPA software suites.<br />
<br />
Starting points<br />
* [https://forja.cica.es/projects/epanet-octave/ epanet-octave].<br />
* [https://github.com/OpenWaterAnalytics/ Open Water Analytics]<br />
<br />
* '''SWMM'''<br />
** [https://www.epa.gov/water-research/storm-water-management-model-swmm Official page]<br />
** Check work done in [https://github.com/water-systems/MatSWMM MatSWMM] [http://digital.csic.es/bitstream/10261/132982/1/MatSWMM.pdf article]<br />
<br />
* '''EPANET'''<br />
** [https://www.epa.gov/water-research/epanet Official page]<br />
<br />
* '''Required skills'''<br />
: m-file scripting, C, C++, API knowledge, file I/O, classdef (optional). <br />
<br />
* '''Difficulty'''<br />
: easy/medium<br />
<br />
* '''Mentor'''<br />
: [[User:KaKiLa|KaKiLa]]<br />
<br />
=== FullSWOF overland flow simulator ===<br />
Create scripting tools for (optional: native interfaces).<br />
<br />
Starting points<br />
* [http://www.univ-orleans.fr/mapmo/soft/FullSWOF/ The FullSWOF Project].<br />
* [https://arxiv.org/abs/1204.3210 FullSWOF: A software for overland flow simulation]<br />
* [https://bitbucket.org/binello7/fswof2d Initial work on Bitbucket]<br />
<br />
* '''Required skills'''<br />
: m-file scripting, C, C++, API knowledge, file I/O, classdef (optional). <br />
<br />
* '''Difficulty'''<br />
: easy/medium<br />
<br />
* '''Mentor'''<br />
: [[User:KaKiLa|KaKiLa]]<br />
<br />
=== TISEAN package ===<br />
<br />
[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 has been [[TISEAN package | partially re-implemented]] as libre software. The objective is to integrate TISEAN as an Octave Forge package, as was done for the Control package.<br />
[[TISEAN_package | A lot has been completed]] but [[TISEAN_package:Procedure | there is still work left to do]].<br />
<br />
There are missing functions to do computations on spike trains, to simulate autoregresive models, to create specialized plots, etc. Do check [[TISEAN_package:Procedure#Table_of_functions|the progress of the project]] to see if you are interested.<br />
<br />
* [http://octave.sourceforge.net/tisean/overview.html Package help at source forge.] <br />
* [https://sourceforge.net/p/octave/tisean/ci/default/tree/ Package repository at source forge.] <br />
<br />
* '''Required skills'''<br />
: m-file scripting, C, C++, and FORTRAN API knowledge. <br />
* '''Difficulty'''<br />
: easy/medium<br />
* '''Mentor'''<br />
: [[User:KaKiLa|KaKiLa]]<br />
<br />
=== Symbolic package ===<br />
<br />
Octave's [https://github.com/cbm755/octsympy Symbolic package] handles symbolic computing and other CAS tools. The main component of Symbolic is a pure m-file class "@sym" which uses the Python package [https://www.sympy.org SymPy] to do (most of) the actual computations. The package aims to expose the full functionality of SymPy while also providing a high-level of compatibility with the Matlab Symbolic Math Toolbox. The Symbolic package requires communication between Octave and Python. Recently, a GSoC2016 project successfully re-implemented this communication using the new [https://bitbucket.org/mtmiller/pytave Pytave tool].<br />
<br />
This project proposes to go further: instead of using Pytave only for the communication layer, we'll use it throughout the Symbolic project. For example, we might make "@sym" a subclass of "@pyobject". We also could stop using the "python_cmd" interface and use Pytave directly from methods. The main goal was already mentioned: to expose the *full functionality* of SymPy. For example, we would allow OO-style method calls such as "f.diff(x)" instead of "diff(f, x)".<br />
<br />
* '''Required skills'''<br />
: OO-programming with m-files, Python, and possibly C/C++ for improving Pytave (if needed).<br />
* '''Difficulty'''<br />
: easy/medium<br />
* '''Mentors and/or other team members'''<br />
: Colin B. Macdonald, Mike Miller, Abhinav Tripathi<br />
<br />
=== Interval package ===<br />
<br />
The [[Interval_package|interval package]] provides several arithmetic functions with accurate and guaranteed error bounds. Its development started in the end of 2014 and there is some fundamental functionality left to be implemented. See the [https://octave.sourceforge.io/interval/overview.html list of functions], basically any missing numeric Octave function could be implemented as an interval extension in the package. Potential projects:<br />
* Implement missing algorithms (as m-files)-difficulty and whether knowledge in interval analysis is required depends on the particular function. Of course, you may use papers which present such algorithms.<br />
* Improve existing algorithms (support more options for plotting, support more options for optimizers, increase accuracy, โฆ)<br />
* Integrate functions from VERSOFT [http://uivtx.cs.cas.cz/~rohn/matlab/] in the package (some work has already been done and current progress is tracked in [[Interval_package#VERSOFT]]). This basically involves conversion of the documentation into Texinfo format, use [[Contribution_guidelines#Coding_style|Octave coding guidelines]] and to make sure that any called functions are available in the interval package. VERSOFT is originally based on INTLAB [http://www.ti3.tu-harburg.de/rump/intlab/], a proprietary Octave/Matlab package. Some functions may be missing. Also, the interval package doesn't support complex numbers, so it might not be possible to migrate some functions.<br />
* List more interesting use cases of interval arithmetic in the package's manual [https://octave.sourceforge.io/interval/package_doc/Examples.html]<br />
<br />
* '''Required skills'''<br />
: m-file scripting, basic knowledge of computer arithmetics (especially floating-point computations), interval analysis (depending on the functions to implement).<br />
* '''Difficulty'''<br />
: Medium.<br />
* '''Mentor and co-mentor'''<br />
: [[User:oheim|Oliver Heimlich]], [[User:Siko1056|Kai T. Ohlhus]]<br />
<br />
=== OCS ===<br />
<br />
[[Ocs package | OCS]] is a circuit simulator for Octave. The objective of this project is to update the code to use modern features of Octave (e.g. classdef), fix open bugs, increase compatibility with SPICE and improve compatibility with other Octave packages (odepkg, control etc).<br />
<br />
* [http://octave.sourceforge.net/ocs/overview.html Package help at source forge.] <br />
<br />
* '''Required skills'''<br />
: m-file scripting, C, C++, and FORTRAN API knowledge. <br />
* '''Difficulty'''<br />
: easy/medium<br />
* '''Mentor'''<br />
: Sebastian Schรถps, Carlo de Falco<br />
<br />
== Infrastructure ==<br />
<br />
=== Jupyter Integration ===<br />
<br />
[http://jupyter.org Jupyter Notebook] is a web-based worksheet interface for computing. There is a [https://github.com/Calysto/octave_kernel Octave kernel for Jupyter]. This project seeks to improve that kernel to make Octave a first-class experience within the Jupyter Notebook.<br />
<br />
* '''Mentors'''<br />
: Colin B. Macdonald, Mike Miller, others?<br />
<br />
<br />
=== Using Python within Octave ===<br />
<br />
[https://bitbucket.org/mtmiller/pytave Pytave] allows one to call Python functions and interact with Python objects from within Octave .m file code and from the Octave command line interface. Ideally, Pytave will not be a separate project, but rather a core feature of Octave. This project aims to improve Pytave with the goal of merging the code into the core Octave code base. <br />
<br />
Based on a previous summer project related to Pytave, this work will consist of fast-paced collaborative software development based on tackling the [https://bitbucket.org/mtmiller/pytave/issues?status=new&status=open pytave issue list]. You would also be expected to participate in software design decisions and discussion, as well as improve documentation, doctests and unit tests. As an example of the sorts of decision decisions being made, note that Octave indexes from 1 whereas Python typically indexes from 0; in which cases is it appropriate to make this transparent to the user?<br />
<br />
* '''Mentors'''<br />
: Mike Miller, Colin B. Macdonald, Abhinav Tripathi, others?<br />
<br />
<br />
=== Octave Package management ===<br />
<br />
[[Packages]] are extensions for Octave, that are mainly maintained by the [[Octave Forge]] community.<br />
To get those extension to work with Octave, there is a single function, {{manual|pkg}}, which does pretty much everything.<br />
This function has a few limitations which are hard to implement with the current codebase, and will most likely require a full rewrite.<br />
A major step forward for a rewritten package manager is the [https://github.com/apjanke/octave-packajoozle/ "packajoozle" project] by Andrew Janke.<br />
<br />
The planned improvements (see also {{bug|39479}}) are:<br />
<br />
* install and update from repositories (hg and git)<br />
* automatic handling of dependencies<br />
* easily load, update or check specific package versions<br />
* management of tests and demos in C++ sources of packages<br />
* more flexibility on dependencies, e.g., dependent on specific Octave build options or being dependent in one of multiple packages<br />
* support for multiple version packages<br />
* support for multiple Octave installs<br />
* support for system-wide and user installed packages<br />
* testing packages (<code>pkg test <package-name></code>)<br />
* improved metadata acquisition (<code>pkg list -forge</code>) from https://octave.sourceforge.io/<br />
<br />
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.<br />
However, the current {{manual|pkg}} also performs some maintenance functions which it probably should not.<br />
Instead a package for developers should be created with such tools.<br />
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]).<br />
<br />
Many of these problems have been solved in other languages.<br />
Familiarity with how other languages handle this problem will be useful to come up with elegant solutions.<br />
In some cases, there are standards to follow.<br />
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.<br />
See bugs {{bug|36477}} and {{bug|40444}} for more details.<br />
<br />
In addition, package names may start to collide very easily.<br />
One horrible way to workaround this by is choosing increasingly complex package names that give no hint on the package purpose.<br />
A much better is option is providing an Authority category like Perl 6 does.<br />
Nested packages is also an easy way to provide packages for specialized subjects (think {{codeline|image::morphology}}).<br />
A new {{manual|pkg}} would think all this things now, or allow their implementation at a later time.<br />
Read the [[OEP:pkg|unfinished plan]] for more details.<br />
<br />
* '''Minimum requirements'''<br />
: 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.<br />
* '''Difficulty'''<br />
: Medium.<br />
* '''Mentor'''<br />
: [[User:KaKiLa|KaKiLa]], Carnรซ Draug, Carlo de Falco, Sebastian Schรถps<br />
<br />
=== SPQR Interface ===<br />
<br />
Octave implements QR factorization for sparse matrices, but it does so with an older library. This has caused fundamental issues, including segfaults as recorded here (https://savannah.gnu.org/bugs/?func=detailitem&item_id=51950). The goal of this project is to program an interface to the API for the SQPR library (http://faculty.cse.tamu.edu/davis/suitesparse.html). This is the same library that Matlab uses for this purpose.<br />
<br />
* '''Minimum requirements'''<br />
: Ability to read and write C++ code.<br />
* '''Difficulty'''<br />
: Medium.<br />
* '''Mentor'''<br />
: <br />
<br />
== Image Analysis ==<br />
<br />
=== Improvements to N-dimensional image processing ===<br />
<br />
The image package has partial functionality for N-dimensional images. These images exist for example in medical imaging where slices from scans are assembled to form anatomical 3D images. If taken over time and at different laser wavelengths or light filters, they can also result in 5D images. Albeit less common, images with even more dimensions also exist. However, their existence is irrelevant since most of the image processing operations are mathematical operations which are independent of the number of dimensions.<br />
<br />
As part of GSoC 2013, the core functions for image IO, {{codeline|imwrite}} and {{codeline|imread}}, were extended to better support this type of images. Likewise, many functions in the image package, mostly morphology operators, were expanded to deal with this type of image. Since then, many other functions have been improved, sometimes completely rewritten, to abstract from the number of dimensions. In a certain way, supporting ND images is also related to choosing good algorithms since such large images tend to be quite large.<br />
<br />
This project will continue on the previous work, and be mentored by the previous GSoC student and current image package maintainer. Planning the project requires selection of functions lacking ND support and identifying their dependencies. For example, supporting {{codeline|imclose}} and {{codeline|imopen}} was better implemented by supporting {{codeline|imerode}} and {{codeline|imdilate}} which then propagated ND support to all of its dependencies. These dependencies need to be discovered first since often they are not being used yet, and may even be missing function. This project can also be about implementing functions that have [[Image package#Missing functions | not yet been implemented]]. Also note that while some functions in the image package will accept ND images as input, they are actually not correctly implemented and will give incorrect results.<br />
<br />
* '''Required skills'''<br />
: 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. <br />
* '''Difficulty'''<br />
: Difficult.<br />
* '''Potential mentor'''<br />
: Carnรซ Draug<br />
<br />
=== Improve Octave's image IO ===<br />
<br />
There are a lot of image formats. To handle this, Octave uses [http://www.graphicsmagick.org/ GraphicsMagic] (GM), a library capable of handling [http://www.graphicsmagick.org/formats.html a lot of them] in a single C++ interface. However, GraphicsMagick still has its limitations. The most important are:<br />
<br />
* GM has build option {{codeline|quantum}} which defines the bitdepth to use when reading an image. Building GM with high quantum means that images of smaller bitdepth will take a lot more memory when reading, but building it too low will make it impossible to read images of higher bitdepth. It also means that the image needs to always be rescaled to the correct range.<br />
* GM supports unsigned integers only thus incorrectly reading files such as TIFF with floating point data<br />
* GM hides away details of the image such as whether the image file is indexed. This makes it hard to access the real data stored on file.<br />
<br />
This project would implement better image IO for scientific file formats while leaving GM handle the others. Since TIFF is the de facto standard for scientific images, this should be done first. Among the targets for the project are:<br />
<br />
* implement the Tiff class which is a wrap around libtiff, using classdef. To avoid creating too many private __oct functions, this project could also create a C++ interface to declare new Octave classdef functions.<br />
* improve imread, imwrite, and imfinfo for tiff files using the newly created Tiff class<br />
* port the bioformats into Octave and prepare a package for it<br />
* investigate other image IO libraries<br />
* clean up and finish the dicom package to include into Octave core<br />
* prepare a matlab compatible implementation of the FITS package for inclusion in Octave core<br />
<br />
* '''Required skills'''<br />
: Knowledge of C++ and C since most libraries are written in those languages.<br />
* '''Difficulty'''<br />
: Medium.<br />
* '''Potential mentor'''<br />
: Carnรซ Draug<br />
<br />
== GUI ==<br />
<br />
=== GUI Variable Editor and Property Inspector ===<br />
<br />
Octave has a preliminary implementation of a Variable Editor: a spreadsheet-like tool for quickly editing and visualizing variables. The initial phase of the project will be learning how the implementation was done.<br />
<br />
With the knowledge gained, the second part of the project will be to implement a Property Inspector. This is a spreadsheet like interface to the many, many graphics properties that exist and are different on a per-object basis. The goal would be not only the concise-display of the existing properties, but a reasonable user interface to change them. As examples, boolean properties should be able to be toggled with a double-click; Radio properties should have a drop-down list of only the supported options; Other properties that can be modified should have the constraints built-in (for example, Linewidth must be a scalar, while Position must be a 1x4 vector). It would also be important to have easy access to the documentation of a property.<br />
<br />
For reference, Matlab has a similar Property Inspector (https://www.mathworks.com/help/matlab/ref/inspect.html).<br />
<br />
* '''Minimum requirements'''<br />
: Ability to read and write C++ code. Experience with Qt toolkit and GUI programming is optional, but desirable.<br />
* '''Difficulty'''<br />
: Medium.<br />
* '''Mentor'''<br />
:<br />
<br />
== Graphics ==<br />
<br />
=== PolarAxes and Plotting Improvements ===<br />
<br />
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}}.<br />
<br />
* '''Minimum requirements'''<br />
: Ability to read and write C++ code. Ability to read and write Octave code. Experience with OpenGL programming is optional.<br />
* '''Difficulty'''<br />
: Medium.<br />
* '''Mentor'''<br />
: Rik <br />
<br />
<noinclude><br />
[[Category:Summer of Code]]<br />
[[Category:Project Ideas]]<br />
</noinclude></div>Nirhttps://wiki.octave.org/wiki/index.php?title=Summer_of_Code_-_Getting_Started&diff=12582Summer of Code - Getting Started2020-01-27T17:22:53Z<p>Nir: /* Suggested projects */</p>
<hr />
<div>The following is distilled from the [[Projects]] page for the benefit of potential [https://summerofcode.withgoogle.com Google] and [http://sophia.estec.esa.int/socis ESA] Summer of Code (SoC) 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.<br />
<br />
You can also take a look at last years [[Summer of Code]] projects for inspiration.<br />
<br />
= Steps Toward a Successful Application =<br />
<br />
== Help Us Get To Know You == <br />
*: If you aren't communicating with us before the application is due, your application will not be accepted.<br />
*:* '''Join the [https://lists.gnu.org/mailman/listinfo/octave-maintainers maintainers mailing list]''' or read the archives and see what topics we discuss and how the developers interact with each other.<br />
*:* '''Hang out in our [https://webchat.freenode.net/?channels=#octave IRC channel]'''. Ask questions, answer questions from users, show us that you are motivated, and well-prepared. There will be more applicants than we can effectively mentor, so do ask for feedback on your public application to increase the strength of your proposal!<br />
* '''Do not wait for us to tell you what to do'''<br />
*: You should be doing something that interests you, and should not need us to tell you what to do. Similarly, you shouldn't ask us what to do either.<br />
*:* When you email the list and mentors, do not write it to say in what project you're interested. Be specific about your questions and clear on the email subject. For example, do not write an email with the subject "GSoC student interested in the ND images projects". Such email is likely be ignored. Instead, show you are already working on the topic, and email "Problem implementing morphological operators with bitpacked ND images".<br />
*:* It is good to ask advice on how to solve something you can't but you must show some work done. Remember, we are mentors and not your boss. Read [http://www.catb.org/esr/faqs/smart-questions.html How to ask questions the smart way]:<br />
*:*: <blockquote cite="http://www.catb.org/esr/faqs/smart-questions.html">''Prepare your question. Think it through. Hasty-sounding questions get hasty answers, or none at all. The more you do to demonstrate that having put thought and effort into solving your problem before seeking help, the more likely you are to actually get help.''</blockquote><br />
*:* It can be difficult at the beginning to think on something to do. This is nature of free and open source software development. You will need to break the mental barrier that prevents you from thinking on what can be done. Once you do that, you will have no lack of ideas for what to do next.<br />
*:* Use Octave. Eventually you will come across something that does not work the way you like. Fix that. Or you will come across a missing function. Implement it. It may be a hard problem (they usually are). While solving that problem, you may find other missing capabilities or smaller bug fixes. Implement and contribute those to Octave.<br />
*:* Take a look at the [[Short projects]] for something that may be simple to start with.<br />
<br />
== Find Something That Interests You == <br />
*: It's '''critical''' that you '''find a project that excites you'''. You'll be spending most of the summer working on it (we expect you to treat the SoC as a full-time job).<br />
*: Don't just tell us how interested you are, show us that you're willing and able to '''contribute''' to Octave. You can do that by [https://savannah.gnu.org/bugs/?group=octave fixing a few bugs] or [http://savannah.gnu.org/patch/?group=octave submitting patches] well before the deadline, in addition to regularly interacting with Octave maintainers and users on the mailing list and IRC. Our experience shows us that successful SoC students demonstrate their interest early and often.<br />
== Prepare Your Proposal With Us ==<br />
*: By working with us to prepare your proposal, you'll be getting to know us and showing us how you approach problems. The best place for this is your Wiki user page and the [https://webchat.freenode.net/?channels=#octave IRC channel].<br />
== Complete Your Application ==<br />
*: Fill out our '''''public''''' application template.<br />
*:* This is best done by '''[[Special:CreateAccount|creating an account at this wiki]]''', and copying the '''[[Template:Student_application_template_public|template]]''' from its page.<br />
*:* You really only need to copy and answer the '''''public''''' part there, there is no need to showcase everything else to everybody reading your user page!<br />
*: Fill out our '''''private''''' application template.<br />
*:* This is best done by copying the '''[[Template:Student_application_template_private|template]]''' from its page and '''adding the required information to your application at Google (melange)''' or at '''ESA'''.<br><br />
*:* Only the organization admin and the possible mentors will see this data. You can still edit it after submitting until the deadline!<br />
<br />
== Things You'll be Expected to Know or Quickly Learn On Your Own ==<br />
<br />
Octave is mostly written in C++ and its own scripting language that is mostly compatible with Matlab. 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 Octave's scripting language, successful applicants will be familiar with or able to quickly learn about Octave's infrastructure. You can't spend the whole summer learning how to build Octave or prepare a changeset and still successfully complete your project.<br />
<br />
* '''The Build System'''<br />
*: [http://en.wikipedia.org/wiki/GNU_build_system The GNU build system] is used to build Octave.<br />
*: 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.<br />
*: If you've ever done a {{Codeline|./configure && make && make install}} series of commands, you have already used the GNU build system.<br />
*: '''You must demonstrate that you are able to build the development version of Octave from sources before the application deadline.''' Linux is arguably the easiest system to work on. Instructions:<br />
*:* [[Building]]<br />
*:* [https://www.gnu.org/software/octave/doc/interpreter/Installation.html Octave Manual on Installing Octave]<br />
* '''The Version Control System'''<br />
*: We use [https://www.mercurial-scm.org/ Mercurial] (abbreviated hg).<br />
*: Mercurial is the [http://en.wikipedia.org/wiki/Distributed_Version_Control_System 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.<br />
* '''The Procedure for Contributing Changesets'''<br />
*: You will be expected to follow the same procedures as other contributors and core developers.<br />
*: You will be helping current and future Octave developers by using our standard style for changes, commit messages, and so on. You should also read the same [[Contribution guidelines | contribution]] [http://hg.savannah.gnu.org/hgweb/octave/file/tip/etc/HACKING.md guidelines] we have for everyone.<br />
*: [[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.<br />
* '''The Maintainers Mailing List'''<br />
*: We primarily use [https://lists.gnu.org/mailman/listinfo/octave-maintainers mailing lists] for communication among developers.<br />
*: The mailing list is used most often for discussions about non-trivial changes to Octave, or for setting the direction of development.<br />
*: You should follow basic mailing list etiquette. For us, this mostly means "do not [https://en.wikipedia.org/wiki/Posting_style#Top-posting top post]".<br />
* '''The IRC Channel'''<br />
*: We also have [http://webchat.freenode.net?channels=octave the #octave IRC channel in Freenode].<br />
*: You should be familiar with the IRC channel. It's very helpful for new contributors (you) to get immediate feedback on ideas and code.<br />
*: Unless your primary mentor has a strong preference for some other method of communication, the IRC channel will likely be your primary means of communicating with your mentor and Octave developers.<br />
* '''The Octave Forge Project'''<br />
*: [https://octave.sourceforge.io/ Octave-Forge] is a collection of contributed packages that enhance the capabilities of core Octave. They are somewhat analogous to Matlab's toolboxes.<br />
* '''Related Skills'''<br />
*: In addition, you probably should know '''some''' mathematics, engineering, experimental science, or something of the sort.<br />
*: If so, you probably have already been exposed to the kinds of problems that Octave is used for.<br />
<br />
== Criteria by which applications are judged ==<br />
<br />
These might vary somewhat depending on the mentors and coordinators for a particular Summer of Code, but typically the main factors considered would be:<br />
<br />
* '''Applicant has demonstrated an ability to make substantial modifications to Octave'''<br />
*: The most important thing is that you've contributed some interesting code samples to judge you by. It's OK during the application period to ask for help on how to format these code samples, which normally are Mercurial patches.<br />
<br />
* '''Applicant shows understanding of topic'''<br />
*: Your application should make it clear that you're reasonably well versed in the subject area and won't need all summer just to read up on it.<br />
<br />
* '''Applicant shows understanding of and interest in Octave development'''<br />
*: The best evidence for this is previous contributions and interactions.<br />
<br />
* '''Well thought out, adequately detailed, realistic project plan'''<br />
*: "I'm good at this, so trust me" isn't enough. You should describe which algorithms you'll use and how you'll integrate with existing Octave code. You should also prepare a full timeline and goals for the midterm and final evaluations.<br />
<br />
= Suggested projects =<br />
<br />
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. You can also look at our [[Summer of Code|completed past projects page]] for more inspiration.<br />
<br />
{{Note|these are suggested projects but you are welcome to propose your own projects provided you find an Octave mentor}}<br />
<br />
== Summary table ==<br />
<br />
{| class="wikitable sortable" style="text-align: center; width:99%"<br />
|-<br />
!Title<br />
!Mentor<br />
!co-Mentors<br />
!Class<br />
!New?<br />
!Difficulty<br />
!Last active<br />
|-<br />
! <br />!! !! !! !! !! !!<br />
|-<br />
| [[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<br />
|-<br />
| [[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<br />
|-<br />
| [[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<br />
|-<br />
| [[Summer_of_Code_Project_Ideas#EPA_hydrology_software_suite | EPA hydrology software suite]] || [[User:KaKiLa| KaKiLa]] || ? || Octave Forge || Yes || Medium || Never<br />
|-<br />
| [[Summer_of_Code_Project_Ideas#FullSWOF overland flow simulator | FullSWOF overland flow simulator]] || [[User:KaKiLa| KaKiLa]] || ? || Octave Forge || Yes || Medium || Never<br />
|-<br />
| [[Summer_of_Code_Project_Ideas#TISEAN_package | TISEAN: Nonlinear Time Series Analysis]] || [[User:KaKiLa|KaKiLa]] || ? || Octave Forge || [[TISEAN_package | No]] || Medium || GSoC 2015<br />
|-<br />
| [[Summer_of_Code_Project_Ideas#Octave_Package_management | Octave Package management]] || Sebastian Schรถps || [[User:KaKiLa|KaKiLa]], Carnรซ Draug, Carlo de Falco || Infrastructure || Yes || Medium || Never<br />
|-<br />
| [[Summer_of_Code_Project_Ideas#Symbolic_package | Symbolic package]] || Colin B. Macdonald || Mike Miller, Abhinav Tripathi || Octave Forge || [https://github.com/cbm755/octsympy Octsympy] || Medium || GSoC 2016<br />
|-<br />
| [[Summer_of_Code_Project_Ideas#Interval_package | Interval package]] || [[User:oheim|Oliver Heimlich]] || [[User:Siko1056|Kai T. Ohlhus]] || Octave Forge, Numerical || No || Medium || [https://gsocinterval.blogspot.de/ GSoC 2017]<br />
|-<br />
| [[Summer_of_Code_Project_Ideas#OCS | OCS package]] || Sebastian Schรถps || Sebastian Schรถps || Octave Forge, Numerical || Yes || Easy || Never<br />
|-<br />
| [[Summer_of_Code_Project_Ideas#Using_Python_within_Octave | Pytave project]] || Mike Miller || Colin B. Macdonald, Abhinav Tripathi || Infrastructure || No || Medium || some in GSoC 2016<br />
|-<br />
| [[Summer_of_Code_Project_Ideas#Jupyter_Integration | Jupyter integration]] || Mike Miller || Colin B. Macdonald, Ankit Raj || Infrastructure || Yes || Medium || Never<br />
|-<br />
| [[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<br />
|-<br />
| [[Summer_of_Code_Project_Ideas#GUI Variable Editor and Property Inspector | GUI Property Inspector]] || ? || || GUI || Yes || Medium || Never<br />
|-<br />
| [[Summer_of_Code_Project_Ideas#SPQR Interface | Write API to SPQR Library]] || ? || || Infrastructure || Yes || Medium || Never<br />
|-<br />
| [[Summer_of_Code_Project_Ideas#PolarAxes and Plotting Improvements | PolarAxes and Plotting Improvements ]] || ? || Rik || Graphics || Yes || Medium || Never<br />
|}<br />
<br />
== Numerical ==<br />
<br />
These projects involve implementing certain mathematical functions, primarily in core Octave.<br />
<br />
=== ode15{i,s} : Matlab Compatible DAE solvers ===<br />
<br />
An initial implementation of a Matlab compatible ode15{i,s} solver,<br />
based on [http://computation.llnl.gov/projects/sundials SUNDIALS], <br />
was done by Francesco Faccio during<br />
GSOC 2016.<br />
The blog describing the work is [http://gsoc2016ode15s.blogspot.it/ here].<br />
The resulting code has been pushed into the main Octave repository in the development branch and<br />
consists mainly of the following three files<br />
[http://hg.savannah.gnu.org/hgweb/octave/file/4890b1c4a6bd/libinterp/dldfcn/__ode15__.cc __ode15__.cc],<br />
[http://hg.savannah.gnu.org/hgweb/octave/file/4890b1c4a6bd/scripts/ode/ode15i.m ode15i.m] and<br />
[http://hg.savannah.gnu.org/hgweb/octave/file/4890b1c4a6bd/scripts/ode/ode15s.m ode15s.m].<br />
The list of outstanding tracker tickets concerning this implementation can be found <br />
[https://savannah.gnu.org/search/?Search=Search&words=ode15&type_of_search=bugs&only_group_id=1925&exact=1&max_rows=25#options here]<br />
<br />
Possible useful improvements that could be done in a new project include:<br />
<br />
* Implement a better function for selecting consistent initial conditions compatible with Matlab's decic.m. The algorithm to use is described [http://faculty.smu.edu/shampine/cic.pdf here]<br />
<br />
* make ode15{i,s} with datatypes other than double<br />
<br />
* improve interpolation at intermediate time steps.<br />
<br />
* general code profiling and optimization <br />
<br />
Other tasks, not strictly connected to ode15{i,s} but closely related that could be added <br />
to a possible project plan would be improving documentation and tests in odepkg and removing <br />
overlaps with the documentation in core Octave.<br />
<br />
* '''Required skills'''<br />
: C++; C; familiarity with numerical methods for DAEs; Basic knowledge of makefiles and/or autotools.<br />
* '''Difficulty'''<br />
: Medium.<br />
* '''Potential mentors'''<br />
: Francesco Faccio, Carlo de Falco, Marco Caliari, Jacopo Corno, Sebastian Schรถps<br />
<br />
=== Improve logm, sqrtm, funm ===<br />
<br />
The goal here is to implement some missing Matlab functions related to matrix functions like the [http://en.wikipedia.org/wiki/Matrix_exponential matrix exponential]. There is [http://octave.1599824.n4.nabble.com/matrix-functions-td3137935.html a general discussion] of the problem. A good starting point for available algorithms and open-source implementations is Higham and Deadman's [http://eprints.ma.man.ac.uk/2102/01/covered/MIMS_ep2014_8.pdf "A Catalogue of Software for Matrix Functions"].<br />
<br />
* '''Required skills'''<br />
: Read and Write both C++ and Octave code, find and read research papers, research experience in numerical analysis, familiarity with analysis of algorithms.<br />
* '''Difficulty'''<br />
: Difficult.<br />
* '''Potential mentors'''<br />
: ?<br />
<br />
=== Improve iterative methods for sparse linear systems ===<br />
<br />
GNU Octave currently has the following Krylov subspace methods for sparse linear systems: pcg (spd matrices) and pcr (Hermitian matrices), bicg,<br />
bicgstab, cgs, gmres, and qmr (general matrices). The description of some of them (pcr, qmr) and their error messages are not aligned. Moreover, they have similar blocks of code (input check for instance) which can be written once and for all in common functions. The first step in this project could be a revision and a synchronization of the codes, starting from the project [http://planet.octave.org/#tag:blogger.com,1999:blog-1297699247151766814.post-8054019978706480250 SOCIS2016], whose latest patch, still to be included, is [https://savannah.gnu.org/patch/?9108 here].<br />
<br />
In Matlab, some additional methods are available: minres and symmlq (symmetric matrices), bicgstabl (general matrices), lsqr (least<br />
squares). The second step in this project could be the implementation of some of these missing functions.<br />
<br />
The reference book is available [www-users.cs.umn.edu/~saad/IterMethBook_2ndEd.pdf here]<br />
<br />
* '''Required skills'''<br />
: numerical linear algebra, m-file programming.<br />
* '''Difficulty'''<br />
: Maybe hard the mathematical part, medium the programming part.<br />
* '''Mentor'''<br />
:<br />
<br />
=== Chebfun in Octave ===<br />
<br />
[http://chebfun.org Chebfun] is a mathematics and software project for "numerical computing with functions". Basically it approximates functions to machine precision accuracy (10<sup>-15</sup>) using piecewise Chebyshev polynomial interpolants. Operations on those functions (arithmetic, derivatives, root-finding, etc) are then overloaded and return new interpolating polynomials, which are themselves proxies for the actual solution.<br />
<br />
Chebfun makes extensive use of classdef classes, and is one of the largest Free Software projects to do so. Unfortunately it currently only works in Matlab. This project seeks to (1) improve Octave's classdef support and (2) tweak Chebfun to work under Octave, for example, removing undocumented classdef features. The final goal is to have at least basic Chebfun features working on Octave. An additional goal would be making "pkg install chebfun.zip" work in Octave.<br />
<br />
The impact of this project is improving Octave and allowing Chebfun to be used without proprietary software.<br />
<br />
* '''Required skills'''<br />
: Octave m-file programming, classdef programming, probably C++, some familiarity with Approximation Theory (a branch of mathematics).<br />
* '''Difficulty'''<br />
: Medium (fixing Octave classdef bugs likely harder and requires a deep dive into how Octave supports OOP).<br />
* '''Potential mentors'''<br />
: Colin B. Macdonald, [[User:KaKiLa|KaKiLa]], Mike Miller (?), Carnรซ Draug (?), someone from Chebfun team (?).<br />
<br />
How to get started: learn about Chebfun, browse Octave's bug list for classdef-related bugs.<br />
<br />
First steps: clone this Chebfun [https://github.com/cbm755/chebfun/tree/octave_dev octave_dev branch]. On that, "f = chebfun(@(x) sin(x), [-2 6])" should work with Octave 4.3.0+ and maybe even with 4.2.1. Check that "f(pi)" and "g = f + 1" work. A good first task would be to study [https://github.com/cbm755/chebfun/commit/e20b0ad2dc89cfe8e50ba461b864eff7d5bbef17 this commit], a workaround for "f.funs{1}" using "temp = f.funs; temp{1}". "2*f" is failing, can you fix it, perhaps with this workaround? Or can you make "f.funs{1}" work by changing something in "@chebfun/subsref.m"?<br />
<br />
== Adding functionality to Forge packages ==<br />
<br />
<br />
=== EPA hydrology software suite ===<br />
Create native interfaces to the EPA software suites.<br />
<br />
Starting points<br />
* [https://forja.cica.es/projects/epanet-octave/ epanet-octave].<br />
* [https://github.com/OpenWaterAnalytics/ Open Water Analytics]<br />
<br />
* '''SWMM'''<br />
** [https://www.epa.gov/water-research/storm-water-management-model-swmm Official page]<br />
** Check work done in [https://github.com/water-systems/MatSWMM MatSWMM] [http://digital.csic.es/bitstream/10261/132982/1/MatSWMM.pdf article]<br />
<br />
* '''EPANET'''<br />
** [https://www.epa.gov/water-research/epanet Official page]<br />
<br />
* '''Required skills'''<br />
: m-file scripting, C, C++, API knowledge, file I/O, classdef (optional). <br />
<br />
* '''Difficulty'''<br />
: easy/medium<br />
<br />
* '''Mentor'''<br />
: [[User:KaKiLa|KaKiLa]]<br />
<br />
=== FullSWOF overland flow simulator ===<br />
Create scripting tools for (optional: native interfaces).<br />
<br />
Starting points<br />
* [http://www.univ-orleans.fr/mapmo/soft/FullSWOF/ The FullSWOF Project].<br />
* [https://arxiv.org/abs/1204.3210 FullSWOF: A software for overland flow simulation]<br />
* [https://bitbucket.org/binello7/fswof2d Initial work on Bitbucket]<br />
<br />
* '''Required skills'''<br />
: m-file scripting, C, C++, API knowledge, file I/O, classdef (optional). <br />
<br />
* '''Difficulty'''<br />
: easy/medium<br />
<br />
* '''Mentor'''<br />
: [[User:KaKiLa|KaKiLa]]<br />
<br />
=== TISEAN package ===<br />
<br />
[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 has been [[TISEAN package | partially re-implemented]] as libre software. The objective is to integrate TISEAN as an Octave Forge package, as was done for the Control package.<br />
[[TISEAN_package | A lot has been completed]] but [[TISEAN_package:Procedure | there is still work left to do]].<br />
<br />
There are missing functions to do computations on spike trains, to simulate autoregresive models, to create specialized plots, etc. Do check [[TISEAN_package:Procedure#Table_of_functions|the progress of the project]] to see if you are interested.<br />
<br />
* [http://octave.sourceforge.net/tisean/overview.html Package help at source forge.] <br />
* [https://sourceforge.net/p/octave/tisean/ci/default/tree/ Package repository at source forge.] <br />
<br />
* '''Required skills'''<br />
: m-file scripting, C, C++, and FORTRAN API knowledge. <br />
* '''Difficulty'''<br />
: easy/medium<br />
* '''Mentor'''<br />
: [[User:KaKiLa|KaKiLa]]<br />
<br />
=== Symbolic package ===<br />
<br />
Octave's [https://github.com/cbm755/octsympy Symbolic package] handles symbolic computing and other CAS tools. The main component of Symbolic is a pure m-file class "@sym" which uses the Python package [https://www.sympy.org SymPy] to do (most of) the actual computations. The package aims to expose the full functionality of SymPy while also providing a high-level of compatibility with the Matlab Symbolic Math Toolbox. The Symbolic package requires communication between Octave and Python. Recently, a GSoC2016 project successfully re-implemented this communication using the new [https://bitbucket.org/mtmiller/pytave Pytave tool].<br />
<br />
This project proposes to go further: instead of using Pytave only for the communication layer, we'll use it throughout the Symbolic project. For example, we might make "@sym" a subclass of "@pyobject". We also could stop using the "python_cmd" interface and use Pytave directly from methods. The main goal was already mentioned: to expose the *full functionality* of SymPy. For example, we would allow OO-style method calls such as "f.diff(x)" instead of "diff(f, x)".<br />
<br />
* '''Required skills'''<br />
: OO-programming with m-files, Python, and possibly C/C++ for improving Pytave (if needed).<br />
* '''Difficulty'''<br />
: easy/medium<br />
* '''Mentors and/or other team members'''<br />
: Colin B. Macdonald, Mike Miller, Abhinav Tripathi<br />
<br />
=== Interval package ===<br />
<br />
The [[Interval_package|interval package]] provides several arithmetic functions with accurate and guaranteed error bounds. Its development started in the end of 2014 and there is some fundamental functionality left to be implemented. See the [https://octave.sourceforge.io/interval/overview.html list of functions], basically any missing numeric Octave function could be implemented as an interval extension in the package. Potential projects:<br />
* Implement missing algorithms (as m-files)-difficulty and whether knowledge in interval analysis is required depends on the particular function. Of course, you may use papers which present such algorithms.<br />
* Improve existing algorithms (support more options for plotting, support more options for optimizers, increase accuracy, โฆ)<br />
* Integrate functions from VERSOFT [http://uivtx.cs.cas.cz/~rohn/matlab/] in the package (some work has already been done and current progress is tracked in [[Interval_package#VERSOFT]]). This basically involves conversion of the documentation into Texinfo format, use [[Contribution_guidelines#Coding_style|Octave coding guidelines]] and to make sure that any called functions are available in the interval package. VERSOFT is originally based on INTLAB [http://www.ti3.tu-harburg.de/rump/intlab/], a proprietary Octave/Matlab package. Some functions may be missing. Also, the interval package doesn't support complex numbers, so it might not be possible to migrate some functions.<br />
* List more interesting use cases of interval arithmetic in the package's manual [https://octave.sourceforge.io/interval/package_doc/Examples.html]<br />
<br />
* '''Required skills'''<br />
: m-file scripting, basic knowledge of computer arithmetics (especially floating-point computations), interval analysis (depending on the functions to implement).<br />
* '''Difficulty'''<br />
: Medium.<br />
* '''Mentor and co-mentor'''<br />
: [[User:oheim|Oliver Heimlich]], [[User:Siko1056|Kai T. Ohlhus]]<br />
<br />
=== OCS ===<br />
<br />
[[Ocs package | OCS]] is a circuit simulator for Octave. The objective of this project is to update the code to use modern features of Octave (e.g. classdef), fix open bugs, increase compatibility with SPICE and improve compatibility with other Octave packages (odepkg, control etc).<br />
<br />
* [http://octave.sourceforge.net/ocs/overview.html Package help at source forge.] <br />
<br />
* '''Required skills'''<br />
: m-file scripting, C, C++, and FORTRAN API knowledge. <br />
* '''Difficulty'''<br />
: easy/medium<br />
* '''Mentor'''<br />
: Sebastian Schรถps, Carlo de Falco<br />
<br />
== Infrastructure ==<br />
<br />
=== Jupyter Integration ===<br />
<br />
[http://jupyter.org Jupyter Notebook] is a web-based worksheet interface for computing. There is a [https://github.com/Calysto/octave_kernel Octave kernel for Jupyter]. This project seeks to improve that kernel to make Octave a first-class experience within the Jupyter Notebook.<br />
<br />
* '''Mentors'''<br />
: Colin B. Macdonald, Mike Miller, others?<br />
<br />
<br />
=== Using Python within Octave ===<br />
<br />
[https://bitbucket.org/mtmiller/pytave Pytave] allows one to call Python functions and interact with Python objects from within Octave .m file code and from the Octave command line interface. Ideally, Pytave will not be a separate project, but rather a core feature of Octave. This project aims to improve Pytave with the goal of merging the code into the core Octave code base. <br />
<br />
Based on a previous summer project related to Pytave, this work will consist of fast-paced collaborative software development based on tackling the [https://bitbucket.org/mtmiller/pytave/issues?status=new&status=open pytave issue list]. You would also be expected to participate in software design decisions and discussion, as well as improve documentation, doctests and unit tests. As an example of the sorts of decision decisions being made, note that Octave indexes from 1 whereas Python typically indexes from 0; in which cases is it appropriate to make this transparent to the user?<br />
<br />
* '''Mentors'''<br />
: Mike Miller, Colin B. Macdonald, Abhinav Tripathi, others?<br />
<br />
<br />
=== Octave Package management ===<br />
<br />
[[Packages]] are extensions for Octave, that are mainly maintained by the [[Octave Forge]] community.<br />
To get those extension to work with Octave, there is a single function, {{manual|pkg}}, which does pretty much everything.<br />
This function has a few limitations which are hard to implement with the current codebase, and will most likely require a full rewrite.<br />
A major step forward for a rewritten package manager is the [https://github.com/apjanke/octave-packajoozle/ "packajoozle" project] by Andrew Janke.<br />
<br />
The planned improvements (see also {{bug|39479}}) are:<br />
<br />
* install and update from repositories (hg and git)<br />
* automatic handling of dependencies<br />
* easily load, update or check specific package versions<br />
* management of tests and demos in C++ sources of packages<br />
* more flexibility on dependencies, e.g., dependent on specific Octave build options or being dependent in one of multiple packages<br />
* support for multiple version packages<br />
* support for multiple Octave installs<br />
* support for system-wide and user installed packages<br />
* testing packages (<code>pkg test <package-name></code>)<br />
* improved metadata acquisition (<code>pkg list -forge</code>) from https://octave.sourceforge.io/<br />
<br />
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.<br />
However, the current {{manual|pkg}} also performs some maintenance functions which it probably should not.<br />
Instead a package for developers should be created with such tools.<br />
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]).<br />
<br />
Many of these problems have been solved in other languages.<br />
Familiarity with how other languages handle this problem will be useful to come up with elegant solutions.<br />
In some cases, there are standards to follow.<br />
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.<br />
See bugs {{bug|36477}} and {{bug|40444}} for more details.<br />
<br />
In addition, package names may start to collide very easily.<br />
One horrible way to workaround this by is choosing increasingly complex package names that give no hint on the package purpose.<br />
A much better is option is providing an Authority category like Perl 6 does.<br />
Nested packages is also an easy way to provide packages for specialized subjects (think {{codeline|image::morphology}}).<br />
A new {{manual|pkg}} would think all this things now, or allow their implementation at a later time.<br />
Read the [[OEP:pkg|unfinished plan]] for more details.<br />
<br />
* '''Minimum requirements'''<br />
: 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.<br />
* '''Difficulty'''<br />
: Medium.<br />
* '''Mentor'''<br />
: [[User:KaKiLa|KaKiLa]], Carnรซ Draug, Carlo de Falco, Sebastian Schรถps<br />
<br />
=== SPQR Interface ===<br />
<br />
Octave implements QR factorization for sparse matrices, but it does so with an older library. This has caused fundamental issues, including segfaults as recorded here (https://savannah.gnu.org/bugs/?func=detailitem&item_id=51950). The goal of this project is to program an interface to the API for the SQPR library (http://faculty.cse.tamu.edu/davis/suitesparse.html). This is the same library that Matlab uses for this purpose.<br />
<br />
* '''Minimum requirements'''<br />
: Ability to read and write C++ code.<br />
* '''Difficulty'''<br />
: Medium.<br />
* '''Mentor'''<br />
: <br />
<br />
== Image Analysis ==<br />
<br />
=== Improvements to N-dimensional image processing ===<br />
<br />
The image package has partial functionality for N-dimensional images. These images exist for example in medical imaging where slices from scans are assembled to form anatomical 3D images. If taken over time and at different laser wavelengths or light filters, they can also result in 5D images. Albeit less common, images with even more dimensions also exist. However, their existence is irrelevant since most of the image processing operations are mathematical operations which are independent of the number of dimensions.<br />
<br />
As part of GSoC 2013, the core functions for image IO, {{codeline|imwrite}} and {{codeline|imread}}, were extended to better support this type of images. Likewise, many functions in the image package, mostly morphology operators, were expanded to deal with this type of image. Since then, many other functions have been improved, sometimes completely rewritten, to abstract from the number of dimensions. In a certain way, supporting ND images is also related to choosing good algorithms since such large images tend to be quite large.<br />
<br />
This project will continue on the previous work, and be mentored by the previous GSoC student and current image package maintainer. Planning the project requires selection of functions lacking ND support and identifying their dependencies. For example, supporting {{codeline|imclose}} and {{codeline|imopen}} was better implemented by supporting {{codeline|imerode}} and {{codeline|imdilate}} which then propagated ND support to all of its dependencies. These dependencies need to be discovered first since often they are not being used yet, and may even be missing function. This project can also be about implementing functions that have [[Image package#Missing functions | not yet been implemented]]. Also note that while some functions in the image package will accept ND images as input, they are actually not correctly implemented and will give incorrect results.<br />
<br />
* '''Required skills'''<br />
: 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. <br />
* '''Difficulty'''<br />
: Difficult.<br />
* '''Potential mentor'''<br />
: Carnรซ Draug<br />
<br />
=== Improve Octave's image IO ===<br />
<br />
There are a lot of image formats. To handle this, Octave uses [http://www.graphicsmagick.org/ GraphicsMagic] (GM), a library capable of handling [http://www.graphicsmagick.org/formats.html a lot of them] in a single C++ interface. However, GraphicsMagick still has its limitations. The most important are:<br />
<br />
* GM has build option {{codeline|quantum}} which defines the bitdepth to use when reading an image. Building GM with high quantum means that images of smaller bitdepth will take a lot more memory when reading, but building it too low will make it impossible to read images of higher bitdepth. It also means that the image needs to always be rescaled to the correct range.<br />
* GM supports unsigned integers only thus incorrectly reading files such as TIFF with floating point data<br />
* GM hides away details of the image such as whether the image file is indexed. This makes it hard to access the real data stored on file.<br />
<br />
This project would implement better image IO for scientific file formats while leaving GM handle the others. Since TIFF is the de facto standard for scientific images, this should be done first. Among the targets for the project are:<br />
<br />
* implement the Tiff class which is a wrap around libtiff, using classdef. To avoid creating too many private __oct functions, this project could also create a C++ interface to declare new Octave classdef functions.<br />
* improve imread, imwrite, and imfinfo for tiff files using the newly created Tiff class<br />
* port the bioformats into Octave and prepare a package for it<br />
* investigate other image IO libraries<br />
* clean up and finish the dicom package to include into Octave core<br />
* prepare a matlab compatible implementation of the FITS package for inclusion in Octave core<br />
<br />
* '''Required skills'''<br />
: Knowledge of C++ and C since most libraries are written in those languages.<br />
* '''Difficulty'''<br />
: Medium.<br />
* '''Potential mentor'''<br />
: Carnรซ Draug<br />
<br />
== GUI ==<br />
<br />
=== GUI Variable Editor and Property Inspector ===<br />
<br />
Octave has a preliminary implementation of a Variable Editor: a spreadsheet-like tool for quickly editing and visualizing variables. The initial phase of the project will be learning how the implementation was done.<br />
<br />
With the knowledge gained, the second part of the project will be to implement a Property Inspector. This is a spreadsheet like interface to the many, many graphics properties that exist and are different on a per-object basis. The goal would be not only the concise-display of the existing properties, but a reasonable user interface to change them. As examples, boolean properties should be able to be toggled with a double-click; Radio properties should have a drop-down list of only the supported options; Other properties that can be modified should have the constraints built-in (for example, Linewidth must be a scalar, while Position must be a 1x4 vector). It would also be important to have easy access to the documentation of a property.<br />
<br />
For reference, Matlab has a similar Property Inspector (https://www.mathworks.com/help/matlab/ref/inspect.html).<br />
<br />
* '''Minimum requirements'''<br />
: Ability to read and write C++ code. Experience with Qt toolkit and GUI programming is optional, but desirable.<br />
* '''Difficulty'''<br />
: Medium.<br />
* '''Mentor'''<br />
:<br />
<br />
== Graphics ==<br />
<br />
=== PolarAxes and Plotting Improvements ===<br />
<br />
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}}.<br />
<br />
* '''Minimum requirements'''<br />
: Ability to read and write C++ code. Ability to read and write Octave code. Experience with OpenGL programming is optional.<br />
* '''Difficulty'''<br />
: Medium.<br />
* '''Mentor'''<br />
: Rik <br />
<br />
<noinclude><br />
[[Category:Summer of Code]]<br />
[[Category:Project Ideas]]<br />
</noinclude></div>Nirhttps://wiki.octave.org/wiki/index.php?title=GSoC_2020_application&diff=12581GSoC 2020 application2020-01-27T17:16:34Z<p>Nir: /* Proposal Tags (for applicants to use) (up to 10) */</p>
<hr />
<div>__NOTOC__<br />
<br />
Octave's application for GSoC 2020.<br />
<br />
=== Why does your org want to participate in Google Summer of Code? (1000 chars) ===<br />
<br />
We hope to establish collaborations with talented new contributors. We also want to raise awareness of Octave in the free software community.<br />
<br />
Google Summer of Code represents a unique opportunity to bring new perspectives to the Octave community. As a somewhat older project, we benefit from having new and younger contributors among our developers. We have been able to retain several GSoC participants as contributors to the Octave project and we hope to continue this in the future by engaging effectively with students during both the application and mentoring processes, setting clear standards for what is required for acceptance, and maintaining those standards throughout the project.<br />
<br />
=== How many potential mentors have agreed to mentor this year? ===<br />
<br />
11-15<br />
<br />
=== How will you keep mentors engaged with their students? (1000 chars) ===<br />
<br />
We will select mentors with proven involvement in Octave and free software and align project topics with the priorities of the core developer team. The vast majority of our mentors have been involved in Octave development for several years, and new mentors will be paired with more experienced ones.<br />
<br />
Each project will include at least one core Octave developer as mentor. These are proven, veteran members of the project who are familiar with the code base and with engaging the maintainer and user community. GNU Octave is a project with applications in very diverse domains, so each project should also include a mentor with expertise in the relevant field.<br />
<br />
=== How will you help your students stay on schedule to complete their projects? (1000 chars) ===<br />
<br />
Previous contributions to Octave are a condition for acceptance. In this way, we hope to select students who are familiar with the codebase and able to start their project quickly.<br />
<br />
A tentative project timeline is required as part of the application, and is checked by mentors for realism during the applicant evaluation process. Once a student is selected, the mentor will work with them to come up with a more detailed timeline, including clear expectations for progress by the midterm and final evaluation periods.<br />
<br />
During the summer, mentors will check with students at least weekly to make sure they are staying on schedule and help with any obstacles that might arise. Students are also expected to regularly update their mentors and the Octave maintainers community on their progress via e-mails and blog posts.<br />
<br />
Overall, the vast majority of previous SoC students have finished successfully, making substantive contributions to Octave that have been integrated into our codebase.<br />
<br />
=== How will you get your students involved in your community during GSoC? (1000 chars) ===<br />
<br />
Students will be urged to participate in our IRC channel and mailing list. We will set clear expectations on the minimum frequency of email progress updates, typically every two to three days. Students will also set up a blog for longer, weekly, updates which is aggregated at http://planet.octave.org<br />
<br />
Everything should be completely open. Almost all interactions with the student should be public, e.g. contacting the mentor should happen in the public IRC channel or copy the maintainers mailing list.<br />
<br />
Finally, we organize an annual developers' summit, OctConf, and have in previous years provided support for GSoC students to attend and present. This strengthens relationships between community members and the new students. <br />
<br />
=== How will you keep students involved with your community after GSoC? (1000 chars) ===<br />
<br />
We will typically merge their code into our codebase during or soon after the summer. GNU Octave is a project with many tester-users who give constant feedback on new features and report bugs. As participants in the mailing lists and bug tracker, students get the feeling of doing something that is useful to the community from the very start.<br />
<br />
Many of our GSoC students use Octave during the academic year or in their professional careers. As such, they are prone to stay involved with its development, even if at a lower level than during the summer.<br />
<br />
A number of GSoC alumni have continued making regular contributions to GNU Octave, including volunteering to serve as GSoC mentors, and many remain available to help with any problems related to the code they wrote for the project.<br />
<br />
=== Has your org been accepted as a mentoring org in Google Summer of Code before? For each year your organization has participated, provide the counts of successful and total students. ===<br />
<br />
Yes.<br />
<br />
2019 0/0<br />
2018 3/3<br />
2017 4/4<br />
2016 5/5<br />
2014 3/3<br />
<br />
We have a nice trajectory mentoring projects since 2011 (both as an independent organization and as part of GNU). [http://wiki.octave.org/Summer_of_Code This page] lists the successful projects that have been executed under our mentoring.<br />
<br />
=== If your org has applied for GSoC before but not been accepted, select the years === <br />
<br />
2012, 2013, 2015<br />
<br />
=== Are you part of a foundation/umbrella organization? ===<br />
<br />
Yes, we are affiliated with GNU.<br />
<br />
=== What year was your project started? ===<br />
<br />
1992<br />
<br />
=== Organization ID ===<br />
<br />
octave<br />
<br />
=== Organization name ===<br />
<br />
GNU Octave<br />
<br />
=== OSI approved license? ===<br />
<br />
Yes<br />
<br />
=== Organization Category ===<br />
<br />
Programming Languages and Development Tools<br />
<br />
=== Tagline (80 characters) ===<br />
<br />
Free Your Numbers<br />
<br />
=== Primary License ===<br />
<br />
GPL 3.0<br />
<br />
=== Technology Tags (the primary specific technologies your organization uses) (up to 5) ===<br />
<br />
C++, hg<br />
<br />
=== Topic Tags (general topics that describe your organization) (up to 5) ===<br />
<br />
mathematics, numerical computation, numerical methods, matlab, scientific computing<br />
<br />
=== Proposal Tags (for applicants to use) (up to 10) ===<br />
<br />
Numerical, Infrastructure, Octave Forge, Image analysis, Machine learning, GUI, Graphics, New feature, Performance, Matlab compatibility<br />
<br />
=== Description (180 chars) ===<br />
<br />
GNU Octave is a high-level interpreted language, primarily intended for numerical computations.<br />
<br />
=== Description (2000 chars) ===<br />
<br />
GNU Octave is a high-level interpreted language, primarily intended for numerical computations. It provides capabilities for the numerical solution of linear and nonlinear problems and for performing other numerical experiments. It also provides extensive graphics capabilities for data visualization and manipulation. Octave is normally used through its interactive command line interface, but it can also be used to write non-interactive programs. The Octave language is quite similar to Matlab so that most programs are easily portable.<br />
<br />
Octave is continually being upgraded. The current version 5.1 includes a graphical user interface, support for classdef object-oriented programming, and many new and improved functions. Student projects may also involve developing or upgrading Octave Forge packages, which can be loaded to provide additional specialized functions that supplement those provided in Core Octave.<br />
<br />
=== Application instructions (1500 chars) ===<br />
<br />
(Markdown for links)<br />
<br />
<code><br />
<br />
Post on our [mailing list](https://lists.gnu.org/mailman/listinfo/octave-maintainers) or chat on [IRC](https://webchat.freenode.net/?channels=#octave) to get feedback on your ideas, and help with any questions.<br />
<br />
Familiarize yourself with using and building Octave, and with any other skills needed to carry out your proposed project. Demonstrate this familiarity by contributing [bug fixes](https://savannah.gnu.org/bugs/?group=octave) or [patches](https://savannah.gnu.org/patch/?group=octave) before the end of the application period.<br />
<br />
[Make an account](https://wiki.octave.org/Special:CreateAccount) on our Wiki and then copy and fill out Octave's [application template](https://wiki.octave.org/Template:Student_application_template_public) on your Wiki user page. Also complete your GSoC application on Melange as per Google guidelines.<br />
<br />
For more details, please see the [Octave Wiki](https://wiki.octave.org/Summer_of_Code_Project_Ideas#Steps_Toward_a_Successful_Application).<br />
<br />
</code><br />
<br />
=== Organization urls ===<br />
<br />
http://www.octave.org<br />
<br />
Logo: https://upload.wikimedia.org/wikipedia/commons/thumb/6/6a/Gnu-octave-logo.svg/283px-Gnu-octave-logo.svg.png (or generate 256x256 PNG from http://hg.savannah.gnu.org/hgweb/octave/raw-file/155d8e90ee1f/doc/icons/octave-logo.svg with <code>inkscape -z -e octave-logo.png -w 256 -h 256 octave-logo.svg</code>)<br />
<br />
Blog: http://planet.octave.org/<br />
<br />
Feed: http://planet.octave.org/atom.xml<br />
<br />
IRC Channel: https://webchat.freenode.net/?channels=#octave<br />
<br />
Mailing List: https://lists.gnu.org/mailman/listinfo/octave-maintainers<br />
<br />
General Email: octave-maintainers@gnu.org<br />
<br />
Ideas: http://wiki.octave.org/Summer_of_Code_Project_Ideas<br />
<br />
Application instructions: http://wiki.octave.org/Summer_of_Code_Project_Ideas#Steps_Toward_a_Successful_Application<br />
<br />
Source code: http://hg.savannah.gnu.org/hgweb/octave</div>Nirhttps://wiki.octave.org/wiki/index.php?title=GSoC_2020_application&diff=12580GSoC 2020 application2020-01-27T17:06:26Z<p>Nir: /* Description (2000 chars) */</p>
<hr />
<div>__NOTOC__<br />
<br />
Octave's application for GSoC 2020.<br />
<br />
=== Why does your org want to participate in Google Summer of Code? (1000 chars) ===<br />
<br />
We hope to establish collaborations with talented new contributors. We also want to raise awareness of Octave in the free software community.<br />
<br />
Google Summer of Code represents a unique opportunity to bring new perspectives to the Octave community. As a somewhat older project, we benefit from having new and younger contributors among our developers. We have been able to retain several GSoC participants as contributors to the Octave project and we hope to continue this in the future by engaging effectively with students during both the application and mentoring processes, setting clear standards for what is required for acceptance, and maintaining those standards throughout the project.<br />
<br />
=== How many potential mentors have agreed to mentor this year? ===<br />
<br />
11-15<br />
<br />
=== How will you keep mentors engaged with their students? (1000 chars) ===<br />
<br />
We will select mentors with proven involvement in Octave and free software and align project topics with the priorities of the core developer team. The vast majority of our mentors have been involved in Octave development for several years, and new mentors will be paired with more experienced ones.<br />
<br />
Each project will include at least one core Octave developer as mentor. These are proven, veteran members of the project who are familiar with the code base and with engaging the maintainer and user community. GNU Octave is a project with applications in very diverse domains, so each project should also include a mentor with expertise in the relevant field.<br />
<br />
=== How will you help your students stay on schedule to complete their projects? (1000 chars) ===<br />
<br />
Previous contributions to Octave are a condition for acceptance. In this way, we hope to select students who are familiar with the codebase and able to start their project quickly.<br />
<br />
A tentative project timeline is required as part of the application, and is checked by mentors for realism during the applicant evaluation process. Once a student is selected, the mentor will work with them to come up with a more detailed timeline, including clear expectations for progress by the midterm and final evaluation periods.<br />
<br />
During the summer, mentors will check with students at least weekly to make sure they are staying on schedule and help with any obstacles that might arise. Students are also expected to regularly update their mentors and the Octave maintainers community on their progress via e-mails and blog posts.<br />
<br />
Overall, the vast majority of previous SoC students have finished successfully, making substantive contributions to Octave that have been integrated into our codebase.<br />
<br />
=== How will you get your students involved in your community during GSoC? (1000 chars) ===<br />
<br />
Students will be urged to participate in our IRC channel and mailing list. We will set clear expectations on the minimum frequency of email progress updates, typically every two to three days. Students will also set up a blog for longer, weekly, updates which is aggregated at http://planet.octave.org<br />
<br />
Everything should be completely open. Almost all interactions with the student should be public, e.g. contacting the mentor should happen in the public IRC channel or copy the maintainers mailing list.<br />
<br />
Finally, we organize an annual developers' summit, OctConf, and have in previous years provided support for GSoC students to attend and present. This strengthens relationships between community members and the new students. <br />
<br />
=== How will you keep students involved with your community after GSoC? (1000 chars) ===<br />
<br />
We will typically merge their code into our codebase during or soon after the summer. GNU Octave is a project with many tester-users who give constant feedback on new features and report bugs. As participants in the mailing lists and bug tracker, students get the feeling of doing something that is useful to the community from the very start.<br />
<br />
Many of our GSoC students use Octave during the academic year or in their professional careers. As such, they are prone to stay involved with its development, even if at a lower level than during the summer.<br />
<br />
A number of GSoC alumni have continued making regular contributions to GNU Octave, including volunteering to serve as GSoC mentors, and many remain available to help with any problems related to the code they wrote for the project.<br />
<br />
=== Has your org been accepted as a mentoring org in Google Summer of Code before? For each year your organization has participated, provide the counts of successful and total students. ===<br />
<br />
Yes.<br />
<br />
2019 0/0<br />
2018 3/3<br />
2017 4/4<br />
2016 5/5<br />
2014 3/3<br />
<br />
We have a nice trajectory mentoring projects since 2011 (both as an independent organization and as part of GNU). [http://wiki.octave.org/Summer_of_Code This page] lists the successful projects that have been executed under our mentoring.<br />
<br />
=== If your org has applied for GSoC before but not been accepted, select the years === <br />
<br />
2012, 2013, 2015<br />
<br />
=== Are you part of a foundation/umbrella organization? ===<br />
<br />
Yes, we are affiliated with GNU.<br />
<br />
=== What year was your project started? ===<br />
<br />
1992<br />
<br />
=== Organization ID ===<br />
<br />
octave<br />
<br />
=== Organization name ===<br />
<br />
GNU Octave<br />
<br />
=== OSI approved license? ===<br />
<br />
Yes<br />
<br />
=== Organization Category ===<br />
<br />
Programming Languages and Development Tools<br />
<br />
=== Tagline (80 characters) ===<br />
<br />
Free Your Numbers<br />
<br />
=== Primary License ===<br />
<br />
GPL 3.0<br />
<br />
=== Technology Tags (the primary specific technologies your organization uses) (up to 5) ===<br />
<br />
C++, hg<br />
<br />
=== Topic Tags (general topics that describe your organization) (up to 5) ===<br />
<br />
mathematics, numerical computation, numerical methods, matlab, scientific computing<br />
<br />
=== Proposal Tags (for applicants to use) (up to 10) ===<br />
<br />
Numerical, Infrastructure, Octave Forge, Image analysis, GUI, Graphics, New feature, Performance, Matlab compatibility<br />
<br />
=== Description (180 chars) ===<br />
<br />
GNU Octave is a high-level interpreted language, primarily intended for numerical computations.<br />
<br />
=== Description (2000 chars) ===<br />
<br />
GNU Octave is a high-level interpreted language, primarily intended for numerical computations. It provides capabilities for the numerical solution of linear and nonlinear problems and for performing other numerical experiments. It also provides extensive graphics capabilities for data visualization and manipulation. Octave is normally used through its interactive command line interface, but it can also be used to write non-interactive programs. The Octave language is quite similar to Matlab so that most programs are easily portable.<br />
<br />
Octave is continually being upgraded. The current version 5.1 includes a graphical user interface, support for classdef object-oriented programming, and many new and improved functions. Student projects may also involve developing or upgrading Octave Forge packages, which can be loaded to provide additional specialized functions that supplement those provided in Core Octave.<br />
<br />
=== Application instructions (1500 chars) ===<br />
<br />
(Markdown for links)<br />
<br />
<code><br />
<br />
Post on our [mailing list](https://lists.gnu.org/mailman/listinfo/octave-maintainers) or chat on [IRC](https://webchat.freenode.net/?channels=#octave) to get feedback on your ideas, and help with any questions.<br />
<br />
Familiarize yourself with using and building Octave, and with any other skills needed to carry out your proposed project. Demonstrate this familiarity by contributing [bug fixes](https://savannah.gnu.org/bugs/?group=octave) or [patches](https://savannah.gnu.org/patch/?group=octave) before the end of the application period.<br />
<br />
[Make an account](https://wiki.octave.org/Special:CreateAccount) on our Wiki and then copy and fill out Octave's [application template](https://wiki.octave.org/Template:Student_application_template_public) on your Wiki user page. Also complete your GSoC application on Melange as per Google guidelines.<br />
<br />
For more details, please see the [Octave Wiki](https://wiki.octave.org/Summer_of_Code_Project_Ideas#Steps_Toward_a_Successful_Application).<br />
<br />
</code><br />
<br />
=== Organization urls ===<br />
<br />
http://www.octave.org<br />
<br />
Logo: https://upload.wikimedia.org/wikipedia/commons/thumb/6/6a/Gnu-octave-logo.svg/283px-Gnu-octave-logo.svg.png (or generate 256x256 PNG from http://hg.savannah.gnu.org/hgweb/octave/raw-file/155d8e90ee1f/doc/icons/octave-logo.svg with <code>inkscape -z -e octave-logo.png -w 256 -h 256 octave-logo.svg</code>)<br />
<br />
Blog: http://planet.octave.org/<br />
<br />
Feed: http://planet.octave.org/atom.xml<br />
<br />
IRC Channel: https://webchat.freenode.net/?channels=#octave<br />
<br />
Mailing List: https://lists.gnu.org/mailman/listinfo/octave-maintainers<br />
<br />
General Email: octave-maintainers@gnu.org<br />
<br />
Ideas: http://wiki.octave.org/Summer_of_Code_Project_Ideas<br />
<br />
Application instructions: http://wiki.octave.org/Summer_of_Code_Project_Ideas#Steps_Toward_a_Successful_Application<br />
<br />
Source code: http://hg.savannah.gnu.org/hgweb/octave</div>Nirhttps://wiki.octave.org/wiki/index.php?title=GSoC_2020_application&diff=12579GSoC 2020 application2020-01-27T17:05:07Z<p>Nir: /* Has your org been accepted as a mentoring org in Google Summer of Code before? For each year your organization has participated, provide the counts of successful and total students. */</p>
<hr />
<div>__NOTOC__<br />
<br />
Octave's application for GSoC 2020.<br />
<br />
=== Why does your org want to participate in Google Summer of Code? (1000 chars) ===<br />
<br />
We hope to establish collaborations with talented new contributors. We also want to raise awareness of Octave in the free software community.<br />
<br />
Google Summer of Code represents a unique opportunity to bring new perspectives to the Octave community. As a somewhat older project, we benefit from having new and younger contributors among our developers. We have been able to retain several GSoC participants as contributors to the Octave project and we hope to continue this in the future by engaging effectively with students during both the application and mentoring processes, setting clear standards for what is required for acceptance, and maintaining those standards throughout the project.<br />
<br />
=== How many potential mentors have agreed to mentor this year? ===<br />
<br />
11-15<br />
<br />
=== How will you keep mentors engaged with their students? (1000 chars) ===<br />
<br />
We will select mentors with proven involvement in Octave and free software and align project topics with the priorities of the core developer team. The vast majority of our mentors have been involved in Octave development for several years, and new mentors will be paired with more experienced ones.<br />
<br />
Each project will include at least one core Octave developer as mentor. These are proven, veteran members of the project who are familiar with the code base and with engaging the maintainer and user community. GNU Octave is a project with applications in very diverse domains, so each project should also include a mentor with expertise in the relevant field.<br />
<br />
=== How will you help your students stay on schedule to complete their projects? (1000 chars) ===<br />
<br />
Previous contributions to Octave are a condition for acceptance. In this way, we hope to select students who are familiar with the codebase and able to start their project quickly.<br />
<br />
A tentative project timeline is required as part of the application, and is checked by mentors for realism during the applicant evaluation process. Once a student is selected, the mentor will work with them to come up with a more detailed timeline, including clear expectations for progress by the midterm and final evaluation periods.<br />
<br />
During the summer, mentors will check with students at least weekly to make sure they are staying on schedule and help with any obstacles that might arise. Students are also expected to regularly update their mentors and the Octave maintainers community on their progress via e-mails and blog posts.<br />
<br />
Overall, the vast majority of previous SoC students have finished successfully, making substantive contributions to Octave that have been integrated into our codebase.<br />
<br />
=== How will you get your students involved in your community during GSoC? (1000 chars) ===<br />
<br />
Students will be urged to participate in our IRC channel and mailing list. We will set clear expectations on the minimum frequency of email progress updates, typically every two to three days. Students will also set up a blog for longer, weekly, updates which is aggregated at http://planet.octave.org<br />
<br />
Everything should be completely open. Almost all interactions with the student should be public, e.g. contacting the mentor should happen in the public IRC channel or copy the maintainers mailing list.<br />
<br />
Finally, we organize an annual developers' summit, OctConf, and have in previous years provided support for GSoC students to attend and present. This strengthens relationships between community members and the new students. <br />
<br />
=== How will you keep students involved with your community after GSoC? (1000 chars) ===<br />
<br />
We will typically merge their code into our codebase during or soon after the summer. GNU Octave is a project with many tester-users who give constant feedback on new features and report bugs. As participants in the mailing lists and bug tracker, students get the feeling of doing something that is useful to the community from the very start.<br />
<br />
Many of our GSoC students use Octave during the academic year or in their professional careers. As such, they are prone to stay involved with its development, even if at a lower level than during the summer.<br />
<br />
A number of GSoC alumni have continued making regular contributions to GNU Octave, including volunteering to serve as GSoC mentors, and many remain available to help with any problems related to the code they wrote for the project.<br />
<br />
=== Has your org been accepted as a mentoring org in Google Summer of Code before? For each year your organization has participated, provide the counts of successful and total students. ===<br />
<br />
Yes.<br />
<br />
2019 0/0<br />
2018 3/3<br />
2017 4/4<br />
2016 5/5<br />
2014 3/3<br />
<br />
We have a nice trajectory mentoring projects since 2011 (both as an independent organization and as part of GNU). [http://wiki.octave.org/Summer_of_Code This page] lists the successful projects that have been executed under our mentoring.<br />
<br />
=== If your org has applied for GSoC before but not been accepted, select the years === <br />
<br />
2012, 2013, 2015<br />
<br />
=== Are you part of a foundation/umbrella organization? ===<br />
<br />
Yes, we are affiliated with GNU.<br />
<br />
=== What year was your project started? ===<br />
<br />
1992<br />
<br />
=== Organization ID ===<br />
<br />
octave<br />
<br />
=== Organization name ===<br />
<br />
GNU Octave<br />
<br />
=== OSI approved license? ===<br />
<br />
Yes<br />
<br />
=== Organization Category ===<br />
<br />
Programming Languages and Development Tools<br />
<br />
=== Tagline (80 characters) ===<br />
<br />
Free Your Numbers<br />
<br />
=== Primary License ===<br />
<br />
GPL 3.0<br />
<br />
=== Technology Tags (the primary specific technologies your organization uses) (up to 5) ===<br />
<br />
C++, hg<br />
<br />
=== Topic Tags (general topics that describe your organization) (up to 5) ===<br />
<br />
mathematics, numerical computation, numerical methods, matlab, scientific computing<br />
<br />
=== Proposal Tags (for applicants to use) (up to 10) ===<br />
<br />
Numerical, Infrastructure, Octave Forge, Image analysis, GUI, Graphics, New feature, Performance, Matlab compatibility<br />
<br />
=== Description (180 chars) ===<br />
<br />
GNU Octave is a high-level interpreted language, primarily intended for numerical computations.<br />
<br />
=== Description (2000 chars) ===<br />
<br />
GNU Octave is a high-level interpreted language, primarily intended for numerical computations. It provides capabilities for the numerical solution of linear and nonlinear problems and for performing other numerical experiments. It also provides extensive graphics capabilities for data visualization and manipulation. Octave is normally used through its interactive command line interface, but it can also be used to write non-interactive programs. The Octave language is quite similar to Matlab so that most programs are easily portable.<br />
<br />
Octave is continually being upgraded. The current version 4.4 includes a graphical user interface, support for classdef object-oriented programming, and many new and improved functions. Student projects may also involve developing or upgrading Octave Forge packages, which can be loaded to provide additional specialized functions that supplement those provided in Core Octave.<br />
<br />
=== Application instructions (1500 chars) ===<br />
<br />
(Markdown for links)<br />
<br />
<code><br />
<br />
Post on our [mailing list](https://lists.gnu.org/mailman/listinfo/octave-maintainers) or chat on [IRC](https://webchat.freenode.net/?channels=#octave) to get feedback on your ideas, and help with any questions.<br />
<br />
Familiarize yourself with using and building Octave, and with any other skills needed to carry out your proposed project. Demonstrate this familiarity by contributing [bug fixes](https://savannah.gnu.org/bugs/?group=octave) or [patches](https://savannah.gnu.org/patch/?group=octave) before the end of the application period.<br />
<br />
[Make an account](https://wiki.octave.org/Special:CreateAccount) on our Wiki and then copy and fill out Octave's [application template](https://wiki.octave.org/Template:Student_application_template_public) on your Wiki user page. Also complete your GSoC application on Melange as per Google guidelines.<br />
<br />
For more details, please see the [Octave Wiki](https://wiki.octave.org/Summer_of_Code_Project_Ideas#Steps_Toward_a_Successful_Application).<br />
<br />
</code><br />
<br />
=== Organization urls ===<br />
<br />
http://www.octave.org<br />
<br />
Logo: https://upload.wikimedia.org/wikipedia/commons/thumb/6/6a/Gnu-octave-logo.svg/283px-Gnu-octave-logo.svg.png (or generate 256x256 PNG from http://hg.savannah.gnu.org/hgweb/octave/raw-file/155d8e90ee1f/doc/icons/octave-logo.svg with <code>inkscape -z -e octave-logo.png -w 256 -h 256 octave-logo.svg</code>)<br />
<br />
Blog: http://planet.octave.org/<br />
<br />
Feed: http://planet.octave.org/atom.xml<br />
<br />
IRC Channel: https://webchat.freenode.net/?channels=#octave<br />
<br />
Mailing List: https://lists.gnu.org/mailman/listinfo/octave-maintainers<br />
<br />
General Email: octave-maintainers@gnu.org<br />
<br />
Ideas: http://wiki.octave.org/Summer_of_Code_Project_Ideas<br />
<br />
Application instructions: http://wiki.octave.org/Summer_of_Code_Project_Ideas#Steps_Toward_a_Successful_Application<br />
<br />
Source code: http://hg.savannah.gnu.org/hgweb/octave</div>Nirhttps://wiki.octave.org/wiki/index.php?title=GSoC_2020_application&diff=12578GSoC 2020 application2020-01-27T17:01:21Z<p>Nir: copied from last year</p>
<hr />
<div>__NOTOC__<br />
<br />
Octave's application for GSoC 2020.<br />
<br />
=== Why does your org want to participate in Google Summer of Code? (1000 chars) ===<br />
<br />
We hope to establish collaborations with talented new contributors. We also want to raise awareness of Octave in the free software community.<br />
<br />
Google Summer of Code represents a unique opportunity to bring new perspectives to the Octave community. As a somewhat older project, we benefit from having new and younger contributors among our developers. We have been able to retain several GSoC participants as contributors to the Octave project and we hope to continue this in the future by engaging effectively with students during both the application and mentoring processes, setting clear standards for what is required for acceptance, and maintaining those standards throughout the project.<br />
<br />
=== How many potential mentors have agreed to mentor this year? ===<br />
<br />
11-15<br />
<br />
=== How will you keep mentors engaged with their students? (1000 chars) ===<br />
<br />
We will select mentors with proven involvement in Octave and free software and align project topics with the priorities of the core developer team. The vast majority of our mentors have been involved in Octave development for several years, and new mentors will be paired with more experienced ones.<br />
<br />
Each project will include at least one core Octave developer as mentor. These are proven, veteran members of the project who are familiar with the code base and with engaging the maintainer and user community. GNU Octave is a project with applications in very diverse domains, so each project should also include a mentor with expertise in the relevant field.<br />
<br />
=== How will you help your students stay on schedule to complete their projects? (1000 chars) ===<br />
<br />
Previous contributions to Octave are a condition for acceptance. In this way, we hope to select students who are familiar with the codebase and able to start their project quickly.<br />
<br />
A tentative project timeline is required as part of the application, and is checked by mentors for realism during the applicant evaluation process. Once a student is selected, the mentor will work with them to come up with a more detailed timeline, including clear expectations for progress by the midterm and final evaluation periods.<br />
<br />
During the summer, mentors will check with students at least weekly to make sure they are staying on schedule and help with any obstacles that might arise. Students are also expected to regularly update their mentors and the Octave maintainers community on their progress via e-mails and blog posts.<br />
<br />
Overall, the vast majority of previous SoC students have finished successfully, making substantive contributions to Octave that have been integrated into our codebase.<br />
<br />
=== How will you get your students involved in your community during GSoC? (1000 chars) ===<br />
<br />
Students will be urged to participate in our IRC channel and mailing list. We will set clear expectations on the minimum frequency of email progress updates, typically every two to three days. Students will also set up a blog for longer, weekly, updates which is aggregated at http://planet.octave.org<br />
<br />
Everything should be completely open. Almost all interactions with the student should be public, e.g. contacting the mentor should happen in the public IRC channel or copy the maintainers mailing list.<br />
<br />
Finally, we organize an annual developers' summit, OctConf, and have in previous years provided support for GSoC students to attend and present. This strengthens relationships between community members and the new students. <br />
<br />
=== How will you keep students involved with your community after GSoC? (1000 chars) ===<br />
<br />
We will typically merge their code into our codebase during or soon after the summer. GNU Octave is a project with many tester-users who give constant feedback on new features and report bugs. As participants in the mailing lists and bug tracker, students get the feeling of doing something that is useful to the community from the very start.<br />
<br />
Many of our GSoC students use Octave during the academic year or in their professional careers. As such, they are prone to stay involved with its development, even if at a lower level than during the summer.<br />
<br />
A number of GSoC alumni have continued making regular contributions to GNU Octave, including volunteering to serve as GSoC mentors, and many remain available to help with any problems related to the code they wrote for the project.<br />
<br />
=== Has your org been accepted as a mentoring org in Google Summer of Code before? For each year your organization has participated, provide the counts of successful and total students. ===<br />
<br />
Yes.<br />
<br />
2018 3/3<br />
2017 4/4<br />
2016 5/5<br />
2014 3/3<br />
<br />
We have a nice trajectory mentoring projects since 2011 (both as an independent organization and as part of GNU). [http://wiki.octave.org/Summer_of_Code This page] lists the successful projects that have been executed under our mentoring.<br />
<br />
=== If your org has applied for GSoC before but not been accepted, select the years === <br />
<br />
2012, 2013, 2015<br />
<br />
=== Are you part of a foundation/umbrella organization? ===<br />
<br />
Yes, we are affiliated with GNU.<br />
<br />
=== What year was your project started? ===<br />
<br />
1992<br />
<br />
=== Organization ID ===<br />
<br />
octave<br />
<br />
=== Organization name ===<br />
<br />
GNU Octave<br />
<br />
=== OSI approved license? ===<br />
<br />
Yes<br />
<br />
=== Organization Category ===<br />
<br />
Programming Languages and Development Tools<br />
<br />
=== Tagline (80 characters) ===<br />
<br />
Free Your Numbers<br />
<br />
=== Primary License ===<br />
<br />
GPL 3.0<br />
<br />
=== Technology Tags (the primary specific technologies your organization uses) (up to 5) ===<br />
<br />
C++, hg<br />
<br />
=== Topic Tags (general topics that describe your organization) (up to 5) ===<br />
<br />
mathematics, numerical computation, numerical methods, matlab, scientific computing<br />
<br />
=== Proposal Tags (for applicants to use) (up to 10) ===<br />
<br />
Numerical, Infrastructure, Octave Forge, Image analysis, GUI, Graphics, New feature, Performance, Matlab compatibility<br />
<br />
=== Description (180 chars) ===<br />
<br />
GNU Octave is a high-level interpreted language, primarily intended for numerical computations.<br />
<br />
=== Description (2000 chars) ===<br />
<br />
GNU Octave is a high-level interpreted language, primarily intended for numerical computations. It provides capabilities for the numerical solution of linear and nonlinear problems and for performing other numerical experiments. It also provides extensive graphics capabilities for data visualization and manipulation. Octave is normally used through its interactive command line interface, but it can also be used to write non-interactive programs. The Octave language is quite similar to Matlab so that most programs are easily portable.<br />
<br />
Octave is continually being upgraded. The current version 4.4 includes a graphical user interface, support for classdef object-oriented programming, and many new and improved functions. Student projects may also involve developing or upgrading Octave Forge packages, which can be loaded to provide additional specialized functions that supplement those provided in Core Octave.<br />
<br />
=== Application instructions (1500 chars) ===<br />
<br />
(Markdown for links)<br />
<br />
<code><br />
<br />
Post on our [mailing list](https://lists.gnu.org/mailman/listinfo/octave-maintainers) or chat on [IRC](https://webchat.freenode.net/?channels=#octave) to get feedback on your ideas, and help with any questions.<br />
<br />
Familiarize yourself with using and building Octave, and with any other skills needed to carry out your proposed project. Demonstrate this familiarity by contributing [bug fixes](https://savannah.gnu.org/bugs/?group=octave) or [patches](https://savannah.gnu.org/patch/?group=octave) before the end of the application period.<br />
<br />
[Make an account](https://wiki.octave.org/Special:CreateAccount) on our Wiki and then copy and fill out Octave's [application template](https://wiki.octave.org/Template:Student_application_template_public) on your Wiki user page. Also complete your GSoC application on Melange as per Google guidelines.<br />
<br />
For more details, please see the [Octave Wiki](https://wiki.octave.org/Summer_of_Code_Project_Ideas#Steps_Toward_a_Successful_Application).<br />
<br />
</code><br />
<br />
=== Organization urls ===<br />
<br />
http://www.octave.org<br />
<br />
Logo: https://upload.wikimedia.org/wikipedia/commons/thumb/6/6a/Gnu-octave-logo.svg/283px-Gnu-octave-logo.svg.png (or generate 256x256 PNG from http://hg.savannah.gnu.org/hgweb/octave/raw-file/155d8e90ee1f/doc/icons/octave-logo.svg with <code>inkscape -z -e octave-logo.png -w 256 -h 256 octave-logo.svg</code>)<br />
<br />
Blog: http://planet.octave.org/<br />
<br />
Feed: http://planet.octave.org/atom.xml<br />
<br />
IRC Channel: https://webchat.freenode.net/?channels=#octave<br />
<br />
Mailing List: https://lists.gnu.org/mailman/listinfo/octave-maintainers<br />
<br />
General Email: octave-maintainers@gnu.org<br />
<br />
Ideas: http://wiki.octave.org/Summer_of_Code_Project_Ideas<br />
<br />
Application instructions: http://wiki.octave.org/Summer_of_Code_Project_Ideas#Steps_Toward_a_Successful_Application<br />
<br />
Source code: http://hg.savannah.gnu.org/hgweb/octave</div>Nirhttps://wiki.octave.org/wiki/index.php?title=Octave_for_Debian_systems&diff=12420Octave for Debian systems2019-11-15T13:28:36Z<p>Nir: /* Configuration */ sundials 3.1</p>
<hr />
<div>* ''This article addresses the [[:Category:Installation|installation]] and [[Building]] of GNU Octave on Debian, and Debian-based distributions such as Ubuntu.''<br />
<br />
Binary packages for GNU Octave and many [[Octave Forge]] packages are provided by all versions of Debian and Ubuntu. These are the most well-tested binaries available and should work best for most users. To install them, run:<br />
<br />
sudo apt-get install octave<br />
<br />
In Debian and Ubuntu the "complete" GNU Octave software is split over multiple packages. To obtain the complete features of Octave, install additionally<br />
<br />
* {{codeline|octave-doc}}, {{codeline|octave-info}}, and {{codeline|octave-htmldoc}} for the documentation;<br />
* {{codeline|liboctave-dev}} for the octave development header files and mkoctfile (required to install Octave Forge packages); and<br />
* {{codeline|octave-dbg}} for the debugging symbols.<br />
<br />
Many Octave packages are also distributed by Debian and Ubuntu. These are tested to work the best with the respective Octave version. Install them via:<br />
<br />
sudo apt-get install octave-control octave-image octave-io octave-optim octave-signal octave-statistics<br />
<br />
Up to 2018, the [https://launchpad.net/~octave GNU Octave Team] on Launchpad actively maintained a PPA providing more up to date packages of Octave. These are backported from Debian unstable and are still useful for older Ubuntu installations. To set up your system to install these packages, run:<br />
<br />
sudo apt-add-repository ppa:octave/stable<br />
sudo apt-get update<br />
sudo apt-get install octave<br />
<br />
== Building Octave ==<br />
<br />
: ''For general build instructions, see [[Building]].''<br />
<br />
The ''only'' tricky part is to install the Octave build dependencies. Once that is solved, one can easily follow the [[Building|general build instructions]]. See [[#Configuration|below]] for some Debian and Ubuntu specific configuration options.<br />
<br />
=== Install dependencies ===<br />
<br />
Note that different Debian and Ubuntu versions may have slightly different package names but their differences should be pretty small, mostly limited to version numbers.<br />
<br />
==== The easy way (but likely incorrect) ====<br />
<br />
This approach is ''only'' suitable if you are building from source the ''same'' version that your Linux distribution already has packaged.<br />
<br />
The easy way to install ''most'' of the necessary dependencies is to {{Codeline|sudo apt-get build-dep octave}}. This will install all packages necessary to build and prepare a Debian package for the octave version available on your system repositories. However:<br />
* will install unnecessary packages related to the building of a Debian package;<br />
* may miss some new dependencies;<br />
* may install packages that are no longer octave dependencies.<br />
<br />
==== The right way ====<br />
<br />
The right way is to install all the dependencies listed on the [[Building#Dependencies|Building]] wiki page. One can either search for the respective packages manually on<br />
<br />
* https://packages.debian.org<br />
* https://packages.ubuntu.com<br />
<br />
or, for the sake of convenience, use some "one-liner" to install them:<br />
<br />
* '''Ubuntu 19.10'''<br />
<br />
:<pre>sudo apt-get install gcc g++ gfortran make libblas-dev liblapack-dev libpcre3-dev libarpack2-dev libcurl4-gnutls-dev epstool libfftw3-dev fig2dev libfltk1.3-dev libfontconfig1-dev libfreetype6-dev libgl2ps-dev libglpk-dev libreadline-dev gnuplot-x11 libgraphicsmagick++1-dev libhdf5-dev openjdk-8-jdk libsndfile1-dev llvm-dev lpr texinfo libgl1-mesa-dev libosmesa6-dev pstoedit portaudio19-dev libqhull-dev libqrupdate-dev libqscintilla2-qt4-dev libsuitesparse-dev texlive libxft-dev zlib1g-dev autoconf automake bison flex gperf gzip icoutils librsvg2-bin libtool perl rsync tar qtbase5-dev qttools5-dev qttools5-dev-tools libqscintilla2-qt5-dev libsundials-dev</pre><br />
<br />
* '''Ubuntu 18.04 (LTS)'''<br />
<br />
:<pre>sudo apt-get install gcc g++ gfortran make libblas-dev liblapack-dev libpcre3-dev libarpack2-dev libcurl4-gnutls-dev epstool libfftw3-dev transfig libfltk1.3-dev libfontconfig1-dev libfreetype6-dev libgl2ps-dev libglpk-dev libreadline-dev gnuplot-x11 libgraphicsmagick++1-dev libhdf5-serial-dev openjdk-8-jdk libsndfile1-dev llvm-dev lpr texinfo libgl1-mesa-dev libosmesa6-dev pstoedit portaudio19-dev libqhull-dev libqrupdate-dev libqscintilla2-dev libsuitesparse-dev texlive texlive-generic-recommended libxft-dev zlib1g-dev autoconf automake bison flex gperf gzip icoutils librsvg2-bin libtool perl rsync tar qtbase5-dev qttools5-dev qttools5-dev-tools libqscintilla2-qt5-dev</pre><br />
<br />
* '''Ubuntu 16.04 (LTS)'''<br />
<br />
:<pre>sudo apt-get install gcc g++ gfortran make libblas-dev liblapack-dev libpcre3-dev libarpack2-dev libcurl4-gnutls-dev epstool libfftw3-dev transfig libfltk1.3-dev libfontconfig1-dev libfreetype6-dev libgl2ps-dev libglpk-dev libreadline-dev gnuplot-x11 libgraphicsmagick++1-dev libhdf5-serial-dev openjdk-8-jdk libsndfile1-dev llvm-dev lpr texinfo libgl1-mesa-dev libosmesa6-dev pstoedit portaudio19-dev libqhull-dev libqrupdate-dev libqscintilla2-dev libqt4-dev libqtcore4 libqtwebkit4 libqt4-network libqtgui4 libqt4-opengl-dev libsuitesparse-dev texlive libxft-dev zlib1g-dev autoconf automake bison flex gperf gzip icoutils librsvg2-bin libtool perl rsync tar</pre><br />
<br />
* '''Debian 9'''<br />
<br />
:<pre>sudo apt-get install gcc g++ gfortran make libblas-dev liblapack-dev libpcre3-dev libarpack2-dev libcurl4-gnutls-dev epstool libfftw3-dev transfig libfltk1.3-dev libfontconfig1-dev libfreetype6-dev libgl2ps-dev libglpk-dev libreadline-dev gnuplot libgraphicsmagick++1-dev libhdf5-serial-dev openjdk-8-jdk libsndfile1-dev llvm-dev texinfo libgl1-mesa-dev libosmesa6-dev pstoedit portaudio19-dev libjack-jackd2-dev libqhull-dev libqrupdate-dev libqscintilla2-dev libqt4-dev libqtcore4 libqtwebkit4 libqt4-network libqtgui4 libqt4-opengl-dev libsuitesparse-dev texlive libxft-dev zlib1g-dev autoconf automake bison flex gperf gzip icoutils librsvg2-bin libtool perl rsync tar</pre><br />
<br />
* '''Debian 8'''<br />
<br />
:<pre>sudo apt-get install gcc g++ gfortran make libblas-dev liblapack-dev libpcre3-dev libarpack2-dev libcurl4-gnutls-dev epstool libfftw3-dev transfig libfltk1.3-dev libfontconfig1-dev libfreetype6-dev libgl2ps-dev libglpk-dev libreadline-dev gnuplot libgraphicsmagick++1-dev libhdf5-serial-dev openjdk-7-jdk libsndfile1-dev llvm-dev lpr texinfo libgl1-mesa-dev libosmesa6-dev pstoedit portaudio19-dev libqhull-dev libqrupdate-dev libqscintilla2-dev libqt4-dev libqtcore4 libqtwebkit4 libqt4-network libqtgui4 libqt4-opengl-dev libsuitesparse-dev texlive libxft-dev zlib1g-dev autoconf automake bison flex gperf gzip icoutils librsvg2-bin libtool perl rsync tar</pre><br />
<br />
<br />
{{Warning|<ul><li>The Debian repositoriy has several libraries for dealing with HDF data files. The recommended is {{Codeline|libhdf5-serial-dev}}. However, the {{Forge|msh|msh package}} requires [http://www.geuz.org/gmsh/ gmsh] which is incompatible with it.</li><br />
<li>The GraphicsMagick++ library (libgraphicsmagick++1-dev) on the Debian repositories was compiled with quantum 8 which limits reading images to 8 bit. The solution is to recompile [[GraphicsMagick]] with quantum 16 or 32 before building Octave.</li><br />
<li>For debian9 using openjdk-9-jdk (even providing {{Codeline|JAVA_HOME}}) could *not* be used for the java interface! Use openjdk-8-jdk instead.</li><br />
<li>When configure decides to use QT5 instead of QT4, make might fail because lrelease is missing (see [https://savannah.gnu.org/bugs/?50580 bug 50580]). It can be fixed by installing {{Codeline|qttools5-dev-tools}}</li><br />
</ul>}}<br />
<br />
=== Configuration ===<br />
<br />
Some Debian and Ubuntu specific configure tweaks are listed below:<br />
<br />
==== Java ====<br />
<br />
Autodetection for Java should work well on Debian-based systems. A specific Java version can be specified by passing {{codeline|JAVA_HOME}} to configure, for example<br />
<br />
./configure JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64<br />
<br />
==== HDF5 ====<br />
<br />
On older versions of Debian and Ubuntu, you may get the following warning when building an older version of Octave from source:<br />
<br />
HDF5 library not found. Octave will not be able to save or load HDF5 data files.<br />
<br />
The problem is that there are multiple versions of the hdf5 package. Octave was written with the serial version in mind but it is likely to work with the others (OpenMPI and Mpich). Due to the naming scheme done in Debian, it may be required to specify the location of the libraries. See bug {{bug|38928}} for details (starting with comment #19) but basically, use the following when running configure:<br />
<br />
./configure --with-hdf5-includedir=/usr/include/hdf5/serial --with-hdf5-libdir=/usr/lib/x86_64-linux-gnu/hdf5/serial<br />
<br />
On older versions of Debian and Ubuntu, where only one flavor of the HDF5 library could be installed at a time, you may need to build Octave against one of the MPI-enabled flavors. On these older systems, configuring Octave like this may work:<br />
<br />
./configure CPPFLAGS="-I/usr/include/mpi -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX"<br />
<br />
==== Sundials ====<br />
<br />
On recent Debian and Ubuntu releases whose Sundials version (in {{codeline|libsundials-dev}}) is 3.1, a configure flag needs to be passed for {{codeline|ode15i}} and {{codeline|ode15s}} to be compiled with support for sparse Jacobians (bug {{bug|55937}}), as follows:<br />
<br />
./configure CPPFLAGS="-I/usr/include/suitesparse"<br />
<br />
== See also ==<br />
<br />
* [[MXE]] -- a more customized Octave build including many self-compiled tools.<br />
<br />
[[Category:Building]]<br />
[[Category:Installation]]<br />
[[Category:GNU/Linux]]</div>Nirhttps://wiki.octave.org/wiki/index.php?title=Building&diff=12419Building2019-11-14T18:47:44Z<p>Nir: noted hg dependency</p>
<hr />
<div>: '' This article provides general information about building GNU Octave from source. If you just want to install Octave, see [[:Category:Installation]].''<br />
<br />
== General steps ==<br />
<br />
# Install all [[#Dependencies|build dependencies]] (see below).<br />
# Getting the Octave sources ...<br />
#* ... from the development repository (requires also [https://www.mercurial-scm.org/ Mercurial])<br />
<div style="margin-left:5em;"><br />
hg clone https://www.octave.org/hg/octave && \<br />
cd octave && \<br />
./bootstrap<br />
</div><br />
::* ... from a release<br />
<div style="margin-left:5em;"><br />
wget https://ftpmirror.gnu.org/octave/octave-{{Release}}.tar.gz && \<br />
tar -xzf octave-{{Release}}.tar.gz && \<br />
cd octave-{{Release}}<br />
</div><br />
: 3. Configure, build, check, and install Octave<br />
<div style="margin-left:3em;"><br />
mkdir .build && \<br />
cd .build && \<br />
./../configure --prefix=$HOME/my_octave && \ <ref><code>--prefix</code> determines the installation location, see the [[#Install Octave in home directory|Tweaks section]] for details. For more information about configuration options, type <code>./../configure --help</code>.</ref><br />
make -j2 && \ <ref>Depending on your system and processor count, use a larger number of parallel jobs, e.g. <code>-j8</code>.</ref><br />
make check && \<br />
make install<br />
</div><br />
<br />
== Dependencies ==<br />
<br />
Most of the dependencies given in this section can be very conveniently installed on many [[Octave for GNU/Linux|GNU/Linux]] systems. Please read the respective wiki page for your distribution on the [[Octave for GNU/Linux]] page.<br />
<br />
On [[Octave for Microsoft Windows|MS Windows]] and [[Octave for macOS|macOS]] systems the generic Octave build process described on this page needs some more effort to fulfill the described build dependencies. Please read [[Octave for Microsoft Windows]] and [[Octave for macOS]] for information how to build Octave for the respective systems.<br />
<br />
Dependencies marked with <span style="background:lightgreen">green background</span> are '''required''' for building Octave. All other tools and libraries are recommended/optional, but very useful features (like the GUI, plotting, etc.) are likely to be disabled.<br />
<br />
=== Build tools ===<br />
<br />
{| class="wikitable"<br />
|-<br />
! Dependency<br />
! Description<br />
! License / Copyright<br />
|-style="background:lightgreen"<br />
| [https://www.gnu.org/software/autoconf Autoconf]<br />
| Software configuration<br />
| GNU GPL v3.0<br />
|-style="background:lightgreen"<br />
| [https://www.gnu.org/software/automake Automake]<br />
| Makefile generator<br />
| GNU GPL v3.0<br />
|-style="background:lightgreen"<br />
| [https://gcc.gnu.org C++, C, and Fortran compilers]<br />
| Compiling the source code<br />
| GNU GPL v3.0<br />
|-style="background:lightgreen"<br />
| [https://www.gnu.org/software/make GNU Make]<br />
| Makefile processor<br />
| GNU GPL v3.0<br />
|-style="background:lightgreen"<br />
| [https://www.gnu.org/software/libtool Libtool]<br />
| Dependency of automake<br />
| Free Software Foundation<br />
|-style="background:lightgreen"<br />
| Unix utilities: gawk, gperf, less, ncurses<br />
| Miscellaneous tasks<br />
| GNU GPL v3.0<br />
|-<br />
| [https://www.gnu.org/software/bison Bison]<br />
| Parser generator<br />
| GNU GPL v3.0<br />
|-<br />
| [https://www.gnu.org/software/flex Flex]<br />
| Lexical analyzer<br />
| The Flex project<br />
|}<br />
<br />
=== Documentation tools ===<br />
<br />
{| class="wikitable"<br />
|-<br />
! Dependency<br />
! Description<br />
! License / Copyright<br />
|-<br />
| [http://www.ghostgum.com.au/software/epstool.htm epstool]<br />
| Epstool is a utility to create or extract preview images in EPS files, fix bounding boxes and convert to bitmaps.<br />
| GNU GPL v2.0<br />
|-<br />
| [https://www.freetype.org FTGL]<br />
| Portable font engine to perform font rendering for Octaveโs OpenGL-based graphics functions.<br />
| GNU GPL v2.0<br />
|-<br />
| [http://geuz.org/gl2ps GL2PS]<br />
| GL2PS is a C library providing high quality vector output for any OpenGL application.<br />
| GNU LGPL v2.0<br />
|-<br />
| [https://www.nongnu.org/texi2html Texi2HTML]<br />
| Perl script which converts Texinfo source files to HTML output.<br />
| GNU GPL v3.0<br />
|-<br />
| [https://www.gnu.org/software/texinfo Texinfo]<br />
| Documentation system that uses a single source to produce both on-line information and printed output.<br />
| GNU GPL v3.0<br />
|-<br />
| [https://www.tug.org/texlive/ TeX Live]<br />
| TeX document production system including all the major TeX-related programs, macro packages, and fonts that are free software.<br />
| Freely redistributable as defined by the Free Software Foundation<br />
|}<br />
<br />
=== External tools and libraries ===<br />
<br />
{| class="wikitable"<br />
|-<br />
! Dependency<br />
! Description<br />
! License / Copyright<br />
|-style="background:lightgreen"<br />
| [https://www.netlib.org/blas BLAS]<br />
| Basic Linear Algebra Subroutine library<br />
| Free - proper attribution request<br />
|-style="background:lightgreen"<br />
| [https://netlib.org/lapack LAPACK]<br />
| Linear Algebra Package<br />
| Free - proper attribution request<br />
|-style="background:lightgreen"<br />
| [https://www.pcre.org PCRE]<br />
| Perl Compatible Regular Expression library<br />
| Free<br />
|-style="background:lightgreen"<br />
| [https://www.gnu.org/software/readline GNU Readline]<br />
| Command-line editing library<br />
| GNU GPL v3.0<br />
|-<br />
| [https://github.com/opencollab/arpack-ng ARPACK-NG]<br />
| Solution of large-scale eigenvalue problems<br />
| BSD like - various authors<br />
|-<br />
| [https://curl.haxx.se cURL]<br />
| Library for transferring data with URL syntax<br />
| Free Software -- main author<br />
|-<br />
| [http://www.fftw.org FFTW3]<br />
| Library for computing discrete Fourier transforms<br />
| MIT -- GNU GPL v2.0<br />
|-<br />
| [https://www.fltk.org FLTK]<br />
| Portable GUI toolkit<br />
| GNU GPL v2.0 with static linking exception<br />
|-<br />
| [https://www.freedesktop.org/wiki/Software/fontconfig fontconfig]<br />
| Library for configuring and customizing font access<br />
| Provided "as is" -- various authors<br />
|-<br />
| [https://www.freetype.org FreeType]<br />
| Portable font engine<br />
| compatible with GNU GPL v3.0<br />
|-<br />
| [https://www.gnu.org/software/glpk GLPK]<br />
| GNU Linear Programming Kit<br />
| GNU GPL v3.0<br />
|-<br />
| [http://www.gnuplot.info gnuplot]<br />
| Interactive graphics program<br />
| Provided "as is" -- various authors<br />
|-<br />
| [http://www.graphicsmagick.org GraphicsMagick++]<br />
| Image processing library<br />
| various -- integrates many third-party libs<br />
|-<br />
| [https://www.hdfgroup.org/solutions/hdf5 HDF5]<br />
| Library for manipulating portable data files<br />
| BSD - like<br />
|-<br />
| [https://www.opengl.org OpenGL]<br />
| API for portable 2D and 3D graphics<br />
| Free specs -- license is driver dependent<br />
|-<br />
| [http://www.qhull.org Qhull]<br />
| Computational geometry library<br />
| Free software -- specific<br />
|-<br />
| [http://sourceforge.net/projects/qrupdate QRUPDATE]<br />
| QR factorization updating library<br />
| GNU GPL v3.0<br />
|-<br />
| [http://faculty.cse.tamu.edu/davis/suitesparse.html SuiteSparse]<br />
| Sparse matrix factorization library<br />
| Main author<br />
|-<br />
| [https://zlib.net zlib]<br />
| Data compression library<br />
| Provided "as is" -- various authors<br />
|}<br />
<br />
== Tweaks ==<br />
<br />
=== Install Octave in home directory ===<br />
<br />
To install multiple versions of GNU Octave on one system, it is recommended to use the <code>--prefix</code> option of the <code>configure</code> script. With this option one can determine a custom installation directory, preferably within your user's home directory, to avoid elevated installation privileges. One does not "clutter" the system by running <code>sudo make install</code> and the custom build Octave can coexist with, for example, your Linux distribution installation of Octave.<br />
<br />
In order to start the custom build of Octave almost as convenient as the Linux distribution installation of Octave, one can create an alias within {{Path|.bashrc}}:<br />
<br />
echo "alias myoctave='$HOME/my_octave/bin/octave'" >> ~/.bashrc<br />
<br />
Then update your {{Path|.bashrc}} without doing logout and login:<br />
<br />
source $HOME/.bashrc<br />
<br />
If you simply enter <code>octave</code>, you'll start your Linux distribution installation of Octave. But when you enter <code>myoctave</code>, you'll start your custom build of Octave inside your home directory.<br />
<br />
=== Uninstall ===<br />
<br />
# If you still have the {{Path|.build}} folder, just run <code>make uninstall</code> from it.<br />
# Just delete the install folder, e.g. <code>rm -rf $HOME/my_octave</code>.<br />
<br />
In any case, don't forget to remove any created ''alias'' entries in {{Path|~/.bashrc}}.<br />
<br />
=== Large array support ===<br />
<br />
: ''Main article: [[Enable large arrays: Build octave such that it can use arrays larger than 2Gb.]]''<br />
<br />
== See also ==<br />
<br />
* [https://hg.savannah.gnu.org/hgweb/octave/file/tip/README <code>README</code>] and [https://hg.savannah.gnu.org/hgweb/octave/file/tip/etc/HACKING.md <code>/etc/HACKING.md</code>] in the development repository. <br />
* https://octave.org/doc/interpreter/Installation.html<br />
* [[MXE]] -- a more customized Octave build including many self-compiled tools.<br />
<br />
== Footnotes ==<br />
<br />
<references/><br />
<br />
[[Category:Building]]</div>Nirhttps://wiki.octave.org/wiki/index.php?title=Octave_for_Debian_systems&diff=12418Octave for Debian systems2019-11-14T18:45:55Z<p>Nir: </p>
<hr />
<div>* ''This article addresses the [[:Category:Installation|installation]] and [[Building]] of GNU Octave on Debian, and Debian-based distributions such as Ubuntu.''<br />
<br />
Binary packages for GNU Octave and many [[Octave Forge]] packages are provided by all versions of Debian and Ubuntu. These are the most well-tested binaries available and should work best for most users. To install them, run:<br />
<br />
sudo apt-get install octave<br />
<br />
In Debian and Ubuntu the "complete" GNU Octave software is split over multiple packages. To obtain the complete features of Octave, install additionally<br />
<br />
* {{codeline|octave-doc}}, {{codeline|octave-info}}, and {{codeline|octave-htmldoc}} for the documentation;<br />
* {{codeline|liboctave-dev}} for the octave development header files and mkoctfile (required to install Octave Forge packages); and<br />
* {{codeline|octave-dbg}} for the debugging symbols.<br />
<br />
Many Octave packages are also distributed by Debian and Ubuntu. These are tested to work the best with the respective Octave version. Install them via:<br />
<br />
sudo apt-get install octave-control octave-image octave-io octave-optim octave-signal octave-statistics<br />
<br />
Up to 2018, the [https://launchpad.net/~octave GNU Octave Team] on Launchpad actively maintained a PPA providing more up to date packages of Octave. These are backported from Debian unstable and are still useful for older Ubuntu installations. To set up your system to install these packages, run:<br />
<br />
sudo apt-add-repository ppa:octave/stable<br />
sudo apt-get update<br />
sudo apt-get install octave<br />
<br />
== Building Octave ==<br />
<br />
: ''For general build instructions, see [[Building]].''<br />
<br />
The ''only'' tricky part is to install the Octave build dependencies. Once that is solved, one can easily follow the [[Building|general build instructions]]. See [[#Configuration|below]] for some Debian and Ubuntu specific configuration options.<br />
<br />
=== Install dependencies ===<br />
<br />
Note that different Debian and Ubuntu versions may have slightly different package names but their differences should be pretty small, mostly limited to version numbers.<br />
<br />
==== The easy way (but likely incorrect) ====<br />
<br />
This approach is ''only'' suitable if you are building from source the ''same'' version that your Linux distribution already has packaged.<br />
<br />
The easy way to install ''most'' of the necessary dependencies is to {{Codeline|sudo apt-get build-dep octave}}. This will install all packages necessary to build and prepare a Debian package for the octave version available on your system repositories. However:<br />
* will install unnecessary packages related to the building of a Debian package;<br />
* may miss some new dependencies;<br />
* may install packages that are no longer octave dependencies.<br />
<br />
==== The right way ====<br />
<br />
The right way is to install all the dependencies listed on the [[Building#Dependencies|Building]] wiki page. One can either search for the respective packages manually on<br />
<br />
* https://packages.debian.org<br />
* https://packages.ubuntu.com<br />
<br />
or, for the sake of convenience, use some "one-liner" to install them:<br />
<br />
* '''Ubuntu 19.10'''<br />
<br />
:<pre>sudo apt-get install gcc g++ gfortran make libblas-dev liblapack-dev libpcre3-dev libarpack2-dev libcurl4-gnutls-dev epstool libfftw3-dev fig2dev libfltk1.3-dev libfontconfig1-dev libfreetype6-dev libgl2ps-dev libglpk-dev libreadline-dev gnuplot-x11 libgraphicsmagick++1-dev libhdf5-dev openjdk-8-jdk libsndfile1-dev llvm-dev lpr texinfo libgl1-mesa-dev libosmesa6-dev pstoedit portaudio19-dev libqhull-dev libqrupdate-dev libqscintilla2-qt4-dev libsuitesparse-dev texlive libxft-dev zlib1g-dev autoconf automake bison flex gperf gzip icoutils librsvg2-bin libtool perl rsync tar qtbase5-dev qttools5-dev qttools5-dev-tools libqscintilla2-qt5-dev libsundials-dev</pre><br />
<br />
* '''Ubuntu 18.04 (LTS)'''<br />
<br />
:<pre>sudo apt-get install gcc g++ gfortran make libblas-dev liblapack-dev libpcre3-dev libarpack2-dev libcurl4-gnutls-dev epstool libfftw3-dev transfig libfltk1.3-dev libfontconfig1-dev libfreetype6-dev libgl2ps-dev libglpk-dev libreadline-dev gnuplot-x11 libgraphicsmagick++1-dev libhdf5-serial-dev openjdk-8-jdk libsndfile1-dev llvm-dev lpr texinfo libgl1-mesa-dev libosmesa6-dev pstoedit portaudio19-dev libqhull-dev libqrupdate-dev libqscintilla2-dev libsuitesparse-dev texlive texlive-generic-recommended libxft-dev zlib1g-dev autoconf automake bison flex gperf gzip icoutils librsvg2-bin libtool perl rsync tar qtbase5-dev qttools5-dev qttools5-dev-tools libqscintilla2-qt5-dev</pre><br />
<br />
* '''Ubuntu 16.04 (LTS)'''<br />
<br />
:<pre>sudo apt-get install gcc g++ gfortran make libblas-dev liblapack-dev libpcre3-dev libarpack2-dev libcurl4-gnutls-dev epstool libfftw3-dev transfig libfltk1.3-dev libfontconfig1-dev libfreetype6-dev libgl2ps-dev libglpk-dev libreadline-dev gnuplot-x11 libgraphicsmagick++1-dev libhdf5-serial-dev openjdk-8-jdk libsndfile1-dev llvm-dev lpr texinfo libgl1-mesa-dev libosmesa6-dev pstoedit portaudio19-dev libqhull-dev libqrupdate-dev libqscintilla2-dev libqt4-dev libqtcore4 libqtwebkit4 libqt4-network libqtgui4 libqt4-opengl-dev libsuitesparse-dev texlive libxft-dev zlib1g-dev autoconf automake bison flex gperf gzip icoutils librsvg2-bin libtool perl rsync tar</pre><br />
<br />
* '''Debian 9'''<br />
<br />
:<pre>sudo apt-get install gcc g++ gfortran make libblas-dev liblapack-dev libpcre3-dev libarpack2-dev libcurl4-gnutls-dev epstool libfftw3-dev transfig libfltk1.3-dev libfontconfig1-dev libfreetype6-dev libgl2ps-dev libglpk-dev libreadline-dev gnuplot libgraphicsmagick++1-dev libhdf5-serial-dev openjdk-8-jdk libsndfile1-dev llvm-dev texinfo libgl1-mesa-dev libosmesa6-dev pstoedit portaudio19-dev libjack-jackd2-dev libqhull-dev libqrupdate-dev libqscintilla2-dev libqt4-dev libqtcore4 libqtwebkit4 libqt4-network libqtgui4 libqt4-opengl-dev libsuitesparse-dev texlive libxft-dev zlib1g-dev autoconf automake bison flex gperf gzip icoutils librsvg2-bin libtool perl rsync tar</pre><br />
<br />
* '''Debian 8'''<br />
<br />
:<pre>sudo apt-get install gcc g++ gfortran make libblas-dev liblapack-dev libpcre3-dev libarpack2-dev libcurl4-gnutls-dev epstool libfftw3-dev transfig libfltk1.3-dev libfontconfig1-dev libfreetype6-dev libgl2ps-dev libglpk-dev libreadline-dev gnuplot libgraphicsmagick++1-dev libhdf5-serial-dev openjdk-7-jdk libsndfile1-dev llvm-dev lpr texinfo libgl1-mesa-dev libosmesa6-dev pstoedit portaudio19-dev libqhull-dev libqrupdate-dev libqscintilla2-dev libqt4-dev libqtcore4 libqtwebkit4 libqt4-network libqtgui4 libqt4-opengl-dev libsuitesparse-dev texlive libxft-dev zlib1g-dev autoconf automake bison flex gperf gzip icoutils librsvg2-bin libtool perl rsync tar</pre><br />
<br />
<br />
{{Warning|<ul><li>The Debian repositoriy has several libraries for dealing with HDF data files. The recommended is {{Codeline|libhdf5-serial-dev}}. However, the {{Forge|msh|msh package}} requires [http://www.geuz.org/gmsh/ gmsh] which is incompatible with it.</li><br />
<li>The GraphicsMagick++ library (libgraphicsmagick++1-dev) on the Debian repositories was compiled with quantum 8 which limits reading images to 8 bit. The solution is to recompile [[GraphicsMagick]] with quantum 16 or 32 before building Octave.</li><br />
<li>For debian9 using openjdk-9-jdk (even providing {{Codeline|JAVA_HOME}}) could *not* be used for the java interface! Use openjdk-8-jdk instead.</li><br />
<li>When configure decides to use QT5 instead of QT4, make might fail because lrelease is missing (see [https://savannah.gnu.org/bugs/?50580 bug 50580]). It can be fixed by installing {{Codeline|qttools5-dev-tools}}</li><br />
</ul>}}<br />
<br />
=== Configuration ===<br />
<br />
Some Debian and Ubuntu specific configure tweaks are listed below:<br />
<br />
==== Java ====<br />
<br />
Autodetection for Java should work well on Debian-based systems. A specific Java version can be specified by passing {{codeline|JAVA_HOME}} to configure, for example<br />
<br />
./configure JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64<br />
<br />
==== HDF5 ====<br />
<br />
On older versions of Debian and Ubuntu, you may get the following warning when building an older version of Octave from source:<br />
<br />
HDF5 library not found. Octave will not be able to save or load HDF5 data files.<br />
<br />
The problem is that there are multiple versions of the hdf5 package. Octave was written with the serial version in mind but it is likely to work with the others (OpenMPI and Mpich). Due to the naming scheme done in Debian, it may be required to specify the location of the libraries. See bug {{bug|38928}} for details (starting with comment #19) but basically, use the following when running configure:<br />
<br />
./configure --with-hdf5-includedir=/usr/include/hdf5/serial --with-hdf5-libdir=/usr/lib/x86_64-linux-gnu/hdf5/serial<br />
<br />
On older versions of Debian and Ubuntu, where only one flavor of the HDF5 library could be installed at a time, you may need to build Octave against one of the MPI-enabled flavors. On these older systems, configuring Octave like this may work:<br />
<br />
./configure CPPFLAGS="-I/usr/include/mpi -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX"<br />
<br />
== See also ==<br />
<br />
* [[MXE]] -- a more customized Octave build including many self-compiled tools.<br />
<br />
[[Category:Building]]<br />
[[Category:Installation]]<br />
[[Category:GNU/Linux]]</div>Nirhttps://wiki.octave.org/wiki/index.php?title=Octave_for_Debian_systems&diff=12417Octave for Debian systems2019-11-14T18:45:31Z<p>Nir: /* The right way */ added latest Ubuntu</p>
<hr />
<div>* ''This article addresses the [[:Category:Installation|installation]] and [[Building]] of GNU Octave on Debian, and Debian-based distributions such as Ubuntu.''<br />
<br />
Binary packages for GNU Octave and many [[Octave Forge]] packages are provided by all versions of Debian and Ubuntu. These are the most well-tested binaries available and should work best for most users. To install them, run:<br />
<br />
sudo apt-get install octave<br />
<br />
In Debian and Ubuntu the "complete" GNU Octave software is split over multiple packages. To obtain the complete features of Octave, install additionally<br />
<br />
* {{codeline|octave-doc}}, {{codeline|octave-info}}, and {{codeline|octave-htmldoc}} for the documentation;<br />
* {{codeline|liboctave-dev}} for the octave development header files and mkoctfile (required to install Octave Forge packages); and<br />
* {{codeline|octave-dbg}} for the debugging symbols.<br />
<br />
Many Octave packages are also distributed by Debian and Ubuntu. These are tested to work the best with the respective Octave version. Install them via:<br />
<br />
sudo apt-get install octave-control octave-image octave-io octave-optim octave-signal octave-statistics<br />
<br />
Up to 2018, the [https://launchpad.net/~octave GNU Octave Team] on Launchpad actively maintained a PPA providing more up to date packages of Octave. These are backported from Debian unstable and are still useful for older Ubuntu installations. To set up your system to install these packages, run:<br />
<br />
sudo apt-add-repository ppa:octave/stable<br />
sudo apt-get update<br />
sudo apt-get install octave<br />
<br />
== Building Octave ==<br />
<br />
: ''For general build instructions, see [[Building]].''<br />
<br />
The ''only'' tricky part is to install the Octave build dependencies. Once that is solved, one can easily follow the [[Building|general build instructions]]. See [[#Configuration|below]] for some Debian and Ubuntu specific configuration options.<br />
<br />
=== Install dependencies ===<br />
<br />
Note that different Debian and Ubuntu versions may have slightly different package names but their differences should be pretty small, mostly limited to version numbers.<br />
<br />
==== The easy way (but likely incorrect) ====<br />
<br />
This approach is ''only'' suitable if you are building from source the ''same'' version that your Linux distribution already has packaged.<br />
<br />
The easy way to install ''most'' of the necessary dependencies is to {{Codeline|sudo apt-get build-dep octave}}. This will install all packages necessary to build and prepare a Debian package for the octave version available on your system repositories. However:<br />
* will install unnecessary packages related to the building of a Debian package;<br />
* may miss some new dependencies;<br />
* may install packages that are no longer octave dependencies.<br />
<br />
==== The right way ====<br />
<br />
The right way is to install all the dependencies listed on the [[Building#Dependencies|Building]] wiki page. One can either search for the respective packages manually on<br />
<br />
* https://packages.debian.org<br />
* https://packages.ubuntu.com<br />
<br />
or, for the sake of convenience, use some "one-liner" to install them:<br />
<br />
* '''Ubuntu 19.10'''<br />
<br />
:<pre>sudo apt-get install gcc g++ gfortran make libblas-dev liblapack-dev libpcre3-dev libarpack2-dev libcurl4-gnutls-dev epstool libfftw3-dev fig2dev libfltk1.3-dev libfontconfig1-dev libfreetype6-dev libgl2ps-dev libglpk-dev libreadline-dev gnuplot-x11 libgraphicsmagick++1-dev libhdf5-dev openjdk-8-jdk libsndfile1-dev llvm-dev lpr texinfo libgl1-mesa-dev libosmesa6-dev pstoedit portaudio19-dev libqhull-dev libqrupdate-dev libqscintilla2-qt4-dev libsuitesparse-dev texlive libxft-dev zlib1g-dev autoconf automake bison flex gperf gzip icoutils librsvg2-bin libtool perl rsync tar qtbase5-dev qttools5-dev qttools5-dev-tools libqscintilla2-qt5-dev libsundials-dev</pre><br />
<br />
<br />
* '''Ubuntu 18.04 (LTS)'''<br />
<br />
:<pre>sudo apt-get install gcc g++ gfortran make libblas-dev liblapack-dev libpcre3-dev libarpack2-dev libcurl4-gnutls-dev epstool libfftw3-dev transfig libfltk1.3-dev libfontconfig1-dev libfreetype6-dev libgl2ps-dev libglpk-dev libreadline-dev gnuplot-x11 libgraphicsmagick++1-dev libhdf5-serial-dev openjdk-8-jdk libsndfile1-dev llvm-dev lpr texinfo libgl1-mesa-dev libosmesa6-dev pstoedit portaudio19-dev libqhull-dev libqrupdate-dev libqscintilla2-dev libsuitesparse-dev texlive texlive-generic-recommended libxft-dev zlib1g-dev autoconf automake bison flex gperf gzip icoutils librsvg2-bin libtool perl rsync tar qtbase5-dev qttools5-dev qttools5-dev-tools libqscintilla2-qt5-dev</pre><br />
<br />
* '''Ubuntu 16.04 (LTS)'''<br />
<br />
:<pre>sudo apt-get install gcc g++ gfortran make libblas-dev liblapack-dev libpcre3-dev libarpack2-dev libcurl4-gnutls-dev epstool libfftw3-dev transfig libfltk1.3-dev libfontconfig1-dev libfreetype6-dev libgl2ps-dev libglpk-dev libreadline-dev gnuplot-x11 libgraphicsmagick++1-dev libhdf5-serial-dev openjdk-8-jdk libsndfile1-dev llvm-dev lpr texinfo libgl1-mesa-dev libosmesa6-dev pstoedit portaudio19-dev libqhull-dev libqrupdate-dev libqscintilla2-dev libqt4-dev libqtcore4 libqtwebkit4 libqt4-network libqtgui4 libqt4-opengl-dev libsuitesparse-dev texlive libxft-dev zlib1g-dev autoconf automake bison flex gperf gzip icoutils librsvg2-bin libtool perl rsync tar</pre><br />
<br />
* '''Debian 9'''<br />
<br />
:<pre>sudo apt-get install gcc g++ gfortran make libblas-dev liblapack-dev libpcre3-dev libarpack2-dev libcurl4-gnutls-dev epstool libfftw3-dev transfig libfltk1.3-dev libfontconfig1-dev libfreetype6-dev libgl2ps-dev libglpk-dev libreadline-dev gnuplot libgraphicsmagick++1-dev libhdf5-serial-dev openjdk-8-jdk libsndfile1-dev llvm-dev texinfo libgl1-mesa-dev libosmesa6-dev pstoedit portaudio19-dev libjack-jackd2-dev libqhull-dev libqrupdate-dev libqscintilla2-dev libqt4-dev libqtcore4 libqtwebkit4 libqt4-network libqtgui4 libqt4-opengl-dev libsuitesparse-dev texlive libxft-dev zlib1g-dev autoconf automake bison flex gperf gzip icoutils librsvg2-bin libtool perl rsync tar</pre><br />
<br />
* '''Debian 8'''<br />
<br />
:<pre>sudo apt-get install gcc g++ gfortran make libblas-dev liblapack-dev libpcre3-dev libarpack2-dev libcurl4-gnutls-dev epstool libfftw3-dev transfig libfltk1.3-dev libfontconfig1-dev libfreetype6-dev libgl2ps-dev libglpk-dev libreadline-dev gnuplot libgraphicsmagick++1-dev libhdf5-serial-dev openjdk-7-jdk libsndfile1-dev llvm-dev lpr texinfo libgl1-mesa-dev libosmesa6-dev pstoedit portaudio19-dev libqhull-dev libqrupdate-dev libqscintilla2-dev libqt4-dev libqtcore4 libqtwebkit4 libqt4-network libqtgui4 libqt4-opengl-dev libsuitesparse-dev texlive libxft-dev zlib1g-dev autoconf automake bison flex gperf gzip icoutils librsvg2-bin libtool perl rsync tar</pre><br />
<br />
<br />
{{Warning|<ul><li>The Debian repositoriy has several libraries for dealing with HDF data files. The recommended is {{Codeline|libhdf5-serial-dev}}. However, the {{Forge|msh|msh package}} requires [http://www.geuz.org/gmsh/ gmsh] which is incompatible with it.</li><br />
<li>The GraphicsMagick++ library (libgraphicsmagick++1-dev) on the Debian repositories was compiled with quantum 8 which limits reading images to 8 bit. The solution is to recompile [[GraphicsMagick]] with quantum 16 or 32 before building Octave.</li><br />
<li>For debian9 using openjdk-9-jdk (even providing {{Codeline|JAVA_HOME}}) could *not* be used for the java interface! Use openjdk-8-jdk instead.</li><br />
<li>When configure decides to use QT5 instead of QT4, make might fail because lrelease is missing (see [https://savannah.gnu.org/bugs/?50580 bug 50580]). It can be fixed by installing {{Codeline|qttools5-dev-tools}}</li><br />
</ul>}}<br />
<br />
=== Configuration ===<br />
<br />
Some Debian and Ubuntu specific configure tweaks are listed below:<br />
<br />
==== Java ====<br />
<br />
Autodetection for Java should work well on Debian-based systems. A specific Java version can be specified by passing {{codeline|JAVA_HOME}} to configure, for example<br />
<br />
./configure JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64<br />
<br />
==== HDF5 ====<br />
<br />
On older versions of Debian and Ubuntu, you may get the following warning when building an older version of Octave from source:<br />
<br />
HDF5 library not found. Octave will not be able to save or load HDF5 data files.<br />
<br />
The problem is that there are multiple versions of the hdf5 package. Octave was written with the serial version in mind but it is likely to work with the others (OpenMPI and Mpich). Due to the naming scheme done in Debian, it may be required to specify the location of the libraries. See bug {{bug|38928}} for details (starting with comment #19) but basically, use the following when running configure:<br />
<br />
./configure --with-hdf5-includedir=/usr/include/hdf5/serial --with-hdf5-libdir=/usr/lib/x86_64-linux-gnu/hdf5/serial<br />
<br />
On older versions of Debian and Ubuntu, where only one flavor of the HDF5 library could be installed at a time, you may need to build Octave against one of the MPI-enabled flavors. On these older systems, configuring Octave like this may work:<br />
<br />
./configure CPPFLAGS="-I/usr/include/mpi -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX"<br />
<br />
== See also ==<br />
<br />
* [[MXE]] -- a more customized Octave build including many self-compiled tools.<br />
<br />
[[Category:Building]]<br />
[[Category:Installation]]<br />
[[Category:GNU/Linux]]</div>Nir