GSoC/2020/StatusReports/NikitaSirgienko

From KDE Community Wiki
< GSoC‎ | 2020‎ | StatusReports

Extend the usability and feature set of Cantor

Cantor is a KDE application providing a graphical interface to different open-source computer algebra systems and programming languages, like Octave, Maxima, Julia, Python etc. The main idea of this application is to provide one single, common and user-friendly interface for different systems instead of providing different GUIs for different systems. The details specific to the different languages are transparent to the end-user and are handled internally in the language specific parts of Cantor’s code.

Though the code base of Cantor is already in quite good shape, there is still room for improvements with respect to the missing features, user experience and functional issues. Given the existence of similar open-source applications like wxMaxima, Jupyter, Octave GUI but also commercial like Mathematica, it is important to address all issues and to add missing features to become competitive with other applications or even be ahead of them.

The idea of this project is not to implement one single and big "killer feature" but to address several smaller and bigger open and outstanding topics in Cantor.

Project mentor: Alexander Semke

Project log

Collapse/uncollapse all entries and remove all entries results

I have added this minor improvement first. It was easy, because Cantor already have a feature for hiding/showing/removing results of executed entry.

Plog post about it: https://cantorgsoc2020.blogspot.com/2020/06/cantor-new-features.html

Comment/uncomment (from execution) cells

I have added possibility to Excluding some entries from execution useful for user, for example, when the user experiments with code and want to understand, which variant of code better. Exclusion of entries is more easy for user, what commenting parts of code. Especially, if language of the backend don't allow multiline commenting (for example, in python users comment multiline code via multiline strings). Excluding action can be done from entry context menu, which appears on right mouse button click.

Plog post about it: https://cantorgsoc2020.blogspot.com/2020/06/cantor-new-features.html

Possibility for adding horizontal line entry

I have added possibility for adding horizontal line entry. It is a minor, but useful feature, which allow add visible horizontal line in worksheet. It will be useful for visual separation of worksheet.

Plog post about it: https://cantorgsoc2020.blogspot.com/2020/06/cantor-new-features.html

Zoom bar (for more easy zoom changing)

I have added zoom bar, which make zoom changing more convenient. Before, Cantor have had possibility for changing zoom, but method of doing it not very convenient for user - user could increase/decrease zoom on 10% and reset zoom to default via menu actions. Now, user have a zoom bar, which will show current zoom (in percents), will have set of predefined zoom values and allow set manually set need zoom level (right away, without repeatedly increasing zoom level by 10% via menu to satisfactory zoom level).

Plog post about it: https://cantorgsoc2020.blogspot.com/2020/06/cantor-zoom-widget-and-tooltips.html

Adding tooltip notes in settings for better UX

