1,848
edits
(→Jupyter Notebook Integration: Update project.) |
|||
(46 intermediate revisions by 7 users not shown) | |||
Line 1: | Line 1: | ||
The following is distilled from the [[Projects]] page for the benefit of potential [https://summerofcode.withgoogle.com Google] and [ | 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. | ||
You can also take a look at last years [[Summer of Code]] projects for inspiration. | You can also take a look at last years [[Summer of Code]] projects for inspiration. | ||
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. | ||
*:* '''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! | ||
* '''Do not wait for us to tell you what to do''' | * '''Do not wait for us to tell you what to do''' | ||
*: 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 | *:* 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] | *:* 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 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 | *:* 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. | ||
*:* Take a look at the [[Short projects]] for something that may be simple to start with. | *:* Take a look at the [[Short projects]] for something that may be simple to start with. | ||
== Find Something That Interests You == | == Find Something That Interests You == | ||
*: 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). | *: 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). | ||
*: 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 [ | *: 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. | ||
== Prepare Your Proposal With Us == | == Prepare Your Proposal With Us == | ||
*: 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]. | *: 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]. | ||
Line 37: | Line 37: | ||
*: [http://en.wikipedia.org/wiki/GNU_build_system The GNU build system] is used to build Octave. | *: [http://en.wikipedia.org/wiki/GNU_build_system The GNU build system] is used to build Octave. | ||
*: 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. | *: 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. | ||
*: If you've ever done a {{Codeline|configure && make && make install}} series of commands, you have already used the GNU build system. | *: If you've ever done a {{Codeline|./configure && make && make install}} series of commands, you have already used the GNU build system. | ||
*: '''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: | *: '''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: | ||
*:* [[Building]] | *:* [[Building]] | ||
*:* [https:// | *:* [https://octave.org/doc/interpreter/Installation.html Octave Manual on Installing Octave] | ||
* '''The Version Control System''' | * '''The Version Control System''' | ||
*: We use [https://www.mercurial-scm.org/ Mercurial] (abbreviated hg). | *: We use [https://www.mercurial-scm.org/ Mercurial] (abbreviated hg). | ||
Line 46: | Line 46: | ||
* '''The Procedure for Contributing Changesets''' | * '''The Procedure for Contributing Changesets''' | ||
*: You will be expected to follow the same procedures as other contributors and core developers. | *: You will be expected to follow the same procedures as other contributors and core developers. | ||
*: 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]] [ | *: 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. | ||
*: [[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. | *: [[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. | ||
* '''The Maintainers Mailing List''' | * '''The Maintainers Mailing List''' | ||
Line 57: | Line 57: | ||
*: 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 | *: [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 80: | Line 80: | ||
= Suggested projects = | = Suggested projects = | ||
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. | 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| | {{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 98: | ||
! <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 - 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 - 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 - Getting Started#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 - Getting Started#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 - 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 - Getting Started#OCS | OCS package]] || Sebastian Schöps || Sebastian Schöps || Octave Forge, Numerical || Yes || Easy || Never | ||
|- | |- | ||
| [[ | | [[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 - 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 - Getting Started#Chebfun_in_Octave | Chebfun in Octave]] || Colin B. Macdonald || [[User:KaKiLa|KaKiLa]] || Infrastructure, Numerical || Yes || Hard || Never | ||
|- | |- | ||
| [[ | | [[Summer of Code - Getting Started#PolarAxes and Plotting Improvements | PolarAxes and Plotting Improvements ]] || ? || Rik || Graphics || Yes || Medium || Never | ||
|} | |} | ||
Line 138: | Line 128: | ||
These projects involve implementing certain mathematical functions, primarily in core Octave. | These projects involve implementing certain mathematical functions, primarily in core Octave. | ||
=== ode15{i,s} : Matlab Compatible DAE solvers === | === ode15{i,s} : Matlab Compatible DAE solvers === | ||
Line 166: | Line 141: | ||
[http://hg.savannah.gnu.org/hgweb/octave/file/4890b1c4a6bd/scripts/ode/ode15i.m ode15i.m] and | [http://hg.savannah.gnu.org/hgweb/octave/file/4890b1c4a6bd/scripts/ode/ode15i.m ode15i.m] and | ||
[http://hg.savannah.gnu.org/hgweb/octave/file/4890b1c4a6bd/scripts/ode/ode15s.m ode15s.m]. | [http://hg.savannah.gnu.org/hgweb/octave/file/4890b1c4a6bd/scripts/ode/ode15s.m ode15s.m]. | ||
The list of | The list of outstanding tracker tickets concerning this implementation can be found | ||
[https://savannah.gnu.org/search/?Search=Search&words=ode15&type_of_search=bugs&only_group_id=1925&exact=1&max_rows=25#options here] | [https://savannah.gnu.org/search/?Search=Search&words=ode15&type_of_search=bugs&only_group_id=1925&exact=1&max_rows=25#options here] | ||
Line 182: | Line 157: | ||
to a possible project plan would be improving documentation and tests in odepkg and removing | to a possible project plan would be improving documentation and tests in odepkg and removing | ||
overlaps with the documentation in core Octave. | overlaps with the documentation in core Octave. | ||
* '''Required skills''' | * '''Required skills''' | ||
Line 200: | Line 174: | ||
: 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 [ | 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}}). | ||
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 | The [https://www-users.cs.umn.edu/~saad/IterMethBook_2ndEd.pdf reference book by Yousef Saad] is available online. | ||
* '''Required skills''' | * '''Required skills''' | ||
Line 217: | Line 191: | ||
: 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 === | ||
[ | [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 | 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. | ||
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 233: | Line 217: | ||
* '''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 (?). | ||
== Adding functionality to Forge packages == | == Adding functionality to Forge packages == | ||
Line 268: | Line 248: | ||
Starting points | Starting points | ||
* [ | * [https://www.idpoisson.fr/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 300: | Line 280: | ||
=== 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 [ | 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]]. | ||
This project proposes to go further: instead of using | 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)". | ||
* '''Required skills''' | * '''Required skills''' | ||
: OO-programming with m-files, Python, and possibly C/C++ for improving | : OO-programming with m-files, Python, and possibly C/C++ for improving Pythonic (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 | ||
=== 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), 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), [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). | ||
* [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 341: | Line 306: | ||
== Infrastructure == | == Infrastructure == | ||
=== Jupyter Integration === | === 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, which is supported since Octave 7 (current development version). Another valuable project outcome was 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]. | ||
* '''Minimum requirements''' | |||
: Octave and Python programming knowledge. | |||
* '''Difficulty''' | |||
: Medium. | |||
* '''Mentors''' | * '''Mentors''' | ||
: Colin B. Macdonald, Mike Miller | : [[User:Siko1056|Kai T. Ohlhus]], Colin B. Macdonald, Mike Miller | ||
=== 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. | ||
Based on a previous summer project related to | 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? | ||
* '''Mentors''' | * '''Mentors''' | ||
Line 361: | Line 331: | ||
=== Octave Package management === | === Octave Package management === | ||
Octave | [[Packages]] are extensions for Octave, that are mainly maintained by the [[Octave Forge]] community. | ||
To get those extension to work with Octave, there is a single function, {{manual|pkg}}, which does pretty much everything. | |||
This function has a few limitations which are hard to implement with the current codebase, and will most likely require a full rewrite. | |||
A major step forward for a rewritten package manager is the [https://github.com/apjanke/octave-packajoozle/ "packajoozle" project] by Andrew Janke. | |||
The planned improvements are: | The planned improvements (see also {{bug|39479}}) are: | ||
* install and update from repositories (hg and git) | * install and update from repositories (hg and git) | ||
* automatic handling of dependencies | * automatic handling of dependencies | ||
Line 374: | Line 346: | ||
* support for multiple Octave installs | * support for multiple Octave installs | ||
* support for system-wide and user installed packages | * support for system-wide and user installed packages | ||
* testing packages (<code>pkg test <package-name></code>) | |||
* improved metadata acquisition (<code>pkg list -forge</code>) from https://octave.sourceforge.io/ | |||
The main objective of this project is to make {{ | 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. | ||
However, the current {{manual|pkg}} also performs some maintenance functions which it probably should not. | |||
Instead a package for developers should be created with such tools. | Instead a package for developers should be created with such tools. | ||
To do this enhancement effectively, a refactoring of the current {{codeline|pkg}} code will be needed (see [https://github.com/apjanke/octave-packajoozle/ "packajoozle" project]). | |||
Many of these problems have been solved in other languages. | |||
Familiarity with how other languages handle this problem will be useful to come up with elegant solutions. | |||
In some cases, there are standards to follow. | |||
For example, there are specifications published by freedesktop.org about where files should go ([http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html base directory spec]) and Windows seems to have its own standards. | |||
Many of these problems have been solved in other languages. Familiarity with how other languages handle this problem will be useful to come up with elegant solutions. In some cases, there are standards to follow. For example, there are specifications published by freedesktop.org about where files should go ([http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html base directory spec]) and Windows seems to have its own standards. See bugs {{bug|36477}} and {{bug|40444}} for more details. | See bugs {{bug|36477}} and {{bug|40444}} for more details. | ||
In addition, package names may start to collide very easily. One horrible way to workaround this by is choosing increasingly complex package names that give no hint on the package purpose. A much better is option is providing an Authority category like Perl 6 does. Nested packages is also an easy way to provide packages for specialized subjects (think {{codeline|image::morphology}}). A new {{ | In addition, package names may start to collide very easily. | ||
One horrible way to workaround this by is choosing increasingly complex package names that give no hint on the package purpose. | |||
A much better is option is providing an Authority category like Perl 6 does. | |||
Nested packages is also an easy way to provide packages for specialized subjects (think {{codeline|image::morphology}}). | |||
A new {{manual|pkg}} would think all this things now, or allow their implementation at a later time. | |||
Read the [[OEP:pkg|unfinished plan]] for more details. | |||
* '''Minimum requirements''' | * '''Minimum requirements''' | ||
: Ability to read and write Octave code, experience with Octave packages, and understanding of the basics of autotools. The most important skill is software design. | : Ability to read and write Octave code, experience with Octave packages, and understanding of the basics of autotools. The most important skill is software design. | ||
* '''Difficulty''' | * '''Difficulty''' | ||
: | : Medium. | ||
* '''Mentor''' | * '''Mentor''' | ||
: [[User:KaKiLa|KaKiLa]], Carnë Draug, Carlo de Falco, Sebastian Schöps | : [[User:KaKiLa|KaKiLa]], Carnë Draug, Carlo de Falco, Sebastian Schöps | ||
== Image Analysis == | == Image Analysis == | ||
Line 479: | Line 414: | ||
* '''Potential mentor''' | * '''Potential mentor''' | ||
: Carnë Draug | : Carnë Draug | ||
== Graphics == | == Graphics == | ||
Line 501: | Line 419: | ||
=== PolarAxes and Plotting Improvements === | === PolarAxes and Plotting Improvements === | ||
Octave currently provides supports for polar axes by using a Cartesian 2-D axes and adding a significant number of properties and callback listerners to get things to work. What is needed is a first class implementation of a "polaraxes" object in C++. This will require creating a new fundamental graphics object type, and programming in C++/OpenGL to render the object. When "polaraxes" exist as an object type then m-files will be written to access them including polaraxes.m, polarplot.m, rticks.m, rticklabels.m, thetaticks, thetaticklabels.m, rlim.m, thetalim.m | Octave currently provides supports for polar axes by using a Cartesian 2-D axes and adding a significant number of properties and callback listerners to get things to work. What is needed is a first class implementation of a "polaraxes" object in C++. This will require creating a new fundamental graphics object type, and programming in C++/OpenGL to render the object. When "polaraxes" exist as an object type then m-files will be written to access them including polaraxes.m, polarplot.m, rticks.m, rticklabels.m, thetaticks, thetaticklabels.m, rlim.m, thetalim.m. relates to {{bug|35565}}, {{bug|49804}}, {{bug|52643}}. | ||
* '''Minimum requirements''' | * '''Minimum requirements''' |