Sprint Backlog 01

Sprint Mission

  • Create basic project infrastructure.
  • Handle currencies front to back.

Stories

Active

Table 1: Clock summary at [2024-07-28 Sun 23:09]
Tags Headline Time     %
  Total time 80:13     100.0
  Stories 80:13     100.0
  Active   80:13   100.0
agile Sprint and product backlog refinement     3:26 4.3
infra Create a basic git hub repository     0:35 0.7
infra Setup a discord channel for the project     0:14 0.3
infra Setup vcpkg and cmake     1:21 1.7
infra Setup github actions     1:21 1.7
infra Create and upload a package     3:28 4.3
code Create a basic project structure     2:10 2.7
code Add a Qt hello world     3:08 3.9
code Add a splash screen to applciation     0:41 0.9
infra Add basic site     0:34 0.7
code Add modeling infrastructure     1:30 1.9
infra Fix code syntax highlighting in site     0:10 0.2
doc Merge index with readme     0:42 0.9
doc Add project objective to readme     2:24 3.0
code Add basic logging support     1:14 1.5
infra Add nightly support with memcheck     3:21 4.2
code Clean up toolchains and presets     1:53 2.3
doc Generate Doxygen documentation and add it to site     0:51 1.1
doc Copy domain notes on core concepts     4:41 5.8
infra Valgrind fails to run unit tests     1:12 1.5
infra Initial sanity test generated packages     0:25 0.5
code Add command line options support     5:45 7.2
infra Unit tests show up twice in nightlies     0:13 0.3
doc Add recipes for command line     0:51 1.1
agile Use a bar chart for sprint resourcing cost     2:57 3.7
agile Classify stories by type     0:34 0.7
code Update C++ standard     0:29 0.6
infra Setup laptop for development     3:47 4.7
infra Add database support for currency     1:19 1.6
code Add XML parsing support for currency     6:32 8.1
code Add JSON support for currency     2:03 2.6
code Add basic widgets to display currencies     1:50 2.3
infra Ignore vcpkg warnings     0:21 0.4
infra Add badges from JKQTPlotter     0:13 0.3
code Investigate other Qt Applications with similar UIs     2:09 2.7
code Refactor Qt UI     10:05 12.6
code Use icons from new icon set     0:29 0.6
code Create a containing structure for data     0:28 0.6
doc Convert plantuml diagrams to org-babel     1:05 1.4
infra Setup code quality actions     0:58 1.2
infra Use Qt SQL classes     2:44 3.4

COMPLETED Sprint and product backlog refinement   agile

Updates to sprint and product backlog.

sprint_backlog_01_stories.png

sprint_backlog_01_tags.png

COMPLETED Create a basic git hub repository   infra

  • add a new organisation and repo.
  • add a simple project with vcpkg support.

Result:

COMPLETED Setup a discord channel for the project   infra

Created VisualOre and setup emacs to connect to it.

Result:

Commands:

account add discord <email> <password>

Links:

COMPLETED Setup vcpkg and cmake   infra

Setup a basic build with vcpkg.

Result:

COMPLETED Setup github actions   infra

Get a basic green build in github, showing up in CDash.

Result:

COMPLETED Create and upload a package   infra

We should create a basic package, and upload it to github.

Result:

COMPLETED Create a basic project structure   code

We need to decide on the basic architecture for the project. As this is a side-project, mainly for learning about ORE, it is going to be very simple: one or more fat clients connecting to a postgres database. We don't mind having business logic in the database; the most important thing is for it to be really quick to add new features with the least amount of layers and duplication.

Result:

COMPLETED Add a Qt hello world   code

Create a trivial application in Qt that exercises the pipelines.

Result:

COMPLETED Add a splash screen to applciation   code

It would be nice to have a simple splash screen with the project logo.

Example:

