Skip to content

Release notes

mweyns edited this page Apr 22, 2018 · 37 revisions

This page contains for each release the following items:

  • A reference to the release
  • How the release can be tested
  • What new functionality is featured

Release 0.1

This release can be found here.

The app can accessed at http://193.190.127.184/. Should these be desired, the release referenced above also contains build instructions.

The current release features a basic setup, which contains both a functional model and the skeleton of a GUI. Specifically, the model provides the following functionality:

  • Register observers and notify these observers of any changes to the model data (upon the completion of a task).
  • Change the model state by setting components; any changes are added to a change buffer, which is used to notify observers.
  • Schedule tasks for execution and execute these tasks in a FIFO manner.

While it has been implemented, as of yet none of the model's functionality actually impacts what the user can do. Later on, interactions between users and the graphical user interface will percolate throughout the architecture, requiring functionality offered by the model, persistence layer, etc. but for now, interaction is limited to the GUI component alone. Functionality offered by the GUI is the following:

  • A zoom slider which can be moved, but otherwise does not have any use as of yet.
  • A side menu which can be toggled in the upper left corner of the screen, containing a few mock building blocks.
  • Four buttons (Import Project, Save Project, Import Graph, Save Graph) which can all be clicked, but only Import Graph is already partially implemented and causes a file picker to pop up, limiting the available extension types to .n3, .rdf, and .ttl, which are the only graph formats we support.

Release 0.2

This release can be found here.

The app (in its released version) can still be accessed at http://193.190.127.184/. And should these be desired, the release referenced above also contains build instructions. It is also worth noting that we now have 'nightly' builds set up, which contains whatever is currently merged into the master branch of the UnSHACLed repository. This version can be found at http://193.190.127.184:8800. At the time of this release, the app and the 'nightly' build of the app will of course coincide.

The current release features a much improved GUI with the following functionality:

  • On the main page
    • A link to an "About" page. As of yet, this "About" page contains only placeholder text.
    • A link to a "Contact" page. As of yet, this "Contact" page does not contain any actual contact information.
    • A link to the UnSHACLed repository.
    • A link to these release notes.
    • A link to the main page.
    • A "Sign-up" button, which does not work yet.
    • A "Login" button, which redirects the user to the login page.
  • On the login page
    • Again, a "Login" button and a "Sign-up" button. The "Login" button redirects the user to the visual editor, given that he/she has filled in something in both the "Username and Password" fields. The "Sign-up" button has the same functionality as before.
    • "Username" and "Password" fields, which both do not support actual authentication and authorization yet and display messages to that effect.
  • On the visual editor page
    • The same four buttons as in the previous release are displayed at the top, with the same functionality. Additionally, there are buttons linking to the UnSHACLed repository and to these release notes, as well as a "Logout" button which returns the user to the login page.
    • The side menu containing the mock building blocks no longer has to be toggled and also features a search bar, allowing the user to easily filter the building blocks based on a search string.
    • An drop down menu just above the side menu, allowing the user to switch between the building blocks and a mock project structure.
    • A canvas containing two connected nodes, which can be dragged either individually or together.

The model functionality has remained unchanged since the last release.

