Summer of Code - Getting Started: Difference between revisions

→‎Infrastructure: JSON project done.
(→‎Summary table: JSON integration done.)
(→‎Infrastructure: JSON project done.)
Line 305: Line 305:


== Infrastructure ==
== Infrastructure ==
=== JSON encoding/decoding ===
[https://en.wikipedia.org/wiki/JSON JavaScript Object Notation], in short JSON, is a very common human readable and structured data format.  Unfortunately, GNU Octave still lacks of builtin support of that data format.  Having JSON support, Octave can improve for example it's web service functions, which often exchange JSON data these days.  Another interesting applicatoin is described in another Octave GSoC project, see [[Summer of Code - Getting Started#Jupyter_Integration | Jupyter integration]].
In bug {{bug|53100}} a vivid discussion about proper JSON support took place.  As JSON is a highly demanded feature for Octave, there are already several attempts to fill the gap:
* [https://github.com/fangq/jsonlab jsonlab] (M-file implementation, probably slow for large JSON files)
* [https://github.com/gllmflndn/JSONio JSONio] (C MEX wrapper around [https://github.com/zserge/jsmn jsmn])
* [https://github.com/Andy1978/octave-rapidjson octave-rapidjson] (C++ Octave wrapper around [https://rapidjson.org/ RapidJSON])
* [https://github.com/apjanke/octave-jsonstuff octave-jsonstuff] (C++ Octave wrapper around [https://rapidjson.org/ RapidJSON])
For different reasons, none of them can be directly merged into Octave core yet.  Thus there is still lots of work to do.  The goal of this project is to evaluate (and to cherry pick from) the implementations above, to create Matlab compatible [https://www.mathworks.com/help/matlab/ref/jsonencode.html jsonencode] and [https://www.mathworks.com/help/matlab/ref/jsondecode.html jsondecode] functions.  This involves proper documentation of the work and unit tests to ensure the correctness of the implementation.
* '''Minimum requirements'''
: Good Octave and C/C++ programming knowledge.  Ability to make use of C/C++ libraries.
* '''Difficulty'''
: Medium.
* '''Mentor'''
: [[User:Siko1056|Kai T. Ohlhus]]


=== Jupyter Notebook Integration ===
=== Jupyter Notebook Integration ===