I have added tooltips in settings, which solves a problem of not very clear sense of some settings. Of course, there are explanations of parameters, but for better fitting in window size, explanations are reduced (checkbox with name in three sentences is terrible for user's experience). For example, there is a setting with allow enable/disable automatically recalculation of entries are placed below entry, evaluated by user. In the settings windows the setting named as "Reevaluate Entries automatically", but obviously only this information not enough for understanding, how this setting works. And because of that, more clear explanation placed in tooltip of this setting.

Plog post about it: https://cantorgsoc2020.blogspot.com/2020/06/cantor-zoom-widget-and-tooltips.html

Improved the handling of external packages in plot2d and plot3d extensions

In more specific, the problem with plots extensions consists of two parts. First, on this moment Cantor assumes, that the needed external package installed in system. But if this is not true, Cantor don't notify the user about this situation, but just don't work. So, for example, for using plots extensions (and embedded graphics too) in Julia backends, user needs installed GR package, but if the the package don't installed (because Cantor never mentions this dependency), plots in Julia backend just won't work without any clues for user, why it is happens. Second, as said above, Cantor assumes, that needed external package installed, but it also assumes, that this is particular external package. For example, Python backends assumes, that external package matplotlib installed, but there are many others graphics packages, for example, Python user can use seaborn package and in this case Cantor won't work properly. Also, part of this problem, that user have no choice, which graphic package will be used by Cantor.

Plog post about it: https://cantorgsoc2020.blogspot.com/2020/06/cantor-zoom-widget-and-tooltips.html

Improve Cantor’s panels performance and usability

Cantor’s panels is a one old Cantor problems. In performance meaning, the panels (more precisely, a code of working with them) is one of the most slowest part of Cantor GUI. For example, user can freeze GUI via fast (three changes in second) changing active worksheet, because for changing worksheet Cantor need manipulate the panels. In usability meaning, the panels also is one of the most uncomfortable parts of user experience. For example, use can want to have visible Help panel in Python backends, and Help and Variable panels in Octave backend. But for this, in this moment, user should manually make visible all needed panels, which always are hided in each worksheet session, which, obviously, can be tedious and annoying. I have solve this task by rewriting code of panels and solve usability problems via saving states of panels on Cantor application exit.

Blog post about it: https://cantorgsoc2020.blogspot.com/2020/07/cantor-file-browser-panel.html

Adding a new panel for file browsing

I have added a new panel for file browsing. File browser panel can be useful for users, which actively works with a lot of worksheet or used worksheet with a lot of external dependencies (images/text loaded from disk). So, users like this can feel, that opening of a lot of worksheets via standard dialog or cyclic switching between cantor and file browser are tedious. So, adding panel with embedded file browser will be useful (and not very difficult in Qt).

Blog post about it: https://cantorgsoc2020.blogspot.com/2020/07/cantor-file-browser-panel.html

Possibility to organize worksheet structure

Idea of this goal is adding possibility to add hierarchy for worksheet's entries. The hierarchy should provide three main features. First, it should allow to hide/show any node of the hirarchy with subelements. For example, the worksheet has three main chapters and user should have ability to hide/show any of this chapters, using one action on the root element of chapter. Second features: automatic forming table of content, based on hierarchy. This table of contents will placed in own panel and also will support fast moving inside the worksheet (double click on ToC should cause a scroll to this element in main window). Third, the feature should give possibility to set format templates for different levels of hierarchy, for example, if the user sets (in template) font size for chapter as 28pt, all chapters should have a font size 28pt.

Blog post about it: https://cantorgsoc2020.blogspot.com/2020/08/cantor-hierarchy-entry-and-markdown.html

Copy/paste image into entries

Copy/paste image into entries (for example, markdown entry) or as entries (for example, pasting image as ImageEntry). More easy integration images into worksheet will be useful for user experience. For example, if you want to add image entry, you must: add image entry, open "Choose image" dialog and choose the needed image file. There is a similar problem with markdown attachments - you need to go to menu, choose "Insert attachment" action and choose needed image file in file dialog. It is not very user friendly, of course. The target of this task - add more easy integration like creating an image entry and a markdown attachments from clipboard and from external drag-and-drop.

Blog post about it: https://cantorgsoc2020.blogspot.com/2020/08/cantor-hierarchy-entry-and-markdown.html

Bufixes

Tabulation behaviour in Command Entry

Now Command entries correctly handles tabulation, when cursor not in begin of line, and also supports multiline tab operations. Blogpost about it: https://cantorgsoc2020.blogspot.com/2020/08/cantor-gsoc2020-final-post.html

Better information from variable manager

Now, Cantor Variable Manager starts to show byte size for variables with big text form instead of "<too big variable>" in Python, Octave, Julia backends

Blogpost about it: https://cantorgsoc2020.blogspot.com/2020/08/cantor-gsoc2020-final-post.html

Wrong highlighting in R backend

Now Cantor R Backend can distinguish global functions and global variables from not user namespace (constants).

Blogpost about it: https://cantorgsoc2020.blogspot.com/2020/08/cantor-gsoc2020-final-post.html

Fixing problems with portability Image Entry

Now image file, which used by Image Entry, also saved in worksheet archive file and restored on worksheet opening. Blogpost about it: https://cantorgsoc2020.blogspot.com/2020/08/cantor-gsoc2020-final-post.html

What not realised and why

Bugfix: Fixing Julia interrupt code: it shouldn’t work as backend restart

Looks like there isn't way to interrupt Julia computation from C API, so this task don't complete.

Bugfix: Fixing color problems on print, when using a theme with non-default colours

The problem calculation proper colors of white theme is not solved, so the printing still have this bug.

Bugfix: Fixing strange problems with plots in Octave backend

The problem which causes wrong plot sizes not discovered so the bug still precents.

Summary

Done

Features

  • Improved the handling of external packages in plot2d and plot3d extensions (T9475 on phabricator).
  • Possibility for adding horizontal line entry
  • Added tooltip notes in settings for better UX (T12492 on phabricator)
  • Collapse/uncollapse all entries (T12843 on phabricator) and remove all entries results.
  • Comment/uncomment (from execution) cells (T12843 on phabricator).
  • Possibility for adding horizontal line entry
  • Improve Cantor’s panels performance and usability.
  • Zoom bar (for more easy zoom changing).
  • Adding a new panel for file browsing.
  • Possibility to organize worksheet structure (T12844 on phabricator).
  • Copy/paste image into entries (for example, markdown entry) or as entries (for example, pasting image as ImageEntry).

Bug fixes

  • Fixed tabulation behaviour in Command Entry (bug №418358).
  • Fixing problems with portability Image Entry
  • Better information from variable manager (bug 409137).
  • Fixing wrong highlighting in R backend: the backend doesn’t distinguish system functions and system constants.

Not done

Bug fixes

  • Fixing Julia interrupt code: it shouldn’t work as backend restart.
  • Fixing color problems on print, when using a theme with non-default colours
  • Fixing strange problems with plots in Octave backend (bug №408335).

Links to Blogs and other writing

  1. Blog
  2. Proporsal
  3. My commits in Cantor repository