Editing Summer of Code - Getting Started

Jump to navigation Jump to search

Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.

Latest revision Your text
Line 6: Line 6:
  
 
==  Help Us Get To Know You ==  
 
==  Help Us Get To Know You ==  
* If you aren't communicating with us before the application is due, your application will not be accepted.
+
*: If you aren't communicating with us before the application is due, your application will not be accepted.
 
*:* '''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.
 
*:* '''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.
 
*:* '''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!
 
*:* '''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!
Line 12: Line 12:
 
*: 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.
 
*: 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.
 
*:* 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".
 
*:* 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".
*:* 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>
+
*:* 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 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>
 
*:* 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.
 
*:* 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.
 
*:* 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.
 
*:* 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.
Line 57: Line 58:
 
*: 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.
 
*: 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.
 
* '''The Octave Forge Project'''
 
* '''The Octave Forge Project'''
*: [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.
+
*: [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.
 
* '''Related Skills'''
 
* '''Related Skills'''
 
*: In addition, you probably should know '''some''' mathematics, engineering, experimental science, or something of the sort.
 
*: In addition, you probably should know '''some''' mathematics, engineering, experimental science, or something of the sort.
Line 82: Line 83:
 
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.
 
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.
  
{{Note|These are suggested projects but you are welcome to propose your own projects provided you find an Octave mentor}}
+
{{Note|these are suggested projects but you are welcome to propose your own projects provided you find an Octave mentor}}
  
 
== Summary table ==
 
== Summary table ==
Line 98: Line 99:
 
! <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
+
| [[Summer_of_Code_Project_Ideas#ode15s_:_Matlab_Compatible_DAE_solver | ode15{i,s} : Matlab Compatible DAE solvers]] || Carlo de Falco || Francesco Faccio, Marco Caliari, Jacopo Corno, Sebastian Schöps || Numerical || No  || Medium || GSoC 2016
 
|-
 
|-
| [[Summer of Code - 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
+
| [[Summer_of_Code_Project_Ideas#Improve_logm.2C_sqrtm.2C_funm | Improve logm, sqrtm, funm]] || ? || Marco Caliari, Mudit Sharma || Numerical || [https://github.com/RickOne16/matrix No]  || Hard || Independent devs 2016
 
|-
 
|-
| [[Summer of Code - 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
+
| [[Summer_of_Code_Project_Ideas#Improve_iterative_methods_for_sparse_linear_systems | Improve iterative methods for sparse linear systems]] || Marco Caliari || Carlo de Falco || Numerical || No  || Hard || SOCIS 2016
 
|-
 
|-
| [[Summer of Code - Getting Started#EPA_hydrology_software_suite | EPA hydrology software suite]] || [[User:KaKiLa| KaKiLa]] || ? || Octave Forge || Yes || Medium || Never
+
| [[Summer_of_Code_Project_Ideas#EPA_hydrology_software_suite | EPA hydrology software suite]] || [[User:KaKiLa| KaKiLa]] || ? || Octave Forge || Yes || Medium || Never
 
|-
 
|-
| [[Summer of Code - Getting Started#FullSWOF overland flow simulator | FullSWOF overland flow simulator]] || [[User:KaKiLa| KaKiLa]] || ? || Octave Forge || Yes || Medium || Never
+
| [[Summer_of_Code_Project_Ideas#FullSWOF overland flow simulator | FullSWOF overland flow simulator]] || [[User:KaKiLa| KaKiLa]] || ? || Octave Forge || Yes || Medium || Never
 
|-
 
|-
| [[Summer of Code - Getting Started#TISEAN_package | TISEAN: Nonlinear Time Series Analysis]] || [[User:KaKiLa|KaKiLa]] || ? || Octave Forge || [[TISEAN_package | No]] || Medium || GSoC 2015
+
| [[Summer_of_Code_Project_Ideas#TISEAN_package | TISEAN: Nonlinear Time Series Analysis]] || [[User:KaKiLa|KaKiLa]] || ? || Octave Forge || [[TISEAN_package | No]] || Medium || GSoC 2015
 
|-
 
|-
| [[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
+
| [[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
 
|-
 
|-
| [[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
+
| [[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
 
|-
 
|-
| [[Summer of Code - Getting Started#OCS | OCS package]] || Sebastian Schöps || Sebastian Schöps || Octave Forge, Numerical || Yes || Easy || Never
+
| [[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]
 
|-
 
|-
| [[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
+
| [[Summer_of_Code_Project_Ideas#OCS | OCS package]] || Sebastian Schöps || Sebastian Schöps || Octave Forge, Numerical || Yes || Easy || Never
 
|-
 
|-
| [[Summer of Code - Getting Started#JSON_encoding.2Fdecoding | JSON encoding/decoding]] || [[User:Siko1056|Kai T. Ohlhus]] || ? || Infrastructure || Yes || Medium || Never
+
| [[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
 
|-
 
|-
| [[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
+
| [[Summer_of_Code_Project_Ideas#Jupyter_Integration | Jupyter integration]] || Mike Miller || Colin B. Macdonald, Ankit Raj || Infrastructure ||  Yes || Medium || Never
 
|-
 
|-
| [[Summer of Code - Getting Started#Chebfun_in_Octave | Chebfun in Octave]] || Colin B. Macdonald || [[User:KaKiLa|KaKiLa]] || Infrastructure, Numerical || Yes  || Hard || Never
+
| [[Summer_of_Code_Project_Ideas#Chebfun_in_Octave | Chebfun in Octave]] || Colin B. Macdonald || [[User:KaKiLa|KaKiLa]], Ankit Raj, needs core-Octave mentor/comentor || Infrastructure, Numerical || Yes  || Hard || Never
 
|-
 
|-
| [[Summer of Code - Getting Started#PolarAxes and Plotting Improvements | PolarAxes and Plotting Improvements ]] || ? || Rik || Graphics || Yes  || Medium || Never
+
| [[Summer_of_Code_Project_Ideas#GUI Variable Editor and Property Inspector | GUI Property Inspector]] || ? ||  || GUI || Yes  || Medium || Never
 +
|-
 +
| [[Summer_of_Code_Project_Ideas#SPQR Interface | Write API to SPQR Library]] || ? ||  || Infrastructure || Yes  || Medium || Never
 +
|-
 +
| [[Summer_of_Code_Project_Ideas#PolarAxes and Plotting Improvements | PolarAxes and Plotting Improvements ]] || ? || Rik || Graphics || Yes  || Medium || Never
 
|}
 
|}
  
Line 176: Line 181:
 
: Difficult.
 
: Difficult.
 
* '''Potential mentors'''
 
* '''Potential mentors'''
: Marco Caliari, Mudit Sharma
+
: ?
  
 
=== Improve iterative methods for sparse linear systems ===
 
=== Improve iterative methods for sparse linear systems ===
  
 
GNU Octave currently has the following Krylov subspace methods for sparse linear systems: pcg (spd matrices) and pcr (Hermitian matrices), bicg,
 
GNU Octave currently has the following Krylov subspace methods for sparse linear systems: pcg (spd matrices) and pcr (Hermitian matrices), bicg,
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 [https://socis16octave-improveiterativemethods.blogspot.com/ SOCIS2016] which is already merged into Octave (cset {{cset|6266e321ef22}}).
+
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].
  
 
In Matlab, some additional methods are available: minres and symmlq (symmetric matrices), bicgstabl (general matrices), lsqr (least
 
In Matlab, some additional methods are available: minres and symmlq (symmetric matrices), bicgstabl (general matrices), lsqr (least
 
squares). The second step in this project could be the implementation of some of these missing functions.
 
squares). The second step in this project could be the implementation of some of these missing functions.
  
The [https://www-users.cs.umn.edu/~saad/IterMethBook_2ndEd.pdf reference book by Yousef Saad] is available online.
+
The reference book is available [www-users.cs.umn.edu/~saad/IterMethBook_2ndEd.pdf here]
  
 
* '''Required skills'''
 
* '''Required skills'''
Line 193: Line 198:
 
: Maybe hard the mathematical part, medium the programming part.
 
: Maybe hard the mathematical part, medium the programming part.
 
* '''Mentor'''
 
* '''Mentor'''
: Marco Caliari, Carlo de Falco
+
:
  
 
=== Chebfun in Octave ===
 
=== Chebfun in Octave ===
Line 199: Line 204:
 
[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.
 
[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.
  
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.
+
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.
  
 
The impact of this project is improving Octave and allowing Chebfun to be used without proprietary software.
 
The impact of this project is improving Octave and allowing Chebfun to be used without proprietary software.
 
How to get started:
 
 
* Learn about [https://www.chebfun.org/ Chebfun]
 
* Browse [https://savannah.gnu.org/bugs/?group=octave Octave's bug list] for "classdef"-related bugs.
 
 
* Clone this Chebfun [https://github.com/cbm755/chebfun/tree/octave_dev octave_dev branch].
 
** 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.
 
** 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>?
 
 
  
 
* '''Required skills'''
 
* '''Required skills'''
Line 219: Line 214:
 
* '''Potential mentors'''
 
* '''Potential mentors'''
 
: Colin B. Macdonald, [[User:KaKiLa|KaKiLa]], Mike Miller (?), Carnë Draug (?), someone from Chebfun team (?).
 
: Colin B. Macdonald, [[User:KaKiLa|KaKiLa]], Mike Miller (?), Carnë Draug (?), someone from Chebfun team (?).
 +
 +
How to get started: learn about Chebfun, browse Octave's bug list for classdef-related bugs.
 +
 +
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"?
  
 
== Adding functionality to Forge packages ==
 
== Adding functionality to Forge packages ==
Line 250: Line 249:
  
 
Starting points
 
Starting points
* [https://www.idpoisson.fr/fullswof/ The FullSWOF Project].
+
* [http://www.univ-orleans.fr/mapmo/soft/FullSWOF/ The FullSWOF Project].
 
* [https://arxiv.org/abs/1204.3210 FullSWOF: A software for overland flow simulation]
 
* [https://arxiv.org/abs/1204.3210 FullSWOF: A software for overland flow simulation]
 
* [https://bitbucket.org/binello7/fswof2d Initial work on Bitbucket]
 
* [https://bitbucket.org/binello7/fswof2d Initial work on Bitbucket]
Line 282: Line 281:
 
=== Symbolic package ===
 
=== Symbolic package ===
  
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 [[Pythonic|Pythonic package]].
+
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].
  
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)".
+
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)".
  
 
* '''Required skills'''
 
* '''Required skills'''
: OO-programming with m-files, Python, and possibly C/C++ for improving Pythonic (if needed).
+
: OO-programming with m-files, Python, and possibly C/C++ for improving Pytave (if needed).
 
* '''Difficulty'''
 
* '''Difficulty'''
 
: easy/medium
 
: easy/medium
 
* '''Mentors and/or other team members'''
 
* '''Mentors and/or other team members'''
 
: Colin B. Macdonald, Mike Miller, Abhinav Tripathi
 
: Colin B. Macdonald, Mike Miller, Abhinav Tripathi
 +
 +
=== Interval package ===
 +
 +
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:
 +
* 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.
 +
* Improve existing algorithms (support more options for plotting, support more options for optimizers, increase accuracy, …)
 +
* 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.
 +
* List more interesting use cases of interval arithmetic in the package's manual [https://octave.sourceforge.io/interval/package_doc/Examples.html]
 +
 +
* '''Required skills'''
 +
: m-file scripting, basic knowledge of computer arithmetics (especially floating-point computations), interval analysis (depending on the functions to implement).
 +
* '''Difficulty'''
 +
: Medium.
 +
* '''Mentor and co-mentor'''
 +
: [[User:oheim|Oliver Heimlich]], [[User:Siko1056|Kai T. Ohlhus]]
  
 
=== OCS ===
 
=== OCS ===
  
[[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).
+
[[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).
 
   
 
   
 
* [http://octave.sourceforge.net/ocs/overview.html Package help at source forge.]  
 
* [http://octave.sourceforge.net/ocs/overview.html Package help at source forge.]  
Line 308: Line 322:
 
== Infrastructure ==
 
== Infrastructure ==
  
=== JSON encoding/decoding ===
+
=== Jupyter Integration ===
  
[https://en.wikipedia.org/wiki/JSON JavaScript Object Notation], in short JSON, is a very common human readable and structured data formatUnfortunately, GNU Octave still lacks of builtin support of that data format. Having JSON support, Octave can improve for example it's web service functions, which often exchange JSON data these daysAnother interesting applicatoin is described in another Octave GSoC project, see [[Summer of Code - Getting Started#Jupyter_Integration | Jupyter integration]].
+
[http://jupyter.org Jupyter Notebook] is a web-based worksheet interface for computingThere 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.
  
In bug {{bug|53100}} a vivid discussion about proper JSON support took place.  As JSON is a highly demanded feature for Octave, there are already several attempts to fill the gap:
+
* '''Mentors'''
 
+
: Colin B. Macdonald, Mike Miller, others?
* [https://github.com/fangq/jsonlab jsonlab] (M-file implementation, probably slow for large JSON files)
 
* [https://github.com/gllmflndn/JSONio JSONio] (C MEX wrapper around [https://github.com/zserge/jsmn jsmn])
 
* [https://github.com/Andy1978/octave-rapidjson octave-rapidjson] (C++ Octave wrapper around [https://rapidjson.org/ RapidJSON])
 
* [https://github.com/apjanke/octave-jsonstuff octave-jsonstuff] (C++ Octave wrapper around [https://rapidjson.org/ RapidJSON])
 
 
 
For different reasons, none of them can be directly merged into Octave core yet.  Thus there is still lots of work to do.  The goal of this project is to evaluate (and to cherry pick from) the implementations above, to create Matlab compatible [https://www.mathworks.com/help/matlab/ref/jsonencode.html jsonencode] and [https://www.mathworks.com/help/matlab/ref/jsondecode.html jsondecode] functions.  This involves proper documentation of the work and unit tests to ensure the correctness of the implementation.
 
 
 
* '''Minimum requirements'''
 
: Good Octave and C/C++ programming knowledge.  Ability to make use of C/C++ libraries.
 
* '''Difficulty'''
 
: Medium.
 
* '''Mentor'''
 
: [[User:Siko1056|Kai T. Ohlhus]]
 
 
 
=== Jupyter Notebook Integration ===
 
 
 
[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 in first place to improve that kernel to make Octave a first-class experience within the Jupyter Notebook.
 
  
In general the [https://nbformat.readthedocs.io/en/latest/ Jupyter Notebook Format] is a plain JSON document.  In combination with another Octave GSoC project (see [[Summer of Code - Getting Started#JSON_encoding.2Fdecoding | JSON encoding/decoding]]), a second valuable outcome was that Octave can run (and fill) those Jupyter Notebooks on it's own.  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].
 
 
* '''Minimum requirements'''
 
: Good Octave and Python programming knowledge.
 
* '''Difficulty'''
 
: Medium.
 
* '''Mentors'''
 
: Colin B. Macdonald, Mike Miller, [[User:Siko1056|Kai T. Ohlhus]]
 
  
 
=== Using Python within Octave ===
 
=== Using Python within Octave ===
  
[[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.
+
[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.
  
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?
+
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?
  
 
* '''Mentors'''
 
* '''Mentors'''
Line 395: Line 384:
 
* '''Mentor'''
 
* '''Mentor'''
 
: [[User:KaKiLa|KaKiLa]], Carnë Draug, Carlo de Falco, Sebastian Schöps
 
: [[User:KaKiLa|KaKiLa]], Carnë Draug, Carlo de Falco, Sebastian Schöps
 +
 +
=== SPQR Interface ===
 +
 +
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.
 +
 +
* '''Minimum requirements'''
 +
: Ability to read and write C++ code.
 +
* '''Difficulty'''
 +
: Medium.
 +
* '''Mentor'''
 +
:
  
 
== Image Analysis ==
 
== Image Analysis ==
Line 436: Line 436:
 
* '''Potential mentor'''
 
* '''Potential mentor'''
 
: Carnë Draug
 
: Carnë Draug
 +
 +
== GUI ==
 +
 +
=== GUI Variable Editor and Property Inspector ===
 +
 +
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.
 +
 +
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.
 +
 +
For reference, Matlab has a similar Property Inspector (https://www.mathworks.com/help/matlab/ref/inspect.html).
 +
 +
* '''Minimum requirements'''
 +
: Ability to read and write C++ code.  Experience with Qt toolkit and GUI programming is optional, but desirable.
 +
* '''Difficulty'''
 +
: Medium.
 +
* '''Mentor'''
 +
:
  
 
== Graphics ==
 
== Graphics ==

Please note that all contributions to Octave may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see Octave:Copyrights for details). Do not submit copyrighted work without permission!

To edit this page, please answer the question that appears below (more info):

Cancel Editing help (opens in new window)