While not yet integrated with the GUI (this should be happening very soon), a big addition to this release is the persistence layer, which now fully provides functionality for loading from and saving to files containing RDF code in four different formats: Tutrle, N-Quads, N-Triples, and TriG. The functionality of the persistence layer is best understood in terms of these two functions (here explained in terms of graphs, but this can be extended to any sort of file content):

  • Loading a file as a Graph into the Model
    1. find(module) is called by the GUI with module being an object of type Module containing three parts: a type which indicates the ModelComponent type under to which the component must be mapped in the Model; a name which functions as identifier when one wants to retrieve the specific graph from the Component of which it is a part; and a target, which is the Blob representing the file chosen by the user.
    2. readFromFile(module, save) is called by the Data Access Object on the IOFacilitator. Here, save is a callback containing the actual task of saving the loaded data to the Model.
    3. The FileReader API is used to read the contents of the Blob.
    4. The contents of the file are parsed by the GraphParser using the N3.js library.
    5. The parsed Graph object is stored into a Component, which is then stored into the model using the callback provided in step 2 (which contains calls to the Model's schedule(task) and processTask() functions).
  • Saving a Graph to a file from the Model
    1. insert(module) is called by the GUI with the module being the same as previously described. However, this time the target will contain an empty Blob, containing only the correct Mime type.
    2. schedule(task) and processTask() are called to retrieve the correct Component from the Model, from which then the Graph can be retrieved using the identifier from the Module.
    3. writeToFile(module, data) is called by the Data Access Object on the IOFacilitator. Here, data is the Graph retrieved from the Model in the previous step.
    4. The Graph object is serialized by the GraphParser to a string containing its encoded representation using the N3.js library.
    5. The string representation is saved to a file using the FileSaver API.

Release 0.3

This release can be found here.

The app (in its released version) can still be accessed at http://193.190.127.184/.

The current release features an improved GUI and Model.

Specifically for the GUI, the following additions were made:

  • On the main page
    • Nothing has changed on the main page except that the version number has changed from v0.1 to v0.3.
  • On the login page
    • Nothing has changed on the login page.
  • On the visual editor page
    • The visual editor page contains all the same buttons at the top as in the previous release. Additionally, a button was added to show or hide the sidebar; a garbage bin was added which deletes the selected node; undo and redo buttons were added which respectively undo and redo the last change; a button as was added to take a snapshot of the current canvas, opening a new window containing the snapshot; zoom-in and zoom-out buttons were added with the expected functionality; a button was added that zooms out to contain the entire visualized graph structure; lastly, a button was added that refocuses when the view was zoomed out using the previous button.
    • Importantly, the "Import Graph" and "Save Graph" buttons are now operational. When the "Import Graph" button is pressed a file picker again is opened and a file can be selected and subsequently opened. If this file contains valid RDF code (in Turtle, N-Triples, N-Quads, or TriG format), it will be loaded properly; otherwise an empty graph structure is added to the Model. When the "Save Graph" button is pressed, a menu pops up listing every loaded file, from which a file can then be selected. Upon selection, this file is saved to the User's download folder.
    • In the sidebar, all the mock building blocks of the last release have been made operational, meaning that they can be dragged onto the canvas, where they will materialize and where they can subsequently be edited. The editing functionality as of yet does not accomplish anything concrete. One can merely type in the boxes, but this text is not actually stored.
    • On the canvas a mock constraint graph structure has been visualized according to the Ouroboros visual notation, with arrows linking nodes to one another. Each of the blocks can be collapsed (by clicking in its top left corner), as well as resized and dragged, either individually or together with other such blocks. The arrows will be automatically re-positioned.

The Model now provides the following additional functionality:

  • "ProcessAllTasks" and "processTasksDuring"
    • The former processes tasks until the task schedule becomes empty, the latter processes tasks until either the task schedule becomes empty or a particular number of milliseconds elapse.
  • Out-of-order execution of tasks
    • In contrast with the single-order processor, which executes tasks in the order in which they were scheduled, the out-of-order processor executes tasks based on their priority level, irrespective of scheduling order.
    • This processor uses the same techniques as superscalar out-of-order processors and state-of-the-art compilers such as LLVM and GCC to reason about instructions. Specifically, each task is represented as an instruction in a mutable variant of single static assignment (SSA) form. When an instruction is executed, that instruction is removed as a dependency from all dependent instructions. Instructions become eligible for execution when their dependency set becomes empty, i.e., all of their dependencies have been executed. This scheme is used in superscalar out-of-order processors to run multiple tasks at the same time. It is used here to prioritize tasks, as data flow execution allows us to cherry-pick high-priority from the task queue, dependencies permitting.
  • Instruction merging
    • By forcing every task to come with a read set and a write set, the out-of-order processor can generate dependency sets for every generated instruction which can then be used to merge instructions that can be processed successively.
    • For this merging activity an InstructionMerger was written containing multiple task rewriters (responsible for rewriting tasks so that they can effectively be merged as instructions). This merger looks through all possible candidates to merge with a particular instruction, and if possible performs the merge operation.

Release 0.4

This release can be found here.

The app (in its released version) can still be accessed at http://193.190.127.184/.

The current release features an improved GUI and model, as well as conformance checking logic.

Specifically for the GUI, the following additions were made:

  • On the main page
    • The "About" page now contains an explanation of the Semantic Web, the UnSHACLed application (added value + features).
    • The "Contact" page now contains a list with all the team members' names, including everyone's roles within the project and our respective email addresses.
  • On the login page
    • Nothing has changed on the login page.
  • On the visual editor page
    • The building blocks (components) in the sidebar to the left of the editor canvas have undergone some visual change, but are no longer operational. A button has been added that will be used in the future to load in templates.
    • The previous "Import Graph" button has been replaced by two different buttons, one for loading in data graphs, one for loading in SHACL shapes graphs. When valid files are loaded using these buttons, they are parsed and also graphically displayed (in contrast with the previous release where they were only stored inside the model).
    • There is now a "Conformance errors" button that is used to run the validation algorithm; when clicked, this button displays any violations there might have been found in the process.

Conformance checking logic includes the following functionality:

  • Validation Service
    • Allows registration of different validators and listens to changes made to the model to schedule validation tasks whenever a change has occurred.
  • SHACL Validator
    • Performs a validation operations on all currently loaded graphs and provides a validation report containing the results. The SHACL Validator performs an incremental merge based on graphs' recent changes to speed up consecutive validation operations.
Clone this wiki locally