Skip to content

Thursday, 23 July 2020

Hey everyone,

In the previous blog I wrote about my GSoC first evaluation. In this blog I have written about activities on which I have worked further to add multiple datasets.

Division memory game

In this sub-activity of memory, the goal is to match a division and its result, until all cards are gone. It helps children to practice division.
The procedure of adding multiple datasets to this activity is the same as of other memory activities. We just need to create different Data.qml files in the resource directory and load the datasets. For this activity, we need to use the function getDivTable() implemented in math_util.js and pass the respective numbers ranging from 1-10 to it.
This activity also has two modes. The first mode is in which the child needs to turn the cards to match to its equivalent division result. The second mode is the one in which the child needs to play with Tux to match the equivalent cards, as this mode is called “with Tux”. I have implemented multiple datasets for both of the modes. The dataset content of the activity Division memory game with Tux is the same as without Tux.

After the addition of multiple datasets to both modes, I tested it manually to make sure it works perfectly without any regression. This activity has been merged into the master branch.

Below image shows the multiple datasets content of this activity


Addition and Subtraction memory game

In this sub-activity of memory, the child needs to turn the cards to match addition and subtraction and its result until all cards are gone.

The level of previous memory activities were based on only a single arithmetic operation as only-addition or only-division, but this memory activities has two different operations for a particular level. As in case of this activity for any level, there would be few cards on addition operation and few of them upon subtraction.
The dataset addition procedure for this activity is also similar to other memory activities. We just need to use the getAddMinusTable() function from math_util.js.
This activity also has two modes as one “with Tux” and another “without Tux”. I have implemented multiple datasets to both modes of the activity.
After the addition of datasets, I tested it manually and made a merge request for it. This activity has been merged into the master branch.

Below image shows the multiple datasets content of this activity



Wednesday, 22 July 2020

Part 6 -

Hi everyone

This month, I took forward my ongoing project with Gcompris and added Multiple Datasets for Categorisation, Gnumch equality, and Gnumch inequality activities.

If you are unaware of my project, multiple datasets, or Gcompris. I have explained everything in detail in my last post - here


Categorization1 Activity

Categorization Activity

In Categorization, pupils have to identify and categorize elements into correct and incorrect groups. Whenever we add multiple datasets in any activity, It is mandatory to add Activity Config before (you can see purple color sandwich like button in the above screenshot). Clicking on this button open ups the dialog box for configuring both multiple datasets and activity setting. It’s always easy when activity has no settings and I have to take care only about multiple datasets but In case of categorization, It has both activity settings and a dialog box which appears at starting to asks for downloading missing images and according to my proposal, activity setting should show different options for different datasets. So, for sure this was the most challenging activity for me. I was not very sure on how to test that “Download missing image” dialog box, as it appears only if any image is missing or we never clicked on “never show it again” option. So, as expected I broke it in my first commit :(. Where my mentor Johnny told me the way to test it and fix it :). Later mentors and I discussed and agreed that we don’t need to make activity setting options dependent on selected datasets. So in the end the most challenging activity has been merged into the master branch as any other activity.

Gnumch Equality and Inequality

Gnumch Activity

After completing categorization, I picked Gnumch Equality and Inequality, they are two activities that use the same code. So I am working on both of them together. There are a total of 5 Gnumch based activities that inherits the same code and datasets need to be added in 2 of them. So obviously, I have to take care that my changes wouldn’t lead to any regression in other activities. Besides this, both activities only support addition and subtraction operations at starting, I have added the new functionality to support multiplication and division operations. Gnumch is basically a game, a bit similar to Pacman :). So, It was fun to work on this activity. By the way, I am expert now :) The changes for these activities haven’t merged yet, they are still in review.

The final two activities left are to Build the same model and find the details. I have just started working on Build the same model and most probably I will cover both of them in my next blog.

Have fun!

I updated the user interface of the Rocs graph layout plugin. Now, each layout algorithm corresponds to a tab. See below the tab for the Radial Tree Layout.

User interface.

Using the same algorithm, the graph layout plugin can draw rooted trees and free trees (trees without a root). The next two figures show the same tree represented as a free tree and as a rooted tree, respectively.

Free tree. Rooted tree.

The root vertex can be selected by the user or determined automatically. Currently, a center of the tree is used for automatic root selection. The user can also control the distance between nodes by changing the node separation. Tomorrow I will finish the tests and add some code to check if the graph being laid out is a tree.

Note: I decided to change the title of my GSoC posts to reflect the fact that I am not being able to follow a weekly schedule.

Tuesday, 21 July 2020