#include "mainwindow.h"
#include <QApplication>
#include <QSplashScreen>
#include <QTimer>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QSplashScreen *splash = new QSplashScreen;
    splash->setPixmap(QPixmap("C:/Users/9589693153/Desktop/Vids/pk.png"));
    splash->show();

    MainWindow w;

    QTimer::singleShot(5000, splash, SLOT(close()));
    QTimer::singleShot(5000, &w, SLOT(show()));

    // w.show();

    return a.exec();
}

Source: QT C++ GUI Tutorial - How to display a Splash Screen in Qt

Result:

COMPLETED Add basic site   infra

We need a basic website for the project.

Result:

COMPLETED Add modeling infrastructure   code

We need to be able to draw some simple PlantUML diagrams to describe the code as we go along. They should be linked to the documentation.

Result:

COMPLETED Exclude vcpkg directories from coverage   infra

At present coverage is very low because its picking up some files from vcpkg install. We need to ignore those.

Result:

COMPLETED Fix code syntax highlighting in site   infra

For some reason we are not getting syntax highlighting in the website.

Result:

  • The issue was with the markers on source code blocks.

COMPLETED Merge index with readme   doc

Its a bit annoying to have both a readme and an index file, since they are both just landing pages. Look into merging them.

Result:

COMPLETED Add project objective to readme   doc

Explain the objective of the project and the approach.

Result:

COMPLETED Add basic logging support   code

Copy across from dogen basic logging.

Result:

COMPLETED Add nightly support with memcheck   infra

We need to check for memory issues with nightlies.

Notes:

Result:

COMPLETED Clean up toolchains and presets   code

We are using CMake in a legacy way when defining warnings, etc. We need to move towards the modern approach, by defining toolchain files and using presets correctly.

Result:

COMPLETED Generate Doxygen documentation and add it to site   doc

We need to create the project documentation in Doxygen.

Result:

COMPLETED Copy domain notes on core concepts   doc

Move assorted notes we have in the domain over to the documentation folder.

Notes:

  • Fix issues with publishing by ignoring emacs package directories and vcpkg.
  • add basic support for bibliography as per progen setup (manual bib file).

Result:

COMPLETED Valgrind fails to run unit tests   infra

At present we get the following failure:

### unhandled dwarf2 abbrev form code 0x25
### unhandled dwarf2 abbrev form code 0x25
### unhandled dwarf2 abbrev form code 0x25
### unhandled dwarf2 abbrev form code 0x23
==6610== Valgrind: debuginfo reader: ensure_valid failed:
==6610== Valgrind:   during call to ML_(img_get)
==6610== Valgrind:   request for range [1940368405, +4) exceeds
==6610== Valgrind:   valid image size of 7099560 for image:
==6610== Valgrind:   "/home/runner/work/OreStudio/OreStudio/build/output/linux-clang-debug/projects/ores.ore.test/ores.ore.test"
==6610==
==6610== Valgrind: debuginfo reader: Possibly corrupted debuginfo file.
==6610== Valgrind: I can't recover.  Giving up.  Sorry.
==6610==

This normally means we are generating DWARF5:

We still get the error with DWARF2 v4. Try v3. The problem is with valgrind:

We need to upgrade to latest valgrind. Try moving to latest ubuntu LTS which has valgrind 3.22.

Updating to Ubunbtu 22.04 and valgrind 3.22 resolved the issue.

Result:

COMPLETED Initial sanity test generated packages   infra

We need to do a simple check of the packages just to make sure they install and run.

Result

Linux package looks correct:

# dpkg -i orestudio_0.0.1_amd64.deb
Selecting previously unselected package orestudio.
(Reading database ... 872299 files and directories currently installed.)
Preparing to unpack orestudio_0.0.1_amd64.deb ...
Unpacking orestudio (0.0.1) ...
Setting up orestudio (0.0.1) ...
# ores.console --help
ORE Studio is a User Interface for Open Source Risk Engine (ORE).Console provides a CLI based version of the interface.
ORE Studio is created by the ORE Studio project.
ores.console uses a command-based interface: <command> <options>.
See below for a list of valid commands.

Global options:

General:
  -h [ --help ]           Display usage and exit.
  -v [ --version ]        Output version information and exit.

