<?xml version="1.0" encoding="utf-8" standalone="no"?><?xml-stylesheet href="/mathmlc2p.xsl" type="text/xsl"?><html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>meditor</title>
</head>
<body>
<tt>
jscl-meditor - java symbolic computing library and mathematical editor<br/>
<br/>
# Project description<br/>
# Implementations<br/>
# Symbolic capabilities<br/>
# Download<br/>
# Installation<br/>
# Dependencies<br/>
# Papers<br/>
# Acknowledgements<br/>
# Related projects<br/>
# Contact<br/>
# Copyright<br/>
<br/>
<a href="release_notes.txt">release_notes</a> Version 5.4.6<br/>
<br/>
Project description<br/>
<br/>
The goal of this project is to develop a java symbolic computing library and a mathematical editor front-end. There are already several existing computer algebra systems, most of them developed in other languages, mainly C/C++ and Lisp. But using Java for symbolic computation has some benefits. In addition to being widely used and to comply with various standards, it has two important features : readability and portability.<br/>
<br/>
Regarding readability, the goal is to produce code that is as nice and short as the pseudo-code found in textbooks or research papers. As an illustration, here is what the Euclidean algorithm would look like:<br/>
<br/>
        Polynomial gcd(Polynomial p, Polynomial q) {<br/>
                while (q.signum() != 0) {<br/>
                        Polynomial r = p.remainder(q);<br/>
                        p = q;<br/>
                        q = r;<br/>
                }<br/>
                return p;<br/>
        }<br/>
<br/>
It entails a dedicated development effort. This choice of clear coding, enabled by Java, may have consequences in terms of performance compared to other languages. But it could be worth the effort, in the sense that understanding an algorithm just by looking at the code is made possible. Object-orientation allows to hide unsightly optimizations behind a clean, easy to use interface.<br/>
<br/>
Some may doubt however that Java will ever be as clear as C++, because it does not have operator overloading, which means that a + b is written a.add(b), and will remain so. The interested reader can look at the on-going discussion on the matter at Sun <a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4905919">http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4905919</a><br/>
<br/>
As for portability, it means that many platforms are available at no cost, from powerful unix workstations or servers to handheld devices. To make it possible, the project is split in two parts : the engine (jscl) and the mathematical editor front-end (meditor). The engine is usable interactively or in batch mode from a Java shell interpreter (like BeanShell for instance), or as a Java library in any third-party application.<br/>
<br/>
The front-end has currently three implementations (see below). Among others, it is intended for taking course notes. With it, a student can do the calculations asked by their teacher fast and reliably. The plain text format should make the exchange of notes easy. The produced worksheets can be exported to XHTML and published on-line, see <a href="http://meditorworld.appspot.com/">http://meditorworld.appspot.com/</a> for an illustration.<br/>
<br/>
Implementations<br/>
<br/>
The implementations of the front-end are as follows:<br/>
<br/>
    * New : there is now a version for <a href="android/index.txt">android</a><br/>
<br/>
    * j2se/swing for desktop platforms<br/>
<br/>
    * Native jump/pilotjfc/wabajump for PalmOS<br/>
<br/>
<svg
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:cc="http://creativecommons.org/ns#"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   xmlns:xlink="http://www.w3.org/1999/xlink"
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
   width="160"
   height="160"
   id="svg2"
   version="1.1"
   inkscape:version="0.47 r22583"
   sodipodi:docname="New document 1">
  <sodipodi:namedview
     id="base"
     pagecolor="#ffffff"
     bordercolor="#666666"
     borderopacity="1.0"
     inkscape:pageopacity="0.0"
     inkscape:pageshadow="2"
     inkscape:zoom="0.35"
     inkscape:cx="80"
     inkscape:cy="80.000009"
     inkscape:document-units="px"
     inkscape:current-layer="layer1"
     showgrid="false"
     inkscape:window-width="613"
     inkscape:window-height="495"
     inkscape:window-x="201"
     inkscape:window-y="34"
     inkscape:window-maximized="0" />
  <defs
     id="defs4">
    <inkscape:perspective
       id="perspective10"
       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
       inkscape:vp_z="744.09448 : 526.18109 : 1"
       inkscape:vp_y="0 : 1000 : 0"
       inkscape:vp_x="0 : 526.18109 : 1"
       sodipodi:type="inkscape:persp3d" />
    <inkscape:perspective
       sodipodi:type="inkscape:persp3d"
       inkscape:vp_x="0 : 0.5 : 1"
       inkscape:vp_y="0 : 1000 : 0"
       inkscape:vp_z="1 : 0.5 : 1"
       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
       id="perspective2884" />
  </defs>
  <metadata
     id="metadata7">
    <rdf:RDF>
      <cc:Work
         rdf:about="">
        <dc:format>image/svg+xml</dc:format>
        <dc:type
           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
        <dc:title></dc:title>
      </cc:Work>
    </rdf:RDF>
  </metadata>
  <g
     id="layer1"
     inkscape:groupmode="layer"
     inkscape:label="Layer 1"
     transform="translate(-295,-458.07648)">
    <image
       xlink:href="data:image/png;base64,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