This week I completed unit-tests for interactions between storyboard docker and timeline docker. Also now thumbnails will only be updated when the image is idle, meaning if the image is not painted upon for some time, say a sec, the thumbnail will update. This will improve performance when using the canvas. I also wrote some functions that would help when implementing updating of affected thumbnails.

I wrote unit-tests for the interactions between dockers. Some of these interactions have been implemented and some are yet to be implemented. The planned behavior for various interactions according to tests is :

  • Items in storyboard will have unique and positive frame numbers and they will always remain sorted by the frame number.
  • On adding a keyframe in the timeline an item will be added to storyboard docker, if there is no item for that frame already.
  • On removing a keyframe in the timeline an item will be removed from the storyboard docker if there are no other keyframes at that time in timeline docker.
  • On moving an item in timeline docker,
    • if there is no item for the moved to frame, item is inserted for the “to” keyframe, otherwise not.
    • if there is no other keyframe at the moved from frame, item is removed for the “from” keyframe, otherwise not.
  • Selections in storyboard docker would correspond to the last selected keyframe in timeline docker for which item exists in storyboard docker.
  • Changing duration in storyboard docker for an item would add hold frames right after the keyframes for the item in timeline docker. If there are multiple layers in an image, hold frames should be added to all the layers.
  • Changing fps should conserve number of frames, that means if duration for an item was 2s 4f at 24 fps, and then fps changes to 12, then duration would change to 4s 4f.

Now thumbnails would be updated only when the image idle, that means, while the canvas is being painted upon, thumbnails would remain at the last version, and would update only when painting has stopped. It is similar to the overview docker but with a bit less delay.

This week I would work on implementing the remaining interactions and the update of all affected item on keyframe changes.

Many years ago I started writing a number of tutorials about Kdenlive, describing how to achieve visual effects similar to what you can get from commercial software (like the Adobe suite). But I didn't have time to translate my writings in English and format them with HTML. That was, until the last couple of weeks.
Now, I'm ready to release the website

All the contents you'll find on Kdenlive Tutorials are released under Creative Commons Attribution Non Commercial.
At this moment there are 48 different tutorials, I'm working on other two because I like multiples of ten.

All this work has been done in my spare time: I've been using automatic translation, performing some fast manual fixes. The result should be understandable, in the next months I'll fix the text to make it sound better.
I also know that Kdenlive's interface has changed a lot in this years: the functions I use in these tutorials are still available, they might just have a slightly different name or might be placed in a different spot of the GUI. If enough people are interested, I'll consider taking new snapshots and adapting the tutorials to the last version of Kdenlive.

The website's layout is simple, and every screenshot can be zoomed on. Every tutorial comes with a video that shows the results of the procedure. Videos are often raw: they have been made quickly, just to show what could be done in a couple of minutes. Anyway, every tutorial explains also how to improve the result, if you wanna spend more time on it.

I finished writing an implementation of a tree layout algorithm for Rocs. After some research, I decided to go with a radial layout. The idea is to select a node to be the placed at the center and place the other nodes in circles of different radius. The layout is computed recursively and the plane is partitioned between sub-trees in order to guarantee that no edge crosses will exist. Some layouts generated by this implementation are shown below. Tomorrow I will finish the user interface and some tests.

Start. Binary tree. Path. Random tree.

GSoC Week 6 - Qt3D based backend for KStars

In the seventh week of GSoC, I worked on adding all existing init and update calls to skymapcompsite and subsequent classes derived from skycomponent. This completes the integration with the KStars backend.

What’s done this week

  • Init calls for skycomponent derived classes which help setup the Qt3D scenegraph

  • Update calls which adjust shader uniforms an enable update and mouse events.

The Challenges

  • Integration issues with the original SkyPainter API written to support multiple backends. The CustomWindow class doesn’t utilize SkyPainter but has similar draw calls.

What remains

My priorities for the next week include.

  • Completing all the update calls

  • Debugging and adding other sky objects.

The Code

Monday, 20 July 2020

Hello everyone,

It’s been over two weeks since I posted last time. This is the fourth report for my GSoC project. Previous two to three weeks period, I spent working on integrating media player and image viewer into KDE Connect SMS app as well as changed and improved some of my previous implementations as pointed by my mentors. The project has reached the stage where the SMS app is able to receive and display thumbnails in the chat as well as user can request to view any original attachment file just by clicking on that particular attachment thumbnail and it will get opened inside the SMS app as well as user can open it in another multimedia application present on the desktop. Here’s a demonstration video of it’s working.