Logging:
  -e [ --log-enabled ]    Generate a log file.
  -l [ --log-level ] arg  What level to use for logging. Valid values: trace,
                          debug, info, warn, error. Defaults to info.
  --log-to-console        Output logging to the console, as well as to file.
  --log-directory arg     Where to place the log files.

Commands:

   data           Operates directly on data.

For command specific options, type <command> --help.
# ores.console --version
OreStudio v0.0.1
Copyright (C) 2024 Marco Craveiro.
License GPLv3: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Build: Provider = 'github' Number = '73' Commit = 'a6ca706350b5063fe65b39484350f25bc6bfb806' Timestamp = '2024/07/05 23:59:06'
IMPORTANT: build details are NOT for security purposes.
# apt-get remove orestudio

GUI starts as expected.

Windows package looks very small:

$ ls -lh *msi
-rw-r--r-- 1 marco marco 448K Jul  6 00:01 OreStudio-0.0.1-win64.msi

Its also not installing under wine at present:

$ wine OreStudio-0.0.1-win64.msi
0024:err:module:import_dll Library zlib1.dll (which is needed by L"C:\\windows\\syswow64\\user32.dll") not found
0024:err:module:import_dll Library user32.dll (which is needed by L"C:\\windows\\syswow64\\gdi32.dll") not found
0024:err:module:import_dll Library gdi32.dll (which is needed by L"C:\\windows\\syswow64\\shell32.dll") not found
0024:err:module:import_dll Library zlib1.dll (which is needed by L"C:\\windows\\syswow64\\user32.dll") not found
0024:err:module:import_dll Library user32.dll (which is needed by L"C:\\windows\\syswow64\\gdi32.dll") not found
0024:err:module:import_dll Library gdi32.dll (which is needed by L"C:\\windows\\syswow64\\shlwapi.dll") not found
0024:err:module:import_dll Library zlib1.dll (which is needed by L"C:\\windows\\syswow64\\user32.dll") not found
0024:err:module:import_dll Library user32.dll (which is needed by L"C:\\windows\\syswow64\\shlwapi.dll") not found
0024:err:module:import_dll Library shlwapi.dll (which is needed by L"C:\\windows\\syswow64\\shell32.dll") not found
0024:err:module:import_dll Library zlib1.dll (which is needed by L"C:\\windows\\syswow64\\user32.dll") not found
0024:err:module:import_dll Library user32.dll (which is needed by L"C:\\windows\\syswow64\\shell32.dll") not found
0024:err:module:import_dll Library shell32.dll (which is needed by L"C:\\windows\\syswow64\\start.exe") not found
0024:err:module:import_dll Library zlib1.dll (which is needed by L"C:\\windows\\syswow64\\user32.dll") not found
0024:err:module:import_dll Library user32.dll (which is needed by L"C:\\windows\\syswow64\\start.exe") not found
0024:err:module:loader_init Importing dlls for L"C:\\windows\\syswow64\\start.exe" failed, status c0000135

This needs to be tested on a real windows box.

OSX package is not being uploaded:

Warning: No files were found with the provided path: ./build/output/macos-clang-release/packages/ORES-0.0.1-Darwin-x86_64.dmg. No artifacts will be uploaded.

This is because the filename is incorrect:

CPack: - package: /Users/runner/work/OreStudio/OreStudio/build/output/macos-clang-release/packages/OreStudio-0.0.1-Darwin.dmg generated.

COMPLETED Add command line options support   code

Add a simple command to command line options that deals with data, for example:

ores.console data --import currencies.xml

Notes:

  • missing version support. Need template, etc. Try to use existing CMake variables to setup the version.

Result:

$ ./ores.console --help
ORE Studio is a User Interface for Open Source Risk Engine (ORE).
Console provides a CLI based version of the interface.
ORE Studio is created by the ORE Studio project.
ores.console uses a command-based interface: <command> <options>.
See below for a list of valid commands.

Global options:

General:
  -h [ --help ]           Display usage and exit.
  -v [ --version ]        Output version information and exit.

