Summer of Code - Getting Started: Difference between revisions

→‎Infrastructure: New project "JSON encoding/decoding"
(→‎Infrastructure: New project "JSON encoding/decoding")
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.
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://www.artefact.tk/software/matlab/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://github.com/open-source-parsers/jsoncpp jsoncpp])
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'''
: Ability to read and write Octave code, experience with Octave packages, and understanding of the basics of autotools. The most important skill is software design.
* '''Difficulty'''
: Medium.
* '''Mentor'''
: [[User:Siko1056|Kai]]


=== Jupyter Integration ===
=== Jupyter Integration ===