Now my next step is to enable SMS app to allow users to send supported multimedia files from desktop to android side from where it will be sent to the destination’s phone number. using klinker sms-mms library. In the next post I plan to show you guys a proper working SMS-MMS app which will not only allow users to send plain text messages but multimedia files as well. 🙂

Hello everyone,

this is the fourth post about the progress in my GSoC project and I want to present some user experience improvements related to the handling of panels in Cantor and to present a new panel "File Browser" that I implemented recently.

The status of Cantor's panels was not saved when the user closed the application. Potential rearangements and size changes done on panels were gone and the user had to do the changes again upon the next start. Very bad UX, of course. Now, the state is saved and even more, the state is saved for every backend in Cantor. So, if you have a Python session in Cantor, open some panels and arrange them at your will, close and reopen Cantor with a Python session again - the previous state of the panels appears on start.

The second change is about a new panel - the File Browser Panel:

This panel allows the user to navigate through tje file system and to open files. Files with the file type supported by Cantor (Cantor's native formant and Jupyter's notebooks) will be opened as a new worksheet in Cantor. Files with other types are open in the system's default application assosiated with that type.

In the next post I plan to show a new feature that will help to better structure the worksheet and to define a hierarchical structure of worksheet entries that can be operated on.

Sunday, 19 July 2020

After 3 months of development, we're glad to announce the availability of KStars 3.4.3 for Windows, MacOS and Linux.

Let's check out the highlight of this release!

New Bahtinov Mask Focus Assistant

Patrick Molenaar added a long requested feature: The Bahtinov Mask focus assistant tool. Users can activate the new algorithm in the Focus module.

Focus Bahtinov Assistant Tool

It is useful for users who do not have a motorized focuser and prefer to focus manually with the aid of the mask. After capturing an image in the focus module with the Bahtinov mask algorithm selected, Ekos would analyze the images and stars within it.  if Ekos recognizes the Bahtinov star pattern, it will draw lines over the star pattern en circles on the center and on an offset to indicate the focus.

Autofocus on Temperature Change

Florian Signoret added support for triggering autofocus procedure when the temperature exceeds a certain delta threshold in the capture module. The temperature is sourced primarily from the focuser itself, and in unavailable, then it falls back to the weather station, if any.

Focus Logs

Doug Summers added a dedicated focus logger to help users analyze their autofocus runs to better understand their behavior and improve them in the future.

Camera Driver Restart

An experimental camera driver restart feature was added to the capture module. It should be used as a last resort option in case the camera driver is unresponsive. This feature commands the INDI server to only restart the camera driver without affecting any other drivers, so you don't have to shutdown the whole INDI server if one driver misbehaves. 

Restarting a camera driver might lead to quite a few complicated since it interacts with many subsystems in Ekos. Therefore, it is flagged as experimental in this release pending user feedback.

Mount Hour Angle Limits

Previously Ekos Mount module supported enforcing Altitude limit for the mount motion. The mount is active stopped if its slew or track past there limits. Chris Rowland added the Hour Angle (HA) limits to prevent limit the mount from slewing and/or tracking past there limits. This can protect the equipment in case of a runaway motion that might lead a pier collision.

Filter Names Editor

A simple, but convenient editor was added in Capture module to edit filter names. Previously, you had to change filter names directly in INDI Control Panel which was not intuitive for quite a few users.

Internal Guider Features

Hy Murveint contributed significant new features and improvement to the Ekos Internal Guider.

New Detection Algorithm: SEP MultiStar

This is a new guide-star detection, tracking & drift computation algorithm.

You can select this in the Guide options menu (click Options... in the lower right corner of the Guide tab), and then click on "Guide", and then choose from the "algorithm" menu. There choose the guide-star detector. (e.g. there choices include Smart, SEP, Fast, ...). Try SEP MultiStar. It is more stable in all three respects (guide star selection, detection and drift calculation). You may not notice much difference in a normal guiding session when things are going well, except, perhaps, better choice of a guide star.

GPG RA Guiding: New control algorithm for RA guiding.

Hy added a new guiding algorithm. This is for RA only--that is, guiding for DEC still happens, but using the existing guiding algorithms. This guider is based on the work in this PhD thesis and is the same as the well-regarded PHD2 guide algorithm known as Predictive PEC. You will see Copyright 2014-2017 Max Planck Society, now in the KStars credits for this system. It estimates the periodic error in the guiding system, and tries to fix it before it happens. This system should perform about the same as the standard guider for the first period or two of your mount's periodic error, then improve. When using this system, it's best to set in advance what your mount's worm-gear period is. For example, the Orion Atlas pro is about 480s. You enable this in the Guide options menu, in the GPG RA tab, and then checking "Enable GPG". There are other parameters you can change, but as indicated earlier, the main one to think about is "Major Period".

Graphics Improvements

  1. Added a guide-star SNR plot. This can be useful, e.g. when the SNR starts taking a dive, you know things aren't going well, perhaps a cloud is passing by.
  2. Added a plot of the RMS error (i.e. RA and/or DEC arc-second error RMS-averaged over the past 50 guiding samples).
  3. Separated the zooming for x and y axes. You can use '+' and '-' buttons below the x-axis to change the time scale of the plot (number of minutes plotted), and you can use the mouse scroll (same as before) to zoom in/out of the Y-axis. When you mouse-over the plot, you can see all the values for the different graphs.BTW, in case you didn't know (this isn't something I changed), you can change the amount of space allocated to the drift plot (the circle) and the drift graph by placing your mouse over the short dotted line between them and dragging left of right.

Calibration Backlash Removal

A backlash removal section was added to the "calibration dance". Before it starts calibrating DEC, the Ekos guider will now take 5 DEC steps, without measurement, to make sure there's no backlash in the DEC gears. This should improve the quality of the calibration, however, if you don't like this, you can remove it by unchecking "Remove DEC backlash in guide calibration" in the Guide options menu, in the "Calibration" tab there.

Calibration Plot

A Calibration Plot subtab was added to the right right of the Drift Plot.  It shows the mount positions recorded during internal-guider calibration.

Basically, if things are going well, it should display dots in two lines which are at right angles to each other--one when the calibration pushes the mount back and forth along the RA direction, and then when it does the same for the DEC direction. Not a ton of info, but can be useful to see. If the two lines are at a 30-degree angle, something's not going well with your calibration! Here's a picture of it in action using the simulator

The colored dots (same color scheme as the internal guider) shows the RA and DEC samples on their way out, and the small white and yellow circles show their return paths.

PHDLogView compatibility

phdlogview is a program written by Andy Galasso to analyze PHD2 logs. It's very nice. I've tried to have the internal guider output a mostly compatible log file so that if you installed phdlogview, you could use it to also browse your logs from the Ekos internal guider. A few things to note:
The logs are placed in a directory parallel to the standard KStars logs directory. Instead of logs, it is guidelogs. So, for example, on Linux you'd find them in this directory ~/.local/share/kstars/guidelogs/
You can turn on/off this logging by going into the Options menu on the internal guider tab, clicking on the Guide tab on the left and checking/un-checking the box labeled "Save Internal Guider User Log".

There are many features in phdlogview. Explore and look at Galasso's documentation for how to use it.

PHD2 Integration Fixes

Eric Dejouhanet significantly improved fault tolerance during PHD2 interactions. This includes the following situations.
  • Star does not move enough for calibration to complete. PHD2 may:
    • be looping instead of calibrating, while still notifying calibration.
    • abort but continue to send guide steps and frames.
    • => Fixed: calibration failures are now properly handled in that situation, and forwarded to Guide module.
  • Star disappears because of a mount glitch. PHD2 may:
    • declare star lost and stop without further notice.
    • => Fixed: star-lost notification is now properly handled, and will time out properly (and not restart).
  • Device disconnects briefly. PHD2 may:
    • declare device unusable, eventually after some time (camera timeout is 15s by default), requiring reconnect.
    • => Fixed: equipment dis/connection is now properly handled from both sides, aborts operations and is robust.
  • KStars/Ekos crashes while guiding and is restarted using the existing indiserver.
    • The currentCCD may be null when restoring connection, upon call to executeOneOperation.
    • AppState has to be taken into consideration to restore state as it was before the crash.
    • => Fixed: app-state polling improves robustness, requires up-to-date INDI build.
  • If Ekos is told the equipment is disconnected, it will consider an external cause and will not attempt to reconnect.
    • Ekos will not reconnect, to allow manual intervention is required on PHD2 side.
    • Ekos will detect reconnection and change state automatically.
  • However PHD2 v2.6.8 crashes when INDI drivers are killed, so no solution except restarting PHD2 in a loop (use systemd).
  • One issue remains in Guide, where the stop button remains enabled sometimes (regression?).
    • May not fix in the context of this MR.
  • One issue remains upon server loss, which triggers perpetual reconnect unless the end-user disconnects manually.
    • Issue related to state kept at disconnected.

New LED indicators were added for each stage as a visual feedback for the user.

Other Fixes

Check out the complete changelog for more details.