Logging:
  -e [ --log-enabled ]    Generate a log file.
  -l [ --log-level ] arg  What level to use for logging. Valid values: trace,
                          debug, info, warn, error. Defaults to info.
  --log-to-console        Output logging to the console, as well as to file.
  --log-directory arg     Where to place the log files.

Commands:

   import         Imports data into the system.

For command specific options, type <command> --help.

COMPLETED Unit tests show up twice in nightlies   infra

For some reason we see the dummy test coming out twice in the nightlies. We checked CTest submission and it seems there is only one entry. This could be some kind of timing bug in CDash.

This is now happening for GCC as well. This is as expected:

We need to run the tests just once to avoid this issue.

Result:

COMPLETED Add recipes for command line   doc

Using org-babel, create a simple recipe file that exercises all options for the command line tool.

Result:

COMPLETED Use a bar chart for sprint resourcing cost   agile

We started to struggle with how we use pie charts in the sprint backlog. The main issue is described here:

But it seems more generally that we should avoid them altogether:

Links:

Result:

COMPLETED Classify stories by type   agile

We should tag the stories by their "type" or "kind" and then generate a table with how the resourcing was split. Sample tags:

  • code: real coding task.
  • infra: infrastructure work such as build, tooling, etc.
  • agile: other types of overhead such as agile bookkeeping, release notes, etc.
  • doc: documentation related tasks.

Seems like this is not easy to do within org itself:

But we could perhaps do it within R.

Result:

COMPLETED Update C++ standard   code

We are using C++ 17 at present. Change it to 20 or even 23 and see what breaks.

Seems like 20 is the highest we can go for now.

Result:

COMPLETED Setup laptop for development   infra

Update Debian to latest, install required packages and build ORE Studio in laptop.

Tasks:

  • install R.
  • get latest cunene with R support.
  • seems like the current libsystemd does not build. This is a bit weird because we should be pinned to the same vcpkg commit. However, for some reason it fails to build in the laptop. It seems there already is a fix in main, so we can probably solve the issue by doing an update to vcpkg. We just need to understand why it works everywhere else. The issue appears to be with a filesystem:

    We just need to make sure we are running latest vcpkg as the fix has made it in via this MR:

COMPLETED Add database support for currency   infra

Create a table and write currencies to it.

COMPLETED Add XML parsing support for currency   code

We need to have the ability to read and write currencies from XML. Copy all currency input data from examples.

COMPLETED Add JSON support for currency   code

  • remove manual JSON serialisation code, add real serialisers.

COMPLETED Add basic widgets to display currencies   code

We need some kind of tree view and list view.

Links:

COMPLETED Ignore vcpkg warnings   infra

We are still getting a lot of vcpkg warnings, so our custom setup is not working.

CMake Warning at ports/icu/portfile.cmake:2 (message):
CMake Warning at ports/qtbase/portfile.cmake:39 (message):
CMake Warning at scripts/cmake/vcpkg_buildpath_length_warning.cmake:4 (message):
CMake Warning at scripts/cmake/vcpkg_copy_pdbs.cmake:44 (message):

Links:

COMPLETED Add badges from JKQTPlotter   infra

This project seems to have quite a few additional badges that are of interest:

It may also be interesting in the future:

About

an extensive Qt5 & Qt6 Plotter framework (including a feature-richt plotter widget, a speed-optimized, but limited variant and a LaTeX equation renderer!), written fully in C/C++ and without external dependencies

COMPLETED Investigate other Qt Applications with similar UIs   code

We need to see how people setup the UI and copy the approach.

Results:

  • follow the approach of creating widgets in Qt Creator and then inheriting from the generated code to extend it with signals and slots, etc.
  • copy code from fast track with themes, about, links to website, discord, etc.
  • use remix icons. Follow the fast track approach to embed assets into the application.
  • follow the fast track approach for the applications settings, including remembering window sizes, positions, etc.

