{"id":26891992,"url":"https://github.com/dnv-opensource/vista-sdk","last_synced_at":"2025-06-19T13:35:08.901Z","repository":{"id":37084189,"uuid":"486664594","full_name":"dnv-opensource/vista-sdk","owner":"dnv-opensource","description":"SDKs and tools relating to DNVs Vessel Information Structure (VIS), ISO 19847, ISO 19848 standards","archived":false,"fork":false,"pushed_at":"2025-04-01T11:19:25.000Z","size":5294,"stargazers_count":1,"open_issues_count":1,"forks_count":1,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-05-12T14:11:20.994Z","etag":null,"topics":["dnv","dnvgl","iso-19847","iso-19848","maritime","vis"],"latest_commit_sha":null,"homepage":"https://vista.dnv.com/docs","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dnv-opensource.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-04-28T16:12:05.000Z","updated_at":"2025-04-08T06:09:33.000Z","dependencies_parsed_at":"2024-02-27T10:46:04.586Z","dependency_job_id":"adeed9c1-4178-45da-a171-bb152ac3e40a","html_url":"https://github.com/dnv-opensource/vista-sdk","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dnv-opensource%2Fvista-sdk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dnv-opensource%2Fvista-sdk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dnv-opensource%2Fvista-sdk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dnv-opensource%2Fvista-sdk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dnv-opensource","download_url":"https://codeload.github.com/dnv-opensource/vista-sdk/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253754219,"owners_count":21958842,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dnv","dnvgl","iso-19847","iso-19848","maritime","vis"],"created_at":"2025-03-31T22:48:48.726Z","updated_at":"2025-05-12T14:11:24.456Z","avatar_url":"https://github.com/dnv-opensource.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/dnv-opensource/vista-sdk/build-csharp.yml?branch=main\u0026label=C%23)](https://github.com/dnv-opensource/vista-sdk/actions)\n[![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/dnv-opensource/vista-sdk/build-js.yml?branch=main\u0026label=JS)](https://github.com/dnv-opensource/vista-sdk/actions)\n![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/dnv-opensource/vista-sdk/build-python.yml?branch=main\u0026label=Python)\n[![GitHub](https://img.shields.io/github/license/dnv-opensource/vista-sdk?style=flat-square)](https://github.com/dnv-opensource/vista-sdk/blob/main/LICENSE)\u003cbr/\u003e\n[![SDK NuGet current](https://img.shields.io/nuget/v/DNV.Vista.SDK?label=NuGet%20DNV.Vista.SDK)](https://www.nuget.org/packages/DNV.Vista.SDK)\n[![SDK NuGet prerelease](https://img.shields.io/nuget/vpre/DNV.Vista.SDK?label=NuGet%20DNV.Vista.SDK)](https://www.nuget.org/packages/DNV.Vista.SDK)\u003cbr/\u003e\n[![SDK NPM current](https://img.shields.io/npm/v/dnv-vista-sdk?label=NPM%20dnv-vista-sdk)](https://www.npmjs.com/package/dnv-vista-sdk)\n[![SDK NPM current](https://img.shields.io/npm/v/dnv-vista-sdk/preview?label=NPM%20dnv-vista-sdk)](https://www.npmjs.com/package/dnv-vista-sdk)\u003cbr/\u003e\n![PyPI current](https://img.shields.io/pypi/v/vista-sdk?label=PyPI%20vista-sdk)\n\n\n## Vista SDK\nThe Vista team at DNV are working on tooling related to\n* DNV Vessel Information Structure (VIS)\n* ISO 19847 - Ships and marine technology — Shipboard data servers to share field data at sea\n* ISO 19848 - Ships and marine technology — Standard data for shipboard machinery and equipment\n\nIn this repository we codify the rules and principles of VIS and related ISO-standards to enable and support\nusers and implementers of the standards.\n\nOur plan is to develop SDKs for some of the most common platforms. We are starting with .NET, Python and JavaScript.\nWe will be developing these SDKs as open source projects. Feel free to provide input, request changes or make contributions by creating issues in this repository.\n\nFor general documentation relating to VIS and relating standard. See [docs.vista.dnv.com](https://docs.vista.dnv.com).\n\n### Status\n\n\u003e [!NOTE]\n\u003e The **v0.1** versions of the SDK are currently in production use at DNV for various services.\n\u003e We are currently working on the **v0.2** version of the SDKs where we are adressing several usability and API design issues.\n\u003e When **v0.2** is finalized we are hoping that **v1.0** will quickly follow.\n\u003e New users should stick to **v0.1** currently while we work on stabilizing APIs and design.\n\u003e Functionally (in terms of domain), not much will change\n\n### Content\n\nEach SDK makes use of the contents of the resources and schemas folders to generate code and use the standards.\n\n```\n📦vista-sdk\n ┣ 📂resources\n ┃ ┣ 📜codebooks-vis-3-4a.json.gz\n ┃ ┗ 📜gmod-vis-3-4a.json.gz\n ┣ 📂schemas\n ┃ ┣ 📂json\n ┃ ┃ ┣ 📜DataChannelList.schema.json\n ┃ ┃ ┗ 📜TimeSeriesData.schema.json\n ┣ 📂csharp\n ┣ 📂python\n ┣ 📂js\n ┣ 📜LICENSE\n ┗ 📜README.md\n```\n\n### SDK outline\n\nThis section will outline the various components and modules in our SDKs.\n\n#### Vessel Information Structure\n\nThere are various components of VIS in our SDKs:\n\n* Generic product model (Gmod) - C#, JS\n* Product model (Pmod) - JS\n* Codebooks (metadata tags) - C#, JS\n* Locations - C#, JS\n\nFor more information on this concepts, check out [docs.vista.dnv.com](https://docs.vista.dnv.com).\n\n#### ISO-19848 and ISO-19847\n\nPart of these standards are the definition of datastructures used for communicating and sharing sensor data.\nNote that while compression isnt explicitly mentioned in these standards, the standard doesnt prohibit use\nof compression when implementing these standards, as long as the datastructures remain the same.\n\nRelated components:\n\n* Universal ID \u0026 Local ID - C#, JS\n* DataChannelList \u0026 TimeSeriesData - C#, JS\n\n### Benchmarks\n\nWe are developing some benchmarks to keep track of the performance characteristics of the libraries we are creating.\n\n#### Transport packages - DataChannelList and TimeSeriesData\n\nThe ISO-19848/10947 standards define the schema for the XML encoding of the transport packages.\nThe JSON encoding is only provded in example form, but we have developed [JSON schemas](https://json-schema.org/) for these packages [here](schemas/json/).\n\nIn the benchmark below we try to isolate the difference between Json and Avro encoding, and measure the effect of compression using Bzip2 and Brotli.\nSee the `Payload size` column below for an insight into size of ISO-19848 packages over the wire.\nAvro has been included as an example binary encoding - it is not currently part of the standard.\nThe latency measurements in this context are less useful, as they are platform-specific.\nSee [csharp/benchmark](csharp/benchmark) for more details on the method of the benchmarks.\n\n``` ini\n\nBenchmarkDotNet=v0.13.1, OS=Windows 10.0.19043.1645 (21H1/May2021Update)\n11th Gen Intel Core i9-11950H 2.60GHz, 1 CPU, 16 logical and 8 physical cores\n.NET SDK=6.0.202\n  [Host]                        : .NET 6.0.4 (6.0.422.16404), X64 RyuJIT\n  DataChannelList serialization : .NET 6.0.4 (6.0.422.16404), X64 RyuJIT\n\nJob=DataChannelList serialization  IterationCount=3  LaunchCount=1\nWarmupCount=3\n\n```\n| Method |   Categories | CompressionLevel |         Mean |        Error |       StdDev | Payload size |\n|------- |------------- |----------------- |-------------:|-------------:|-------------:|-------------:|\n|   **Json** | **Uncompressed** |                **?** |     **906.4 μs** |     **106.4 μs** |      **5.83 μs** |    **285.92 KB** |\n|   Avro | Uncompressed |                ? |     702.2 μs |     337.7 μs |     18.51 μs |    113.22 KB |\n|        |              |                  |              |              |              |              |\n|   Json |       Brotli |                ? | 363,783.2 μs | 468,803.0 μs | 25,696.67 μs |     18.31 KB |\n|   Avro |       Brotli |                ? | 129,235.6 μs |  35,572.9 μs |  1,949.87 μs |     18.56 KB |\n|        |              |                  |              |              |              |              |\n|   **Json** |        **Bzip2** |                **5** |  **42,353.5 μs** |  **16,058.2 μs** |    **880.20 μs** |     **19.19 KB** |\n|   Avro |        Bzip2 |                5 |  12,175.2 μs |   9,095.2 μs |    498.54 μs |      19.5 KB |\n|   **Json** |        **Bzip2** |                **9** |  **48,419.8 μs** |  **16,895.3 μs** |    **926.09 μs** |     **19.19 KB** |\n|   Avro |        Bzip2 |                9 |  13,762.6 μs |   2,310.1 μs |    126.62 μs |      19.5 KB |\n\n\n### API patterns\n\n#### Immutability\n\nDomain models exposed in the SDKs are generally immutable,\nthe builder APIs construct new instances while passing along the old data that is not modified by the builder method invoked.\n\n#### Builder pattern\n\nTypically, when the SDK provides code for building classes, it does so in a Builder Pattern. It provides possibility to chain using With, TryWith and Without methods.\n\n```csharp\nbuilder = Create(someIntro)\n    .WithSomeValue(someValue)\n    .TryWithSomeOtherValue(someOtherValue)\n    .WithoutSomeThirdValue() // usually without/limited arguments\nbuilder = builder.TryWithValue(item, out var success)\n```\n\n* `With` should be used when the operation is expected to receive non-nullable values and succeed without further checking. It will throw error if provided with wrong arguments.\n* `TryWith` should be used in two cases: When you don't want to be bothered by failures behind the scene, and when you want to know if it went ok, but without exceptions. If you want to check if the opration went as expected, you can use the try do out param - \"succeeded\" e.g. TryWithSomething(intput, out bool succeeded).\n* `Without` provides functionality for removing certain elements from the chain. Typically without arguments/limited arguments\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdnv-opensource%2Fvista-sdk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdnv-opensource%2Fvista-sdk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdnv-opensource%2Fvista-sdk/lists"}