Skip to content

Commit

Permalink
Add libraries document (#36)
Browse files Browse the repository at this point in the history
* add libraries document with first bullet points

* add text about ARCtrl to libraries

* rename Libraries to Developer Toolstack

* Update developer-toolstack.md

---------

Co-authored-by: Timo Mühlhaus <[email protected]>
  • Loading branch information
HLWeil and muehlhaus authored Sep 17, 2024
1 parent bf6973b commit a710416
Show file tree
Hide file tree
Showing 5 changed files with 62 additions and 3 deletions.
Binary file added public/ARCtrl-layers.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion src/components/Home/RDMGraphNavigation.astro
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ const circles = [
{ id: 2, cx: 30, cy: 40, r: 5, href: '#link4', text: 'Validation', angle: 180 },
{ id: 3, cx: 60, cy: 8, r: 5, href: '#link3', text: 'Continuous Integration', angle: 80 },
{ id: 4, cx: 90, cy: 40, r: 5, href: '#link2', text: 'Versioning', angle: 250 },
{ id: 5, cx: 140, cy: 10, r: 5, href: '#link5', text: 'Libraries', angle: 180 },
{ id: 5, cx: 140, cy: 10, r: 5, href: URLS.INTERNAL_DEV_TOOLSTACK, text: 'Developer Toolstack', angle: 180 },
];
---

Expand Down
2 changes: 1 addition & 1 deletion src/components/Navbar.astro
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ const links: Link[] = [
{href: "/", text: "validation 🚧"},
{href: "/", text: "continuous Integration 🚧"},
{href: "/", text: "versioning 🚧"},
{href: "/", text: "libraries 🚧"},
{href: URLS.INTERNAL_DEV_TOOLSTACK, text: "Developer Toolstack 🚧"},
]},
]},
{href: URLS.INTERNAL_TOOLS, text: "Tools"},
Expand Down
59 changes: 59 additions & 0 deletions src/pages/details/developer-toolstack.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
---
layout: ../../layouts/MarkdownLayout.astro
title: 'Developer Toolstack'
pubDate: 2024-09-16
description: 'ARC related Toolstack for developer'
author: 'Heinrich Lukas Weil'
image:
url: 'https://docs.astro.build/assets/rose.webp'
alt: 'The Astro logo on a dark background with a pink glow.'
tags: ["tools", "services", "community"]
---



### ARCtrl - Developer Toolkit

ARC is a community-driven initiative that mirrors the flexibility required to manage research data effectively in real-world scenarios.
To support the agility needed by developers and to enable them to concentrate on creating specialized tooling for their respective research domains, the ARC core team—supported by NFDI DataPLANT—offers a comprehensive development library tailored for a wide range of ARC-related operations.
[ARCtrl](https://github.com/nfdi4plants/ARCtrl) is a robust software library designed to standardize and simplify the handling of ARC.
It is widely utilized across various ARC-related software projects and consistently aligns with the latest ARC specifications, including new feature updates.
To maximize accessibility and utility for the broadest possible range of developers, ARCtrl is available in multiple programming languages, including [.NET](https://dotnet.microsoft.com/en-us/), [Javascript](https://developer.mozilla.org/en-US/docs/Web/JavaScript), and [Python](https://www.python.org/).
This diversity in language support ensures that developers can work in the environment that best suits their skills and project requirements, enhancing their ability to develop and integrate ARC functionalities efficiently.

Depending on your programming language, ARCtrl can be found on different package hosters:

| nuget | npm | PyPI |
| :--------|----------|--------:|
| <a href="https://www.nuget.org/packages/ARCtrl/"><img alt="Nuget" src="https://img.shields.io/nuget/v/ARCtrl?logo=nuget&color=%2300a896"></a> | <a href="https://www.npmjs.com/package/@nfdi4plants/arctrl"><img alt="NPM" src="https://img.shields.io/npm/v/%40nfdi4plants/arctrl?logo=npm&color=%2300a896"></a> | <a href="https://pypi.org/project/ARCtrl/"><img alt="PyPI" src="https://img.shields.io/pypi/v/arctrl?logo=pypi&color=%2300a896"></a> |

#### Handling representations

The library supports a wide set of base operations for working with different representations. To this effect, ARCtrl can parse ISA metadata files in XLSX format and CWL files in YAML format, resulting in a full parsing of the ARC scaffold representation. On the other hand, the full scaffold data model can also be transformed to the RO-Crate metadata model and parsed as such. Through this, transition between the two representations is merely a few function calls away. In addition to the RO-Crate and the Scaffold representation, ARCtrl also supports parsing the experimental metadata to ISA-JSON, providing an additional entry and exit point.

#### ARC manipulation

ARCtrl supports all sorts of CRUD operations on the top-level layer, including manipulation of investigations, studies, assays, persons and many more. Where it really shines is the palette of functionality for manipulating and querying annotation tables, the tabular representation of the process graph.

#### Framework access

ARCtrl also has some web-capabilities for accessing web-resources of the ARC framework. The Process template registry can be retreived and templates can be downloaded, filled out and included in the ARC datasets. Likewise, the validation package registry can be accessed and validation packages can be selected for validation in DataHUB CI/CD.

#### Transpilation

The library guarantees to behave consistently across the different programming environments. This includes providing the same API, method naming and datamodels on the one hand and writing the ARC representations uniformly. This compatability is achieved by all the packages being based on the same source code.

For this, the source code is written in FSharp. From there it is being compiled to Common Intermediate Language for usage in .NET, and transpiled to Javascript and Python source code using the [Fable compiler](https://github.com/fable-compiler/Fable). As file access can be vastly diverging between different frameworks, especially for javascript, a contract layer was established. This way, every implementation of ARCtrl can decide for itself, how to handle file-system access.

![ARCtrl layers](/arc-website/ARCtrl-layers.png)

To test the functioning of all of this, especially the cross-compatability, a comprehensive set of well over 1000 tests was established which is also being transpiled and run in javascript and python.

#### Usage

ARCtrl is currently used in the following tools:

- [ARCitect](https://github.com/nfdi4plants/ARCitect)
- [Swate](https://github.com/nfdi4plants/Swate)
- [ARCCommander](https://github.com/nfdi4plants/ARCCommander)
- [arc-export](https://github.com/nfdi4plants/arc-export)
2 changes: 1 addition & 1 deletion src/statics.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ export enum URLS {
INTERNAL_DEV_DATA_MODEL = BASE_PATH + "/details/arc-data-model",
INTERNAL_DEV_REPRESENTATION = BASE_PATH + "/details/arc-representation",
INTERNAL_DEV_FDO = BASE_PATH + "/details/arc-fdo",

INTERNAL_DEV_TOOLSTACK= BASE_PATH + "/details/developer-toolstack",

GITHUB_REPO = "https://github.com/nfdi4plants/arc-website"
}

0 comments on commit a710416

Please sign in to comment.