Links:

  • QLog: use of flags, complex UI with widgets similar to what we are trying to do. Use of colours in grid view.
  • Search GitHub for Qt6 apps
  • Guitar: GUI for diffs, graph for the git trees. Interesting icons for the workspace / explorer. Shell / log for git actions.
  • FastTrack: complex UI with themes, tabs, docking widgets.
  • RemixIcon: icons

COMPLETED Refactor Qt UI   code

We need to do some minor tidy-ups to the Qt UI:

  • rename the tree widget after workspaces, worksets or some such. Left for later on its own story.
  • add a prodigy launcher for the UI. done
  • add logging to UI. done
  • columns do not have names. done
  • rows are too big. done
  • when you select currencies from the main menu, it should open up the currencies tab. done
  • make the currencies table widget follow the main window size. done

Notes:

  • spent some time analysing FastTrack, a Qt application. Need to do a write up of the features we can copy across. Created its own story for this analysis.

Links:

COMPLETED Use icons from new icon set   code

POSTPONED Create a containing structure for data   code

We need to be able to represent the data in the filesystem for the ORE samples in a way that allows users to load and save the samples. The data in the filesystem has the following structure:

  • Examples
    • Example 1:
      • Input
      • ExpectedOutput, e.g. Output
    • Example 2
    • Example n
    • Input

The overall context under which valuation is taking place needs a name. Options:

  • environment
  • workspace
  • sandbox: seems to imply the data is not "real" but that is not always the case. This seems more like a label we could apply to the top-level container rather than its overall name.

Each entry within the top-level container is then itself another kind of container. Options:

  • namespace
  • package

There are two types of these containers:

  • libraries: components whose content is made to be shared with other components; and
  • executables: components whose content is sufficient to execute computations.
  • component

Elements within a component is of two kinds: input and output. However, this may not necessarily be a good classification because some outputs can be used as inputs to output other elements. Perhaps this is more of a tag.

Notes:

  • move this analysis to documentation.

POSTPONED Convert plantuml diagrams to org-babel   doc

It may be easier to integrate diagrams with roam if they are org-mode documents. Experiment with babel for this.

POSTPONED Setup code quality actions   infra

We added a test password to the repo on purpose to see if it was going to be detected by the github actions:

std::string connection_string("postgresql://ores:ores@localhost:5433/oresdb");

It wasn't. We need to figure out which actions need to be setup for this. Add any other actions we may be missing.

The build seems to be failing:

-- SCCache NOT found.
 CMake Error at /usr/local/share/cmake-3.30/Modules/CMakeDetermineSystem.cmake:152 (message):
   Could not find toolchain file:
   /home/runner/work/OreStudio/OreStudio/vcpkg/scripts/buildsystems/vcpkg.cmake
 Call Stack (most recent call first):
 CMakeLists.txt:61 (project)


 CMake Error: CMake was unable to find a build program corresponding to "Unix Makefiles".  CMAKE_MAKE_PROGRAM is not set.  You probably need to select a different build tool.
 CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage
 -- Configuring incomplete, errors occurred!
 ~/work/OreStudio/OreStudio ~/work/OreStudio/OreStudio
 ~/work/OreStudio/OreStudio
 cpp/autobuilder: No supported build command succeeded.
 cpp/autobuilder: autobuild summary.
 Error: We were unable to automatically build your code. Please replace the call to the autobuild action with your custom build steps. Encountered a fatal error while running "/opt/hostedtoolcache/CodeQL/2.18.0/x64/codeql/cpp/tools/autobuild.sh". Exit code was 1 and last log line was: cpp/autobuilder: autobuild summary. See the logs for more details.

This may be due to a missing sub-module for vcpkg.

CANCELLED Use Qt SQL classes   infra

Try binding to relational database using Qt SQL infrastructure.

Notes:

  • create a model inheriting from QSqlRelationalTableModel.
  • to connect:
QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
        db.setHostName("localhost");
        db.setDatabaseName("pg_nhx");
        db.setUserName("postgres");
        db.setPassword("postgres");
        db.open();

Links: