https://wiki.octave.org/wiki/api.php?action=feedcontributions&user=131.175.161.12&feedformat=atomOctave - User contributions [en]2023-01-31T19:30:45ZUser contributionsMediaWiki 1.35.6https://wiki.octave.org/wiki/index.php?title=Summer_of_Code_-_Getting_Started&diff=8266Summer of Code - Getting Started2016-03-07T17:24:28Z<p>131.175.161.12: /* Matlab Compatible DAE solver */</p>
<hr />
<div>The following is distilled from the [[Projects]] page for the benefit of potential [https://www.google-melange.com/gsoc/homepage/google/gsoc2015 Google] and [http://sophia.estec.esa.int/socis2015 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 />
= Steps Toward a Successful Application =<br />
<br />
If you like any of the projects described below, these are the steps you need to follow to apply:<br />
<br />
* '''Help Us Get To Know You'''<br><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, 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 />
* '''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 e-mail 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 ==<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 <tt>configure && make && make install</tt> 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.''' You will be able to find instructions how to it on this wiki, and the manual. Linux is arguably the easiest system to work on.<br />
:* [[Building_for_Linux_systems]]<br />
:* [[Building]]<br />
:* [https://www.gnu.org/software/octave/doc/interpreter/Building-the-Development-Sources.html Octave Manual on Building the Development Sources]<br />
:* [https://www.gnu.org/software/octave/doc/interpreter/Installation.html Octave Manual on Installing Octave]<br />
* '''The Version Control System'''<br />
: We use [http://mercurial.selenic.com/ 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 [https://www.gnu.org/software/octave/doc/interpreter/Contributing-Guidelines.html contribution] [http://hg.savannah.gnu.org/hgweb/octave/file/tip/etc/HACKING 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 />
: [http://octave.sf.net 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.<br />
<br />
{{Note|these are suggested projects but you are welcome to propose your own projects provided you find an Octave mentor}}<br />
<br />
== Numerical ==<br />
<br />
These projects involve implementing certain mathematical functions in Octave.<br />
<br />
=== ode15s : Matlab Compatible DAE solver ===<br />
<br />
The goal is to implement a Matlab compatible adaptive BDF solver for Differential Algebraic Equations (DAEs).<br />
The interface would need to be compatible with ode15s while for the backend the <br />
[https://computation.llnl.gov/casc/sundials/main.html SUNDIALS] library would be used, which has both a C and a MEX interface.<br />
This function should eventually be included in Octave core together with the other [http://hg.savannah.gnu.org/hgweb/octave/file/tip/scripts/ode/ ODE solvers] that will be released with version 4.2, but could be intially developed as an addition to the [https://sourceforge.net/p/octave/odepkg/ci/default/tree/ odepkg] package.<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 />
: 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 />
: Jordi Gutiérrez Hermoso<br />
<br />
=== Generalised eigenvalue problem ===<br />
<br />
[http://www.mathworks.com/help/techdoc/ref/eig.html Certain calling forms] of the <tt>eig</tt> function are currently missing, including preliminary balancing; computing left eigenvectors as a third output; and choosing among generalized eigenvalue algorithms. See also [http://octave.1599824.n4.nabble.com/General-eigenvalue-problem-proposal-td4651990.html this discussion]. <br />
<br />
* '''Required skills'''<br />
: C++; familiarity with numerical linear algebra and LAPACK.<br />
* '''Difficulty'''<br />
: Medium.<br />
* '''Potential mentor'''<br />
: Nir Krakauer<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 have been [http://wiki.octave.org/TISEAN_package partially re-implemented] as libre software. The objective is to integrate TISEAN as an octave package as it was done for the Control package.<br />
[[TISEAN_package | Lot has been completed]] but [[TISEAN_package:Procedure | there is still work left to do]].<br />
<br />
There 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]]<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. Currently, communication between Octave and Python is handled with a pipe (see "help popen2") and parsing text. However, this is fragile when things go wrong: for example, catching exceptions from Python is a bit ad hoc.<br />
<br />
The main aim of this proposed project is to implement (or even better co-opt an existing) C++ oct-file interface that interacts with Python as a library, and e.g., deals gracefully with exceptions. This could either supplement the existing IPC or replace it altogether.<br />
<br />
* '''Required skills'''<br />
: m-file scripting, C (for Python internals), C++ (for Octave internals), and Python<br />
* '''Difficulty'''<br />
: easy/medium<br />
* '''Mentor'''<br />
: Colin B. Macdonald<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 [http://octave.sourceforge.net/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 />
* Make the package support N-dimensional arrays, this requires less knowledge of interval arithmetic but can be a rather exhaustive job since it affects most function files in the package<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'''<br />
: [[User:oheim|Oliver Heimlich]]<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). Their descriptions 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<br />
and a synchronization of the codes.<br />
<br />
In Matlab, some additional methods are available: minres and symmlq (symmetric matrices), tfqmr and bicgstabl (generale 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 />
: Not yet listed.<br />
* '''Difficulty'''<br />
: Not yet listed.<br />
* '''Mentor'''<br />
: Marco Caliari, Carlo de Falco<br />
<br />
== Infrastructure ==<br />
<br />
=== Octave Package management ===<br />
<br />
Octave management of installed packages is performed by a single function, {{codeline|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.<br />
<br />
The planned improvements are:<br />
<br />
* support for multiple Octave installs<br />
* support for multiple version packages<br />
* support for system-wide and user installed packages<br />
* automatic handling of dependencies<br />
* more flexibility on dependencies, e.g., dependent on specific Octave build options or being dependent in one of multiple packages<br />
* management of tests and demos in C++ sources of packages<br />
* think ahead for multiple <br />
* easily load or check specific package versions<br />
<br />
The current {{codeline|pkg}} also performs some functions which probably should not. Instead a package for developers should be created with such tools.<br />
<br />
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.<br />
<br />
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 {{codeline|pkg}} would think all this things now, or allow their implementation at a later time. 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 />
: Easy to Medium.<br />
* '''Mentor'''<br />
: Carnë Draug<br />
<br />
=== Command line suggestion feature ===<br />
<br />
Currently Octave has no mechanism for suggesting corrections to typographic errors on the command line. An autocomplete/suggestion function is provided (using the double-TAB shortcut), but recent discussions have indicated a desire for a more proactive measure to catch user error. Potential applicants are referred to bug {{bug|46881}} regarding the usage of grey vs. gray. <br />
<br />
Suggested improvements are:<br />
* provide one or more suggested corrections to the user when a command line entry produces an error.<br />
* recognition and suggested correction for apparent syntax errors<br />
* function suggestion(s) when a 'close' match is found (close remains to be defined)<br />
* multiple suggestions if more than one option seems likely, along with a user-friendly method of selecting the appropriate choice.<br />
* user selectable option to disable and/or customize the suggestion behavior<br />
* correct operation, or graceful degradation, whether Octave is run in GUI or command-line mode. <br />
<br />
As mentioned in the bug {{bug|46881}} discussion, this project has little-to-no relation to m-code compatibility. As such, emulation of the behavior of other software is not required, nor even necessarily desired. Octave is free to implement as simple or complex a solution to this feature request as is necessary to provide the best experience to the user. There may be tools, features, or code from other license-compatible projects that can be of use here, and the applicant would be encouraged to identify and leverage such resources as appropriate. <br />
<br />
* '''Minimum requirements'''<br />
: TBD<br />
* '''Difficulty'''<br />
: Easy to Medium.<br />
* '''Mentor'''<br />
: Undetermined<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 [http://wiki.octave.org/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 />
<br />
== Missing Core Matlab functions ==<br />
<br />
=== Implement boolean operations on polygons ===<br />
<br />
The goal is to implement a Matlab-compatible set of boolean operations and supporting function for acting on polygons. These include the standard set of potential operations such as union/OR, intersection/AND, difference/subtraction, and exclusiveor/XOR. There are a variety of existing polygon libraries that implement much of the functionality and thus this would be incorporating the library into GNU Octave. The libraries with acceptable licenses are [http://www.angusj.com/delphi/clipper.php ClipperLib], [http://www.boost.org/doc/libs/1_60_0/libs/polygon/doc/index.htm Boost::Polygon], [https://github.com/boostorg/geometry Boost::Geometry], or [http://boolean.klaasholwerda.nl/bool.html kbool]. This would include implementing the following functions: polybool, ispolycw, poly2ccw, poly2cw, poly2fv, polyjoin, and polysplit. A partial implementation with ClipperLib and GPC can be found [https://sites.google.com/site/ulfgri/numerical/polybool here].<br />
<br />
* '''Required skills'''<br />
: Knowledge of C++; C; familiarity with boolean logic; polygons, windings, and geometry<br />
* '''Difficulty'''<br />
: Easy to Medium.<br />
* '''Potential mentor'''<br />
: John Swensen<br />
<br />
<br />
<br />
<noinclude><br />
[[Category:Summer of Code]]<br />
[[Category:Project Ideas]]<br />
</noinclude></div>131.175.161.12https://wiki.octave.org/wiki/index.php?title=Octave_for_macOS&diff=5067Octave for macOS2014-09-18T08:34:06Z<p>131.175.161.12: /* Binary installer for OSX 10.9.1 */</p>
<hr />
<div>GNU Octave is primarily developed on GNU/Linux and other POSIX conformant systems. <br />
GNU Octave for Mac OS X is readily available using [http://en.wikipedia.org/wiki/Package_management_system package managers] such as [http://www.finkproject.org/ Fink], [http://www.macports.org/ MacPorts], and [http://mxcl.github.com/homebrew/ Homebrew].<br />
<br />
About version numbers (as of January 2014):<br />
<br />
*The 3.8.x are current releases.<br />
*The 3.6.x are previous releases.<br />
*The 3.4.x are very old releases.<br />
<br />
==Binary installer for OSX 10.9.1==<br />
<br />
A [http://sourceforge.net/projects/octave/files/Octave%20MacOSX%20Binary/2013-12-30%20binary%20installer%20of%20Octave%203.8.0%20for%20OSX%2010.9.1%20%28beta%29/ binary installer] for Mavericks can be found on Octave Forge.<br />
<br />
This installer will install all binaries for GNU Octave 3.8.0 itself and its dependencies under <br />
<br />
/usr/local/octave/3.8.0 <br />
<br />
And will create two entries in the Applications folder <br />
<br />
/Applications/Octave-cli.app <br />
/Applications/Octave-gui.app <br />
<br />
Which will start Octave in CLI and GUI mode respectively, these are just small wrappers containing a startup script and an icon to allow launching Octave from the Finder. <br />
<br />
If you wish to uninstall GNU Octave 3.8.0 and all other software installed by this installer you can simply move the three folders listed above to the Trash. Notice that you will need to authenticate with an administrator password to be allowed to do so.<br />
<br />
You may need to override Gatekeeper to allow installation. You may find instructions about how to do this on [http://support.apple.com/kb/ht5290 this page] in the section labeled "How to open an app from a unidentified developer and exempt it from Gatekeeper". <br />
<br />
In short: <br />
<br />
* In Finder, Control-click or right click the icon of the app. <br />
* Select Open from the top of contextual menu that appears. <br />
* Click Open in the dialog box. If prompted, enter an administrator name and password. <br />
<br />
This installer is known to work on OSX 10.9.1, you may try, at your own risk, to use it for installing on other system versions but it is not guaranteed to work.<br />
<br />
==Manual Installation from Source==<br />
<br />
The page [[Octave for Mac]] provides minimalistic instructions for building Octave from source on Mac OS X. Additional [http://www.gnu.org/software/octave/support.html support] for those who need assistance in building Octave is available.<br />
<br />
==Package Managers==<br />
<br />
A package manager is a software tool to automate the process of installing, upgrading, configuring, and removing software packages for a computer's operating system in a consistent manner. It typically maintains a database of software dependencies and version information to prevent software mismatches and missing prerequisites.<br />
Packages are distributions of software, applications and data. Packages also contain metadata, such as the software's name, description of its purpose, version number, vendor, checksums, and a list of dependencies necessary for the software to run properly. Upon installation, metadata is stored in a local package database.<br />
Operating systems based on Linux and other Unix-like systems typically consist of hundreds or even thousands of distinct software packages; in the former case, a package management system is a convenience, in the latter case it becomes essential.<br />
<br />
There are three reputable package managers available for Mac OS X. GNU Octave for Mac OS X is readily available using [http://en.wikipedia.org/wiki/Package_management_system package managers] such as [http://www.finkproject.org/ Fink], [http://www.macports.org/ MacPorts], and [http://brew.sh/ Homebrew].<br />
<br />
The most recent version of Fink's Octave package, MacPorts' Octave port, and Homebrew's Octave formula are generally not the same. Please check the web sites for these package managers to determine if the version of Octave you desire is available.<br />
<br />
===XCode Dependency===<br />
<br />
Each package manager requires that XCode be installed. In part this is to provide an initial set of development tools. It *may* be possible to substitute the [https://github.com/kennethreitz/osx-gcc-installer Mac OS X gcc Installer] by Kenneth Reitz, but this alternative has not yet been tested. If any curious/industrious users experiment with using Kenneth's solution over Apple's XCode, please let Octave's developers know of the results. Or, if you prefer, just update the itemized list below. It is recommended that users with XCode already installed avoid installing Kenneth's solution, as it may break your existing XCode installation.<br />
* Fink: The Mac OS X gcc Installer has not been tested.<br />
* MacPorts: The Mac OS X gcc Installer has not been tested.<br />
* Homebrew: The Mac OS X gcc Installer has not been tested.<br />
<br />
===Fink===<br />
<br />
[http://www.finkproject.org/ The Fink project] is an effort to port and package open-source Unix programs to Mac OS X. Fink uses [http://en.wikipedia.org/wiki/Dpkg dpkg] and [http://en.wikipedia.org/wiki/Advanced_Packaging_Tool APT] ([http://en.wikipedia.org/wiki/Debian Debian's] package management system), as well as its own frontend program, fink (which is implemented as a set of [http://en.wikipedia.org/wiki/Perl_module Perl modules]).<br />
<br />
====Simple Installation Instructions====<br />
<br />
*Install XCode via the Mac App Store.<br />
** Once installed, install the Command Line Tools from XCode's Apple Menu > Preferences > Downloads.<br />
*Follow [http://www.finkproject.org/download/srcdist.php Fink's installation instructions]. For those who prefer it, there is a GUI available for Fink, [http://finkcommander.sourceforge.net Fink Commander].<br />
*Fink has excellent support for Octave and includes recent as well as dated versions. A list of what Fink has available for Octave is [http://pdb.finkproject.org/pdb/browse.php?summary=octave here]. To install the latest Octave, type {{Codeline|<nowiki>sudo fink install octave</nowiki>}} at the Terminal's command line. For those running the 64 bit version of Fink, it is recommended that {{Codeline|octave-atlas}} be installed instead as there are some bugs/features with Apple's vecLib for the X86_64 architecture. Octave has many dependencies which will be downloaded and installed prior to Octave. The entire installation process can take a few hours.<br />
* Fink should also be used to install [[http://octave.sourceforge.net/packages.php packages] for Octave. For example, the control systems package for Lion may be installed by typing {{Codeline|fink install control-atlas-oct362}} at a terminals command line.<br />
<br />
For the {{Codeline|doc()}} function to be supported by Octave, either the unversioned {{Codeline|octave}}, {{Codeline|octave-atlas}}, or {{Codeline|octave-ref}} package must be installed. Essentially, those features used at run-time which don't have a version somewhere in the file path are included in these packages.<br />
<br />
===MacPorts===<br />
<br />
[http://www.macports.org/ MacPorts], formerly called DarwinPorts, is a package management system that simplifies the installation of software on the Mac OS X and Darwin operating systems. It is a free/open source software project to simplify installation of other free/open source software. Similar in aim and function to Fink and the BSDs' ports collections, DarwinPorts was started in 2002 as part of the OpenDarwin project, with the involvement of a number of Apple Inc. employees including Landon Fuller, Kevin Van Vechten, and Jordan Hubbard.<br />
<br />
====Simple Installation Instructions====<br />
<br />
*Install XCode via the Mac App Store.<br />
*Follow [http://www.macports.org/install.php MacPorts' installation instructions].<br />
*MacPorts has good support for Octave. A list of what MacPorts has available for Octave is [http://www.macports.org/ports.php?by=name&substr=octave here]. To install the most recent version of Octave, type {{Codeline|sudo port install octave +atlas+docs}} at the Terminal's command line. Octave has many dependencies which will be downloaded and installed prior to Octave. The entire installation process can take a few hours.<br />
*Note that {{Codeline|octave-devel}} has been replaced by {{Codeline|octave}}, see [https://trac.macports.org/changeset/114034 MacPorts Revision 114034].<br />
*The variant installed may be important to the user's experience. The available variants for {{Codeline|octave}} are displayed by typing {{Codeline|port variants octave-devel}}. It is recommended that the user include {{Codeline|+atlas+docs}}. This will avoid bugs present in Apple's vecLib and enable support for Octave's {{Codeline|doc()}} function.<br />
<br />
===Homebrew===<br />
<br />
Homebrew is a package management system that simplifies the installation of software on Mac OS X. It is a free/open source software project to simplify installation of other free/open source software. It is similar in aim and function to MacPorts and Fink. It was written by Max Howell and has gained popularity in the Ruby on Rails community and earned praise for its extensibility.<br />
<br />
====Simple Installation Instructions====<br />
<br />
First, install Homebrew:<br />
*Install XCode via the Mac App Store.<br />
** For Mac OS 10.9 (Mavericks) install the command line tools by {{Codeline|xcode-select --install}}.<br />
** For earlier versions of Mac OS, install the command line tools from XCode's Apple Menu > Preferences > Downloads.<br />
*Follow [https://github.com/mxcl/homebrew/wiki/installation Homebrew's installation instructions].<br />
* If running Mountain Lion (Mac OS 10.8) or later, install [https://xquartz.macosforge.org/landing/ XQuartz].<br />
* Import the scientific computing packages, including Octave:<br />
<pre>brew tap homebrew/science</pre><br />
<br />
To install Octave, update to the latest package definitions, install {{Codeline|gfortran}}, and then Octave:<br />
<pre>brew update && brew upgrade<br />
brew install gcc<br />
brew install octave --without-docs</pre><br />
<br />
Note: If brew complains about not having a formula for octave, the following command should fix it:<br />
<pre>brew tap --repair</pre><br />
<br />
The command below upgrades Octave and its dependencies to the latest Homebrew-supported versions:<br />
brew update && brew upgrade<br />
<br />
Octave has many dependencies which will be downloaded and installed prior to Octave. The entire installation process can take a few hours.<br />
Note: On Snow Leopard, Octave requires a X server. If you install without, Homebrew will guide you to the XQuartz project (https://xquartz.macosforge.org) where you can download this.<br />
<br />
You might find that you need to add:<br />
<br />
<pre>setenv ("GNUTERM", "X11")</pre><br />
<br />
to your octaverc file, normally located at {{Codeline|/usr/local/share/octave/site/m/startup}}.<br />
<br />
In case of trouble, see the [https://github.com/mxcl/homebrew/wiki/troubleshooting Homebrew Troubleshooting Guide], which assists in diagnosing problems and craft useful bug reports. The [http://jatinganhotra.com/blog/2014/01/21/installing-octave-on-os-x-10-dot-9-mavericks/ post by Jatin Ganhotra] may also be helpful. Bugs may be reported at [https://github.com/Homebrew/homebrew-science/issues?state=open Homebrew-science's issue tracker].<br />
<br />
==Create a launcher app with AppleScript==<br />
<br />
* Open the "AppleScript Editor" application<br />
* write the following text in the editor window:<br />
<br />
<code><br />
<br />
tell application "Terminal"<br />
do script "/path/to/octave; exit"<br />
end tell<br />
<br />
</code><br />
<br />
or if Octave is in your default path:<br />
<br />
<code><br />
tell application "Terminal"<br />
do script "`which octave`; exit"<br />
end tell<br />
</code><br />
<br />
* Select "Save as ..." from the "File" menu<br />
* In the menu that appears, select "Application" from the "File format" menu, then navigate to the "Applications" folder and save your script there as "Octave.app"<br />
<br />
To change the application icon <br />
<br />
* Open [http://wiki.octave.org/File:Icon.png this link] in a web browser, right-click and select "copy image".<br />
* Select "Octave.app" in the Finder, then press command-i to bring up the file info dialog.<br />
* In the file info dialog, select the icon (in the top left) and press command-v to paste the Octave icon over it.<br />
<br />
==Installing a Mac OS X Bundle==<br />
<br />
A reliable App bundle for Octave on Mac OS X is not presently available. The developers would like to be able to provide an App bundle, but need volunteers to support the effort. An approach for producing an App Bundle using [http://www.macports.org MacPorts] is being documented [[Create_a_MacOS_X_App_Bundle_Using_MacPorts|here]]. This approach shows promise, but a few problems must be resolved before a bundle will become available.<br />
<br />
Octave and many other software packages may be installed and updated using one of the three package managers available for Mac OS X. To install using a package manager, see the section on [[Octave_for_MacOS_X#Package_Managers|Package Managers]].<br />
<br />
{{Warning|Octave-Forge does have [https://sourceforge.net/projects/octave/files/Octave%20MacOSX%20Binary/ App bundles] for old Octave, versions and have problems running on Mac OS 10.6 and above. The latest App bundle does not provide full support for the printing, or the documentation features of Octave. Other features may be missing as well. For individuals who'd like to use it anyway please carefully follow the instructions for [[Installing Mac OS X Bundle]].}}<br />
<br />
[[Category:Installation]]<br />
[[Category:Macintosh platform]]</div>131.175.161.12https://wiki.octave.org/wiki/index.php?title=Summer_of_Code_-_Getting_Started&diff=2864Summer of Code - Getting Started2013-07-04T16:49:43Z<p>131.175.161.12: /* Matlab-compatible ODE solvers in core-Octave */</p>
<hr />
<div>The following is distilled from the [[Projects]] page for the benefit of potential [http://code.google.com/soc/Google Summer] [http://sophia.estec.esa.int/socis2012/?q=node/13 of Code] 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 />
= Your steps to apply =<br />
<br />
If you like any of the projects described below these are the steps you need to follow to apply:<br />
<br />
# Find out that you would like to work together with us this summer!<br />
# Tell us about that and work on your project proposal. Do this together with us! Best place is your wiki user page, see below.<br />
# Fill out our '''''public''''' application template. 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. 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) '''.<br/> Only the organization admin and the possible mentors will see this data.<br/>You can still edit it after submitting until the deadline!<br />
# Hang out in our IRC channel, ask questions, submit patches, show us that you are motivated and well-prepared. There sadly will be more applicants than we can mentor with high quality, so do ask for feedback on your public application to increase your odds!<br />
# Start implementing your very own proposal! Code the summer away ;-)<br />
<noinclude>[[Category:Summer of Code 2013]]</noinclude><br />
<br />
<br />
= General Guidelines =<br />
<br />
Octave is mostly written in (sadly, mostly undocumented) C++ and its own scripting language (m-scripts), which includes (or should include) most of the Matlab language as a subset. We generally prefer a different Octave house style to the usual Matlab style for m-scripts, but it's primarily a superficial stylistic difference. Additionally, 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/or Octave or Matlab's scripting languages, you should probably be familiar or learn about Octave's infrastructure:<br />
<br />
* [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. If you've ever done a <tt>configure && make && make install</tt> series of commands, you have already used the GNU build system.<br />
* [http://mercurial.selenic.com/ Mercurial] (abbreviated hg) 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 />
* You should also read the same [http://www.gnu.org/software/octave/doc/interpreter/Contributing-Guidelines.html#Contributing-Guidelines contributing] [http://hg.savannah.gnu.org/hgweb/octave/file/tip/etc/HACKING guidelines] we have for everyone.<br />
* We primarily use [https://mailman.cae.wisc.edu/listinfo/octave-maintainers mailing lists] for communication. You should follow basic mailing list etiquette. For us, this mostly means "do not [http://en.wikipedia.org/wiki/Top_posting#Top-posting top post]".<br />
* We also have [http://webchat.freenode.net?channels=octave the #octave IRC channel in Freenode]. The atmosphere is more relaxed, and we may talk about things that are not at all related to Octave.<br />
* [http://octave.sf.net Octave-Forge] is a project closely related to Octave where packages reside. They are somewhat analogous to Matlab's toolboxes.<br />
* In addition, you probably should know '''some''' mathematics, engineering, or experimental science or something of the sort. If you've used Matlab before, you probably have already been exposed to the kinds of problems that Octave is used for.<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.<br />
<br />
== Numerical ==<br />
<br />
These projects involve implementing certain mathematical functions in Octave.<br />
<br />
'''Required skills''': You should understand quite a bit of mathematics. Words like "eigenvalue", "analytic", and "Taylor series" shouldn't scare you at all. There is probably little C++ experience required, and probably many of these problems can be solved with m-scripts.<br />
<br />
'''Difficulty''': Mid-to-hard depending how much mathematics you know and how well you can read numerical analysis journal articles.<br />
<br />
'''Potential mentor''': Carlo de Falco, Nir Krakauer, Fotios Kasolis, Luis Gustavo Lira<br />
<br />
=== Incomplete sparse factorizations ichol, ilu ===<br />
<br />
Implement incomplete Cholesky and LU factorization for sparse matrices. These functions are [http://www.mathworks.it/it/help/matlab/matrix-decomposition.html available in Matlab] as cholinc/ichol and luinc/ilu. Incomplete factorizations are useful as preconditioners<br />
for iterative solvers such as [http://hg.savannah.gnu.org/hgweb/octave/file/119ce9f5e1a3/scripts/sparse/gmres.m gmres] and <br />
[http://hg.savannah.gnu.org/hgweb/octave/file/119ce9f5e1a3/scripts/sparse/gmres.m gmres] or [http://hg.savannah.gnu.org/hgweb/octave/file/119ce9f5e1a3/scripts/sparse/pcg.m pcg].<br />
The classic book [http://netlib.org/linalg/html_templates/node81.html Templates for the Solution of Linear Systems: Building Blocks for Iterative Methods] has a [http://netlib.org/linalg/html_templates/node100.html#SECTION00933000000000000000 chapter] describing the <br />
ILU algorithm in detail, though the algorithm described there should be adapted to Octave's internal Sparse Matrix file format which is [http://netlib.org/linalg/html_templates/node92.html#SECTION00931200000000000000 CCS] rather than [http://netlib.org/linalg/html_templates/node91.html#SECTION00931100000000000000 CRS]. The implementation of ILU in Octave has been recently discussed in the maintainers list and initial implementations were posted in this [http://octave.1599824.n4.nabble.com/Ilu-function-tp4648677.html thread]. In another [http://octave.1599824.n4.nabble.com/Re-Octave-maintainers-Digest-Vol-80-Issue-15-tp4646303.html thread] it was suggested to implement the ILU by interfacing Octave to [http://www-users.cs.umn.edu/~saad/software/ITSOL/ ITSOL]. Compared to other <br />
projects in this section this one might require more knowledge of C++.<br />
<br />
=== General purpose Finite Element library ===<br />
<br />
Octave-Forge already has a set of packages for discretizing Partial Differential operators by Finite Elements and/or Finite Volumes,<br />
namely the [[bim package]] which relies on the [http://octave.sf.net/msh msh package] (which is in turn based on [http://geuz.org/gmsh/ gmsh]) for creating and managing 2D triangular and 3D tetrahedral meshes and on the [http://octave.sf.net/fpl fpl package] for visualizing 2D results within Octave or exporting 2D or 3D results in a format compatible with [http://www.paraview.org Paraview] or [https://wci.llnl.gov/codes/visit/ VisIT]. These packages, though, offer only a limited choice of spatial discretization methods which are based on low degree polynomials and therefore have a low order of accuracy even for problems with extremely smooth solutions.<br />
The [http://geopdes.sf.net GeoPDEs] project, on the other hand, offers a complete suite of functions for discretizing a wide range of<br />
differential operators related to important physical problems and uses basis functions of arbitrary polynomial degree that allow the construction of methods of high accuracy. These latter, though, are based on the IsoGeometric Analysis Method which, although very powerful and often better performing, is less widely known and adopted than the Finite Elements Method. The implementation of a general purpose library of Finite Elements seems therefore a valuable addition to Octave-Forge. Two possible interesting choices for implementing this package exist, the first consists of implementing the most common Finite Element spaces in the [http://geopdes.sf.net GeoPDEs] framework, which is possible as IsoGeometric Analysis can be viewed as a superset of the Finite Element Method, the other is to construct Octave language bindings for the free software library [http://fenicsproject.org/documentation/ FEniCS] based on the existing C++ or Python interfaces.<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.<br />
<br />
=== Generalised eigenvalue problem ===<br />
<br />
[http://www.mathworks.com/help/techdoc/ref/eig.html Certain calling forms] of the <tt>eig</tt> function are missing. The problem is to understand what those missing forms are and implement them.<br />
<br />
=== Various sparse matrix improvements ===<br />
<br />
The implementation of sparse matrices in Octave needs several improvements. Any of [[Projects#Sparse Matrices|these]] would be good. The paper by [http://arxiv.org/abs/cs.MS/0604006 Bateman & Adler] is good reading for understanding the sparse matrix implementation.<br />
<br />
=== Implement solver for initial-boundary value problems for parabolic-elliptic PDEs in 1D ===<br />
<br />
The project will deliver a solver for initial-boundary value problems for parabolic-elliptic PDEs in 1D similar to Matlab's function <tt>pdepe</tt>. A good starting point is the [http://en.wikipedia.org/wiki/Method_of_lines method of lines] for which you can find more details [http://en.wikibooks.org/wiki/Partial_Differential_Equations/Method_of_Lines here] and [http://www.scholarpedia.org/article/Method_of_lines here], whereas an example implementation can be found [http://www.scholarpedia.org/article/Method_of_Lines/Example_Implementation here]. In addition, [http://www.pdecomp.net/ this page] provides some useful material.<br />
<br />
=== Implement solver for 1D nonlinear boundary value problems ===<br />
<br />
The project will complete the implementation of the bvp4c solver that is already available in an initial version in the odepkg package<br />
by adding a proper error estimator and will implement a matlab-compatible version of the bvp5c solver.<br />
Details on the methods to be implemented can be found in [http://dx.doi.org/10.1145/502800.502801 this paper] on bvp4c and [http://www.jnaiam.net/new/uploads/files/014dde86eef73328e7ab674d1a32aa9c.pdf this paper] on bvp5c. Further details are available in [http://books.google.it/books/about/Nonlinear_two_point_boundary_value_probl.html?id=s_pQAAAAMAAJ&redir_esc=y this book].<br />
<br />
=== Geometric integrators for Hamiltonian Systems ===<br />
<br />
[http://openlibrary.org/books/OL9056139M/Geometric_Numerical_Integration | Geometric (AKA Symplectic) integrators] are useful for <br />
multi-dimensional classical mechanics problems and for molecular dynamics simulations.<br />
The odepkg package has a number of solvers for ODE, DAE and DDE problems but none of them is currently<br />
specifically suited for second order problems in general and Hamiltonian systems in particular.<br />
Therefore a new package for geometric integrators would be a useful contribution.<br />
This could be created as new package or added as a set of new functions for odepkg.<br />
The function interface should be consistent throughout the package and should be modeled to follow <br />
that of other functions in odepkg (or that of DASPK and LSODE) but will need specific extensions to accommodate for specific options that only make sense for this specific class of solvers.<br />
An initial list of methods to be implemented includes (but is not limited to)<br />
* Symplectic Euler methods, see [http://en.wikipedia.org/wiki/Semi-implicit_Euler_method here] and [http://openlibrary.org/books/OL9056139M/Geometric_Numerical_Integration | here]<br />
* Störmer-Verlet method, see [http://en.wikipedia.org/wiki/Verlet_integration here] and [http://openlibrary.org/books/OL9056139M/Geometric_Numerical_Integration | here]<br />
* Velocity Verlet method, see [http://en.wikipedia.org/wiki/Verlet_integration here] and [http://openlibrary.org/books/OL9056139M/Geometric_Numerical_Integration | here]<br />
* Symplectic partitioned Runge-Kutta methods, see [http://reference.wolfram.com/mathematica/tutorial/NDSolveSPRK.html here] or [http://dx.doi.org/10.1137/0733019 here]<br />
* Spectral Variational Integrator methods, see [http://www3.nd.edu/~izaguirr/papers/acta_numerica.pdf here] or [http://www.math.ucsd.edu/~mleok/pdf/HaLe2012_SVI.pdf here]<br />
<br />
For this latter there is an existing code which is already working but needs to be improved, posted on the patch tracker.<br />
Furthermore, methods to implement solutions of problems with rigid constraints should be implemented, e.g.<br />
* SHAKE, see [http://en.wikipedia.org/wiki/Constraint_algorithm here] or [http://dx.doi.org/10.1016/0021-9991(77)90098-5 here]<br />
* RATTLE, see [http://dx.doi.org/10.1016/0021-9991(83)90014-1 here] or [http://dx.doi.org/10.1002/jcc.540161003 here]<br />
<br />
'''Potential mentor:''' Mattia Penati, Edie Miglio, Carlo de Falco<br />
<br />
=== Matlab-compatible ODE solvers in core-Octave ===<br />
<br />
* Adapt "odeset" and "odeget" from the odepkg package so that the list of supported options is more Matlab-compatible, in the sense that all option names that are supported by Matlab should be available. On the other hand, Matlab returns an error if an option which is not in the list of known options is passed to "odeset", but we would rather make this a warning in order to allow for special extensions, for example for symplectic integrators.<br />
* Adapt the interface of "ode45" in odepkg to be completely Matlab compatible, fix its code and documentation style and move it to Octave-core.<br />
* Build Matlab compatible versions of "ode15s" and "ode15i". jwe has prototype implementations [[File:ode-wrappers.tar.gz|here]] of these built as wrappers to "dassl" and "daspk". An initial approach could be to just improve these wrappers, but eventually it would be better to have wrappers for "IDA" from the sundials library.<br />
* Implement Matlab compatible versions of "deval".<br />
<br />
'''Potential mentor:''' Sebastian Schöps, Carlo de Falco<br />
<br />
== GUI ==<br />
<br />
Octave is currently working on a new native GUI. It is written in Qt, but it is still not ready for production. There are various ways in which it could be improved.<br />
<br />
'''Required skills''': C++ and Qt. Whatever tools you want to use to write Qt code are fine, but Qt Creator is a popular choice nowadays.<br />
<br />
'''Difficulty''': Mostly medium, depending if you've had Qt or GUI development experience before.<br />
<br />
'''Potential mentor''': Jordi Gutiérrez Hermoso, Michael Goffioul, Torsten<br />
<br />
=== Finish the Octave GUI ===<br />
<br />
The GUI is currently on its own branch in hg. It is not stable enough and its design is still in flux. It is in a very alpha stage and needs to be turned into a real usable product. At the moment, it consists of the basic building blocks (terminal window, editor, variable browser, history, file browser) that are put together into a main interface. The GUI uses the Qt library. Among the things to improve are:<br />
* improve integration with octave: variable browser/editor, debugger, profiler...<br />
* define and implement an option/preferences dialog<br />
* improve additional components like the documentation browser<br />
<br />
=== Implement a Qt widget for manipulating plots ===<br />
<br />
Octave has had for some time a native OpenGL plotter. The plotter requires some user interaction for manipulating the plots, and it's been using fltk for quite some time. We want to replace this with Qt, so it fits better with the overall GUI look-and-feel and is easier to extend in the future.<br />
<br />
[https://github.com/goffioul/QtHandles QtHandles] is a current work in progress integrating the octave OpenGL renderer plus good support for GUI elements (uicontrol, uimenu, uitoolbar...). This project may initially consists of integrating the existing QtHandles code base into Octave. Then if time permits, further improvements can be made to QtHandles.<br />
<br />
=== Create a better (G)UI for the profiler ===<br />
<br />
During GSoC 2011, Daniel Kraft successfully implemented a profiler for Octave. It needs a better interface and a way to generate reports. This may be done with Qt, but not necessarily, and HTML reports might also be good.<br />
<br />
=== Create a graphical design tool for tuning closed loop control system (control pkg) ===<br />
<br />
When tuning a SISO feedback system it is very helpful to be able to grab a pole or a zero and move them by dragging them with the mouse. As they are moving the software must update all the plotted lines. There should be the ability to display various graphs rlocuse, bode, step, impulse etc. and have them all change dynamically as the mouse is moving. The parameters of the compensator must be displayed and updated.<br />
Potential mentor: Doug Stewart<br />
<br />
== Graphics ==<br />
<br />
Octave has a new native OpenGL plotter (currently via [http://en.wikipedia.org/wiki/Fltk fltk], but we want to move away from that). There are several possible projects involved with it.<br />
<br />
'''Required skills''': C++ and OpenGL. General understanding of computer graphics.<br />
<br />
'''Difficulty''': Medium, depending on your previous understanding of the topic.<br />
<br />
'''Potential mentor''': Michael Goffioul<br />
<br />
=== Lighting ===<br />
<br />
Implement transparency and lighting in OpenGL backend(s). A basic implementation is available in [http://octave.svn.sourceforge.net/viewvc/octave/trunk/octave-forge/extra/jhandles/ JHandles]. This needs to be ported/re-implement/re-engineered/optimized in the C++ OpenGL renderer of Octave.<br />
<br />
=== Object selection in OpenGL renderer ===<br />
<br />
This project is about the implementation of a selection method of graphics elements within the OpenGL renderer [http://glprogramming.com/red/chapter13.html]<br />
<br />
=== Non-OpenGL renderer ===<br />
<br />
Besides the original gnuplot backend, Octave also contains an OpenGL-based renderer for advanced and more powerful 3D plots. However, OpenGL is not perfectly suited for 2D-only plots where other methods could result in better graphics. The purpose of this project is to implement an alternate graphics renderer for 2D only plots (although 3D is definitely not the focus, extending the new graphics renderer to support basic 3D features should also be taken into account). There is no particular toolkit/library that must be used, but natural candidates are:<br />
* [http://qt.nokia.com Qt]: the GUI is currently written in Qt and work is also in progress to provide a Qt/OpenGL based backend [https://github.com/goffioul/QtHandles]<br />
* [http://en.wikipedia.org/wiki/Cairo_%28software%29 Cairo]: this library is widely used and known to provides high-quality graphics with support for PS/PDF/SVG output.<br />
<br />
=== TeX/LaTeX markup ===<br />
<br />
Text objects in plots (like titles, labels, texts...) in the OpenGL renderer only support plain text mode without any formatting possibility. Support for TeX and/or LaTeX formatting needs to be added.<br />
<br />
* The TeX formatting support actually only consists of a very limited subset of the TeX language. This can be implemented directly in C++ into Octave by extending the existing text engine, avoiding to add a dependency on a full TeX system. Essentially, support for Greek letters, super/sub-scripts, and several mathematical symbols needs to be supported. For example,<br />
<br />
:<pre>\alpha \approx \beta_0 + \gamma^\chi</pre><br />
<br />
:Would be rendered as,<br />
<br />
:&alpha; &asymp; &beta;<sub>0</sub> + &gamma;<sup>&chi;</sup><br />
<br />
:This is analogous to how special characters may be included in a wiki using html.<br />
<br />
:<pre>&amp;alpha; &amp;asymp; &amp;beta;<sub>0</sub> + &amp;gamma;<sup>&amp;chi;</sup></pre><br />
<br />
:The text object's {{Codeline|extent}} for the rendered result needs to be calculated and the text placed the location specified by the text object's {{Codeline|position}} property. An itemized list of a text objects properties can be found [http://www.gnu.org/software/octave/doc/interpreter/Text-Properties.html here].<br />
<br />
* On the other hand, the LaTeX formatting support is expected to provide full LaTeX capabilities. This will require to use an external LaTeX system to produce text graphics in some format (to be specified) that is then integrated into Octave plots.<br />
<br />
:The matplotlib project [http://matplotlib.sourceforge.net/users/usetex.html has already done this in Python] and might be used as an example of how to do this in Octave. Mediawiki has also also done [http://en.wikipedia.org/wiki/Wikipedia:Texvc something similar].<br />
<br />
== Interpreter ==<br />
<br />
The interpreter is written in C++, undocumented. There are many possible projects associated with it.<br />
<br />
'''Required skills''': ''Very good'' C and C++ knowledge, possibly also understanding of [http://en.wikipedia.org/wiki/Gnu_bison GNU bison] and [http://en.wikipedia.org/wiki/Flex_lexical_analyser flex]. Understanding how compilers and interpreters are made plus being able to understand how to use a profiler and a debugger will probably be essential skills.<br />
<br />
'''Difficulty''': Mid hard to very hard. Some of the biggest problems will probably be the interpreter.<br />
<br />
'''Potential mentors''': John W. Eaton, Jordi Gutiérrez Hermoso, Max Brister.<br />
<br />
=== Improve JIT compiling ===<br />
<br />
Octave's interpreter is ''very'' slow on some loops. Last year, thanks to Max Brister's work, an initial implement of a just-in-time compiler (JITC) in [http://llvm.org LLVM] for GSoC 2012. This project consists in understanding Max's current implementation and extending it so that functions and exponents (e.g. 2^z) compile with the JITC. This requires knowledge of compilers, C++, LLVM, and the Octave or Matlab languages. A capable student who demonstrates the ability to acquire this knowledge quickly may also be considered. Max himself will mentor this project. [http://planet.octave.org/octconf2012/jit.pdf Here] is Max's OctConf 2012 presentation about his current implementation.<br />
<br />
=== Improve memory management ===<br />
<br />
From profiling the interpreter, it appears that a lot of time is spending allocating and deallocating memory. A better memory management algorithm might provide some improvement.<br />
<br />
=== Implement classdef classes ===<br />
<br />
Matlab has two kinds of classes: old style @classes and new style classdef. Octave has only fully implemented the old style. There is partial support for new classes in [http://hg.savannah.gnu.org/hgweb/octave/shortlog/classdef our classdef branch]. There is irregular work here, and classdef is [http://www.mathworks.com/help/matlab/matlab_oop/method-attributes.html a very] [http://www.mathworks.com/help/matlab/events-sending-and-responding-to-messages.html complicated] [http://www.mathworks.com/help/matlab/enumeration-classes.html thing] to fully implement. A successful project would be to implement enough of classdef for most basic usages. Familiarity with Matlab's current classdef support would be a huge plus. Michael Goffioul and jwe can mentor this.<br />
<br />
== Infrastructure ==<br />
<br />
There are several projects closely related to Octave but not exactly core Octave that could be worked on. They are mostly infrastructure around Octave, stuff that would help a lot.<br />
<br />
'''Required skills''': Various. See below.<br />
<br />
'''Difficulty''': Various. See below.<br />
<br />
'''Potential mentor''': Jordi Gutiérrez Hermoso, Carlo de Falco<br />
<br />
=== Finish the Agora website ===<br />
<br />
In 2009, the Mathworks decided to restrict the terms of use Matlab Central, a place dedicated to Matlab collaboration. The Mathworks forbade copyleft licenses and using the "free" code found in Matlab central on anything other than Mathworks products (e.g. forbidding from using it on Octave, even if the authors of the code wanted to allow this). Thus Octave users have no place to centrally, quickly, and conveniently share Octave code. See the [[FAQ#Why_can.27t_I_use_code_from_File_Exchange_in_Octave.3F_It.27s_released_under_a_BSD_license.21|FAQ]] for more details.<br />
<br />
In response to this, a website started to form, [http://agora.octave.org/ Agora Octave].<br />
<br />
This should be relatively easy webdev in Python using [http://en.wikipedia.org/wiki/Django_%28web_framework%29 Django].<br />
<br />
Things to be considered when working on this:<br />
<br />
* [http://octave-forge.blogspot.ie/2012/08/octconf2012-agora-and-pkg.html discussion of Agora during OctConf2012]<br />
* [http://scipy-central.org/ Scipy Central] - a website with the same objective as Agora for Scipy. Their [https://github.com/kgdunn/SciPyCentral/ code] is released under a BSD license. Might be useful to reuse some parts.<br />
<br />
Most of the basic functionality of Agora is already in, but there are many ways in which it could be improved, such as implementing comment threads, giving it an email interface, or a ReSTful API which could be used from Octave for package management.<br />
<br />
<br />
=== Improve binary packaging ===<br />
<br />
We would like to be able to easily generate binary packages for Windows and Mac OS X. Right now, it's difficult and tedious to do so. Any way to help us do this in a faster way would be appreciated. Required knowledge is understanding how building binaries in Windows and Mac OS X works. Our current approach to fixing this is to cross-compile from a GNU system using [http://mxe.cc/ MXE] or [http://lilypond.org/gub/ GUB].<br />
<br />
'''Skills Required''': Knowledge of GNU build systems, Makefiles, configure files, chasing library dependencies, how to use a compiler. If you choose to work on GUB, Python will be required. No m-scripting or C++ necessary, beyond understanding [http://david.rothlis.net/c/compilation_model/ the C++ compilation model].<br />
<br />
'''Difficulty''': Medium to easy. You need to understand how build systems work and how to fix packages when they don't build.<br />
<br />
'''Possible mentors''': John W. Eaton or Jordi Gutiérrez Hermoso<br />
<br />
=== Installation of packages ===<br />
We would like to enhance the management of Octave-forge packages from within Octave environment. Currently there is a working (but rather monolithic) function that is used to do the job. The work would be to improve the way Octave interacts with the package server. Since the functionality is already sketched by the current function, the most important skill is software design.<br />
<br />
'''Minimum requirements''': Ability to read and write Octave code. Minimal FTP/HTTP knowledge.<br />
<br />
'''Difficulty''': Easy<br />
<br />
== Octave-Forge packages ==<br />
<br />
=== Rewrite symbolic package ===<br />
Octave's current [http://octave.svn.sourceforge.net/viewvc/octave/trunk/octave-forge/main/symbolic/ symbolic] package for symbolic computation is outdated, fragile and limited in its capabilities. The new symbolic package should offer better Matlab compatibility, for example handling of symbolic matrices. Like the current symbolic package, the new package could use the proven [http://www.ginac.de/ GiNaC] library for symbolic computations.<br />
<br />
The work would be to integrate GiNaC by using Octave's objects and classes. This can be done in C++ in a way similar to Michele Martone's new [http://librsb.sourceforge.net/ sparsersb] package.<br />
<br />
This idea has not been selected by any SoC student yet, if you want to see it happen before next SoC<br />
you can offer a bounty [http://www.freedomsponsors.org/core/issue/289/gnu-octave-rewrite-the-symbolic-package here].<br />
<br />
'''Required skills''': C++. Ability to understand Octave and GiNaC API documentation.<br />
<br />
'''Difficulty''': medium.<br />
<br />
'''Potential mentor''': Lukas Reichlin<br />
<br />
=== Improvements to n-dimensional image processing ===<br />
<br />
The image package has partial functionality for n-dimensional images. These images do exist in practice for example in medical imaging where slices from scans are assembled to form anatomical 3d images, or even exposures taken over time on different wavelengths can result in 5d images. All of the base functions should be modified so that they can handle n-dimensional images, and corresponding Matlab functions such as <code>bwconncomp</code> or n-dimensional version of <code>bwdist</code> should be implemented. In addition,<br />
the core functions {{codeline|imwrite}} and {{codeline|imread}} need to be adjusted to deal with this type images (usually multipage TIFF).<br />
<br />
'''Required skills''': Mostly m-file scripting, perhaps some C++. Familiarity with common CS algorithms would be useful.<br />
<br />
'''Difficulty''': medium.<br />
<br />
'''Potential mentor''': Jordi Gutiérrez Hermoso<br />
<br />
=== Interface to Electronic Circuit Simulator ===<br />
<br />
[http://sourceforge.net/projects/qucs/ Qucs] is a C++ based circuit simulation package. This project aims to create an interface to the Qucs algorithms to allow the transient, i.e. time series, simulation of circuits in Octave within a larger ODE system simulation, and possibly make other analysis types available directly from Octave. The C++ interface would be based on handle class syntax currently in development in the <code>classdef</code> branch of the repository. This method has already been successfully tested on other projects, and examples of this type of interface are available (e.g. [https://sourced.ecdf.ed.ac.uk/projects/see/xfemm here] and [https://www.mathworks.com/matlabcentral/fileexchange/38964-example-matlab-class-wrapper-for-a-c++-class here]).<br />
<br />
'''Required skills''': C++ and m-file scripting. Familiarity with new classdef syntax would be useful. May require some modification/adaptation of the Qucs sources. Familiarity with the Octave ODE solvers useful but not essential.<br />
<br />
'''Difficulty''': medium.<br />
<br />
'''Potential mentor''': Richard Crozier<br />
<br />
'''Main Goals'''<br />
* Create an Octave circuit class which can load and parse a Qucs circuit netlist<br />
* Create class methods with functionality similar to the <code>trsolver</code> C++ class methods in Qucs, i.e with the ability to call the DC solution code, and transient solution code at each time step. <br />
* Create a method of accessing the current circuit solution values in Octave at each time step.<br />
'''Bonus Goals'''<br />
* Create new circuit elements which allow Octave to apply voltages and currents during a circuit simulation.<br />
<br />
<br />
=== Fix audio processing ===<br />
<br />
Audio processing is currently almost completely broken in Octave. It currently only works with Linux's Open Sound System, which most Linux installations don't use anymore. We therefore need a modern, cross-platform way to play and record audio. This could be part of the Octave-Forge audio package, but the core audio functions themselves are also lacking. We need this to work across OSes, so an external audio library should be used. [http://www.portaudio.com/ Portaudio] or [http://www.music.mcgill.ca/~gary/rtaudio/ rtaudio] seem like a mature possibility. The core <code>play</code> and <code>record</code> functions should be fixed to use an external audio library, and in addition, the <code>audiorecorder</code> and <code>audioplayer</code> classes should be implemented.<br />
<br />
'''Required skills''': C++ and probably at least a superficial understanding of signal or audio processing.<br />
<br />
'''Difficulty''': Medium, depending on the abilities of the student.<br />
<br />
'''Possible mentors''': Pantxo Diribarne, Mike Miller<br />
<br />
=== Color management functions in image package ===<br />
<br />
The goal is to implement these functions:<br />
<br />
iccread<br />
iccwrite<br />
makecform<br />
applycform<br />
<br />
These functions are useful for color management, in particular for converting data (especially images) between color spaces. ICC profiles are essentially used to store look-up tables or matrix transforms (or both) that define the conversions. For example, to convert an CMYK image to sRGB, you would load a "print" ICC profile that defines the conversion from CMYK to L*a*b* (the CIE color space that is supposed to match the human visual system), then load another profile that defines the conversion from L*a*b* to sRGB (there is a standard profile for this conversion (IEC 61966-2-1), which is why Matlab has a built-in conversion from sRGB to L*a*b*). To do the above conversions in Matlab, you would use the following code:<br />
<br />
<syntaxhighlight lang="octave"><br />
cmykImage = double(imread('cmyk-image-filename.tif'));<br />
iccProfile = iccread('icc-profile-filename.icc');<br />
labImage = applycform(cmykImage, makecform('clut', iccProfile, 'AToB3'));<br />
rgbImage = applycform(labImage, makecform('lab2srgb'));<br />
</syntaxhighlight><br />
<br />
The <code>'AToB3'</code> selects one of the color transforms (look-up tables) contained in the profile. This one is "Absolute Colorimetric." More details on ICC profiles may be obtained from [http://www.color.org/icc_specs2.xalter the ICC spec].<br />
<br />
Knowledge of ICC profiles (at least knowledge of their application) would be a prerequisite. Since [http://www.littlecms.com/ littlecms] implements all the necessary functions for reading, writing, and applying profiles, it would be primarily a matter of integrating this library into Octave (assuming that is the preferred implementation -- one could certainly read the ICC files directly, but why reinvent that particular wheel).<br />
<br />
'''Required skills''': C++ programming, some knowledge of ICC profiles desirable.<br />
<br />
'''Difficulty''': Easy.<br />
<br />
'''Possible Mentor''': Patrick Noffke <patrick.noffke@gmail.com><br />
<br />
=== High Precision Arithmetic Computation ===<br />
The Linear Algebra Fortran libraries used by Octave make use of of single (32 bits) and double (64 bits) precision floating point numbers. Many operations are stopped when matrices condition number goes below 1e-16: such matrices are considered as ill-conditionned. There are cases where this is not enough, for instance simulations implying chemical concentrations covering the range 10^4 up to 10^34. There are a number of ways to increase the numerical resolution, like f.i. make use of 128 bits quadruple precision numbers available in GFortran. A simpler option is to build an interface over Gnu MPL arbitrary precision library, which is used internally by gcc and should be available on any platform where gcc runs. Such approach has been made available for MatLab under the name mptoolbox and is licensed under a BSD license. The author kindly provided a copy of the latest version and agreed to have it ported under Octave and re-distributed under GPL v3.0<br />
<br />
The architecture consists of an Octave class interface implementing "mp" (multi-precision) objects. Arithmetic operations are forwarded to MPL using MEX files. This is totally transparent to the end user, except when displaying numbers. This implementation needs to be ported and tested under Octave. <br />
<br />
'''Required skills''': Octave classes and object programming. C for understanding the MEX glue code.<br />
<br />
'''Difficulty''': medium.<br />
<br />
'''Potential mentor''': Pascal Dupuis</div>131.175.161.12https://wiki.octave.org/wiki/index.php?title=Summer_of_Code_-_Getting_Started&diff=2863Summer of Code - Getting Started2013-07-04T16:49:15Z<p>131.175.161.12: /* Matlab-compatible ODE solvers in core-Octave */</p>
<hr />
<div>The following is distilled from the [[Projects]] page for the benefit of potential [http://code.google.com/soc/Google Summer] [http://sophia.estec.esa.int/socis2012/?q=node/13 of Code] 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 />
= Your steps to apply =<br />
<br />
If you like any of the projects described below these are the steps you need to follow to apply:<br />
<br />
# Find out that you would like to work together with us this summer!<br />
# Tell us about that and work on your project proposal. Do this together with us! Best place is your wiki user page, see below.<br />
# Fill out our '''''public''''' application template. 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. 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) '''.<br/> Only the organization admin and the possible mentors will see this data.<br/>You can still edit it after submitting until the deadline!<br />
# Hang out in our IRC channel, ask questions, submit patches, show us that you are motivated and well-prepared. There sadly will be more applicants than we can mentor with high quality, so do ask for feedback on your public application to increase your odds!<br />
# Start implementing your very own proposal! Code the summer away ;-)<br />
<noinclude>[[Category:Summer of Code 2013]]</noinclude><br />
<br />
<br />
= General Guidelines =<br />
<br />
Octave is mostly written in (sadly, mostly undocumented) C++ and its own scripting language (m-scripts), which includes (or should include) most of the Matlab language as a subset. We generally prefer a different Octave house style to the usual Matlab style for m-scripts, but it's primarily a superficial stylistic difference. Additionally, 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/or Octave or Matlab's scripting languages, you should probably be familiar or learn about Octave's infrastructure:<br />
<br />
* [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. If you've ever done a <tt>configure && make && make install</tt> series of commands, you have already used the GNU build system.<br />
* [http://mercurial.selenic.com/ Mercurial] (abbreviated hg) 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 />
* You should also read the same [http://www.gnu.org/software/octave/doc/interpreter/Contributing-Guidelines.html#Contributing-Guidelines contributing] [http://hg.savannah.gnu.org/hgweb/octave/file/tip/etc/HACKING guidelines] we have for everyone.<br />
* We primarily use [https://mailman.cae.wisc.edu/listinfo/octave-maintainers mailing lists] for communication. You should follow basic mailing list etiquette. For us, this mostly means "do not [http://en.wikipedia.org/wiki/Top_posting#Top-posting top post]".<br />
* We also have [http://webchat.freenode.net?channels=octave the #octave IRC channel in Freenode]. The atmosphere is more relaxed, and we may talk about things that are not at all related to Octave.<br />
* [http://octave.sf.net Octave-Forge] is a project closely related to Octave where packages reside. They are somewhat analogous to Matlab's toolboxes.<br />
* In addition, you probably should know '''some''' mathematics, engineering, or experimental science or something of the sort. If you've used Matlab before, you probably have already been exposed to the kinds of problems that Octave is used for.<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.<br />
<br />
== Numerical ==<br />
<br />
These projects involve implementing certain mathematical functions in Octave.<br />
<br />
'''Required skills''': You should understand quite a bit of mathematics. Words like "eigenvalue", "analytic", and "Taylor series" shouldn't scare you at all. There is probably little C++ experience required, and probably many of these problems can be solved with m-scripts.<br />
<br />
'''Difficulty''': Mid-to-hard depending how much mathematics you know and how well you can read numerical analysis journal articles.<br />
<br />
'''Potential mentor''': Carlo de Falco, Nir Krakauer, Fotios Kasolis, Luis Gustavo Lira<br />
<br />
=== Incomplete sparse factorizations ichol, ilu ===<br />
<br />
Implement incomplete Cholesky and LU factorization for sparse matrices. These functions are [http://www.mathworks.it/it/help/matlab/matrix-decomposition.html available in Matlab] as cholinc/ichol and luinc/ilu. Incomplete factorizations are useful as preconditioners<br />
for iterative solvers such as [http://hg.savannah.gnu.org/hgweb/octave/file/119ce9f5e1a3/scripts/sparse/gmres.m gmres] and <br />
[http://hg.savannah.gnu.org/hgweb/octave/file/119ce9f5e1a3/scripts/sparse/gmres.m gmres] or [http://hg.savannah.gnu.org/hgweb/octave/file/119ce9f5e1a3/scripts/sparse/pcg.m pcg].<br />
The classic book [http://netlib.org/linalg/html_templates/node81.html Templates for the Solution of Linear Systems: Building Blocks for Iterative Methods] has a [http://netlib.org/linalg/html_templates/node100.html#SECTION00933000000000000000 chapter] describing the <br />
ILU algorithm in detail, though the algorithm described there should be adapted to Octave's internal Sparse Matrix file format which is [http://netlib.org/linalg/html_templates/node92.html#SECTION00931200000000000000 CCS] rather than [http://netlib.org/linalg/html_templates/node91.html#SECTION00931100000000000000 CRS]. The implementation of ILU in Octave has been recently discussed in the maintainers list and initial implementations were posted in this [http://octave.1599824.n4.nabble.com/Ilu-function-tp4648677.html thread]. In another [http://octave.1599824.n4.nabble.com/Re-Octave-maintainers-Digest-Vol-80-Issue-15-tp4646303.html thread] it was suggested to implement the ILU by interfacing Octave to [http://www-users.cs.umn.edu/~saad/software/ITSOL/ ITSOL]. Compared to other <br />
projects in this section this one might require more knowledge of C++.<br />
<br />
=== General purpose Finite Element library ===<br />
<br />
Octave-Forge already has a set of packages for discretizing Partial Differential operators by Finite Elements and/or Finite Volumes,<br />
namely the [[bim package]] which relies on the [http://octave.sf.net/msh msh package] (which is in turn based on [http://geuz.org/gmsh/ gmsh]) for creating and managing 2D triangular and 3D tetrahedral meshes and on the [http://octave.sf.net/fpl fpl package] for visualizing 2D results within Octave or exporting 2D or 3D results in a format compatible with [http://www.paraview.org Paraview] or [https://wci.llnl.gov/codes/visit/ VisIT]. These packages, though, offer only a limited choice of spatial discretization methods which are based on low degree polynomials and therefore have a low order of accuracy even for problems with extremely smooth solutions.<br />
The [http://geopdes.sf.net GeoPDEs] project, on the other hand, offers a complete suite of functions for discretizing a wide range of<br />
differential operators related to important physical problems and uses basis functions of arbitrary polynomial degree that allow the construction of methods of high accuracy. These latter, though, are based on the IsoGeometric Analysis Method which, although very powerful and often better performing, is less widely known and adopted than the Finite Elements Method. The implementation of a general purpose library of Finite Elements seems therefore a valuable addition to Octave-Forge. Two possible interesting choices for implementing this package exist, the first consists of implementing the most common Finite Element spaces in the [http://geopdes.sf.net GeoPDEs] framework, which is possible as IsoGeometric Analysis can be viewed as a superset of the Finite Element Method, the other is to construct Octave language bindings for the free software library [http://fenicsproject.org/documentation/ FEniCS] based on the existing C++ or Python interfaces.<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.<br />
<br />
=== Generalised eigenvalue problem ===<br />
<br />
[http://www.mathworks.com/help/techdoc/ref/eig.html Certain calling forms] of the <tt>eig</tt> function are missing. The problem is to understand what those missing forms are and implement them.<br />
<br />
=== Various sparse matrix improvements ===<br />
<br />
The implementation of sparse matrices in Octave needs several improvements. Any of [[Projects#Sparse Matrices|these]] would be good. The paper by [http://arxiv.org/abs/cs.MS/0604006 Bateman & Adler] is good reading for understanding the sparse matrix implementation.<br />
<br />
=== Implement solver for initial-boundary value problems for parabolic-elliptic PDEs in 1D ===<br />
<br />
The project will deliver a solver for initial-boundary value problems for parabolic-elliptic PDEs in 1D similar to Matlab's function <tt>pdepe</tt>. A good starting point is the [http://en.wikipedia.org/wiki/Method_of_lines method of lines] for which you can find more details [http://en.wikibooks.org/wiki/Partial_Differential_Equations/Method_of_Lines here] and [http://www.scholarpedia.org/article/Method_of_lines here], whereas an example implementation can be found [http://www.scholarpedia.org/article/Method_of_Lines/Example_Implementation here]. In addition, [http://www.pdecomp.net/ this page] provides some useful material.<br />
<br />
=== Implement solver for 1D nonlinear boundary value problems ===<br />
<br />
The project will complete the implementation of the bvp4c solver that is already available in an initial version in the odepkg package<br />
by adding a proper error estimator and will implement a matlab-compatible version of the bvp5c solver.<br />
Details on the methods to be implemented can be found in [http://dx.doi.org/10.1145/502800.502801 this paper] on bvp4c and [http://www.jnaiam.net/new/uploads/files/014dde86eef73328e7ab674d1a32aa9c.pdf this paper] on bvp5c. Further details are available in [http://books.google.it/books/about/Nonlinear_two_point_boundary_value_probl.html?id=s_pQAAAAMAAJ&redir_esc=y this book].<br />
<br />
=== Geometric integrators for Hamiltonian Systems ===<br />
<br />
[http://openlibrary.org/books/OL9056139M/Geometric_Numerical_Integration | Geometric (AKA Symplectic) integrators] are useful for <br />
multi-dimensional classical mechanics problems and for molecular dynamics simulations.<br />
The odepkg package has a number of solvers for ODE, DAE and DDE problems but none of them is currently<br />
specifically suited for second order problems in general and Hamiltonian systems in particular.<br />
Therefore a new package for geometric integrators would be a useful contribution.<br />
This could be created as new package or added as a set of new functions for odepkg.<br />
The function interface should be consistent throughout the package and should be modeled to follow <br />
that of other functions in odepkg (or that of DASPK and LSODE) but will need specific extensions to accommodate for specific options that only make sense for this specific class of solvers.<br />
An initial list of methods to be implemented includes (but is not limited to)<br />
* Symplectic Euler methods, see [http://en.wikipedia.org/wiki/Semi-implicit_Euler_method here] and [http://openlibrary.org/books/OL9056139M/Geometric_Numerical_Integration | here]<br />
* Störmer-Verlet method, see [http://en.wikipedia.org/wiki/Verlet_integration here] and [http://openlibrary.org/books/OL9056139M/Geometric_Numerical_Integration | here]<br />
* Velocity Verlet method, see [http://en.wikipedia.org/wiki/Verlet_integration here] and [http://openlibrary.org/books/OL9056139M/Geometric_Numerical_Integration | here]<br />
* Symplectic partitioned Runge-Kutta methods, see [http://reference.wolfram.com/mathematica/tutorial/NDSolveSPRK.html here] or [http://dx.doi.org/10.1137/0733019 here]<br />
* Spectral Variational Integrator methods, see [http://www3.nd.edu/~izaguirr/papers/acta_numerica.pdf here] or [http://www.math.ucsd.edu/~mleok/pdf/HaLe2012_SVI.pdf here]<br />
<br />
For this latter there is an existing code which is already working but needs to be improved, posted on the patch tracker.<br />
Furthermore, methods to implement solutions of problems with rigid constraints should be implemented, e.g.<br />
* SHAKE, see [http://en.wikipedia.org/wiki/Constraint_algorithm here] or [http://dx.doi.org/10.1016/0021-9991(77)90098-5 here]<br />
* RATTLE, see [http://dx.doi.org/10.1016/0021-9991(83)90014-1 here] or [http://dx.doi.org/10.1002/jcc.540161003 here]<br />
<br />
'''Potential mentor:''' Mattia Penati, Edie Miglio, Carlo de Falco<br />
<br />
=== Matlab-compatible ODE solvers in core-Octave ===<br />
<br />
* Adapt "odeset" and "odeget" from the odepkg package so that the list of supported options is more Matlab-compatible, in the sense that all option names that are supported by Matlab should be available. On the other hand, Matlab returns an error if an option which is not in the list of known options is passed to "odeset", but we would rather make this a warning in order to allow for special extensions, for example for symplectic integrators.<br />
* Adapt the interface of "ode45" in odepkg to be completely Matlab compatible, fix its code and documentation style and move it to Octave-core.<br />
* Build Matlab compatible versions of "ode15s" and "ode15i". jwe has prototype implementations [[File:ode-wrappers.tar.gz here]] of these built as wrappers to "dassl" and "daspk". An initial approach could be to just improve these wrappers, but eventually it would be better to have wrappers for "IDA" from the sundials library.<br />
* Implement Matlab compatible versions of "deval".<br />
<br />
'''Potential mentor:''' Sebastian Schöps, Carlo de Falco<br />
<br />
== GUI ==<br />
<br />
Octave is currently working on a new native GUI. It is written in Qt, but it is still not ready for production. There are various ways in which it could be improved.<br />
<br />
'''Required skills''': C++ and Qt. Whatever tools you want to use to write Qt code are fine, but Qt Creator is a popular choice nowadays.<br />
<br />
'''Difficulty''': Mostly medium, depending if you've had Qt or GUI development experience before.<br />
<br />
'''Potential mentor''': Jordi Gutiérrez Hermoso, Michael Goffioul, Torsten<br />
<br />
=== Finish the Octave GUI ===<br />
<br />
The GUI is currently on its own branch in hg. It is not stable enough and its design is still in flux. It is in a very alpha stage and needs to be turned into a real usable product. At the moment, it consists of the basic building blocks (terminal window, editor, variable browser, history, file browser) that are put together into a main interface. The GUI uses the Qt library. Among the things to improve are:<br />
* improve integration with octave: variable browser/editor, debugger, profiler...<br />
* define and implement an option/preferences dialog<br />
* improve additional components like the documentation browser<br />
<br />
=== Implement a Qt widget for manipulating plots ===<br />
<br />
Octave has had for some time a native OpenGL plotter. The plotter requires some user interaction for manipulating the plots, and it's been using fltk for quite some time. We want to replace this with Qt, so it fits better with the overall GUI look-and-feel and is easier to extend in the future.<br />
<br />
[https://github.com/goffioul/QtHandles QtHandles] is a current work in progress integrating the octave OpenGL renderer plus good support for GUI elements (uicontrol, uimenu, uitoolbar...). This project may initially consists of integrating the existing QtHandles code base into Octave. Then if time permits, further improvements can be made to QtHandles.<br />
<br />
=== Create a better (G)UI for the profiler ===<br />
<br />
During GSoC 2011, Daniel Kraft successfully implemented a profiler for Octave. It needs a better interface and a way to generate reports. This may be done with Qt, but not necessarily, and HTML reports might also be good.<br />
<br />
=== Create a graphical design tool for tuning closed loop control system (control pkg) ===<br />
<br />
When tuning a SISO feedback system it is very helpful to be able to grab a pole or a zero and move them by dragging them with the mouse. As they are moving the software must update all the plotted lines. There should be the ability to display various graphs rlocuse, bode, step, impulse etc. and have them all change dynamically as the mouse is moving. The parameters of the compensator must be displayed and updated.<br />
Potential mentor: Doug Stewart<br />
<br />
== Graphics ==<br />
<br />
Octave has a new native OpenGL plotter (currently via [http://en.wikipedia.org/wiki/Fltk fltk], but we want to move away from that). There are several possible projects involved with it.<br />
<br />
'''Required skills''': C++ and OpenGL. General understanding of computer graphics.<br />
<br />
'''Difficulty''': Medium, depending on your previous understanding of the topic.<br />
<br />
'''Potential mentor''': Michael Goffioul<br />
<br />
=== Lighting ===<br />
<br />
Implement transparency and lighting in OpenGL backend(s). A basic implementation is available in [http://octave.svn.sourceforge.net/viewvc/octave/trunk/octave-forge/extra/jhandles/ JHandles]. This needs to be ported/re-implement/re-engineered/optimized in the C++ OpenGL renderer of Octave.<br />
<br />
=== Object selection in OpenGL renderer ===<br />
<br />
This project is about the implementation of a selection method of graphics elements within the OpenGL renderer [http://glprogramming.com/red/chapter13.html]<br />
<br />
=== Non-OpenGL renderer ===<br />
<br />
Besides the original gnuplot backend, Octave also contains an OpenGL-based renderer for advanced and more powerful 3D plots. However, OpenGL is not perfectly suited for 2D-only plots where other methods could result in better graphics. The purpose of this project is to implement an alternate graphics renderer for 2D only plots (although 3D is definitely not the focus, extending the new graphics renderer to support basic 3D features should also be taken into account). There is no particular toolkit/library that must be used, but natural candidates are:<br />
* [http://qt.nokia.com Qt]: the GUI is currently written in Qt and work is also in progress to provide a Qt/OpenGL based backend [https://github.com/goffioul/QtHandles]<br />
* [http://en.wikipedia.org/wiki/Cairo_%28software%29 Cairo]: this library is widely used and known to provides high-quality graphics with support for PS/PDF/SVG output.<br />
<br />
=== TeX/LaTeX markup ===<br />
<br />
Text objects in plots (like titles, labels, texts...) in the OpenGL renderer only support plain text mode without any formatting possibility. Support for TeX and/or LaTeX formatting needs to be added.<br />
<br />
* The TeX formatting support actually only consists of a very limited subset of the TeX language. This can be implemented directly in C++ into Octave by extending the existing text engine, avoiding to add a dependency on a full TeX system. Essentially, support for Greek letters, super/sub-scripts, and several mathematical symbols needs to be supported. For example,<br />
<br />
:<pre>\alpha \approx \beta_0 + \gamma^\chi</pre><br />
<br />
:Would be rendered as,<br />
<br />
:&alpha; &asymp; &beta;<sub>0</sub> + &gamma;<sup>&chi;</sup><br />
<br />
:This is analogous to how special characters may be included in a wiki using html.<br />
<br />
:<pre>&amp;alpha; &amp;asymp; &amp;beta;<sub>0</sub> + &amp;gamma;<sup>&amp;chi;</sup></pre><br />
<br />
:The text object's {{Codeline|extent}} for the rendered result needs to be calculated and the text placed the location specified by the text object's {{Codeline|position}} property. An itemized list of a text objects properties can be found [http://www.gnu.org/software/octave/doc/interpreter/Text-Properties.html here].<br />
<br />
* On the other hand, the LaTeX formatting support is expected to provide full LaTeX capabilities. This will require to use an external LaTeX system to produce text graphics in some format (to be specified) that is then integrated into Octave plots.<br />
<br />
:The matplotlib project [http://matplotlib.sourceforge.net/users/usetex.html has already done this in Python] and might be used as an example of how to do this in Octave. Mediawiki has also also done [http://en.wikipedia.org/wiki/Wikipedia:Texvc something similar].<br />
<br />
== Interpreter ==<br />
<br />
The interpreter is written in C++, undocumented. There are many possible projects associated with it.<br />
<br />
'''Required skills''': ''Very good'' C and C++ knowledge, possibly also understanding of [http://en.wikipedia.org/wiki/Gnu_bison GNU bison] and [http://en.wikipedia.org/wiki/Flex_lexical_analyser flex]. Understanding how compilers and interpreters are made plus being able to understand how to use a profiler and a debugger will probably be essential skills.<br />
<br />
'''Difficulty''': Mid hard to very hard. Some of the biggest problems will probably be the interpreter.<br />
<br />
'''Potential mentors''': John W. Eaton, Jordi Gutiérrez Hermoso, Max Brister.<br />
<br />
=== Improve JIT compiling ===<br />
<br />
Octave's interpreter is ''very'' slow on some loops. Last year, thanks to Max Brister's work, an initial implement of a just-in-time compiler (JITC) in [http://llvm.org LLVM] for GSoC 2012. This project consists in understanding Max's current implementation and extending it so that functions and exponents (e.g. 2^z) compile with the JITC. This requires knowledge of compilers, C++, LLVM, and the Octave or Matlab languages. A capable student who demonstrates the ability to acquire this knowledge quickly may also be considered. Max himself will mentor this project. [http://planet.octave.org/octconf2012/jit.pdf Here] is Max's OctConf 2012 presentation about his current implementation.<br />
<br />
=== Improve memory management ===<br />
<br />
From profiling the interpreter, it appears that a lot of time is spending allocating and deallocating memory. A better memory management algorithm might provide some improvement.<br />
<br />
=== Implement classdef classes ===<br />
<br />
Matlab has two kinds of classes: old style @classes and new style classdef. Octave has only fully implemented the old style. There is partial support for new classes in [http://hg.savannah.gnu.org/hgweb/octave/shortlog/classdef our classdef branch]. There is irregular work here, and classdef is [http://www.mathworks.com/help/matlab/matlab_oop/method-attributes.html a very] [http://www.mathworks.com/help/matlab/events-sending-and-responding-to-messages.html complicated] [http://www.mathworks.com/help/matlab/enumeration-classes.html thing] to fully implement. A successful project would be to implement enough of classdef for most basic usages. Familiarity with Matlab's current classdef support would be a huge plus. Michael Goffioul and jwe can mentor this.<br />
<br />
== Infrastructure ==<br />
<br />
There are several projects closely related to Octave but not exactly core Octave that could be worked on. They are mostly infrastructure around Octave, stuff that would help a lot.<br />
<br />
'''Required skills''': Various. See below.<br />
<br />
'''Difficulty''': Various. See below.<br />
<br />
'''Potential mentor''': Jordi Gutiérrez Hermoso, Carlo de Falco<br />
<br />
=== Finish the Agora website ===<br />
<br />
In 2009, the Mathworks decided to restrict the terms of use Matlab Central, a place dedicated to Matlab collaboration. The Mathworks forbade copyleft licenses and using the "free" code found in Matlab central on anything other than Mathworks products (e.g. forbidding from using it on Octave, even if the authors of the code wanted to allow this). Thus Octave users have no place to centrally, quickly, and conveniently share Octave code. See the [[FAQ#Why_can.27t_I_use_code_from_File_Exchange_in_Octave.3F_It.27s_released_under_a_BSD_license.21|FAQ]] for more details.<br />
<br />
In response to this, a website started to form, [http://agora.octave.org/ Agora Octave].<br />
<br />
This should be relatively easy webdev in Python using [http://en.wikipedia.org/wiki/Django_%28web_framework%29 Django].<br />
<br />
Things to be considered when working on this:<br />
<br />
* [http://octave-forge.blogspot.ie/2012/08/octconf2012-agora-and-pkg.html discussion of Agora during OctConf2012]<br />
* [http://scipy-central.org/ Scipy Central] - a website with the same objective as Agora for Scipy. Their [https://github.com/kgdunn/SciPyCentral/ code] is released under a BSD license. Might be useful to reuse some parts.<br />
<br />
Most of the basic functionality of Agora is already in, but there are many ways in which it could be improved, such as implementing comment threads, giving it an email interface, or a ReSTful API which could be used from Octave for package management.<br />
<br />
<br />
=== Improve binary packaging ===<br />
<br />
We would like to be able to easily generate binary packages for Windows and Mac OS X. Right now, it's difficult and tedious to do so. Any way to help us do this in a faster way would be appreciated. Required knowledge is understanding how building binaries in Windows and Mac OS X works. Our current approach to fixing this is to cross-compile from a GNU system using [http://mxe.cc/ MXE] or [http://lilypond.org/gub/ GUB].<br />
<br />
'''Skills Required''': Knowledge of GNU build systems, Makefiles, configure files, chasing library dependencies, how to use a compiler. If you choose to work on GUB, Python will be required. No m-scripting or C++ necessary, beyond understanding [http://david.rothlis.net/c/compilation_model/ the C++ compilation model].<br />
<br />
'''Difficulty''': Medium to easy. You need to understand how build systems work and how to fix packages when they don't build.<br />
<br />
'''Possible mentors''': John W. Eaton or Jordi Gutiérrez Hermoso<br />
<br />
=== Installation of packages ===<br />
We would like to enhance the management of Octave-forge packages from within Octave environment. Currently there is a working (but rather monolithic) function that is used to do the job. The work would be to improve the way Octave interacts with the package server. Since the functionality is already sketched by the current function, the most important skill is software design.<br />
<br />
'''Minimum requirements''': Ability to read and write Octave code. Minimal FTP/HTTP knowledge.<br />
<br />
'''Difficulty''': Easy<br />
<br />
== Octave-Forge packages ==<br />
<br />
=== Rewrite symbolic package ===<br />
Octave's current [http://octave.svn.sourceforge.net/viewvc/octave/trunk/octave-forge/main/symbolic/ symbolic] package for symbolic computation is outdated, fragile and limited in its capabilities. The new symbolic package should offer better Matlab compatibility, for example handling of symbolic matrices. Like the current symbolic package, the new package could use the proven [http://www.ginac.de/ GiNaC] library for symbolic computations.<br />
<br />
The work would be to integrate GiNaC by using Octave's objects and classes. This can be done in C++ in a way similar to Michele Martone's new [http://librsb.sourceforge.net/ sparsersb] package.<br />
<br />
This idea has not been selected by any SoC student yet, if you want to see it happen before next SoC<br />
you can offer a bounty [http://www.freedomsponsors.org/core/issue/289/gnu-octave-rewrite-the-symbolic-package here].<br />
<br />
'''Required skills''': C++. Ability to understand Octave and GiNaC API documentation.<br />
<br />
'''Difficulty''': medium.<br />
<br />
'''Potential mentor''': Lukas Reichlin<br />
<br />
=== Improvements to n-dimensional image processing ===<br />
<br />
The image package has partial functionality for n-dimensional images. These images do exist in practice for example in medical imaging where slices from scans are assembled to form anatomical 3d images, or even exposures taken over time on different wavelengths can result in 5d images. All of the base functions should be modified so that they can handle n-dimensional images, and corresponding Matlab functions such as <code>bwconncomp</code> or n-dimensional version of <code>bwdist</code> should be implemented. In addition,<br />
the core functions {{codeline|imwrite}} and {{codeline|imread}} need to be adjusted to deal with this type images (usually multipage TIFF).<br />
<br />
'''Required skills''': Mostly m-file scripting, perhaps some C++. Familiarity with common CS algorithms would be useful.<br />
<br />
'''Difficulty''': medium.<br />
<br />
'''Potential mentor''': Jordi Gutiérrez Hermoso<br />
<br />
=== Interface to Electronic Circuit Simulator ===<br />
<br />
[http://sourceforge.net/projects/qucs/ Qucs] is a C++ based circuit simulation package. This project aims to create an interface to the Qucs algorithms to allow the transient, i.e. time series, simulation of circuits in Octave within a larger ODE system simulation, and possibly make other analysis types available directly from Octave. The C++ interface would be based on handle class syntax currently in development in the <code>classdef</code> branch of the repository. This method has already been successfully tested on other projects, and examples of this type of interface are available (e.g. [https://sourced.ecdf.ed.ac.uk/projects/see/xfemm here] and [https://www.mathworks.com/matlabcentral/fileexchange/38964-example-matlab-class-wrapper-for-a-c++-class here]).<br />
<br />
'''Required skills''': C++ and m-file scripting. Familiarity with new classdef syntax would be useful. May require some modification/adaptation of the Qucs sources. Familiarity with the Octave ODE solvers useful but not essential.<br />
<br />
'''Difficulty''': medium.<br />
<br />
'''Potential mentor''': Richard Crozier<br />
<br />
'''Main Goals'''<br />
* Create an Octave circuit class which can load and parse a Qucs circuit netlist<br />
* Create class methods with functionality similar to the <code>trsolver</code> C++ class methods in Qucs, i.e with the ability to call the DC solution code, and transient solution code at each time step. <br />
* Create a method of accessing the current circuit solution values in Octave at each time step.<br />
'''Bonus Goals'''<br />
* Create new circuit elements which allow Octave to apply voltages and currents during a circuit simulation.<br />
<br />
<br />
=== Fix audio processing ===<br />
<br />
Audio processing is currently almost completely broken in Octave. It currently only works with Linux's Open Sound System, which most Linux installations don't use anymore. We therefore need a modern, cross-platform way to play and record audio. This could be part of the Octave-Forge audio package, but the core audio functions themselves are also lacking. We need this to work across OSes, so an external audio library should be used. [http://www.portaudio.com/ Portaudio] or [http://www.music.mcgill.ca/~gary/rtaudio/ rtaudio] seem like a mature possibility. The core <code>play</code> and <code>record</code> functions should be fixed to use an external audio library, and in addition, the <code>audiorecorder</code> and <code>audioplayer</code> classes should be implemented.<br />
<br />
'''Required skills''': C++ and probably at least a superficial understanding of signal or audio processing.<br />
<br />
'''Difficulty''': Medium, depending on the abilities of the student.<br />
<br />
'''Possible mentors''': Pantxo Diribarne, Mike Miller<br />
<br />
=== Color management functions in image package ===<br />
<br />
The goal is to implement these functions:<br />
<br />
iccread<br />
iccwrite<br />
makecform<br />
applycform<br />
<br />
These functions are useful for color management, in particular for converting data (especially images) between color spaces. ICC profiles are essentially used to store look-up tables or matrix transforms (or both) that define the conversions. For example, to convert an CMYK image to sRGB, you would load a "print" ICC profile that defines the conversion from CMYK to L*a*b* (the CIE color space that is supposed to match the human visual system), then load another profile that defines the conversion from L*a*b* to sRGB (there is a standard profile for this conversion (IEC 61966-2-1), which is why Matlab has a built-in conversion from sRGB to L*a*b*). To do the above conversions in Matlab, you would use the following code:<br />
<br />
<syntaxhighlight lang="octave"><br />
cmykImage = double(imread('cmyk-image-filename.tif'));<br />
iccProfile = iccread('icc-profile-filename.icc');<br />
labImage = applycform(cmykImage, makecform('clut', iccProfile, 'AToB3'));<br />
rgbImage = applycform(labImage, makecform('lab2srgb'));<br />
</syntaxhighlight><br />
<br />
The <code>'AToB3'</code> selects one of the color transforms (look-up tables) contained in the profile. This one is "Absolute Colorimetric." More details on ICC profiles may be obtained from [http://www.color.org/icc_specs2.xalter the ICC spec].<br />
<br />
Knowledge of ICC profiles (at least knowledge of their application) would be a prerequisite. Since [http://www.littlecms.com/ littlecms] implements all the necessary functions for reading, writing, and applying profiles, it would be primarily a matter of integrating this library into Octave (assuming that is the preferred implementation -- one could certainly read the ICC files directly, but why reinvent that particular wheel).<br />
<br />
'''Required skills''': C++ programming, some knowledge of ICC profiles desirable.<br />
<br />
'''Difficulty''': Easy.<br />
<br />
'''Possible Mentor''': Patrick Noffke <patrick.noffke@gmail.com><br />
<br />
=== High Precision Arithmetic Computation ===<br />
The Linear Algebra Fortran libraries used by Octave make use of of single (32 bits) and double (64 bits) precision floating point numbers. Many operations are stopped when matrices condition number goes below 1e-16: such matrices are considered as ill-conditionned. There are cases where this is not enough, for instance simulations implying chemical concentrations covering the range 10^4 up to 10^34. There are a number of ways to increase the numerical resolution, like f.i. make use of 128 bits quadruple precision numbers available in GFortran. A simpler option is to build an interface over Gnu MPL arbitrary precision library, which is used internally by gcc and should be available on any platform where gcc runs. Such approach has been made available for MatLab under the name mptoolbox and is licensed under a BSD license. The author kindly provided a copy of the latest version and agreed to have it ported under Octave and re-distributed under GPL v3.0<br />
<br />
The architecture consists of an Octave class interface implementing "mp" (multi-precision) objects. Arithmetic operations are forwarded to MPL using MEX files. This is totally transparent to the end user, except when displaying numbers. This implementation needs to be ported and tested under Octave. <br />
<br />
'''Required skills''': Octave classes and object programming. C for understanding the MEX glue code.<br />
<br />
'''Difficulty''': medium.<br />
<br />
'''Potential mentor''': Pascal Dupuis</div>131.175.161.12https://wiki.octave.org/wiki/index.php?title=GNU_Octave_Wiki&diff=2862GNU Octave Wiki2013-07-04T08:22:56Z<p>131.175.161.12: /* External Links */</p>
<hr />
<div>[[File:banner.png|center|link=http://www2.mate.polimi.it/ocs/?cf=42]]<br />
<br />
<br />
[http://www.octave.org 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 (CLI and 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 />
This wiki is intended to supplement the [http://www.gnu.org/software/octave/doc/interpreter GNU Octave documentation]. Before adding content, please check that it is not already part of, or belongs in, the documentation.<br />
<br />
== GNU Octave FAQ ==<br />
<br />
The [[FAQ]] is a list of frequently asked questions (FAQ) for GNU Octave users and a good place to start.<br />
<br />
Answers to questions regarding [[FAQ#General|what is Octave]], [[FAQ#Licensing_issues|licensing]], [[FAQ#What.27s_new_in_Octave|new features]], [[FAQ#What_documentation_exists_for_Octave.3F|documentation]], [[FAQ#Installation_issues_and_problems|installation]], [[FAQ#Coding|coding]], [[FAQ#How_can_I_get_involved_in_Octave_development.3F|contributing to Octave]], and more, are found there.<br />
<br />
== Table of contents ==<br />
<br />
Below is a temporary attempt to organize the "most wanted" pages of the Wiki. A list of all pages on the wiki can be seen [[Special:AllPages|here]]. To locate something specific, try the wiki's search box, or prepend {{Codeline|<nowiki>site:http://www.octave.org/wiki/</nowiki>}} to a [https://www.google.com/search?&q=site%3Ahttp%3A%2F%2Fwww.octave.org%2Fwiki google search].<br />
<br />
=== Installation Instructions for Windows, MacOS X and GNU/Linux ===<br />
* [[Octave for Windows]]<br />
* [[Installing Win32 Distribution]]<br />
* [[Octave for MacOS X]]<br />
* [[Octave for GNU/Linux]]<br />
<br />
=== Building Octave ===<br />
* [[Build from source]]<br />
* [[Mercurial (hg) cheat sheet]]<br />
* [[Tests|Testing Source Code]]<br />
* [[Octave for Mac|Octave for MacOS (minimalistic)]]<br />
* [[Create a MacOS X App Bundle Using MacPorts]]<br />
* [[Enable large arrays: Build octave such that it can use arrays larger than 2Gb.|Building Octave to Use Large Arrays]]<br />
<br />
=== Octave-Forge ===<br />
* [[Octave_Forge|Octave-Forge and Installing Packages]]<br />
* [[Creating_packages|Creating Packages]]<br />
<br />
==== Available Packages ====<br />
* [[Dicom_package|Dicom]]<br />
* [[Geometry_package|Geometry]]<br />
* [[IO_package|I/O]]<br />
* [[Java_package|Java]]<br />
* [[Mechanics_package|Mechanics]]<br />
* [[Instrument_control__package|Instrument control]]<br />
* [[Sockets_package|Sockets]]<br />
* [[Video_package|Video]]<br />
* [[bim_package|bim]] Solve Partial Differential Equaltions with a Finite Element method<br />
<br />
=== Editors & Octave ===<br />
* [[Gedit]]<br />
* [[Emacs]]<br />
* [[Nano]]<br />
* [[Vim]]<br />
* [[Kate]]<br />
* [http://octclipse.sourceforge.net Octclipse] (Windows and GNU/Linux only. The Octclipse developers are seeking individuals to assist with MacOS X support.)<br />
* [https://sites.google.com/site/domainmathide/ DomainMath IDE] (Windows,GNU/Linux and Mac OS.)<br />
<br />
=== Plotting tutorial ===<br />
All or most of the information about plotting in Octave can be found in the manual and on the internet. This information can be too scattered over different resources for a new user to find his/her way into solving a plotting problem/need. This tutorial should be considered as the 'recipe text' by examples if you consider the manual as a 'recipe ingredients only'.<br />
* [[Recap of the hierarchy of each plot element]]<br />
* [[The order of the commands matter sometimes]] <br />
* [[Changing text elements (label, title)]]<br />
* [[More control over subplots]]<br />
* [[Enable "linestyle" functionality for Gnuplot's x11 terminal]]<br />
<br />
=== Miscellaneous ===<br />
* [[Octave Basics]] - For those just getting started.<br />
* [[Cookbook]] - Several simple and useful examples.<br />
* [[Tips and tricks]] - Guidelines to improve your coding skills.<br />
* [[Fortran]] - Accessing liboctave from a Fortran 2003 program.<br />
* [[Octave load]] - Use liboctave functions to load variables from a file in Octave's binary format. <br />
* [[Special:AllPages|All Pages]] - A list of all special pages (like recent changes to the wiki)<br />
* [[Publications using Octave]] - A compilation of scientific publications making reference to GNU Octave (add yours!).<br />
* [[Octave fun]] - Coding can be fun -- miscellaneous more or less funny scripts<br />
* [[BASH and Octave]] - tips for easing use of Octave together with GNU BASH (linux)<br />
<br />
== External Links ==<br />
* [http://www.gnu.org/software/octave/ Octave Homepage]<br />
* [http://octave.sourceforge.net/ Octave Forge]<br />
* [https://savannah.gnu.org/bugs/?group=octave GNU Octave - Bug Tracker]<br />
* [https://savannah.gnu.org/task/?group=octave GNU Octave - Task Tracker]<br />
* [https://savannah.gnu.org/patch/?group=octave GNU Octave - Patch Tracker]<br />
* [https://savannah.gnu.org/hg/?group=octave GNU Octave - Mercurial Repositories]<br />
* [http://planet.octave.org Planet Octave] (site summary for blogs from Octave's [http://code.google.com/soc/ GSoC] and [http://sophia.estec.esa.int/socis2013/ SoCiS] students)</div>131.175.161.12https://wiki.octave.org/wiki/index.php?title=GNU_Octave_Wiki&diff=2861GNU Octave Wiki2013-07-04T08:22:23Z<p>131.175.161.12: /* External Links */</p>
<hr />
<div>[[File:banner.png|center|link=http://www2.mate.polimi.it/ocs/?cf=42]]<br />
<br />
<br />
[http://www.octave.org 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 (CLI and 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 />
This wiki is intended to supplement the [http://www.gnu.org/software/octave/doc/interpreter GNU Octave documentation]. Before adding content, please check that it is not already part of, or belongs in, the documentation.<br />
<br />
== GNU Octave FAQ ==<br />
<br />
The [[FAQ]] is a list of frequently asked questions (FAQ) for GNU Octave users and a good place to start.<br />
<br />
Answers to questions regarding [[FAQ#General|what is Octave]], [[FAQ#Licensing_issues|licensing]], [[FAQ#What.27s_new_in_Octave|new features]], [[FAQ#What_documentation_exists_for_Octave.3F|documentation]], [[FAQ#Installation_issues_and_problems|installation]], [[FAQ#Coding|coding]], [[FAQ#How_can_I_get_involved_in_Octave_development.3F|contributing to Octave]], and more, are found there.<br />
<br />
== Table of contents ==<br />
<br />
Below is a temporary attempt to organize the "most wanted" pages of the Wiki. A list of all pages on the wiki can be seen [[Special:AllPages|here]]. To locate something specific, try the wiki's search box, or prepend {{Codeline|<nowiki>site:http://www.octave.org/wiki/</nowiki>}} to a [https://www.google.com/search?&q=site%3Ahttp%3A%2F%2Fwww.octave.org%2Fwiki google search].<br />
<br />
=== Installation Instructions for Windows, MacOS X and GNU/Linux ===<br />
* [[Octave for Windows]]<br />
* [[Installing Win32 Distribution]]<br />
* [[Octave for MacOS X]]<br />
* [[Octave for GNU/Linux]]<br />
<br />
=== Building Octave ===<br />
* [[Build from source]]<br />
* [[Mercurial (hg) cheat sheet]]<br />
* [[Tests|Testing Source Code]]<br />
* [[Octave for Mac|Octave for MacOS (minimalistic)]]<br />
* [[Create a MacOS X App Bundle Using MacPorts]]<br />
* [[Enable large arrays: Build octave such that it can use arrays larger than 2Gb.|Building Octave to Use Large Arrays]]<br />
<br />
=== Octave-Forge ===<br />
* [[Octave_Forge|Octave-Forge and Installing Packages]]<br />
* [[Creating_packages|Creating Packages]]<br />
<br />
==== Available Packages ====<br />
* [[Dicom_package|Dicom]]<br />
* [[Geometry_package|Geometry]]<br />
* [[IO_package|I/O]]<br />
* [[Java_package|Java]]<br />
* [[Mechanics_package|Mechanics]]<br />
* [[Instrument_control__package|Instrument control]]<br />
* [[Sockets_package|Sockets]]<br />
* [[Video_package|Video]]<br />
* [[bim_package|bim]] Solve Partial Differential Equaltions with a Finite Element method<br />
<br />
=== Editors & Octave ===<br />
* [[Gedit]]<br />
* [[Emacs]]<br />
* [[Nano]]<br />
* [[Vim]]<br />
* [[Kate]]<br />
* [http://octclipse.sourceforge.net Octclipse] (Windows and GNU/Linux only. The Octclipse developers are seeking individuals to assist with MacOS X support.)<br />
* [https://sites.google.com/site/domainmathide/ DomainMath IDE] (Windows,GNU/Linux and Mac OS.)<br />
<br />
=== Plotting tutorial ===<br />
All or most of the information about plotting in Octave can be found in the manual and on the internet. This information can be too scattered over different resources for a new user to find his/her way into solving a plotting problem/need. This tutorial should be considered as the 'recipe text' by examples if you consider the manual as a 'recipe ingredients only'.<br />
* [[Recap of the hierarchy of each plot element]]<br />
* [[The order of the commands matter sometimes]] <br />
* [[Changing text elements (label, title)]]<br />
* [[More control over subplots]]<br />
* [[Enable "linestyle" functionality for Gnuplot's x11 terminal]]<br />
<br />
=== Miscellaneous ===<br />
* [[Octave Basics]] - For those just getting started.<br />
* [[Cookbook]] - Several simple and useful examples.<br />
* [[Tips and tricks]] - Guidelines to improve your coding skills.<br />
* [[Fortran]] - Accessing liboctave from a Fortran 2003 program.<br />
* [[Octave load]] - Use liboctave functions to load variables from a file in Octave's binary format. <br />
* [[Special:AllPages|All Pages]] - A list of all special pages (like recent changes to the wiki)<br />
* [[Publications using Octave]] - A compilation of scientific publications making reference to GNU Octave (add yours!).<br />
* [[Octave fun]] - Coding can be fun -- miscellaneous more or less funny scripts<br />
* [[BASH and Octave]] - tips for easing use of Octave together with GNU BASH (linux)<br />
<br />
== External Links ==<br />
* [http://www.gnu.org/software/octave/ Octave Homepage]<br />
* [http://octave.sourceforge.net/ Octave Forge]<br />
* [https://savannah.gnu.org/bugs/?group=octave GNU Octave - Bug Tracker]<br />
* [https://savannah.gnu.org/task/?group=octave GNU Octave - Task Tracker]<br />
* [https://savannah.gnu.org/patch/?group=octave GNU Octave - Patch Tracker]<br />
* [https://savannah.gnu.org/hg/?group=octave GNU Octave - Mercurial Repositories]<br />
* [http://planet.octave.org Planet Octave] (site summary for blogs from Octave's <br />
[http://code.google.com/soc/ GSoC] and [http://sophia.estec.esa.int/socis2013/ SoCiS] students)</div>131.175.161.12https://wiki.octave.org/wiki/index.php?title=GNU_Octave_Wiki&diff=2860GNU Octave Wiki2013-07-04T08:21:29Z<p>131.175.161.12: /* External Links */</p>
<hr />
<div>[[File:banner.png|center|link=http://www2.mate.polimi.it/ocs/?cf=42]]<br />
<br />
<br />
[http://www.octave.org 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 (CLI and 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 />
This wiki is intended to supplement the [http://www.gnu.org/software/octave/doc/interpreter GNU Octave documentation]. Before adding content, please check that it is not already part of, or belongs in, the documentation.<br />
<br />
== GNU Octave FAQ ==<br />
<br />
The [[FAQ]] is a list of frequently asked questions (FAQ) for GNU Octave users and a good place to start.<br />
<br />
Answers to questions regarding [[FAQ#General|what is Octave]], [[FAQ#Licensing_issues|licensing]], [[FAQ#What.27s_new_in_Octave|new features]], [[FAQ#What_documentation_exists_for_Octave.3F|documentation]], [[FAQ#Installation_issues_and_problems|installation]], [[FAQ#Coding|coding]], [[FAQ#How_can_I_get_involved_in_Octave_development.3F|contributing to Octave]], and more, are found there.<br />
<br />
== Table of contents ==<br />
<br />
Below is a temporary attempt to organize the "most wanted" pages of the Wiki. A list of all pages on the wiki can be seen [[Special:AllPages|here]]. To locate something specific, try the wiki's search box, or prepend {{Codeline|<nowiki>site:http://www.octave.org/wiki/</nowiki>}} to a [https://www.google.com/search?&q=site%3Ahttp%3A%2F%2Fwww.octave.org%2Fwiki google search].<br />
<br />
=== Installation Instructions for Windows, MacOS X and GNU/Linux ===<br />
* [[Octave for Windows]]<br />
* [[Installing Win32 Distribution]]<br />
* [[Octave for MacOS X]]<br />
* [[Octave for GNU/Linux]]<br />
<br />
=== Building Octave ===<br />
* [[Build from source]]<br />
* [[Mercurial (hg) cheat sheet]]<br />
* [[Tests|Testing Source Code]]<br />
* [[Octave for Mac|Octave for MacOS (minimalistic)]]<br />
* [[Create a MacOS X App Bundle Using MacPorts]]<br />
* [[Enable large arrays: Build octave such that it can use arrays larger than 2Gb.|Building Octave to Use Large Arrays]]<br />
<br />
=== Octave-Forge ===<br />
* [[Octave_Forge|Octave-Forge and Installing Packages]]<br />
* [[Creating_packages|Creating Packages]]<br />
<br />
==== Available Packages ====<br />
* [[Dicom_package|Dicom]]<br />
* [[Geometry_package|Geometry]]<br />
* [[IO_package|I/O]]<br />
* [[Java_package|Java]]<br />
* [[Mechanics_package|Mechanics]]<br />
* [[Instrument_control__package|Instrument control]]<br />
* [[Sockets_package|Sockets]]<br />
* [[Video_package|Video]]<br />
* [[bim_package|bim]] Solve Partial Differential Equaltions with a Finite Element method<br />
<br />
=== Editors & Octave ===<br />
* [[Gedit]]<br />
* [[Emacs]]<br />
* [[Nano]]<br />
* [[Vim]]<br />
* [[Kate]]<br />
* [http://octclipse.sourceforge.net Octclipse] (Windows and GNU/Linux only. The Octclipse developers are seeking individuals to assist with MacOS X support.)<br />
* [https://sites.google.com/site/domainmathide/ DomainMath IDE] (Windows,GNU/Linux and Mac OS.)<br />
<br />
=== Plotting tutorial ===<br />
All or most of the information about plotting in Octave can be found in the manual and on the internet. This information can be too scattered over different resources for a new user to find his/her way into solving a plotting problem/need. This tutorial should be considered as the 'recipe text' by examples if you consider the manual as a 'recipe ingredients only'.<br />
* [[Recap of the hierarchy of each plot element]]<br />
* [[The order of the commands matter sometimes]] <br />
* [[Changing text elements (label, title)]]<br />
* [[More control over subplots]]<br />
* [[Enable "linestyle" functionality for Gnuplot's x11 terminal]]<br />
<br />
=== Miscellaneous ===<br />
* [[Octave Basics]] - For those just getting started.<br />
* [[Cookbook]] - Several simple and useful examples.<br />
* [[Tips and tricks]] - Guidelines to improve your coding skills.<br />
* [[Fortran]] - Accessing liboctave from a Fortran 2003 program.<br />
* [[Octave load]] - Use liboctave functions to load variables from a file in Octave's binary format. <br />
* [[Special:AllPages|All Pages]] - A list of all special pages (like recent changes to the wiki)<br />
* [[Publications using Octave]] - A compilation of scientific publications making reference to GNU Octave (add yours!).<br />
* [[Octave fun]] - Coding can be fun -- miscellaneous more or less funny scripts<br />
* [[BASH and Octave]] - tips for easing use of Octave together with GNU BASH (linux)<br />
<br />
== External Links ==<br />
* [http://www.gnu.org/software/octave/ Octave Homepage]<br />
* [http://octave.sourceforge.net/ Octave Forge]<br />
* [https://savannah.gnu.org/bugs/?group=octave GNU Octave - Bug Tracker]<br />
* [https://savannah.gnu.org/task/?group=octave GNU Octave - Task Tracker]<br />
* [https://savannah.gnu.org/patch/?group=octave GNU Octave - Patch Tracker]<br />
* [https://savannah.gnu.org/hg/?group=octave GNU Octave - Mercurial Repositories]<br />
* [http://planet.octave.org Planet Octave] (site summary for blogs from Octave's <br />
[http://code.google.com/soc/ GSoC] and [http://sophia.estec.esa.int/socis2013/ SoCiS] students)</div>131.175.161.12https://wiki.octave.org/wiki/index.php?title=Summer_of_Code_-_Getting_Started&diff=2838Summer of Code - Getting Started2013-06-19T12:45:39Z<p>131.175.161.12: /* Geometric integrators for Hamiltonian Systems */</p>
<hr />
<div>The following is distilled from the [[Projects]] page for the benefit of potential [http://code.google.com/soc/Google Summer] [http://sophia.estec.esa.int/socis2012/?q=node/13 of Code] 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 />
= Your steps to apply =<br />
<br />
If you like any of the projects described below these are the steps you need to follow to apply:<br />
<br />
# Find out that you would like to work together with us this summer!<br />
# Tell us about that and work on your project proposal. Do this together with us! Best place is your wiki user page, see below.<br />
# Fill out our '''''public''''' application template. 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. 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) '''.<br/> Only the organization admin and the possible mentors will see this data.<br/>You can still edit it after submitting until the deadline!<br />
# Hang out in our IRC channel, ask questions, submit patches, show us that you are motivated and well-prepared. There sadly will be more applicants than we can mentor with high quality, so do ask for feedback on your public application to increase your odds!<br />
# Start implementing your very own proposal! Code the summer away ;-)<br />
<noinclude>[[Category:Summer of Code 2013]]</noinclude><br />
<br />
<br />
= General Guidelines =<br />
<br />
Octave is mostly written in (sadly, mostly undocumented) C++ and its own scripting language (m-scripts), which includes (or should include) most of the Matlab language as a subset. We generally prefer a different Octave house style to the usual Matlab style for m-scripts, but it's primarily a superficial stylistic difference. Additionally, 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/or Octave or Matlab's scripting languages, you should probably be familiar or learn about Octave's infrastructure:<br />
<br />
* [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. If you've ever done a <tt>configure && make && make install</tt> series of commands, you have already used the GNU build system.<br />
* [http://mercurial.selenic.com/ Mercurial] (abbreviated hg) 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 />
* You should also read the same [http://www.gnu.org/software/octave/doc/interpreter/Contributing-Guidelines.html#Contributing-Guidelines contributing] [http://hg.savannah.gnu.org/hgweb/octave/file/tip/etc/HACKING guidelines] we have for everyone.<br />
* We primarily use [https://mailman.cae.wisc.edu/listinfo/octave-maintainers mailing lists] for communication. You should follow basic mailing list etiquette. For us, this mostly means "do not [http://en.wikipedia.org/wiki/Top_posting#Top-posting top post]".<br />
* We also have [http://webchat.freenode.net?channels=octave the #octave IRC channel in Freenode]. The atmosphere is more relaxed, and we may talk about things that are not at all related to Octave.<br />
* [http://octave.sf.net Octave-Forge] is a project closely related to Octave where packages reside. They are somewhat analogous to Matlab's toolboxes.<br />
* In addition, you probably should know '''some''' mathematics, engineering, or experimental science or something of the sort. If you've used Matlab before, you probably have already been exposed to the kinds of problems that Octave is used for.<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.<br />
<br />
== Numerical ==<br />
<br />
These projects involve implementing certain mathematical functions in Octave.<br />
<br />
'''Required skills''': You should understand quite a bit of mathematics. Words like "eigenvalue", "analytic", and "Taylor series" shouldn't scare you at all. There is probably little C++ experience required, and probably many of these problems can be solved with m-scripts.<br />
<br />
'''Difficulty''': Mid-to-hard depending how much mathematics you know and how well you can read numerical analysis journal articles.<br />
<br />
'''Potential mentor''': Carlo de Falco, Nir Krakauer, Fotios Kasolis, Luis Gustavo Lira<br />
<br />
=== Incomplete sparse factorizations ichol, ilu ===<br />
<br />
Implement incomplete Cholesky and LU factorization for sparse matrices. These functions are [http://www.mathworks.it/it/help/matlab/matrix-decomposition.html available in Matlab] as cholinc/ichol and luinc/ilu. Incomplete factorizations are useful as preconditioners<br />
for iterative solvers such as [http://hg.savannah.gnu.org/hgweb/octave/file/119ce9f5e1a3/scripts/sparse/gmres.m gmres] and <br />
[http://hg.savannah.gnu.org/hgweb/octave/file/119ce9f5e1a3/scripts/sparse/gmres.m gmres] or [http://hg.savannah.gnu.org/hgweb/octave/file/119ce9f5e1a3/scripts/sparse/pcg.m pcg].<br />
The classic book [http://netlib.org/linalg/html_templates/node81.html Templates for the Solution of Linear Systems: Building Blocks for Iterative Methods] has a [http://netlib.org/linalg/html_templates/node100.html#SECTION00933000000000000000 chapter] describing the <br />
ILU algorithm in detail, though the algorithm described there should be adapted to Octave's internal Sparse Matrix file format which is [http://netlib.org/linalg/html_templates/node92.html#SECTION00931200000000000000 CCS] rather than [http://netlib.org/linalg/html_templates/node91.html#SECTION00931100000000000000 CRS]. The implementation of ILU in Octave has been recently discussed in the maintainers list and initial implementations were posted in this [http://octave.1599824.n4.nabble.com/Ilu-function-tp4648677.html thread]. In another [http://octave.1599824.n4.nabble.com/Re-Octave-maintainers-Digest-Vol-80-Issue-15-tp4646303.html thread] it was suggested to implement the ILU by interfacing Octave to [http://www-users.cs.umn.edu/~saad/software/ITSOL/ ITSOL]. Compared to other <br />
projects in this section this one might require more knowledge of C++.<br />
<br />
=== General purpose Finite Element library ===<br />
<br />
Octave-Forge already has a set of packages for discretizing Partial Differential operators by Finite Elements and/or Finite Volumes,<br />
namely the [[bim package]] which relies on the [http://octave.sf.net/msh msh package] (which is in turn based on [http://geuz.org/gmsh/ gmsh]) for creating and managing 2D triangular and 3D tetrahedral meshes and on the [http://octave.sf.net/fpl fpl package] for visualizing 2D results within Octave or exporting 2D or 3D results in a format compatible with [http://www.paraview.org Paraview] or [https://wci.llnl.gov/codes/visit/ VisIT]. These packages, though, offer only a limited choice of spatial discretization methods which are based on low degree polynomials and therefore have a low order of accuracy even for problems with extremely smooth solutions.<br />
The [http://geopdes.sf.net GeoPDEs] project, on the other hand, offers a complete suite of functions for discretizing a wide range of<br />
differential operators related to important physical problems and uses basis functions of arbitrary polynomial degree that allow the construction of methods of high accuracy. These latter, though, are based on the IsoGeometric Analysis Method which, although very powerful and often better performing, is less widely known and adopted than the Finite Elements Method. The implementation of a general purpose library of Finite Elements seems therefore a valuable addition to Octave-Forge. Two possible interesting choices for implementing this package exist, the first consists of implementing the most common Finite Element spaces in the [http://geopdes.sf.net GeoPDEs] framework, which is possible as IsoGeometric Analysis can be viewed as a superset of the Finite Element Method, the other is to construct Octave language bindings for the free software library [http://fenicsproject.org/documentation/ FEniCS] based on the existing C++ or Python interfaces.<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.<br />
<br />
=== Generalised eigenvalue problem ===<br />
<br />
[http://www.mathworks.com/help/techdoc/ref/eig.html Certain calling forms] of the <tt>eig</tt> function are missing. The problem is to understand what those missing forms are and implement them.<br />
<br />
=== Various sparse matrix improvements ===<br />
<br />
The implementation of sparse matrices in Octave needs several improvements. Any of [[Projects#Sparse Matrices|these]] would be good. The paper by [http://arxiv.org/abs/cs.MS/0604006 Bateman & Adler] is good reading for understanding the sparse matrix implementation.<br />
<br />
=== Implement solver for initial-boundary value problems for parabolic-elliptic PDEs in 1D ===<br />
<br />
The project will deliver a solver for initial-boundary value problems for parabolic-elliptic PDEs in 1D similar to Matlab's function <tt>pdepe</tt>. A good starting point is the [http://en.wikipedia.org/wiki/Method_of_lines method of lines] for which you can find more details [http://en.wikibooks.org/wiki/Partial_Differential_Equations/Method_of_Lines here] and [http://www.scholarpedia.org/article/Method_of_lines here], whereas an example implementation can be found [http://www.scholarpedia.org/article/Method_of_Lines/Example_Implementation here]. In addition, [http://www.pdecomp.net/ this page] provides some useful material.<br />
<br />
=== Implement solver for 1D nonlinear boundary value problems ===<br />
<br />
The project will complete the implementation of the bvp4c solver that is already available in an initial version in the odepkg package<br />
by adding a proper error estimator and will implement a matlab-compatible version of the bvp5c solver.<br />
Details on the methods to be implemented can be found in [http://dx.doi.org/10.1145/502800.502801 this paper] on bvp4c and [http://www.jnaiam.net/new/uploads/files/014dde86eef73328e7ab674d1a32aa9c.pdf this paper] on bvp5c. Further details are available in [http://books.google.it/books/about/Nonlinear_two_point_boundary_value_probl.html?id=s_pQAAAAMAAJ&redir_esc=y this book].<br />
<br />
=== Geometric integrators for Hamiltonian Systems ===<br />
<br />
[http://openlibrary.org/books/OL9056139M/Geometric_Numerical_Integration | Geometric (AKA Symplectic) integrators] are useful for <br />
multi-dimensional classical mechanics problems and for molecular dynamics simulations.<br />
The odepkg package has a number of solvers for ODE, DAE and DDE problems but none of them is currently<br />
specifically suited for second order problems in general and Hamiltonian systems in particular.<br />
Therefore a new package for geometric integrators would be a useful contribution.<br />
This could be created as new package or added as a set of new functions for odepkg.<br />
The function interface should be consistent throughout the package and should be modeled to follow <br />
that of other functions in odepkg (or that of DASPK and LSODE) but will need specific extensions to accommodate for specific options that only make sense for this specific class of solvers.<br />
An initial list of methods to be implemented includes (but is not limited to)<br />
* Symplectic Euler methods (TODO: add citation)<br />
* Störmer-Verlet method (TODO: add citation)<br />
* Velocity Verlet method (TODO: add citation)<br />
* Spectral Variational Integrator methods, see [http://arxiv.org/abs/1211.4534 here] or [http://www.math.ucsd.edu/~mleok/pdf/HaLe2012_SVI.pdf here]<br />
* (TODO: other methods?)<br />
For this latter there is an existing code which is already working but needs to be improved, posted on the patch tracker (TODO: not posted yet)<br />
Furthermore, methods to implement solutions of problems with rigid constraints should be implemented, e.g.<br />
* SHAKE (TODO: add citation)<br />
* RATTLE (TODO: add citation)<br />
<br />
'''Potential mentor:''' Mattia Penati, Edie Miglio, Carlo de Falco<br />
<br />
== GUI ==<br />
<br />
Octave is currently working on a new native GUI. It is written in Qt, but it is still not ready for production. There are various ways in which it could be improved.<br />
<br />
'''Required skills''': C++ and Qt. Whatever tools you want to use to write Qt code are fine, but Qt Creator is a popular choice nowadays.<br />
<br />
'''Difficulty''': Mostly medium, depending if you've had Qt or GUI development experience before.<br />
<br />
'''Potential mentor''': Jordi Gutiérrez Hermoso, Michael Goffioul, Torsten<br />
<br />
=== Finish the Octave GUI ===<br />
<br />
The GUI is currently on its own branch in hg. It is not stable enough and its design is still in flux. It is in a very alpha stage and needs to be turned into a real usable product. At the moment, it consists of the basic building blocks (terminal window, editor, variable browser, history, file browser) that are put together into a main interface. The GUI uses the Qt library. Among the things to improve are:<br />
* improve integration with octave: variable browser/editor, debugger, profiler...<br />
* define and implement an option/preferences dialog<br />
* improve additional components like the documentation browser<br />
<br />
=== Implement a Qt widget for manipulating plots ===<br />
<br />
Octave has had for some time a native OpenGL plotter. The plotter requires some user interaction for manipulating the plots, and it's been using fltk for quite some time. We want to replace this with Qt, so it fits better with the overall GUI look-and-feel and is easier to extend in the future.<br />
<br />
[https://github.com/goffioul/QtHandles QtHandles] is a current work in progress integrating the octave OpenGL renderer plus good support for GUI elements (uicontrol, uimenu, uitoolbar...). This project may initially consists of integrating the existing QtHandles code base into Octave. Then if time permits, further improvements can be made to QtHandles.<br />
<br />
=== Create a better (G)UI for the profiler ===<br />
<br />
During GSoC 2011, Daniel Kraft successfully implemented a profiler for Octave. It needs a better interface and a way to generate reports. This may be done with Qt, but not necessarily, and HTML reports might also be good.<br />
<br />
=== Create a graphical design tool for tuning closed loop control system (control pkg) ===<br />
<br />
When tuning a SISO feedback system it is very helpful to be able to grab a pole or a zero and move them by dragging them with the mouse. As they are moving the software must update all the plotted lines. There should be the ability to display various graphs rlocuse, bode, step, impulse etc. and have them all change dynamically as the mouse is moving. The parameters of the compensator must be displayed and updated.<br />
Potential mentor: Doug Stewart<br />
<br />
== Graphics ==<br />
<br />
Octave has a new native OpenGL plotter (currently via [http://en.wikipedia.org/wiki/Fltk fltk], but we want to move away from that). There are several possible projects involved with it.<br />
<br />
'''Required skills''': C++ and OpenGL. General understanding of computer graphics.<br />
<br />
'''Difficulty''': Medium, depending on your previous understanding of the topic.<br />
<br />
'''Potential mentor''': Michael Goffioul<br />
<br />
=== Lighting ===<br />
<br />
Implement transparency and lighting in OpenGL backend(s). A basic implementation is available in [http://octave.svn.sourceforge.net/viewvc/octave/trunk/octave-forge/extra/jhandles/ JHandles]. This needs to be ported/re-implement/re-engineered/optimized in the C++ OpenGL renderer of Octave.<br />
<br />
=== Object selection in OpenGL renderer ===<br />
<br />
This project is about the implementation of a selection method of graphics elements within the OpenGL renderer [http://glprogramming.com/red/chapter13.html]<br />
<br />
=== Non-OpenGL renderer ===<br />
<br />
Besides the original gnuplot backend, Octave also contains an OpenGL-based renderer for advanced and more powerful 3D plots. However, OpenGL is not perfectly suited for 2D-only plots where other methods could result in better graphics. The purpose of this project is to implement an alternate graphics renderer for 2D only plots (although 3D is definitely not the focus, extending the new graphics renderer to support basic 3D features should also be taken into account). There is no particular toolkit/library that must be used, but natural candidates are:<br />
* [http://qt.nokia.com Qt]: the GUI is currently written in Qt and work is also in progress to provide a Qt/OpenGL based backend [https://github.com/goffioul/QtHandles]<br />
* [http://en.wikipedia.org/wiki/Cairo_%28software%29 Cairo]: this library is widely used and known to provides high-quality graphics with support for PS/PDF/SVG output.<br />
<br />
=== TeX/LaTeX markup ===<br />
<br />
Text objects in plots (like titles, labels, texts...) in the OpenGL renderer only support plain text mode without any formatting possibility. Support for TeX and/or LaTeX formatting needs to be added.<br />
<br />
* The TeX formatting support actually only consists of a very limited subset of the TeX language. This can be implemented directly in C++ into Octave by extending the existing text engine, avoiding to add a dependency on a full TeX system. Essentially, support for Greek letters, super/sub-scripts, and several mathematical symbols needs to be supported. For example,<br />
<br />
:<pre>\alpha \approx \beta_0 + \gamma^\chi</pre><br />
<br />
:Would be rendered as,<br />
<br />
:&alpha; &asymp; &beta;<sub>0</sub> + &gamma;<sup>&chi;</sup><br />
<br />
:This is analogous to how special characters may be included in a wiki using html.<br />
<br />
:<pre>&amp;alpha; &amp;asymp; &amp;beta;<sub>0</sub> + &amp;gamma;<sup>&amp;chi;</sup></pre><br />
<br />
:The text object's {{Codeline|extent}} for the rendered result needs to be calculated and the text placed the location specified by the text object's {{Codeline|position}} property. An itemized list of a text objects properties can be found [http://www.gnu.org/software/octave/doc/interpreter/Text-Properties.html here].<br />
<br />
* On the other hand, the LaTeX formatting support is expected to provide full LaTeX capabilities. This will require to use an external LaTeX system to produce text graphics in some format (to be specified) that is then integrated into Octave plots.<br />
<br />
:The matplotlib project [http://matplotlib.sourceforge.net/users/usetex.html has already done this in Python] and might be used as an example of how to do this in Octave. Mediawiki has also also done [http://en.wikipedia.org/wiki/Wikipedia:Texvc something similar].<br />
<br />
== Interpreter ==<br />
<br />
The interpreter is written in C++, undocumented. There are many possible projects associated with it.<br />
<br />
'''Required skills''': ''Very good'' C and C++ knowledge, possibly also understanding of [http://en.wikipedia.org/wiki/Gnu_bison GNU bison] and [http://en.wikipedia.org/wiki/Flex_lexical_analyser flex]. Understanding how compilers and interpreters are made plus being able to understand how to use a profiler and a debugger will probably be essential skills.<br />
<br />
'''Difficulty''': Mid hard to very hard. Some of the biggest problems will probably be the interpreter.<br />
<br />
'''Potential mentors''': John W. Eaton, Jordi Gutiérrez Hermoso, Max Brister.<br />
<br />
=== Improve JIT compiling ===<br />
<br />
Octave's interpreter is ''very'' slow on some loops. Last year, thanks to Max Brister's work, an initial implement of a just-in-time compiler (JITC) in [http://llvm.org LLVM] for GSoC 2012. This project consists in understanding Max's current implementation and extending it so that functions and exponents (e.g. 2^z) compile with the JITC. This requires knowledge of compilers, C++, LLVM, and the Octave or Matlab languages. A capable student who demonstrates the ability to acquire this knowledge quickly may also be considered. Max himself will mentor this project. [http://planet.octave.org/octconf2012/jit.pdf Here] is Max's OctConf 2012 presentation about his current implementation.<br />
<br />
=== Improve memory management ===<br />
<br />
From profiling the interpreter, it appears that a lot of time is spending allocating and deallocating memory. A better memory management algorithm might provide some improvement.<br />
<br />
=== Implement classdef classes ===<br />
<br />
Matlab has two kinds of classes: old style @classes and new style classdef. Octave has only fully implemented the old style. There is partial support for new classes in [http://hg.savannah.gnu.org/hgweb/octave/shortlog/classdef our classdef branch]. There is irregular work here, and classdef is [http://www.mathworks.com/help/matlab/matlab_oop/method-attributes.html a very] [http://www.mathworks.com/help/matlab/events-sending-and-responding-to-messages.html complicated] [http://www.mathworks.com/help/matlab/enumeration-classes.html thing] to fully implement. A successful project would be to implement enough of classdef for most basic usages. Familiarity with Matlab's current classdef support would be a huge plus. Michael Goffioul and jwe can mentor this.<br />
<br />
== Infrastructure ==<br />
<br />
There are several projects closely related to Octave but not exactly core Octave that could be worked on. They are mostly infrastructure around Octave, stuff that would help a lot.<br />
<br />
'''Required skills''': Various. See below.<br />
<br />
'''Difficulty''': Various. See below.<br />
<br />
'''Potential mentor''': Jordi Gutiérrez Hermoso, Carlo de Falco<br />
<br />
=== Finish the Agora website ===<br />
<br />
In 2009, the Mathworks decided to restrict the terms of use Matlab Central, a place dedicated to Matlab collaboration. The Mathworks forbade copyleft licenses and using the "free" code found in Matlab central on anything other than Mathworks products (e.g. forbidding from using it on Octave, even if the authors of the code wanted to allow this). Thus Octave users have no place to centrally, quickly, and conveniently share Octave code. See the [[FAQ#Why_can.27t_I_use_code_from_File_Exchange_in_Octave.3F_It.27s_released_under_a_BSD_license.21|FAQ]] for more details.<br />
<br />
In response to this, a website started to form, [http://agora.octave.org/ Agora Octave].<br />
<br />
This should be relatively easy webdev in Python using [http://en.wikipedia.org/wiki/Django_%28web_framework%29 Django].<br />
<br />
Things to be considered when working on this:<br />
<br />
* [http://octave-forge.blogspot.ie/2012/08/octconf2012-agora-and-pkg.html discussion of Agora during OctConf2012]<br />
* [http://scipy-central.org/ Scipy Central] - a website with the same objective as Agora for Scipy. Their [https://github.com/kgdunn/SciPyCentral/ code] is released under a BSD license. Might be useful to reuse some parts.<br />
<br />
Most of the basic functionality of Agora is already in, but there are many ways in which it could be improved, such as implementing comment threads, giving it an email interface, or a ReSTful API which could be used from Octave for package management.<br />
<br />
=== Update the Emacs octave mode ===<br />
<br />
[http://en.wikipedia.org/wiki/Emacs Emacs] has an octave-mode that requires a lot of updating and maintenance. This should also be an easy project if you already use Emacs and [http://en.wikipedia.org/wiki/Elisp elisp].<br />
<br />
=== Improve binary packaging ===<br />
<br />
We would like to be able to easily generate binary packages for Windows and Mac OS X. Right now, it's difficult and tedious to do so. Any way to help us do this in a faster way would be appreciated. Required knowledge is understanding how building binaries in Windows and Mac OS X works. Our current approach to fixing this is to cross-compile from a GNU system using [http://mxe.cc/ MXE] or [http://lilypond.org/gub/ GUB].<br />
<br />
'''Skills Required''': Knowledge of GNU build systems, Makefiles, configure files, chasing library dependencies, how to use a compiler. If you choose to work on GUB, Python will be required. No m-scripting or C++ necessary, beyond understanding [http://david.rothlis.net/c/compilation_model/ the C++ compilation model].<br />
<br />
'''Difficulty''': Medium to easy. You need to understand how build systems work and how to fix packages when they don't build.<br />
<br />
'''Possible mentors''': John W. Eaton or Jordi Gutiérrez Hermoso<br />
<br />
=== Installation of packages ===<br />
We would like to enhance the management of Octave-forge packages from within Octave environment. Currently there is a working (but rather monolithic) function that is used to do the job. The work would be to improve the way Octave interacts with the package server. Since the functionality is already sketched by the current function, the most important skill is software design.<br />
<br />
'''Minimum requirements''': Ability to read and write Octave code. Minimal FTP/HTTP knowledge.<br />
<br />
'''Difficulty''': Easy<br />
<br />
== Octave-Forge packages ==<br />
<br />
=== Rewrite symbolic package ===<br />
Octave's current [http://octave.svn.sourceforge.net/viewvc/octave/trunk/octave-forge/main/symbolic/ symbolic] package for symbolic computation is outdated, fragile and limited in its capabilities. The new symbolic package should offer better Matlab compatibility, for example handling of symbolic matrices. Like the current symbolic package, the new package could use the proven [http://www.ginac.de/ GiNaC] library for symbolic computations.<br />
<br />
The work would be to integrate GiNaC by using Octave's objects and classes. This can be done in C++ in a way similar to Michele Martone's new [http://librsb.sourceforge.net/ sparsersb] package.<br />
<br />
'''Required skills''': C++. Ability to understand Octave and GiNaC API documentation.<br />
<br />
'''Difficulty''': medium.<br />
<br />
'''Potential mentor''': Lukas Reichlin<br />
<br />
=== Improvements to n-dimensional image processing ===<br />
<br />
The image package has partial functionality for n-dimensional images. These images do exist in practice for example in medical imaging where slices from scans are assembled to form anatomical 3d images, or even exposures taken over time on different wavelengths can result in 5d images. All of the base functions should be modified so that they can handle n-dimensional images, and corresponding Matlab functions such as <code>bwconncomp</code> or n-dimensional version of <code>bwdist</code> should be implemented. In addition,<br />
the core functions {{codeline|imwrite}} and {{codeline|imread}} need to be adjusted to deal with this type images (usually multipage TIFF).<br />
<br />
'''Required skills''': Mostly m-file scripting, perhaps some C++. Familiarity with common CS algorithms would be useful.<br />
<br />
'''Difficulty''': medium.<br />
<br />
'''Potential mentor''': Jordi Gutiérrez Hermoso<br />
<br />
=== Interface to Electronic Circuit Simulator ===<br />
<br />
[http://sourceforge.net/projects/qucs/ Qucs] is a C++ based circuit simulation package. This project aims to create an interface to the Qucs algorithms to allow the transient, i.e. time series, simulation of circuits in Octave within a larger ODE system simulation, and possibly make other analysis types available directly from Octave. The C++ interface would be based on handle class syntax currently in development in the <code>classdef</code> branch of the repository. This method has already been successfully tested on other projects, and examples of this type of interface are available (e.g. [https://sourced.ecdf.ed.ac.uk/projects/see/xfemm here] and [https://www.mathworks.com/matlabcentral/fileexchange/38964-example-matlab-class-wrapper-for-a-c++-class here]).<br />
<br />
'''Required skills''': C++ and m-file scripting. Familiarity with new classdef syntax would be useful. May require some modification/adaptation of the Qucs sources. Familiarity with the Octave ODE solvers useful but not essential.<br />
<br />
'''Difficulty''': medium.<br />
<br />
'''Potential mentor''': Richard Crozier<br />
<br />
'''Main Goals'''<br />
* Create an Octave circuit class which can load and parse a Qucs circuit netlist<br />
* Create class methods with functionality similar to the <code>trsolver</code> C++ class methods in Qucs, i.e with the ability to call the DC solution code, and transient solution code at each time step. <br />
* Create a method of accessing the current circuit solution values in Octave at each time step.<br />
'''Bonus Goals'''<br />
* Create new circuit elements which allow Octave to apply voltages and currents during a circuit simulation.<br />
<br />
<br />
=== Fix audio processing ===<br />
<br />
Audio processing is currently almost completely broken in Octave. It currently only works with Linux's Open Sound System, which most Linux installations don't use anymore. We therefore need a modern, cross-platform way to play and record audio. This could be part of the Octave-Forge audio package, but the core audio functions themselves are also lacking. We need this to work across OSes, so an external audio library should be used. [http://www.portaudio.com/ Portaudio] or [http://www.music.mcgill.ca/~gary/rtaudio/ rtaudio] seem like a mature possibility. The core <code>play</code> and <code>record</code> functions should be fixed to use an external audio library, and in addition, the <code>audiorecorder</code> and <code>audioplayer</code> classes should be implemented.<br />
<br />
'''Required skills''': C++ and probably at least a superficial understanding of signal or audio processing.<br />
<br />
'''Difficulty''': Medium, depending on the abilities of the student.<br />
<br />
'''Possible mentors''': Pantxo Diribarne, Mike Miller<br />
<br />
=== Color management functions in image package ===<br />
<br />
The goal is to implement these functions:<br />
<br />
iccread<br />
iccwrite<br />
makecform<br />
applycform<br />
<br />
These functions are useful for color management, in particular for converting data (especially images) between color spaces. ICC profiles are essentially used to store look-up tables or matrix transforms (or both) that define the conversions. For example, to convert an CMYK image to sRGB, you would load a "print" ICC profile that defines the conversion from CMYK to L*a*b* (the CIE color space that is supposed to match the human visual system), then load another profile that defines the conversion from L*a*b* to sRGB (there is a standard profile for this conversion (IEC 61966-2-1), which is why Matlab has a built-in conversion from sRGB to L*a*b*). To do the above conversions in Matlab, you would use the following code:<br />
<br />
<syntaxhighlight lang="octave"><br />
cmykImage = double(imread('cmyk-image-filename.tif'));<br />
iccProfile = iccread('icc-profile-filename.icc');<br />
labImage = applycform(cmykImage, makecform('clut', iccProfile, 'AToB3'));<br />
rgbImage = applycform(labImage, makecform('lab2srgb'));<br />
</syntaxhighlight><br />
<br />
The <code>'AToB3'</code> selects one of the color transforms (look-up tables) contained in the profile. This one is "Absolute Colorimetric." More details on ICC profiles may be obtained from [http://www.color.org/icc_specs2.xalter the ICC spec].<br />
<br />
Knowledge of ICC profiles (at least knowledge of their application) would be a prerequisite. Since [http://www.littlecms.com/ littlecms] implements all the necessary functions for reading, writing, and applying profiles, it would be primarily a matter of integrating this library into Octave (assuming that is the preferred implementation -- one could certainly read the ICC files directly, but why reinvent that particular wheel).<br />
<br />
'''Required skills''': C++ programming, some knowledge of ICC profiles desirable.<br />
<br />
'''Difficulty''': Easy.<br />
<br />
'''Possible Mentor''': Patrick Noffke <patrick.noffke@gmail.com></div>131.175.161.12https://wiki.octave.org/wiki/index.php?title=OctConf_2013&diff=2729OctConf 20132013-05-09T14:32:54Z<p>131.175.161.12: </p>
<hr />
<div>Following the success of OctConf 2012 which brought together users and<br />
developers for five days in July in the French Canadian summer,<br />
the first european OctConf will be held in Milan, Italy on June 24-26<br />
2013. <br />
<br />
OctConf is a good opportunity to meet Octave developers and users from all over the world and discuss current and <br />
future directions of the Octave project.<br />
<br />
Please go to <br />
[http://www2.mate.polimi.it/ocs/index.php?cf=42 the registration website] if you wish to attend.<br />
There is no fee for participating but registration is mandatory as places are limited.<br />
If you also wish to give a presentation please post a one page abstract with your registration.<br />
Limited amount funding for travel and accommodation support is available, if you need such support<br />
please mention it in your registration.<br />
<br />
<!-- {{Note|in order to give you wireless access during the<br />
conference, our host university requires your name and address 3 weeks<br />
in advance to the conference date. Email this information to Jordi so<br />
he can make arrangements.}}<br />
<br />
[[File:octave-poster.png|200px|thumb|right|OctConf 2012 poster]] <br />
--><br />
== Location ==<br />
<br />
=== Hosting Institution and Local Sponsors ===<br />
<br />
OctConf 2013 will be hosted by the [http://mox.polimi.it MOX]<br />
Modeling and Scientific Computing lab at the<br />
[http://www.mate.polimi.it Department of Mathematics] of Milan Technical University ([http://www.polimi.it Politecnico di Milano]), <br />
and will be partially supported by [http://moxoff.com/ MOXOFF].<br />
<br />
=== Venue ===<br />
<br />
The meeting will be held on the 7th floor of Building 14 ("La Nave")<br />
of the "Leonardo" campus of Politecnico di Milano in the<br />
[http://www.mate.polimi.it Department meeting room].<br />
<br />
=== Milano, Italy ===<br />
<br />
Milan is one of the most art and history rich cities in Italy, and it<br />
is within 100 miles of all the most beautiful locations in northern Italy<br />
including the Alps, the Mediterranean Sea and the lake region. With<br />
new high speed train connections it is also about 2 and a half hours<br />
away from Rome. There are 3 international airports in Milan all served<br />
by Low-Cost companies that offer cheap flights to/from most cities in<br />
Europe, Northern Africa and the Middle East. <br />
<br />
Summer in Milano can be quite hot and humid but rain is very rare. The<br />
city has a very serviceable public transportation network of buses and<br />
underground trains (metro), there is also a public bike rental service<br />
but none of the bike rental stations is located conveniently enough to<br />
serve the Politecnico campus at this time yet.<br />
<br />
==== How to get there ====<br />
<br />
The reference is: <br />
<br />
MOX - Modeling and Scientific Computing<br />
Dipartimento di Matematica "F. Brioschi"<br />
Politecnico di Milano<br />
via Bonardi 9<br />
Edificio 14 ("La Nave") <br />
<br />
See [http://mox.polimi.it/it/informazioni/dove.php3?en=en this page] on the MOX website for<br />
directions, or check out [http://goo.gl/maps/RPP35 this link] on Google maps.<br />
<br />
=== Lodging ===<br />
<br />
See [http://mox.polimi.it/~carlo/accom.html this page] for lodging opportunities in<br />
the vicinity of the Politecnico Leonardo campus. <br />
<br />
== Dates ==<br />
<br />
June 24-26, 2013. Each day will be focusing on a specific topic <br />
<br />
* Day 1 : Octave in Education<br />
* Day 2 : Octave in Academic Research<br />
* Day 3 : Octave in Engineering Applications<br />
<br />
== Detailed Schedule ==<br />
<br />
{| class="wikitable" style="text-align: center;"<br />
|<br />
|''Monday''<br />
|''Tuesday''<br />
|''Wednesday''<br />
|-<br />
|09:15<br />
|'''Coffee & croissants'''<br />
|'''Coffee & croissants'''<br />
|'''Coffee & croissants'''<br />
|-<br />
|09:30<br />
|Talk &mdash; TBA<br />
|Talk &mdash; TBA<br />
|Talk &mdash; TBA<br />
|-<br />
|10:15<br />
|Talk &mdash; TBA<br />
|Talk &mdash; TBA<br />
|Talk &mdash; TBA<br />
|-<br />
|11:00<br />
|'''Coffee break'''<br />
|'''Coffee break'''<br />
|'''Coffee break'''<br />
|-<br />
|11:15<br />
|Open discussion<br />
|Open discussion<br />
|Open discussion<br />
|-<br />
|13:15<br />
|'''Lunch'''<br />
|'''Lunch'''<br />
|'''Lunch'''<br />
|-<br />
|14:30<br />
|Tutorial 1: TBA<br />
|Tutorial 2: TBA<br />
|Tutorial 3: TBA<br />
|-<br />
|15:45<br />
|'''Coffee break'''<br />
|'''Coffee break'''<br />
|'''Coffee break'''<br />
|-<br />
|16:00<br />
|Code sprints<br />
|Code sprints<br />
|Code sprints<br />
|-<br />
|17:30<br />
|Status reports<br />
|Status reports<br />
|Status reports<br />
|-<br />
|18:00<br />
|<br />
|Social event<br />
|<br />
|-}<br />
<br />
<br />
<br />
=== Monday ===<br />
<br />
<br />
=== Tuesday ===<br />
<br />
=== Wednesday ===<br />
<br />
<br />
== Participants ==<br />
<br />
The registration procedure has now been moved [http://www2.mate.polimi.it/ocs/?cf=42 here] <br />
The complete list of participants will be published here after the conference.<br />
<br />
<!--<br />
* [http://jweaton.org John W. Eaton]<br />
* Andreas Stahel, Bern University of Applied Sciences<br />
* Jordi Gutiérrez Hermoso + Jan (OctConf bande dessinée illustrator)<br />
* [http://wiki.octave.org/User:KaKiLa Juan Pablo Carbajal], Ghent University.<br />
* [http://home.rzg.mpg.de/~mima/ Michele Martone] (Max Planck Institute for Plasma Physics, Garching, Germany)<br />
--><br />
<br />
== Funding ==<br />
<br />
There is limited funding to cover the travel expenses of selected participants.<br />
<br />
== Previous OctConf ==<br />
[[OctConf_2012| OctConf 2012]]<br />
<br />
== Next OctConf ==<br />
[[OctConf_2014| OctConf 2014]]</div>131.175.161.12https://wiki.octave.org/wiki/index.php?title=OctConf_2013&diff=2728OctConf 20132013-05-09T14:18:25Z<p>131.175.161.12: /* Participants */</p>
<hr />
<div>Following the success of OctConf 2012 which brought together users and<br />
developers for five days in July in the French Canadian summer,<br />
the first european OctConf will be held in Milan, Italy on June 24-26<br />
2013. <br />
<br />
OctConf is a good opportunity to meet Octave developers and users from all over the world and discuss current and <br />
future directions of the Octave project.<br />
<br />
Please go to <br />
[http://www2.mate.polimi.it/ocs/index.php?cf=42 the registration website] if you wish to attend.<br />
There is no fee for participating but registration is mandatory as places are limited.<br />
If you also wish to give a presentation please post a one page abstract with your registration.<br />
Limited amount funding for travel and accommodation support is available, if you need such support<br />
please mention it in your registration.<br />
<br />
<!-- {{Note|in order to give you wireless access during the<br />
conference, our host university requires your name and address 3 weeks<br />
in advance to the conference date. Email this information to Jordi so<br />
he can make arrangements.}}<br />
<br />
[[File:octave-poster.png|200px|thumb|right|OctConf 2012 poster]] <br />
--><br />
== Location ==<br />
<br />
=== Hosting Institution and Local Sponsors ===<br />
<br />
OctConf 2013 will be hosted by the [http://mox.polimi.it MOX]<br />
Modeling and Scientific Computing lab at the<br />
[http://www.mate.polimi.it Department of Mathematics] of Milan Technical University ([http://www.polimi.it Politecnico di Milano]), <br />
and will be partially supported by [http://moxoff.com/ MOXOFF].<br />
<br />
=== Venue ===<br />
<br />
The meeting will be held on the 7th floor of Building 14 ("La Nave")<br />
of the "Leonardo" campus of Politecnico di Milano in the<br />
[http://www.mate.polimi.it Department meeting room].<br />
<br />
=== Milano, Italy ===<br />
<br />
Milan is one of the most art and history rich cities in Italy, and it<br />
is within 100 miles of all the most beautiful locations in northern Italy<br />
including the Alps, the Mediterranean Sea and the lake region. With<br />
new high speed train connections it is also about 2 and a half hours<br />
away from Rome. There are 3 international airports in Milan all served<br />
by Low-Cost companies that offer cheap flights to/from most cities in<br />
Europe, Northern Africa and the Middle East. <br />
<br />
Summer in Milano can be quite hot and humid but rain is very rare. The<br />
city has a very serviceable public transportation network of buses and<br />
underground trains (metro), there is also a public bike rental service<br />
but none of the bike rental stations is located conveniently enough to<br />
serve the Politecnico campus at this time yet.<br />
<br />
==== How to get there ====<br />
<br />
The reference is: <br />
<br />
MOX - Modeling and Scientific Computing<br />
Dipartimento di Matematica "F. Brioschi"<br />
Politecnico di Milano<br />
via Bonardi 9<br />
Edificio 14 ("La Nave") <br />
<br />
See [http://mox.polimi.it/it/informazioni/dove.php3?en=en this page] on the MOX website for<br />
directions, or check out [http://goo.gl/maps/RPP35 this link] on Google maps.<br />
<br />
=== Lodging ===<br />
<br />
See [http://mox.polimi.it/~carlo/accom.html this page] for lodging opportunities in<br />
the vicinity of the Politecnico Leonardo campus. <br />
<br />
== Dates ==<br />
<br />
June 24-26, 2013. Each day will be focusing on a specific topic <br />
<br />
* Day 1 : Octave in Education<br />
* Day 2 : Octave in Academic Research<br />
* Day 3 : Octave in Engineering Applications<br />
<br />
=== Detailed Schedule ===<br />
<br />
{| class="wikitable" style="text-align: center;"<br />
|<br />
|''Monday''<br />
|''Tuesday''<br />
|''Wednesday''<br />
|-<br />
|09:15<br />
|'''Coffee & croissants'''<br />
|'''Coffee & croissants'''<br />
|'''Coffee & croissants'''<br />
|-<br />
|09:30<br />
|Talk &mdash; TBA<br />
|Talk &mdash; TBA<br />
|Talk &mdash; TBA<br />
|-<br />
|10:15<br />
|Talk &mdash; TBA<br />
|Talk &mdash; TBA<br />
|Talk &mdash; TBA<br />
|-<br />
|11:00<br />
|'''Coffee break'''<br />
|'''Coffee break'''<br />
|'''Coffee break'''<br />
|-<br />
|11:15<br />
|Open discussion<br />
|Open discussion<br />
|Open discussion<br />
|-<br />
|13:15<br />
|'''Lunch'''<br />
|'''Lunch'''<br />
|'''Lunch'''<br />
|-<br />
|14:30<br />
|Tutorial 1: TBA<br />
|Tutorial 2: TBA<br />
|Tutorial 3: TBA<br />
|-<br />
|15:45<br />
|'''Coffee break'''<br />
|'''Coffee break'''<br />
|'''Coffee break'''<br />
|-<br />
|16:00<br />
|Code sprints<br />
|Code sprints<br />
|Code sprints<br />
|-<br />
|17:30<br />
|Status reports<br />
|Status reports<br />
|Status reports<br />
|-<br />
|18:00<br />
|<br />
|Social event<br />
|<br />
|-}<br />
<br />
Some specifics:<br />
<br />
=== Monday ===<br />
<br />
<br />
=== Tuesday ===<br />
<br />
=== Wednesday ===<br />
<br />
<br />
== Participants ==<br />
<br />
The registration procedure has now been moved [http://www2.mate.polimi.it/ocs/?cf=42 here] <br />
The complete list of participants will be published here after the conference.<br />
<br />
<!--<br />
* [http://jweaton.org John W. Eaton]<br />
* Andreas Stahel, Bern University of Applied Sciences<br />
* Jordi Gutiérrez Hermoso + Jan (OctConf bande dessinée illustrator)<br />
* [http://wiki.octave.org/User:KaKiLa Juan Pablo Carbajal], Ghent University.<br />
* [http://home.rzg.mpg.de/~mima/ Michele Martone] (Max Planck Institute for Plasma Physics, Garching, Germany)<br />
--><br />
<br />
== Funding ==<br />
<br />
There is limited funding to cover the travel expenses of selected participants.<br />
<br />
== Previous OctConf ==<br />
[[OctConf_2012| OctConf 2012]]<br />
<br />
== Next OctConf ==<br />
[[OctConf_2014| OctConf 2014]]</div>131.175.161.12https://wiki.octave.org/wiki/index.php?title=OctConf_2013&diff=2727OctConf 20132013-05-09T14:17:30Z<p>131.175.161.12: </p>
<hr />
<div>Following the success of OctConf 2012 which brought together users and<br />
developers for five days in July in the French Canadian summer,<br />
the first european OctConf will be held in Milan, Italy on June 24-26<br />
2013. <br />
<br />
OctConf is a good opportunity to meet Octave developers and users from all over the world and discuss current and <br />
future directions of the Octave project.<br />
<br />
Please go to <br />
[http://www2.mate.polimi.it/ocs/index.php?cf=42 the registration website] if you wish to attend.<br />
There is no fee for participating but registration is mandatory as places are limited.<br />
If you also wish to give a presentation please post a one page abstract with your registration.<br />
Limited amount funding for travel and accommodation support is available, if you need such support<br />
please mention it in your registration.<br />
<br />
<!-- {{Note|in order to give you wireless access during the<br />
conference, our host university requires your name and address 3 weeks<br />
in advance to the conference date. Email this information to Jordi so<br />
he can make arrangements.}}<br />
<br />
[[File:octave-poster.png|200px|thumb|right|OctConf 2012 poster]] <br />
--><br />
== Location ==<br />
<br />
=== Hosting Institution and Local Sponsors ===<br />
<br />
OctConf 2013 will be hosted by the [http://mox.polimi.it MOX]<br />
Modeling and Scientific Computing lab at the<br />
[http://www.mate.polimi.it Department of Mathematics] of Milan Technical University ([http://www.polimi.it Politecnico di Milano]), <br />
and will be partially supported by [http://moxoff.com/ MOXOFF].<br />
<br />
=== Venue ===<br />
<br />
The meeting will be held on the 7th floor of Building 14 ("La Nave")<br />
of the "Leonardo" campus of Politecnico di Milano in the<br />
[http://www.mate.polimi.it Department meeting room].<br />
<br />
=== Milano, Italy ===<br />
<br />
Milan is one of the most art and history rich cities in Italy, and it<br />
is within 100 miles of all the most beautiful locations in northern Italy<br />
including the Alps, the Mediterranean Sea and the lake region. With<br />
new high speed train connections it is also about 2 and a half hours<br />
away from Rome. There are 3 international airports in Milan all served<br />
by Low-Cost companies that offer cheap flights to/from most cities in<br />
Europe, Northern Africa and the Middle East. <br />
<br />
Summer in Milano can be quite hot and humid but rain is very rare. The<br />
city has a very serviceable public transportation network of buses and<br />
underground trains (metro), there is also a public bike rental service<br />
but none of the bike rental stations is located conveniently enough to<br />
serve the Politecnico campus at this time yet.<br />
<br />
==== How to get there ====<br />
<br />
The reference is: <br />
<br />
MOX - Modeling and Scientific Computing<br />
Dipartimento di Matematica "F. Brioschi"<br />
Politecnico di Milano<br />
via Bonardi 9<br />
Edificio 14 ("La Nave") <br />
<br />
See [http://mox.polimi.it/it/informazioni/dove.php3?en=en this page] on the MOX website for<br />
directions, or check out [http://goo.gl/maps/RPP35 this link] on Google maps.<br />
<br />
=== Lodging ===<br />
<br />
See [http://mox.polimi.it/~carlo/accom.html this page] for lodging opportunities in<br />
the vicinity of the Politecnico Leonardo campus. <br />
<br />
== Dates ==<br />
<br />
June 24-26, 2013. Each day will be focusing on a specific topic <br />
<br />
* Day 1 : Octave in Education<br />
* Day 2 : Octave in Academic Research<br />
* Day 3 : Octave in Engineering Applications<br />
<br />
=== Detailed Schedule ===<br />
<br />
{| class="wikitable" style="text-align: center;"<br />
|<br />
|''Monday''<br />
|''Tuesday''<br />
|''Wednesday''<br />
|-<br />
|09:15<br />
|'''Coffee & croissants'''<br />
|'''Coffee & croissants'''<br />
|'''Coffee & croissants'''<br />
|-<br />
|09:30<br />
|Talk &mdash; TBA<br />
|Talk &mdash; TBA<br />
|Talk &mdash; TBA<br />
|-<br />
|10:15<br />
|Talk &mdash; TBA<br />
|Talk &mdash; TBA<br />
|Talk &mdash; TBA<br />
|-<br />
|11:00<br />
|'''Coffee break'''<br />
|'''Coffee break'''<br />
|'''Coffee break'''<br />
|-<br />
|11:15<br />
|Open discussion<br />
|Open discussion<br />
|Open discussion<br />
|-<br />
|13:15<br />
|'''Lunch'''<br />
|'''Lunch'''<br />
|'''Lunch'''<br />
|-<br />
|14:30<br />
|Tutorial 1: TBA<br />
|Tutorial 2: TBA<br />
|Tutorial 3: TBA<br />
|-<br />
|15:45<br />
|'''Coffee break'''<br />
|'''Coffee break'''<br />
|'''Coffee break'''<br />
|-<br />
|16:00<br />
|Code sprints<br />
|Code sprints<br />
|Code sprints<br />
|-<br />
|17:30<br />
|Status reports<br />
|Status reports<br />
|Status reports<br />
|-<br />
|18:00<br />
|<br />
|Social event<br />
|<br />
|-}<br />
<br />
Some specifics:<br />
<br />
=== Monday ===<br />
<br />
<br />
=== Tuesday ===<br />
<br />
=== Wednesday ===<br />
<br />
<br />
== Participants ==<br />
<br />
The registration procedure has now been moved [http://www2.mate.polimi.it/ocs/?cf=42 here] <br />
The complete list of participants will be published here after the conference.<br />
<br />
<!--<br />
* [http://jweaton.org John W. Eaton]<br />
* Andreas Stahel, Bern University of Applied Sciences<br />
* Jordi Gutiérrez Hermoso + Jan (OctConf bande dessinée illustrator)<br />
* [http://wiki.octave.org/User:KaKiLa Juan Pablo Carbajal], Ghent University.<br />
* [http://home.rzg.mpg.de/~mima/ Michele Martone] (Max Planck Institute for Plasma Physics, Garching, Germany)<br />
--!><br />
<br />
== Funding ==<br />
<br />
There is limited funding to cover the travel expenses of selected participants.<br />
<br />
== Previous OctConf ==<br />
[[OctConf_2012| OctConf 2012]]<br />
<br />
== Next OctConf ==<br />
[[OctConf_2014| OctConf 2014]]</div>131.175.161.12https://wiki.octave.org/wiki/index.php?title=OctConf_2013&diff=2726OctConf 20132013-05-09T14:16:47Z<p>131.175.161.12: </p>
<hr />
<div>Following the success of OctConf 2012 which brought together users and<br />
developers for five days in July in the French Canadian summer,<br />
the first european OctConf will be held in Milan, Italy on June 24-26<br />
2013. <br />
<br />
OctConf is a good opportunity to meet Octave developers and users from all over the world and discuss current and <br />
future directions of the Octave project.<br />
<br />
Please go to <br />
[http://www2.mate.polimi.it/ocs/index.php?cf=42 the registration website] if you wish to attend.<br />
There is no fee for participating but registration is mandatory as places are limited.<br />
If you also wish to give a presentation please post a one page abstract with your registration.<br />
Limited amount funding for travel and accommodation support is available, if you need such support<br />
please mention it in your registration.<br />
<br />
<!-- {{Note|in order to give you wireless access during the<br />
conference, our host university requires your name and address 3 weeks<br />
in advance to the conference date. Email this information to Jordi so<br />
he can make arrangements.}}<br />
<br />
[[File:octave-poster.png|200px|thumb|right|OctConf 2012 poster]] <br />
--!><br />
== Location ==<br />
<br />
=== Hosting Institution and Local Sponsors ===<br />
<br />
OctConf 2013 will be hosted by the [http://mox.polimi.it MOX]<br />
Modeling and Scientific Computing lab at the<br />
[http://www.mate.polimi.it Department of Mathematics] of Milan Technical University ([http://www.polimi.it Politecnico di Milano]), <br />
and will be partially supported by [http://moxoff.com/ MOXOFF].<br />
<br />
=== Venue ===<br />
<br />
The meeting will be held on the 7th floor of Building 14 ("La Nave")<br />
of the "Leonardo" campus of Politecnico di Milano in the<br />
[http://www.mate.polimi.it Department meeting room].<br />
<br />
=== Milano, Italy ===<br />
<br />
Milan is one of the most art and history rich cities in Italy, and it<br />
is within 100 miles of all the most beautiful locations in northern Italy<br />
including the Alps, the Mediterranean Sea and the lake region. With<br />
new high speed train connections it is also about 2 and a half hours<br />
away from Rome. There are 3 international airports in Milan all served<br />
by Low-Cost companies that offer cheap flights to/from most cities in<br />
Europe, Northern Africa and the Middle East. <br />
<br />
Summer in Milano can be quite hot and humid but rain is very rare. The<br />
city has a very serviceable public transportation network of buses and<br />
underground trains (metro), there is also a public bike rental service<br />
but none of the bike rental stations is located conveniently enough to<br />
serve the Politecnico campus at this time yet.<br />
<br />
==== How to get there ====<br />
<br />
The reference is: <br />
<br />
MOX - Modeling and Scientific Computing<br />
Dipartimento di Matematica "F. Brioschi"<br />
Politecnico di Milano<br />
via Bonardi 9<br />
Edificio 14 ("La Nave") <br />
<br />
See [http://mox.polimi.it/it/informazioni/dove.php3?en=en this page] on the MOX website for<br />
directions, or check out [http://goo.gl/maps/RPP35 this link] on Google maps.<br />
<br />
=== Lodging ===<br />
<br />
See [http://mox.polimi.it/~carlo/accom.html this page] for lodging opportunities in<br />
the vicinity of the Politecnico Leonardo campus. <br />
<br />
== Dates ==<br />
<br />
June 24-26, 2013. Each day will be focusing on a specific topic <br />
<br />
* Day 1 : Octave in Education<br />
* Day 2 : Octave in Academic Research<br />
* Day 3 : Octave in Engineering Applications<br />
<br />
=== Detailed Schedule ===<br />
<br />
{| class="wikitable" style="text-align: center;"<br />
|<br />
|''Monday''<br />
|''Tuesday''<br />
|''Wednesday''<br />
|-<br />
|09:15<br />
|'''Coffee & croissants'''<br />
|'''Coffee & croissants'''<br />
|'''Coffee & croissants'''<br />
|-<br />
|09:30<br />
|Talk &mdash; TBA<br />
|Talk &mdash; TBA<br />
|Talk &mdash; TBA<br />
|-<br />
|10:15<br />
|Talk &mdash; TBA<br />
|Talk &mdash; TBA<br />
|Talk &mdash; TBA<br />
|-<br />
|11:00<br />
|'''Coffee break'''<br />
|'''Coffee break'''<br />
|'''Coffee break'''<br />
|-<br />
|11:15<br />
|Open discussion<br />
|Open discussion<br />
|Open discussion<br />
|-<br />
|13:15<br />
|'''Lunch'''<br />
|'''Lunch'''<br />
|'''Lunch'''<br />
|-<br />
|14:30<br />
|Tutorial 1: TBA<br />
|Tutorial 2: TBA<br />
|Tutorial 3: TBA<br />
|-<br />
|15:45<br />
|'''Coffee break'''<br />
|'''Coffee break'''<br />
|'''Coffee break'''<br />
|-<br />
|16:00<br />
|Code sprints<br />
|Code sprints<br />
|Code sprints<br />
|-<br />
|17:30<br />
|Status reports<br />
|Status reports<br />
|Status reports<br />
|-<br />
|18:00<br />
|<br />
|Social event<br />
|<br />
|-}<br />
<br />
Some specifics:<br />
<br />
=== Monday ===<br />
<br />
<br />
=== Tuesday ===<br />
<br />
=== Wednesday ===<br />
<br />
<br />
== Participants ==<br />
<br />
The registration procedure has now been moved [http://www2.mate.polimi.it/ocs/?cf=42 here] <br />
The complete list of participants will be published here after the conference.<br />
<br />
<!--<br />
* [http://jweaton.org John W. Eaton]<br />
* Andreas Stahel, Bern University of Applied Sciences<br />
* Jordi Gutiérrez Hermoso + Jan (OctConf bande dessinée illustrator)<br />
* [http://wiki.octave.org/User:KaKiLa Juan Pablo Carbajal], Ghent University.<br />
* [http://home.rzg.mpg.de/~mima/ Michele Martone] (Max Planck Institute for Plasma Physics, Garching, Germany)<br />
--!><br />
<br />
== Funding ==<br />
<br />
There is limited funding to cover the travel expenses of selected participants.<br />
<br />
== Previous OctConf ==<br />
[[OctConf_2012| OctConf 2012]]<br />
<br />
== Next OctConf ==<br />
[[OctConf_2014| OctConf 2014]]</div>131.175.161.12https://wiki.octave.org/wiki/index.php?title=OctConf_2013&diff=2725OctConf 20132013-05-09T14:15:14Z<p>131.175.161.12: </p>
<hr />
<div>Following the success of OctConf 2012 which brought together users and<br />
developers for five days in July in the French Canadian summer,<br />
the first european OctConf will be held in Milan, Italy on June 24-26<br />
2013. <br />
<br />
OctConf is a good opportunity to meet Octave developers and users from all over the world and discuss current and <br />
future directions of the Octave project.<br />
<br />
Please go to <br />
[http://www2.mate.polimi.it/ocs/index.php?cf=42 the registration website] if you wish to attend.<br />
There is no fee for participating but registration is mandatory as places are limited.<br />
If you also wish to give a presentation please post a one page abstract with your registration.<br />
Limited amount funding for travel and accommodation support is available, if you need such support<br />
please mention it in your registration.<br />
<br />
<!-- {{Note|in order to give you wireless access during the<br />
conference, our host university requires your name and address 3 weeks<br />
in advance to the conference date. Email this information to Jordi so<br />
he can make arrangements.}}<br />
<br />
[[File:octave-poster.png|200px|thumb|right|OctConf 2012 poster]] <br />
--!><br />
== Location ==<br />
<br />
=== Hosting Institution and Local Sponsors ===<br />
<br />
OctConf 2013 will be hosted by the [http://mox.polimi.it MOX]<br />
Modeling and Scientific Computing lab at the<br />
[http://www.mate.polimi.it Department of Mathematics] of Milan Technical University ([http://www.polimi.it Politecnico di Milano]), <br />
and will be partially supported by [http://moxoff.com/ MOXOFF].<br />
<br />
=== Venue ===<br />
<br />
The meeting will be held on the 7th floor of Building 14 ("La Nave")<br />
of the "Leonardo" campus of Politecnico di Milano in the<br />
[http://www.mate.polimi.it Department meeting room].<br />
<br />
=== Milano, Italy ===<br />
<br />
Milan is one of the most art and history rich cities in Italy, and it<br />
is within 100 miles of all the most beautiful locations in northern Italy<br />
including the Alps, the Mediterranean Sea and the lake region. With<br />
new high speed train connections it is also about 2 and a half hours<br />
away from Rome. There are 3 international airports in Milan all served<br />
by Low-Cost companies that offer cheap flights to/from most cities in<br />
Europe, Northern Africa and the Middle East. <br />
<br />
Summer in Milano can be quite hot and humid but rain is very rare. The<br />
city has a very serviceable public transportation network of buses and<br />
underground trains (metro), there is also a public bike rental service<br />
but none of the bike rental stations is located conveniently enough to<br />
serve the Politecnico campus at this time yet.<br />
<br />
==== How to get there ====<br />
<br />
The reference is: <br />
<br />
MOX - Modeling and Scientific Computing<br />
Dipartimento di Matematica "F. Brioschi"<br />
Politecnico di Milano<br />
via Bonardi 9<br />
Edificio 14 ("La Nave") <br />
<br />
See [http://mox.polimi.it/it/informazioni/dove.php3?en=en this page] on the MOX website for<br />
directions, or check out [http://goo.gl/maps/RPP35 this link] on Google maps.<br />
<br />
=== Lodging ===<br />
<br />
See [http://mox.polimi.it/~carlo/accom.html this page] for lodging opportunities in<br />
the vicinity of the Politecnico Leonardo campus. <br />
<br />
== Dates ==<br />
<br />
June 24-26, 2013. Each day will be focusing on a specific topic <br />
<br />
* Day 1 : Octave in Education<br />
* Day 2 : Octave in Academic Research<br />
* Day 3 : Octave in Engineering Applications<br />
<br />
=== Detailed Schedule ===<br />
<br />
{| class="wikitable" style="text-align: center;"<br />
|<br />
|''Monday''<br />
|''Tuesday''<br />
|''Wednesday''<br />
|-<br />
|09:15<br />
|'''Coffee & croissants'''<br />
|'''Coffee & croissants'''<br />
|'''Coffee & croissants'''<br />
|-<br />
|09:30<br />
|Talk &mdash; TBA<br />
|Talk &mdash; TBA<br />
|Talk &mdash; TBA<br />
|-<br />
|10:15<br />
|Talk &mdash; TBA<br />
|Talk &mdash; TBA<br />
|Talk &mdash; TBA<br />
|-<br />
|11:00<br />
|'''Coffee break'''<br />
|'''Coffee break'''<br />
|'''Coffee break'''<br />
|-<br />
|11:15<br />
|Open discussion<br />
|Open discussion<br />
|Open discussion<br />
|-<br />
|13:15<br />
|'''Lunch'''<br />
|'''Lunch'''<br />
|'''Lunch'''<br />
|-<br />
|14:30<br />
|Tutorial 1: TBA<br />
|Tutorial 2: TBA<br />
|Tutorial 3: TBA<br />
|-<br />
|15:45<br />
|'''Coffee break'''<br />
|'''Coffee break'''<br />
|'''Coffee break'''<br />
|-<br />
|16:00<br />
|Code sprints<br />
|Code sprints<br />
|Code sprints<br />
|-<br />
|17:30<br />
|Status reports<br />
|Status reports<br />
|Status reports<br />
|-<br />
|18:00<br />
|<br />
|Social event<br />
|<br />
|-}<br />
<br />
Some specifics:<br />
<br />
=== Monday ===<br />
<br />
<br />
=== Tuesday ===<br />
<br />
=== Wednesday ===<br />
<br />
<br />
== Participants ==<br />
<br />
The registration procedure has now been moved [http://www2.mate.polimi.it/ocs/?cf=42 here] <br />
The complete list of participants will be published here after the conference.<br />
<br />
<!--<br />
* [http://jweaton.org John W. Eaton]<br />
* Andreas Stahel, Bern University of Applied Sciences<br />
* Jordi Gutiérrez Hermoso + Jan (OctConf bande dessinée illustrator)<br />
* [http://wiki.octave.org/User:KaKiLa Juan Pablo Carbajal], Ghent University.<br />
* [http://home.rzg.mpg.de/~mima/ Michele Martone] (Max Planck Institute for Plasma Physics, Garching, Germany)<br />
--><br />
<br />
== Funding ==<br />
<br />
There is limited funding to cover the travel expenses of selected participants.<br />
<br />
== Previous OctConf ==<br />
[[OctConf_2012| OctConf 2012]]<br />
<br />
== Next OctConf ==<br />
[[OctConf_2014| OctConf 2014]]</div>131.175.161.12https://wiki.octave.org/wiki/index.php?title=Summer_of_Code_-_Getting_Started&diff=2486Summer of Code - Getting Started2013-04-17T17:40:54Z<p>131.175.161.12: /* Implement solver for initial-boundary value problems for parabolic-elliptic PDEs in 1D */</p>
<hr />
<div>The following is distilled from the [[Projects]] page for the benefit of potential [http://code.google.com/soc/Google Summer] [http://sophia.estec.esa.int/socis2012/?q=node/13 of Code] 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 />
= Your steps to apply =<br />
<br />
If you like any of the projects described below these are the steps you need to follow to apply:<br />
<br />
# Find out that you would like to work together with us this summer!<br />
# Tell us about that and work on your project proposal. Do this together with us! Best place is your wiki user page, see below.<br />
# Fill out our '''''public''''' application template. 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. 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) '''.<br/> Only the organization admin and the possible mentors will see this data.<br/>You can still edit it after submitting until the deadline!<br />
# Hang out in our IRC channel, ask questions, submit patches, show us that you are motivated and well-prepared. There sadly will be more applicants than we can mentor with high quality, so do ask for feedback on your public application to increase your odds!<br />
# Start implementing your very own proposal! Code the summer away ;-)<br />
<noinclude>[[Category:Summer of Code 2013]]</noinclude><br />
<br />
<br />
= General Guidelines =<br />
<br />
Octave is mostly written in (sadly, mostly undocumented) C++ and its own scripting language (m-scripts), which includes (or should include) most of the Matlab language as a subset. We generally prefer a different Octave house style to the usual Matlab style for m-scripts, but it's primarily a superficial stylistic difference. Additionally, 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/or Octave or Matlab's scripting languages, you should probably be familiar or learn about Octave's infrastructure:<br />
<br />
* [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. If you've ever done a <tt>configure && make && make install</tt> series of commands, you have already used the GNU build system.<br />
* [http://mercurial.selenic.com/ Mercurial] (abbreviated hg) 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 />
* You should also read the same [http://www.gnu.org/software/octave/doc/interpreter/Contributing-Guidelines.html#Contributing-Guidelines contributing] [http://hg.savannah.gnu.org/hgweb/octave/file/tip/etc/HACKING guidelines] we have for everyone.<br />
* We primarily use [https://mailman.cae.wisc.edu/listinfo/octave-maintainers mailing lists] for communication. You should follow basic mailing list etiquette. For us, this mostly means "do not [http://en.wikipedia.org/wiki/Top_posting#Top-posting top post]".<br />
* We also have [http://webchat.freenode.net?channels=octave the #octave IRC channel in Freenode]. The atmosphere is more relaxed, and we may talk about things that are not at all related to Octave.<br />
* [http://octave.sf.net Octave-Forge] is a project closely related to Octave where packages reside. They are somewhat analogous to Matlab's toolboxes.<br />
* In addition, you probably should know '''some''' mathematics, engineering, or experimental science or something of the sort. If you've used Matlab before, you probably have already been exposed to the kinds of problems that Octave is used for.<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.<br />
<br />
== Numerical ==<br />
<br />
These projects involve implementing certain mathematical functions in Octave.<br />
<br />
'''Required skills''': You should understand quite a bit of mathematics. Words like "eigenvalue", "analytic", and "Taylor series" shouldn't scare you at all. There is probably little C++ experience required, and probably many of these problems can be solved with m-scripts.<br />
<br />
'''Difficulty''': Mid-to-hard depending how much mathematics you know and how well you can read numerical analysis journal articles.<br />
<br />
'''Potential mentor''': Carlo de Falco, Nir Krakauer, Fotios Kasolis, Luis Gustavo Lira<br />
<br />
=== Incomplete sparse factorizations ichol, ilu ===<br />
<br />
Implement incomplete Cholesky and LU factorization for sparse matrices. These functions are [http://www.mathworks.it/it/help/matlab/matrix-decomposition.html available in Matlab] as cholinc/ichol and luinc/ilu. Incomplete factorizations are useful as preconditioners<br />
for iterative solvers such as [http://hg.savannah.gnu.org/hgweb/octave/file/119ce9f5e1a3/scripts/sparse/gmres.m gmres] and <br />
[http://hg.savannah.gnu.org/hgweb/octave/file/119ce9f5e1a3/scripts/sparse/gmres.m gmres] or [http://hg.savannah.gnu.org/hgweb/octave/file/119ce9f5e1a3/scripts/sparse/pcg.m pcg].<br />
The classic book [http://netlib.org/linalg/html_templates/node81.html Templates for the Solution of Linear Systems: Building Blocks for Iterative Methods] has a [http://netlib.org/linalg/html_templates/node100.html#SECTION00933000000000000000 chapter] describing the <br />
ILU algorithm in detail, though the algorithm described there should be adapted to Octave's internal Sparse Matrix file format which is [http://netlib.org/linalg/html_templates/node92.html#SECTION00931200000000000000 CCS] rather than [http://netlib.org/linalg/html_templates/node91.html#SECTION00931100000000000000 CRS]. The implementation of ILU in Octave has been recently discussed in the maintainers list and initial implementations were posted in this [http://octave.1599824.n4.nabble.com/Ilu-function-tp4648677.html thread]. In another [http://octave.1599824.n4.nabble.com/Re-Octave-maintainers-Digest-Vol-80-Issue-15-tp4646303.html thread] it was suggested to implement the ILU by interfacing Octave to [http://www-users.cs.umn.edu/~saad/software/ITSOL/ ITSOL]. Compared to other <br />
projects in this section this one might require more knowledge of C++.<br />
<br />
=== General purpose Finite Element library ===<br />
<br />
Octave-Forge already has a set of packages for discretizing Partial Differential operators by Finite Elements and/or Finite Volumes,<br />
namely the [[bim package]] which relies on the [http://octave.sf.net/msh msh package] (which is in turn based on [http://geuz.org/gmsh/ gmsh]) for creating and managing 2D triangular and 3D tetrahedral meshes and on the [http://octave.sf.net/fpl fpl package] for visualizing 2D results within Octave or exporting 2D or 3D results in a format compatible with [http://www.paraview.org Paraview] or [https://wci.llnl.gov/codes/visit/ VisIT]. These packages, though, offer only a limited choice of spatial discretization methods which are based on low degree polynomials and therefore have a low order of accuracy even for problems with extremely smooth solutions.<br />
The [http://geopdes.sf.net GeoPDEs] project, on the other hand, offers a complete suite of functions for discretizing a wide range of<br />
differential operators related to important physical problems and uses basis functions of arbitrary polynomial degree that allow the construction of methods of high accuracy. These latter, though, are based on the IsoGeometric Analysis Method which, although very powerful and often better performing, is less widely known and adopted than the Finite Elements Method. The implementation of a general purpose library of Finite Elements seems therefore a valuable addition to Octave-Forge. Two possible interesting choices for implementing this package exist, the first consists of implementing the most common Finite Element spaces in the [http://geopdes.sf.net GeoPDEs] framework, which is possible as IsoGeometric Analysis can be viewed as a superset of the Finite Element Method, the other is to construct Octave language bindings for the free software library [http://fenicsproject.org/documentation/ FEniCS] based on the existing C++ or Python interfaces.<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.<br />
<br />
=== Generalised eigenvalue problem ===<br />
<br />
[http://www.mathworks.com/help/techdoc/ref/eig.html Certain calling forms] of the <tt>eig</tt> function are missing. The problem is to understand what those missing forms are and implement them.<br />
<br />
=== Various sparse matrix improvements ===<br />
<br />
The implementation of sparse matrices in Octave needs several improvements. Any of [[Projects#Sparse Matrices|these]] would be good. The paper by [http://arxiv.org/abs/cs.MS/0604006 Bateman & Adler] is good reading for understanding the sparse matrix implementation.<br />
<br />
=== Implement solver for initial-boundary value problems for parabolic-elliptic PDEs in 1D ===<br />
<br />
The project will deliver a solver for initial-boundary value problems for parabolic-elliptic PDEs in 1D similar to Matlab's function <tt>pdepe</tt>. A good starting point is the [http://en.wikipedia.org/wiki/Method_of_lines method of lines] for which you can find more details [http://en.wikibooks.org/wiki/Partial_Differential_Equations/Method_of_Lines here] and [http://www.scholarpedia.org/article/Method_of_lines here], whereas an example implementation can be found [http://www.scholarpedia.org/article/Method_of_Lines/Example_Implementation here]. In addition, [http://www.pdecomp.net/ this page] provides some useful material.<br />
<br />
=== Implement solver for 1D nonlinear boundary value problems ===<br />
<br />
The project will complete the implementation of the bvp4c solver that is already available in an initial version in the odepkg package<br />
by adding a proper error estimator and will implement a matlab-compatible version of the bvp5c solver.<br />
Details on the methods to be implemented can be found in [http://dx.doi.org/10.1145/502800.502801 this paper] on bvp4c and [http://www.jnaiam.net/new/uploads/files/014dde86eef73328e7ab674d1a32aa9c.pdf this paper] on bvp5c. Further details are available in [http://books.google.it/books/about/Nonlinear_two_point_boundary_value_probl.html?id=s_pQAAAAMAAJ&redir_esc=y this book].<br />
<br />
== GUI ==<br />
<br />
Octave is currently working on a new native GUI. It is written in Qt, but it is still not ready for production. There are various ways in which it could be improved.<br />
<br />
'''Required skills''': C++ and Qt. Whatever tools you want to use to write Qt code are fine, but Qt Creator is a popular choice nowadays.<br />
<br />
'''Difficulty''': Mostly medium, depending if you've had Qt or GUI development experience before.<br />
<br />
'''Potential mentor''': Jordi Gutiérrez Hermoso, Michael Goffioul, Torsten<br />
<br />
=== Finish the Octave GUI ===<br />
<br />
The GUI is currently on its own branch in hg. It is not stable enough and its design is still in flux. It is in a very alpha stage and needs to be turned into a real usable product. At the moment, it consists of the basic building blocks (terminal window, editor, variable browser, history, file browser) that are put together into a main interface. The GUI uses the Qt library. Among the things to improve are:<br />
* improve integration with octave: variable browser/editor, debugger, profiler...<br />
* define and implement an option/preferences dialog<br />
* improve additional components like the documentation browser<br />
<br />
=== Implement a Qt widget for manipulating plots ===<br />
<br />
Octave has had for some time a native OpenGL plotter. The plotter requires some user interaction for manipulating the plots, and it's been using fltk for quite some time. We want to replace this with Qt, so it fits better with the overall GUI look-and-feel and is easier to extend in the future.<br />
<br />
[https://github.com/goffioul/QtHandles QtHandles] is a current work in progress integrating the octave OpenGL renderer plus good support for GUI elements (uicontrol, uimenu, uitoolbar...). This project may initially consists of integrating the existing QtHandles code base into Octave. Then if time permits, further improvements can be made to QtHandles.<br />
<br />
=== Create a better (G)UI for the profiler ===<br />
<br />
During GSoC 2011, Daniel Kraft successfully implemented a profiler for Octave. It needs a better interface and a way to generate reports. This may be done with Qt, but not necessarily, and HTML reports might also be good.<br />
<br />
=== Create a graphical design tool for tuning closed loop control system (control pkg) ===<br />
<br />
When tuning a SISO feedback system it is very helpful to be able to grab a pole or a zero and move them by dragging them with the mouse. As they are moving the software must update all the plotted lines. There should be the ability to display various graphs rlocuse, bode, step, impulse etc. and have them all change dynamically as the mouse is moving. The parameters of the compensator must be displayed and updated.<br />
Potential mentor: Doug Stewart<br />
<br />
== Graphics ==<br />
<br />
Octave has a new native OpenGL plotter (currently via [http://en.wikipedia.org/wiki/Fltk fltk], but we want to move away from that). There are several possible projects involved with it.<br />
<br />
'''Required skills''': C++ and OpenGL. General understanding of computer graphics.<br />
<br />
'''Difficulty''': Medium, depending on your previous understanding of the topic.<br />
<br />
'''Potential mentor''': Michael Goffioul<br />
<br />
=== Lighting ===<br />
<br />
Implement transparency and lighting in OpenGL backend(s). A basic implementation is available in [http://octave.svn.sourceforge.net/viewvc/octave/trunk/octave-forge/extra/jhandles/ JHandles]. This needs to be ported/re-implement/re-engineered/optimized in the C++ OpenGL renderer of Octave.<br />
<br />
=== Object selection in OpenGL renderer ===<br />
<br />
This project is about the implementation of a selection method of graphics elements within the OpenGL renderer [http://glprogramming.com/red/chapter13.html]<br />
<br />
=== Non-OpenGL renderer ===<br />
<br />
Besides the original gnuplot backend, Octave also contains an OpenGL-based renderer for advanced and more powerful 3D plots. However, OpenGL is not perfectly suited for 2D-only plots where other methods could result in better graphics. The purpose of this project is to implement an alternate graphics renderer for 2D only plots (although 3D is definitely not the focus, extending the new graphics renderer to support basic 3D features should also be taken into account). There is no particular toolkit/library that must be used, but natural candidates are:<br />
* [http://qt.nokia.com Qt]: the GUI is currently written in Qt and work is also in progress to provide a Qt/OpenGL based backend [https://github.com/goffioul/QtHandles]<br />
* [http://en.wikipedia.org/wiki/Cairo_%28software%29 Cairo]: this library is widely used and known to provides high-quality graphics with support for PS/PDF/SVG output.<br />
<br />
=== TeX/LaTeX markup ===<br />
<br />
Text objects in plots (like titles, labels, texts...) in the OpenGL renderer only support plain text mode without any formatting possibility. Support for TeX and/or LaTeX formatting needs to be added.<br />
<br />
The TeX formatting support actually only consists of a very limited subset of the TeX language. This can be implemented directly in C++ into Octave by extending the existing text engine, avoiding to add a dependency on a full TeX system.<br />
<br />
On the other hand, the LaTeX formatting support is expected to provide full LaTeX capabilities. This will require to use an external LaTeX system to produce text graphics in some format (to be specified) that is then integrated into Octave plots.<br />
<br />
The matplotlib project [http://matplotlib.sourceforge.net/users/usetex.html has already done this in Python] and might be used as an example of how to do this in Octave. Mediawiki has also also done [http://en.wikipedia.org/wiki/Wikipedia:Texvc something similar].<br />
<br />
== Interpreter ==<br />
<br />
The interpreter is written in C++, undocumented. There are many possible projects associated with it.<br />
<br />
'''Required skills''': ''Very good'' C and C++ knowledge, possibly also understanding of [http://en.wikipedia.org/wiki/Gnu_bison GNU bison] and [http://en.wikipedia.org/wiki/Flex_lexical_analyser flex]. Understanding how compilers and interpreters are made plus being able to understand how to use a profiler and a debugger will probably be essential skills.<br />
<br />
'''Difficulty''': Mid hard to very hard. Some of the biggest problems will probably be the interpreter.<br />
<br />
'''Potential mentors''': John W. Eaton, Jordi Gutiérrez Hermoso, Max Brister.<br />
<br />
=== Improve JIT compiling ===<br />
<br />
Octave's interpreter is ''very'' slow on some loops. Last year, thanks to Max Brister's work, an initial implement of a just-in-time compiler (JITC) in [http://llvm.org LLVM] for GSoC 2012. This project consists in understanding Max's current implementation and extending it so that functions and exponents (e.g. 2^z) compile with the JITC. This requires knowledge of compilers, C++, LLVM, and the Octave or Matlab languages. A capable student who demonstrates the ability to acquire this knowledge quickly may also be considered. Max himself will mentor this project. [http://planet.octave.org/octconf2012/jit.pdf Here] is Max's OctConf 2012 presentation about his current implementation.<br />
<br />
=== Improve memory management ===<br />
<br />
From profiling the interpreter, it appears that a lot of time is spending allocating and deallocating memory. A better memory management algorithm might provide some improvement.<br />
<br />
=== Implement classdef classes ===<br />
<br />
Matlab has two kinds of classes: old style @classes and new style classdef. Octave has only fully implemented the old style. There is partial support for new classes in [http://hg.savannah.gnu.org/hgweb/octave/shortlog/classdef our classdef branch]. There is irregular work here, and classdef is [http://www.mathworks.com/help/matlab/matlab_oop/method-attributes.html a very] [http://www.mathworks.com/help/matlab/events-sending-and-responding-to-messages.html complicated] [http://www.mathworks.com/help/matlab/enumeration-classes.html thing] to fully implement. A successful project would be to implement enough of classdef for most basic usages. Familiarity with Matlab's current classdef support would be a huge plus. Michael Goffioul and jwe can mentor this.<br />
<br />
== Infrastructure ==<br />
<br />
There are several projects closely related to Octave but not exactly core Octave that could be worked on. They are mostly infrastructure around Octave, stuff that would help a lot.<br />
<br />
'''Required skills''': Various. See below.<br />
<br />
'''Difficulty''': Various. See below.<br />
<br />
'''Potential mentor''': Jordi Gutiérrez Hermoso, Carlo de Falco<br />
<br />
=== Finish the Agora website ===<br />
<br />
In 2009, the Mathworks decided to restrict the terms of use Matlab Central, a place dedicated to Matlab collaboration. The Mathworks forbade copyleft licenses and using the "free" code found in Matlab central on anything other than Mathworks products (e.g. forbidding from using it on Octave, even if the authors of the code wanted to allow this). Thus Octave users have no place to centrally, quickly, and conveniently share Octave code. See the [[FAQ#Why_can.27t_I_use_code_from_File_Exchange_in_Octave.3F_It.27s_released_under_a_BSD_license.21|FAQ]] for more details.<br />
<br />
In response to this, a website started to form, [http://agora.octave.org/ Agora Octave].<br />
<br />
This should be relatively easy webdev in Python using [http://en.wikipedia.org/wiki/Django_%28web_framework%29 Django].<br />
<br />
Things to be considered when working on this:<br />
<br />
* [http://octave-forge.blogspot.ie/2012/08/octconf2012-agora-and-pkg.html discussion of Agora during OctConf2012]<br />
* [http://scipy-central.org/ Scipy Central] - a website with the same objective as Agora for Scipy. Their [https://github.com/kgdunn/SciPyCentral/ code] is released under a BSD license. Might be useful to reuse some parts.<br />
<br />
Most of the basic functionality of Agora is already in, but there are many ways in which it could be improved, such as implementing comment threads, giving it an email interface, or a ReSTful API which could be used from Octave for package management.<br />
<br />
=== Update the Emacs octave mode ===<br />
<br />
[http://en.wikipedia.org/wiki/Emacs Emacs] has an octave-mode that requires a lot of updating and maintenance. This should also be an easy project if you already use Emacs and [http://en.wikipedia.org/wiki/Elisp elisp].<br />
<br />
=== Improve binary packaging ===<br />
<br />
We would like to be able to easily generate binary packages for Windows and Mac OS X. Right now, it's difficult and tedious to do so. Any way to help us do this in a faster way would be appreciated. Required knowledge is understanding how building binaries in Windows and Mac OS X works. Our current approach to fixing this is to cross-compile from a GNU system using [http://mxe.cc/ MXE] or [http://lilypond.org/gub/ GUB].<br />
<br />
'''Skills Required''': Knowledge of GNU build systems, Makefiles, configure files, chasing library dependencies, how to use a compiler. If you choose to work on GUB, Python will be required. No m-scripting or C++ necessary, beyond understanding [http://david.rothlis.net/c/compilation_model/ the C++ compilation model].<br />
<br />
'''Difficulty''': Medium to easy. You need to understand how build systems work and how to fix packages when they don't build.<br />
<br />
'''Possible mentors''': John W. Eaton or Jordi Gutiérrez Hermoso<br />
<br />
=== Installation of packages ===<br />
We would like to enhance the management of Octave-forge packages from within Octave environment. Currently there is a working (but rather monolithic) function that is used to do the job. The work would be to improve the way Octave interacts with the package server. Since the functionality is already sketched by the current function, the most important skill is software design.<br />
<br />
'''Minimum requirements''': Ability to read and write Octave code. Minimal FTP/HTTP knowledge.<br />
<br />
'''Difficulty''': Easy<br />
<br />
== Octave-Forge packages ==<br />
<br />
=== Rewrite symbolic package ===<br />
Octave's current [http://octave.svn.sourceforge.net/viewvc/octave/trunk/octave-forge/main/symbolic/ symbolic] package for symbolic computation is outdated, fragile and limited in its capabilities. The new symbolic package should offer better Matlab compatibility, for example handling of symbolic matrices. Like the current symbolic package, the new package could use the proven [http://www.ginac.de/ GiNaC] library for symbolic computations.<br />
<br />
The work would be to integrate GiNaC by using Octave's objects and classes. This can be done in C++ in a way similar to Michele Martone's new [http://librsb.sourceforge.net/ sparsersb] package.<br />
<br />
'''Required skills''': C++. Ability to understand Octave and GiNaC API documentation.<br />
<br />
'''Difficulty''': medium.<br />
<br />
'''Potential mentor''': Lukas Reichlin<br />
<br />
=== Improvements to n-dimensional image processing ===<br />
<br />
The image package has partial functionality for n-dimensional images. These images do exist in practice for example in medical imaging where slices from scans are assembled to form anatomical 3d images, or even exposures taken over time on different wavelengths can result in 5d images. All of the base functions should be modified so that they can handle n-dimensional images, and corresponding Matlab functions such as <code>bwconncomp</code> or n-dimensional version of <code>bwdist</code> should be implemented. In addition,<br />
the core functions {{codeline|imwrite}} and {{codeline|imread}} need to be adjusted to deal with this type images (usually multipage TIFF).<br />
<br />
'''Required skills''': Mostly m-file scripting, perhaps some C++. Familiarity with common CS algorithms would be useful.<br />
<br />
'''Difficulty''': medium.<br />
<br />
'''Potential mentor''': Jordi Gutiérrez Hermoso<br />
<br />
=== Interface to Electronic Circuit Simulator ===<br />
<br />
[http://sourceforge.net/projects/qucs/ Qucs] is a C++ based circuit simulation package. This project aims to create an interface to the Qucs algorithms to allow the transient, i.e. time series, simulation of circuits in Octave within a larger ODE system simulation, and possibly make other analysis types available directly from Octave. The C++ interface would be based on handle class syntax currently in development in the <code>classdef</code> branch of the repository. This method has already been successfully tested on other projects, and examples of this type of interface are available (e.g. [https://sourced.ecdf.ed.ac.uk/projects/see/xfemm here] and [https://www.mathworks.com/matlabcentral/fileexchange/38964-example-matlab-class-wrapper-for-a-c++-class here]).<br />
<br />
'''Required skills''': C++ and m-file scripting. Familiarity with new classdef syntax would be useful. May require some modification/adaptation of the Qucs sources. Familiarity with the Octave ODE solvers useful but not essential.<br />
<br />
'''Difficulty''': medium.<br />
<br />
'''Potential mentor''': Richard Crozier<br />
<br />
'''Main Goals'''<br />
* Create an Octave circuit class which can load and parse a Qucs circuit netlist<br />
* Create class methods with functionality similar to the <code>trsolver</code> C++ class methods in Qucs, i.e with the ability to call the DC solution code, and transient solution code at each time step. <br />
* Create a method of accessing the current circuit solution values in Octave at each time step.<br />
'''Bonus Goals'''<br />
* Create new circuit elements which allow Octave to apply voltages and currents during a circuit simulation.<br />
<br />
<br />
=== Fix audio processing ===<br />
<br />
Audio processing is currently almost completely broken in Octave. It currently only works with Linux's Open Sound System, which most Linux installations don't use anymore. We therefore need a modern, cross-platform way to play and record audio. This could be part of the Octave-Forge audio package, but the core audio functions themselves are also lacking. We need this to work across OSes, so an external audio library should be used. [http://www.portaudio.com/ Portaudio] or [http://www.music.mcgill.ca/~gary/rtaudio/ rtaudio] seem like a mature possibility. The core <code>play</code> and <code>record</code> functions should be fixed to use an external audio library, and in addition, the <code>audiorecorder</code> and <code>audioplayer</code> classes should be implemented.<br />
<br />
'''Required skills''': C++ and probably at least a superficial understanding of signal or audio processing.<br />
<br />
'''Difficulty''': Medium, depending on the abilities of the student.<br />
<br />
'''Possible mentors''': Pantxo Diribarne, Mike Miller<br />
<br />
=== Color management functions in image package ===<br />
<br />
The goal is to implement these functions:<br />
<br />
iccread<br />
iccwrite<br />
makecform<br />
applycform<br />
<br />
These functions are useful for color management, in particular for converting data (especially images) between color spaces. ICC profiles are essentially used to store look-up tables or matrix transforms (or both) that define the conversions. For example, to convert an CMYK image to sRGB, you would load a "print" ICC profile that defines the conversion from CMYK to L*a*b* (the CIE color space that is supposed to match the human visual system), then load another profile that defines the conversion from L*a*b* to sRGB (there is a standard profile for this conversion (IEC 61966-2-1), which is why Matlab has a built-in conversion from sRGB to L*a*b*). To do the above conversions in Matlab, you would use the following code:<br />
<br />
<syntaxhighlight lang="octave"><br />
cmykImage = double(imread('cmyk-image-filename.tif'));<br />
iccProfile = iccread('icc-profile-filename.icc');<br />
labImage = applycform(cmykImage, makecform('clut', iccProfile, 'AToB3'));<br />
rgbImage = applycform(labImage, makecform('lab2srgb'));<br />
</syntaxhighlight><br />
<br />
The <code>'AToB3'</code> selects one of the color transforms (look-up tables) contained in the profile. This one is "Absolute Colorimetric." More details on ICC profiles may be obtained from [http://www.color.org/icc_specs2.xalter the ICC spec].<br />
<br />
Knowledge of ICC profiles (at least knowledge of their application) would be a prerequisite. Since [http://www.littlecms.com/ littlecms] implements all the necessary functions for reading, writing, and applying profiles, it would be primarily a matter of integrating this library into Octave (assuming that is the preferred implementation -- one could certainly read the ICC files directly, but why reinvent that particular wheel).<br />
<br />
'''Required skills''': C++ programming, some knowledge of ICC profiles desirable.<br />
<br />
'''Difficulty''': Easy.<br />
<br />
'''Possible Mentor''': Patrick Noffke <patrick.noffke@gmail.com></div>131.175.161.12https://wiki.octave.org/wiki/index.php?title=Code_sprint:_pkg.m&diff=1925Code sprint: pkg.m2012-09-24T08:21:51Z<p>131.175.161.12: /* Objectives */</p>
<hr />
<div>This page is meant to organize and report the efforts to improve pkg.m<br />
<br />
= Schedule =<br />
<br />
= Objectives =<br />
== Remove -global and -local flags ==<br />
* Those flags are currently ignored internally anyways so they should disappear<br />
=== Coders ===<br />
* Carnë has already a changeset for this<br />
== Allow packages to deprecate functions ==<br />
* Create a system that allows packages to deprecate functions as in core. Possibilities are:<br />
** Get pkg to accept a deprecated directory inside the package and add it to the search path. Functions in those directories would have to be treated the same as the ones inside the core deprecated<br />
** PKG_ADD can be used to hack this. Package developers would still have to actually write the warnings on the function code but this would allow to have the functions in a separate directory so they don't foget to remove them on the next release<br />
** The package developer can also use something like Make to create a ''normal'' package from something that actually had a more complex structure, inclusive deprecated directories<br />
=== Coders ===<br />
== Resolve packages dependencies automatically. Download and install ==<br />
* Get pkg to resolve dependencies automatically by downloading and installing them too.<br />
=== Coders ===<br />
== Allow download and install of multiple versions of the same package ==<br />
=== Coders ===<br />
== Make pkg.m more verbose by default ==<br />
* make the package just a bit more verbose by default<br />
=== Coders ===<br />
== Support for more than one src directory(?) ==<br />
=== Coders ===<br />
== Accept make flags ==<br />
* make pkg able to supply extra configure and make flags, useful for distributions, including -j for make<br />
=== Coders ===<br />
== Remove auto option ==<br />
=== Coders ===<br />
== Allow installation from given url ==<br />
* Accept -url <url> to install files and packages directly from the web<br />
=== Coders ===</div>131.175.161.12https://wiki.octave.org/wiki/index.php?title=Octave_for_GNU/Linux&diff=1370Octave for GNU/Linux2012-06-28T05:56:46Z<p>131.175.161.12: </p>
<hr />
<div>The recommended way for installing Octave and Octave-Forge packages on GNU/Linux systems <br />
is via each distribution package installation system.<br />
<br />
Here is a list of the latest Octave version available in some Linux distributions<br />
<br />
* Debian Mint 13, has Octave 3.6.2 as of June 28 2012<br />
* Zenwalk GNU Linux, has Octave 3.6.2 as of June 28 2012<br />
* Fedora 17, has Octave 3.6.2 as of June 28 2012</div>131.175.161.12https://wiki.octave.org/wiki/index.php?title=Octave_for_GNU/Linux&diff=1369Octave for GNU/Linux2012-06-28T05:55:17Z<p>131.175.161.12: Created page with "The recommended way for installing Octave and Octave-Forge packages on GNU/Linux systems is via each distribution package installation system. Here is a list of the latest O..."</p>
<hr />
<div>The recommended way for installing Octave and Octave-Forge packages on GNU/Linux systems <br />
is via each distribution package installation system.<br />
<br />
Here is a list of the latest Octave version available in some Linux distributions<br />
<br />
* Debian Mint 13, has Octave 3.6.2 as of June 28 2012<br />
* Zenwalk GNU Linux, has Octave 3.6.2 as of June 28 2012</div>131.175.161.12https://wiki.octave.org/wiki/index.php?title=GNU_Octave_Wiki&diff=1368GNU Octave Wiki2012-06-28T05:47:56Z<p>131.175.161.12: /* Installation Instructions for Windows and MacOS X */</p>
<hr />
<div>[http://www.octave.org 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 />
This wiki is intended to supplement the [http://www.gnu.org/software/octave/doc/interpreter Octave documentation]. Before adding content, please check that it is not already part of, or belongs in, the [http://www.gnu.org/software/octave/doc/interpreter Octave's documentation].<br />
<br />
== Octave FAQ ==<br />
<br />
The [[FAQ]] is a list of frequently asked questions (FAQ) for Octave users and a good place to start.<br />
<br />
== Octave Conference 2012 ==<br />
<br />
Planning for [[OctConf 2012]] is under way. Newbies, experienced users, aspiring developers, and experienced developers are all encouraged to attend.<br />
<br />
== Table of contents ==<br />
<br />
Below is a temporary attempt to organize the "most wanted" pages of the Wiki. A list of all pages on the wiki can be seen [[Special:AllPages|here]]. To locate something specific, try the wiki's search box, or prepend {{Codeline|<nowiki>site:http://www.octave.org/wiki/</nowiki>}} to a [https://www.google.com/search?&q=site%3Ahttp%3A%2F%2Fwww.octave.org%2Fwiki google search].<br />
<br />
=== Installation Instructions for Windows and MacOS X ===<br />
* [[Octave for Windows]]<br />
* [[Installing Win32 Distribution]]<br />
* [[Octave for MacOS X]]<br />
* [[Octave for GNU/Linux]]<br />
<br />
=== Building Octave ===<br />
* [[Build from source]]<br />
* [[Mercurial (hg) cheat sheet]]<br />
* [[Tests|Testing Source Code]]<br />
* [[Octave for GNU Linux: Binary Octave packages for GNU Linux|GNU/Linux binary packages]]<br />
* [[Octave for Mac|Octave for MacOS (minimalistic)]]<br />
* [[Create a MacOS X App Bundle Using MacPorts]]<br />
* [[Enable large arrays: Build octave such that it can use arrays larger than 2Gb.|Building Octave to Use Large Arrays]]<br />
<br />
=== Octave Forge ===<br />
* [[Octave_Forge|Octave Forge and Installing Packages]]<br />
* [[Creating_packages|Creating Packages]]<br />
<br />
==== Available Packages ====<br />
* [[Dicom_package|Dicom]]<br />
* [[Geometry_package|Geometry]]<br />
* [[IO_package|I/O]]<br />
* [[Java_package|Java]]<br />
* [[Mechanics_package|Mechanics]]<br />
* [[Robotics_package|Robotics]]<br />
* [[Sockets_package|Sockets]]<br />
* [[Video_package|Video]]<br />
<br />
=== Editors & Octave ===<br />
* [[Gedit]]<br />
* [[Emacs]]<br />
* [[VIM]]<br />
* [[Kate]]<br />
<br />
=== Miscellaneous ===<br />
* [[Tips and tricks]]<br />
* [[Special:AllPages|All Pages]]<br />
* [[Publications using Octave]]<br />
<br />
== External Links ==<br />
* [http://www.gnu.org/software/octave/ Octave Homepage]<br />
* [http://octave.sourceforge.net/ Octave Forge]<br />
* [https://savannah.gnu.org/bugs/?group=octave GNU Octave - Bug Tracker]<br />
* [https://savannah.gnu.org/task/?group=octave GNU Octave - Task Tracker]<br />
* [https://savannah.gnu.org/patch/?group=octave GNU Octave - Patch Tracker]<br />
* [https://savannah.gnu.org/hg/?group=octave GNU Octave - Mercurial Repositories]<br />
* [http://planet.octave.org Planet Octave] (site summary for blogs from Octave's [http://http://code.google.com/soc/ GSoC] students)</div>131.175.161.12https://wiki.octave.org/wiki/index.php?title=OctConf_2012&diff=1228OctConf 20122012-06-20T11:11:00Z<p>131.175.161.12: /* Participants */</p>
<hr />
<div>OctConf 2012 will bring together users and developers for five days in July in the French Canadian summer.<br />
<br />
Please email [mailto:jordigh@octave.org Jordi (jordigh@octave.org)] if you think you could attend. Also write your name below in the Participants section if you think of attending with high probability.<br />
<br />
{{Note|in order to give you wireless access during the conference, our host university requires your name and address 3 weeks in advance to the conference date. Email this information to Jordi so he can make arrangements.}}<br />
<br />
[[File:octave-poster.png|200px|thumb|right|OctConf 2012 poster]] <br />
<br />
== Location ==<br />
<br />
=== Montréal, Québec, Canada ===<br />
<br />
[http://en.wikipedia.org/wiki/Montreal Montréal] is lively city with English and French widely spoken plus many other minority languages. Most business can be conducted in either language. It has four large universities, two Anglophones, [http://en.wikipedia.org/wiki/McGill_University McGill], [http://en.wikipedia.org/wiki/Concordia_University Concordia]; and two Francophones: [http://en.wikipedia.org/wiki/UQAM Université du Québec à Montréal] (UQAM), and [http://en.wikipedia.org/wiki/Universit%C3%A9_de_Montr%C3%A9al Université de Montréal]. The [http://www.crm.umontreal.ca Centre de Recherches Mathématiques] (CRM) is a mathematical centre that brings together researchers from all four universities and many others from [http://en.wikipedia.org/wiki/Montreal Montréal] and Canada.<br />
<br />
The Montréal summer can be quite hot and humid with some chance of rain. The city has a very serviceable public transportation network of buses and underground trains (metro), so it is convenient to get around without renting a car.<br />
<br />
=== Venue ===<br />
<br />
The CRM will be offering its [http://www.umontreal.ca/ Université de Montréal] facilities for the conference. There is a metro station named after the eponymous university that reaches it.<br />
<br />
<br />
==== How to get there ====<br />
<br />
The reference [http://maps.google.com/maps?f=q&source=s_q&hl=en&geocode=&q=2920+Chemin+de+la+Tour,+Montr%C3%A9al,+QC,+Canada&aq=0&oq=2920+Chemin+de+la+tour&sll=45.461094,-73.748474&sspn=0.418036,1.056747&vpsrc=6&ie=UTF8&hq=&hnear=2920+Chemin+de+la+Tour,+Montr%C3%A9al,+Communaut%C3%A9-Urbaine-de-Montr%C3%A9al,+Qu%C3%A9bec,+Canada&ll=45.501053,-73.615952&spn=0.20887,0.528374&t=m&z=12 street address] is:<br />
<br />
Centre de recherches mathématiques<br />
Université de Montréal<br />
Pavillon André-Aisenstadt<br />
2920 Chemin de la tour, room 5357<br />
Montréal (Québec)<br />
H3T 1J4<br />
<br />
Take your flight to the [http://maps.google.com/maps?f=q&source=s_q&hl=en&q=Montr%C3%A9al-Pierre+Elliott+Trudeau+International+Airport&ie=UTF8&t=m&vpsrc=6&sll=45.764649,-73.100281&sspn=0.747254,1.874542&st=115968771510351694523&rq=1&ev=zo&split=1&hq=Universit%C3%A9+de+Montr%C3%A9al&hnear=&ll=45.461094,-73.748474&spn=0.418036,1.056747&z=11&iwloc=A&cid=2175423857934231437 Montréal-Pierre Elliott Trudeau International Airport].<br />
<br />
From the airport, you can either take a cab to any location in the city, which is 40 CAD, or you can take the public 747 express bus, which is 3 CAD. It will take you to the Lionel-Groulx metro station, from which you can continue your travel with the same ticket (it's valid for 2 hours). The metro system is relatively simple to navigate, and [http://stm.info/English/a-somm.htm bus schedules are posted online] and near metro stations.<br />
<br />
Starting on Monday, you can get a weekly bus and metro pass for 23.50 CAD. This is highly recommended, as it gives you access to all of the public transportation network within the island of Montréal.<br />
<br />
=== Lodging ===<br />
<br />
There are several hotels and cheaper lodging in Montréal. Additionally, the universities [http://www.mcgill.ca/students/housing/summer/ McGill University], [http://www.studioshotel.ca/tarifs.php?lang=en&d=h Université de Montréal]) offer dormitory-style lodgings. The CRM also has [http://www.crm.umontreal.ca/coord/hotels_an.shtml more suggestions]. Participiants need to make their own lodging arrangements.<br />
<br />
== Dates ==<br />
<br />
July 16-20, 2012. First two days are intended for newbies and casual users, who may possibly be interested in getting involved in development. Next three days are for code sprints and development. Participants are encouraged to attend for all five days, but may choose only the first two or last three as convenient.<br />
<br />
=== Schedule ===<br />
<br />
{| class="wikitable" style="text-align: center;"<br />
|<br />
|''Monday''<br />
|''Tuesday''<br />
|''Wednesday''<br />
|''Thursday''<br />
|''Friday''<br />
|-<br />
|08:30<br />
|'''Coffee & croissants'''<br />
|'''Coffee & croissants'''<br />
|'''Coffee & croissants'''<br />
|'''Coffee & croissants'''<br />
|'''Coffee & croissants'''<br />
|-<br />
|09:00<br />
|Talk &mdash; What is Octave? (Jordi)<br />
|Talk &mdash; Octave's source layout (Jordi)<br />
|Talk &mdash; State of the Octave (jwe)<br />
|Open presentations<br />
|Presentation &mdash; Cell arrays (Daniel)<br />
|-<br />
|10:00<br />
|'''Coffee break'''<br />
|'''Coffee break'''<br />
|'''Coffee break'''<br />
|'''Coffee break'''<br />
|'''Coffee break'''<br />
|-<br />
|10:30<br />
|Tour de table and installations<br />
|Talk <br />
|Talk &mdash; Cell arrays (Daniel)<br />
|Talk<br />
|Talk<br />
|-<br />
|11:30<br />
|Tutorial 1: Working the REPL<br />
|Tutorial 3: Writing oct files<br />
|Talk &mdash; Octave and JIT compiling (Max)<br />
|Open presentations<br />
|Open presentations<br />
|-<br />
|12:30<br />
|'''Lunch'''<br />
|'''Lunch'''<br />
|'''Lunch'''<br />
|'''Lunch'''<br />
|'''Lunch'''<br />
|-<br />
|14:30<br />
|Tutorial 2: m-scripts and vectorisation<br />
|Tutorial 4: Working with dev tools<br />
|Exercises and code sprints<br />
|Exercises and code sprints<br />
|Exercises and code sprints<br />
|-<br />
|15:30<br />
|'''Coffee break'''<br />
|'''Coffee break'''<br />
|'''Coffee break'''<br />
|'''Coffee break'''<br />
|'''Coffee break'''<br />
|-<br />
|16:00<br />
|Code sprints<br />
|Code sprints<br />
|Code sprints<br />
|Code sprints<br />
|Code sprints<br />
|-<br />
|17:00<br />
|Status reports<br />
|Status reports<br />
|Status reports<br />
|Status reports<br />
|Status reports<br />
|-<br />
|18:00<br />
|<br />
|Social event<br />
|<br />
|<br />
|<br />
|}<br />
<br />
Some specifics:<br />
<br />
=== Monday ===<br />
<br />
Introductions, "What is Octave?" talk for a general audience (advertise this a lot in the local scientific computing and engineering communities). Helping with Octave installations, presentations about basic Octave use. <br />
<br />
=== Tuesday ===<br />
<br />
More advanced Octave use, including calling Octave from C++ code. Minimum C++ knowledge necessary expounded. How to work with development tools (reading the [http://hg.savannah.gnu.org/hgweb/octave/ Octave source code], using [http://mercurial.selenic.com/wiki/ Mercurial], [https://savannah.gnu.org/bugs/?group=octave bug] and [https://savannah.gnu.org/patch/?group=octave patch trackers], [http://www.gnu.org/software/octave/archive.html mailing lists], [http://www.gnu.org/software/octave/chat.html IRC]).<br />
<br />
Social event during evening.<br />
<br />
=== Wednesday ===<br />
<br />
State-of-the-Octave address. Identify problems to work on, pair off and start working on those problems. Code sprints.<br />
<br />
=== Thursday ===<br />
<br />
Reports of results of the previous day. Tech talks if necessary. More code sprints.<br />
<br />
=== Friday ===<br />
<br />
Reports. Last code sprint. Farewells.<br />
<br />
== Suggestions for Sessions ==<br />
<br />
Code sprints and informal discussion will happen every day. The following are topics of interest for these sessions.<br />
<br />
=== Avoiding Maintainer Burnout ===<br />
Or, if we can't find ways to avoid burnout, can we find ways to ensure that no maintainer tasks are the responsibility of a single individual. That way, there is someone available to handle the task even if a maintainer drops out of sight from the project.<br />
<br />
=== Socializing Octave ===<br />
To increase the visibility of GNU/Octave to a wider audience, we could create profiles in several social networks. There are ones based on proprietary software (G+, twitter, facebook) and others free, like [http://en.wikipedia.org/wiki/Identi.ca identi.ca]. We should discuss the perspectives of using them. <br />
Perhaps we could invite [http://en.wikipedia.org/wiki/User:EvanProdromou Evan Prodromou] to the discussion. He lives in Montreal.<br />
<br />
=== Clean up Bugs ===<br />
<br />
Code sprint to clean up the [https://savannah.gnu.org/bugs/?group=octave bug tracker]. This would include identifying and closing duplicates, as well as re-qualifying "bugs" that represent feature requests, and closing reports that aren't actually bugs.<br />
<br />
=== Cross-platform FLTK Bugs ===<br />
<br />
Developers using Linux, MacOS, and Windows cooperate to fix [https://savannah.gnu.org/bugs/index.php?go_report=Apply&group=octave&func=browse&set=custom&msort=0&report_id=100&advsrch=0&status_id=1&resolution_id=0&assigned_to=0&category_id=105&bug_group_id=0&history_search=0&history_field=0&history_event=modified&history_date_dayfd=14&history_date_monthfd=1&history_date_yearfd=2012&chunksz=50&spamscore=5 FLTK bugs]. This represents an important effort toward changing the default graphics toolkit from [http://gnuplot.sourceforge.net/ gnuplot] to [http://www.fltk.org/ FLTK]. See bugs [https://savannah.gnu.org/bugs/index.php?31518 #31518], [https://savannah.gnu.org/bugs/index.php?31976 #31976], [https://savannah.gnu.org/bugs/index.php?32134 #32134], [https://savannah.gnu.org/bugs/index.php?32276 #32276], [https://savannah.gnu.org/bugs/index.php?34720 #34720].<br />
<br />
=== Code Sprint for the Wiki ===<br />
<br />
Define an effective organizational structure for the new wiki, and clean up the existing content.<br />
<br />
* Reorganize existing content to conform the the defined structure.<br />
* Move content to the [http://www.gnu.org/software/octave/ homepage], [http://octave.sourceforge.net/ OctaveForge], or the [http://www.gnu.org/software/octave/doc/interpreter/ documentation].<br />
* Delete spam.<br />
<br />
=== Matlab compatibility ===<br />
<br />
Comparison of functionality between Octave and Matlab (what is the same, what is close, what is either different or significantly slower).<br />
<br />
Here are some major features and classes of functions that are present in core Matlab but not Octave. Some are currently under development in Octave, but most are not (at least that I know of)<br />
<br />
* Classdef classes (handle and value)<br />
* Packages (+dir names in the load path)<br />
* containers.Map class (handle class?)<br />
* InputParser class (to be done correctly requires handle classes)<br />
* MException objects<br />
* cdflib class (handle class?)<br />
* netcdf class (handle class?)<br />
* hdf (4 and 5) functions<br />
* Camera viewpoint functions<br />
* Volume visualization<br />
* Foreign function interface<br />
* Java interface<br />
* COM and Active X<br />
* .NET<br />
* Serial port device functions<br />
<br />
=== Profiling ===<br />
<br />
Availability and operability of profiling tools for Octave.<br />
<br />
=== GUI(s) ===<br />
<br />
Availability and operability of GUI interfaces to Octave.<br />
<br />
=== 64-bit indexing ===<br />
<br />
64-bit indexing for extremely large arrays.<br />
<br />
=== Octave and Octave-Forge ===<br />
<br />
Discussion of what belongs in Octave Core and what is a package or toolbox. Discussion about minimum functionality for Octave Core.<br />
<br />
=== Parallel computing with Octave ===<br />
<br />
Tools available, techniques for parallelisation.<br />
<br />
=== Octave distribution === <br />
<br />
Making Octave updates trivial for maintenance in large scale computing infrastructures. Octave binary for OS X. What should be included in an all-in-one installer? What versions of OS-X can/should be "supported"? Octave binary for Windows. What should be included in an all-in-one installer? What versions of Windows can/should be "supported".<br />
<br />
We have a good relationship with Debian and Fedora maintainers. Not so much other GNU/Linux distriubtions. Can we improve our relationships with others? How?<br />
<br />
== Participants ==<br />
<br />
* [http://jweaton.org John W. Eaton]<br />
* [http://jordi.inversethought.com Jordi Gutiérrez Hermoso]<br />
* Joanna Cheng (pending funding and leave)<br />
* [http://ailab.ifi.uzh.ch/carbajal/ Juan Pablo Carbajal] [[User:KaKiLa]]. Confirmed. Planning trip and hotel.<br />
* [http://mox.polimi.it/~carlo Carlo de Falco]. Planning trip and hotel.<br />
* [[User:carandraug|Carnë Draug]]<br />
* Ben Abbott (pending pregnant wife can travel)<br />
* [http://bd.linkedin.com/in/mohammadnasiruddin Mohammad Nasiruddin] (pending funding)<br />
* [http://simexp-lab.org/brainwiki/doku.php?id=pierrebellec Pierre Bellec]<br />
* Rik Wehbring<br />
* Thomas Yengst<br />
* Alex Marcotte<br />
* Max Brister<br />
* [http://mat.caminos.upm.es/~iht Israel Herraiz] (confirmation pending)<br />
* [http://www-ce.ccny.cuny.edu/nir/ Nir Krakauer]<br />
* [[User:Ben_zen|Ben Lewis]]<br />
* [[User:Eem2314|Ed Meyer]]<br />
<br />
== Funding ==<br />
<br />
There is limited funding to cover the travel expenses of selected participants.</div>131.175.161.12