AElFTkSuQmCC
"
       width="160"
       height="160"
       id="image2886"
       x="295"
       y="458.07648" />
  </g>
</svg><br/>
<br/>
There was a special effort to make the palm front-end powerful enough to be used at school, by compiling the software into native code with <a href="http://jump.sourceforge.net/">http://jump.sourceforge.net/</a><br/>
<br/>
Symbolic capabilities<br/>
<br/>
The symbolic capabilities are currently:<br/>
<br/>
    * polynomial system solving<br/>
    * vectors and matrices<br/>
    * factorization<br/>
    * derivatives<br/>
    * integrals (rational functions)<br/>
    * boolean algebra<br/>
    * simplification<br/>
    * geometric algebra<br/>
    * java code generation<br/>
    * graphical rendering of math expressions<br/>
<br/>
Download<br/>
<br/>
Go to the Project summary page <a href="http://sourceforge.net/projects/jscl-meditor/">http://sourceforge.net/projects/jscl-meditor/</a><br/>
<br/>
Installation<br/>
<br/>
Linoleum version (from v5.0 on)<br/>
<br/>
Create a &quot;meditor&quot; directory on your hard drive. Extract the meditor.zip archive in it.<br/>
<br/>
To run meditor, add the bin directory to your path, give bin/linoleum execution privilege (unix), then : linoleum<br/>
<br/>
Open the application panel (Ctrl+O). Click on &quot;meditor&quot;.<br/>
<br/>
Desktop version (up to v4.2)<br/>
<br/>
Extract the meditor.zip archive into any appropriate directory on your hard drive. It will create a &quot;meditor&quot; directory. Change dir to it.<br/>
<br/>
To run meditor, add the bin directory to your path, give bin/meditor execution privilege (unix), then : meditor [<a href="file.txt">file</a>]<br/>
<br/>
Once the application is up, you can go to the docs directory and try the examples it contains.<br/>
<br/>
PalmOS version (up to v2.3)<br/>
<br/>
Go to the &quot;palm&quot; subdirectory. Upload the editor.prc into the device.<br/>
<br/>
To have the data persisted, create an entry in the memopad with the word &quot;meditor&quot; ( + return ) on the first line. The memo.csv that you can optionally install (via your desktop application import) has such an entry and several other memos containing the documentation.<br/>
<br/>
Dependencies<br/>
<br/>
<a href="http://jeuclid.sourceforge.net/">http://jeuclid.sourceforge.net/</a> 3.1.14<br/>
<a href="http://xmlgraphics.apache.org/fop/">http://xmlgraphics.apache.org/fop/</a> 2.4<br/>
<a href="http://xml.apache.org/batik/">http://xml.apache.org/batik/</a> 1.12<br/>
<a href="http://xsltml.sourceforge.net/">http://xsltml.sourceforge.net/</a> 2.1.2<br/>
<a href="http://www2.ph.ed.ac.uk/snuggletex/">http://www2.ph.ed.ac.uk/snuggletex/</a> 1.3.0<br/>
<a href="https://java.net/projects/swingx/">https://java.net/projects/swingx/</a> 1.6.2-2<br/>
<a href="http://beanshell.org/">http://beanshell.org/</a> 2.0b5<br/>
<br/>
Papers<br/>
<br/>
Progress report on the Scala Algebra System (CASC 2020) <a href="http://jscl-meditor.sourceforge.net/interface-slides.pdf">http://jscl-meditor.sourceforge.net/interface-slides.pdf</a> presentation <a href="https://www.dk-compmath.jku.at/conferences/casc-2020/day-5/05-Jolly.mp4">https://www.dk-compmath.jku.at/conferences/casc-2020/day-5/05-Jolly.mp4</a><br/>
meditor, the mathemagical editor (software demonstration, 2020) <a href="http://jscl-meditor.sourceforge.net/magical.pdf">http://jscl-meditor.sourceforge.net/magical.pdf</a><br/>
Computer algebra in Scala : what's new with Dotty ? (ScalaUA 2020) <a href="https://drive.google.com/file/d/1MixKt_OXD719SgomXx81VrtW8jvAV78_/view">https://drive.google.com/file/d/1MixKt_OXD719SgomXx81VrtW8jvAV78_/view</a> presentation <a href="https://www.youtube.com/watch?v=L-NTXZZPV4A">https://www.youtube.com/watch?v=L-NTXZZPV4A</a><br/>
Categories as type classes in the Scala Algebra System (CASC 2013) <a href="http://jscl-meditor.sourceforge.net/catc-slides.pdf">http://jscl-meditor.sourceforge.net/catc-slides.pdf</a><br/>
Parallelizing Stream with Future (2013) <a href="http://arxiv.org/abs/1305.4367">http://arxiv.org/abs/1305.4367</a><br/>
Straightforward parallelization of polynomial multiplication using parallel collections in Scala (EOOPS 2013) <a href="http://jscl-meditor.sourceforge.net/parallel-slides.pdf">http://jscl-meditor.sourceforge.net/parallel-slides.pdf</a><br/>
Categories as classes and mixin composition (CASC 2012, with H. Kredel) <a href="http://krum.rz.uni-mannheim.de/kredel/com-casc2012-poster.pdf">http://krum.rz.uni-mannheim.de/kredel/com-casc2012-poster.pdf</a><br/>
Algebraic structures as typed objects (CASC 2011, with H. Kredel) <a href="http://krum.rz.uni-mannheim.de/kredel/to-cas-casc2011-slides.pdf">http://krum.rz.uni-mannheim.de/kredel/to-cas-casc2011-slides.pdf</a><br/>
Object Scala Found - a JSR223-compliant version of the scala interpreter (Scala Days 2011) <a href="http://jscl-meditor.sourceforge.net/scalaint.pdf">http://jscl-meditor.sourceforge.net/scalaint.pdf</a> presentation <a href="http://days2011.scala-lang.org/node/138/319">http://days2011.scala-lang.org/node/138/319</a><br/>
Generic, Type-safe and Object Oriented Computer Algebra Software (CASC 2010, with H. Kredel) <a href="http://krum.rz.uni-mannheim.de/kredel/oocas-casc2010-slides.pdf">http://krum.rz.uni-mannheim.de/kredel/oocas-casc2010-slides.pdf</a><br/>
A real world use of higher kinds in the domain of computer algebra (2010) <a href="http://jscl-meditor.sourceforge.net/hk-ca.pdf">http://jscl-meditor.sourceforge.net/hk-ca.pdf</a><br/>
Symbolic script programming for Java (2009, with H. Kredel) <a href="http://arxiv.org/abs/0906.2315">http://arxiv.org/abs/0906.2315</a><br/>
How to turn a scripting language into a domain specific language for computer algebra (2008, with H. Kredel) <a href="http://arxiv.org/abs/0811.1061">http://arxiv.org/abs/0811.1061</a><br/>
<br/>
Acknowledgements<br/>
<br/>
Thanks to Heinz Kredel, Yves Noyer, Jeffry Madura, Eric Smith, Sergio Melas, Andrea Boright, Ross Green, Nicolas Rosillo, Marten van Wezel, Toyin Akin, Philippe d'Oreye, Sione Palu, Michael Braginsky, Mike Thomas, David Schneider, Oleg Volkov, Markus Hohenwarter, Dimitri Pissarenko, Eckhard Hitzer, Daniel Fontijne, Alfredo Vianna, Oliver Pretzel, Axel Kramer, Bob Orchard.<br/>
<br/>
Related projects<br/>
<br/>
<a href="http://jscience.org/">http://jscience.org/</a> Java Tools and Libraries for the Advancement of Sciences<br/>
<a href="http://www.geogebra.at/">http://www.geogebra.at/</a> dynamic mathematics software that connects geometry, algebra and calculus<br/>
<a href="http://mvt.sourceforge.net/">http://mvt.sourceforge.net/</a> Mathematical Visualization Toolkit<br/>
<a href="http://gcalc.net/">http://gcalc.net/</a> mathematical graphing system in Java<br/>
<a href="http://mathdragn.squarespace.com/">http://mathdragn.squarespace.com/</a> Symbolic Equation Manipulator<br/>
<a href="http://mtac.sourceforge.net/">http://mtac.sourceforge.net/</a> - More than a Calculator<br/>
<br/>
Contact<br/>
<br/>
You can send your reactions to <a href="mailto:raphael.jolly@free.fr">raphael.jolly@free.fr</a> . For bug reports and support requests, you have tools on the Project summary page <a href="http://sourceforge.net/projects/jscl-meditor/">http://sourceforge.net/projects/jscl-meditor/</a><br/>
<br/>
Copyright<br/>
<br/>
<a href="http://www.gnu.org/licenses/gpl.html">http://www.gnu.org/licenses/gpl.html</a> The GNU General Public License<br/>
<br/>
<hr/>
last updated on Sat Jul 25 2020<br/>
</tt>
</body>
</html>
