eclipse-basyx / basyx-applications Goto Github PK
View Code? Open in Web Editor NEWapplications
License: MIT License
applications
License: MIT License
Hi,
I created Aspect Model and I converted it into Asset Administration Shell using SAMM CLI. Now if I am trying to open it using AASX Package Explorer it is showing an error.
Loading aasx file repository ..........\Sample_AAS\aasxrepo-new.json ..
File not found when loading aasx file repository ..........\Sample_AAS\aasxrepo-new.json
Application started ..
[AasxPluginAdvancedTextEditor] ListActions() called
[AasxPluginAdvancedTextEditor] InitPlugin() called with args =
[AasxPluginBomStructure] ListActions() called
[AasxPluginBomStructure] InitPlugin() called with args =
[AasxPluginDocumentShelf] InitPlugin() called with args =
[AasxPluginExportTable] ListActions() called
[AasxPluginExportTable] InitPlugin() called with args =
[AasxPluginGenericForms] ListActions() called
[AasxPluginGenericForms] InitPlugin() called with args =
[AasxPluginImageMap] ListActions() called
[AasxPluginImageMap] InitPlugin() called with args =
[AasxPluginMtpViewer] GetPluginName() = MtpViewer
[AasxPluginMtpViewer] ListActions() called
[AasxPluginMtpViewer] InitPlugin() called with args =
[AasxPluginMtpViewer] GetPluginName() = MtpViewer
[AasxPluginPlotting] ListActions() called
[AasxPluginPlotting] InitPlugin() called with args =
[AasxPluginSmdExporter] ListActions() called
[AasxPluginSmdExporter] InitPlugin() called with args =
[AasxPluginTechnicalData] ListActions() called
[AasxPluginTechnicalData] InitPlugin() called with args =
[AasxPluginOpcUaClient] ListActions() called
[AasxPluginUaNetServer] GetPluginName() = Net46AasxServerPlugin
[AasxPluginUaNetServer] ListActions() called
[AasxPluginUaNetServer] InitPlugin() called with args =
[AasxPluginUaNetServer] GetPluginName() = Net46AasxServerPlugin
[AasxPluginWebBrowser] ListActions() called
[AasxPluginWebBrowser] InitPlugin() called with args =
Loading new AASX from: C:\Users\punit\Downloads\MeasurementUnit.aasx as auxiliary False ..
Error: Unhandled exception in AasxPackageExplorer v1.0.0.0: PackageCentral: while performing load from C:\Users\punit\Downloads\MeasurementUnit.aasx at \PackageCentral.cs:line 95 gave: One or more errors occurred. PackageCentral: while performing load from C:\Users\punit\Downloads\MeasurementUnit.aasx at \PackageCentral.cs:line 95 gave: One or more errors occurred.
InnerException: One or more errors occurred.
InnerException: While opening aasx C:\Users\punit\AppData\Local\Temp\tmp905C.aasx from source local file: C:\Users\punit\Downloads\MeasurementUnit.aasx buffered to: C:\Users\punit\AppData\Local\Temp\tmp905C.aasx at \AdminShellPackageEnv.cs:line 402 gave: While reading the AASX C:\Users\punit\AppData\Local\Temp\tmp905C.aasx at \AdminShellPackageEnv.cs:line 313 gave: Part URI must start with a forward slash. at at AasxPackageLogic.PackageCentral.PackageCentralItem.Load(PackageCentral packageCentral, String location, String fullItemLocation, Boolean overrideLoadResident, PackageContainerOptionsBase containerOptions, PackCntRuntimeOptions runtimeOptions) in D:\a\aasx-package-explorer\aasx-package-explorer\src\AasxPackageLogic\PackageCentral\PackageCentral.cs:line 104
at AasxPackageExplorer.MainWindow.UiLoadPackageWithNew(PackageCentralItem packItem, AdminShellPackageEnv takeOverEnv, String loadLocalFilename, String info, Boolean onlyAuxiliary, Boolean doNotNavigateAfterLoaded, PackageContainerBase takeOverContainer, String storeFnToLRU, Boolean indexItems) in D:\a\aasx-package-explorer\aasx-package-explorer\src\AasxPackageExplorer\MainWindow.xaml.cs:line 294
at AasxPackageExplorer.MainWindow.<CommandBinding_GeneralDispatch>d__5.MoveNext() in D:\a\aasx-package-explorer\aasx-package-explorer\src\AasxPackageExplorer\MainWindow.CommandBindings.cs:line 266
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler).
Stacktrace: at AasxPackageLogic.PackageCentral.PackageCentralItem.Load(PackageCentral packageCentral, String location, String fullItemLocation, Boolean overrideLoadResident, PackageContainerOptionsBase containerOptions, PackCntRuntimeOptions runtimeOptions) in D:\a\aasx-package-explorer\aasx-package-explorer\src\AasxPackageLogic\PackageCentral\PackageCentral.cs:line 104
at AasxPackageExplorer.MainWindow.UiLoadPackageWithNew(PackageCentralItem packItem, AdminShellPackageEnv takeOverEnv, String loadLocalFilename, String info, Boolean onlyAuxiliary, Boolean doNotNavigateAfterLoaded, PackageContainerBase takeOverContainer, String storeFnToLRU, Boolean indexItems) in D:\a\aasx-package-explorer\aasx-package-explorer\src\AasxPackageExplorer\MainWindow.xaml.cs:line 294
at AasxPackageExplorer.MainWindow.<CommandBinding_GeneralDispatch>d__5.MoveNext() in D:\a\aasx-package-explorer\aasx-package-explorer\src\AasxPackageExplorer\MainWindow.CommandBindings.cs:line 266
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
Loading new AASX from: C:\Users\punit\Downloads\Universal_Robot.aasx as auxiliary False ..
AASX C:\Users\punit\Downloads\Universal_Robot.aasx loaded.
[AasxPluginExportTable] Export UML data to file: C:\Users\punit\Desktop\new.uml
[AasxPluginExportTable] Export UML data copied to paste buffer.
[AasxPluginExportTable] Export UML data to file: C:\Users\punit\Downloads\new.xml
[AasxPluginExportTable] Export UML data copied to paste buffer.
[AasxPluginExportTable] Exporting table: C:\Users\punit\Downloads\new.docx
Loading new AASX from: C:\Users\punit\Downloads\MeasurementUnit.aasx as auxiliary False ..
Error: Unhandled exception in AasxPackageExplorer v1.0.0.0: PackageCentral: while performing load from C:\Users\punit\Downloads\MeasurementUnit.aasx at \PackageCentral.cs:line 95 gave: One or more errors occurred. PackageCentral: while performing load from C:\Users\punit\Downloads\MeasurementUnit.aasx at \PackageCentral.cs:line 95 gave: One or more errors occurred.
InnerException: One or more errors occurred.
InnerException: While opening aasx C:\Users\punit\AppData\Local\Temp\tmp475F.aasx from source local file: C:\Users\punit\Downloads\MeasurementUnit.aasx buffered to: C:\Users\punit\AppData\Local\Temp\tmp475F.aasx at \AdminShellPackageEnv.cs:line 402 gave: While reading the AASX C:\Users\punit\AppData\Local\Temp\tmp475F.aasx at \AdminShellPackageEnv.cs:line 313 gave: Part URI must start with a forward slash. at at AasxPackageLogic.PackageCentral.PackageCentralItem.Load(PackageCentral packageCentral, String location, String fullItemLocation, Boolean overrideLoadResident, PackageContainerOptionsBase containerOptions, PackCntRuntimeOptions runtimeOptions) in D:\a\aasx-package-explorer\aasx-package-explorer\src\AasxPackageLogic\PackageCentral\PackageCentral.cs:line 104
at AasxPackageExplorer.MainWindow.UiLoadPackageWithNew(PackageCentralItem packItem, AdminShellPackageEnv takeOverEnv, String loadLocalFilename, String info, Boolean onlyAuxiliary, Boolean doNotNavigateAfterLoaded, PackageContainerBase takeOverContainer, String storeFnToLRU, Boolean indexItems) in D:\a\aasx-package-explorer\aasx-package-explorer\src\AasxPackageExplorer\MainWindow.xaml.cs:line 294
at AasxPackageExplorer.MainWindow.<CommandBinding_GeneralDispatch>d__5.MoveNext() in D:\a\aasx-package-explorer\aasx-package-explorer\src\AasxPackageExplorer\MainWindow.CommandBindings.cs:line 266
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler).
Stacktrace: at AasxPackageLogic.PackageCentral.PackageCentralItem.Load(PackageCentral packageCentral, String location, String fullItemLocation, Boolean overrideLoadResident, PackageContainerOptionsBase containerOptions, PackCntRuntimeOptions runtimeOptions) in D:\a\aasx-package-explorer\aasx-package-explorer\src\AasxPackageLogic\PackageCentral\PackageCentral.cs:line 104
at AasxPackageExplorer.MainWindow.UiLoadPackageWithNew(PackageCentralItem packItem, AdminShellPackageEnv takeOverEnv, String loadLocalFilename, String info, Boolean onlyAuxiliary, Boolean doNotNavigateAfterLoaded, PackageContainerBase takeOverContainer, String storeFnToLRU, Boolean indexItems) in D:\a\aasx-package-explorer\aasx-package-explorer\src\AasxPackageExplorer\MainWindow.xaml.cs:line 294
at AasxPackageExplorer.MainWindow.<CommandBinding_GeneralDispatch>d__5.MoveNext() in D:\a\aasx-package-explorer\aasx-package-explorer\src\AasxPackageExplorer\MainWindow.CommandBindings.cs:line 266
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
I try out the new AAS UI with the provided example for AAS v3. When using the AAS routing feature I get in a lot of cases the error message Submodel Repository URL not set
. When checking the endpoint-settings within the ui it shows that the endpoints for Registry, AAS, Submodel and Concept Description are set.
I use this URL to test: http://localhost:3000/?aas=http://localhost:8081/shells/aHR0cHM6Ly9odHctYmVybGluLmRlL2lkcy9hYXMvZGVtb2Fhc3Yz
The same error occurs when adding a path e.g.: http://localhost:3000/?aas=http://localhost:8081/shells/aHR0cHM6Ly9odHctYmVybGluLmRlL2lkcy9hYXMvZGVtb2Fhc3Yz&path=http://localhost:8081/submodels/aHR0cHM6Ly9odHctYmVybGluLmRlL2lkcy9zbS9kZW1vc3VibW9kZWx2Mw
The only difference is that the "Element Details" of the submodel are displayed but the "AAS Treeview" stays empty
I am running the BaSyx docker containers (registry, server, gui) in a docker compose environment and traefik as a reverse proxy with SSL termination.
Everything is working fine except the download of a File from the element details view, because the wrong domain is pre-filled here. In the input field, instead of "https://aas-server.example.com/aasServer/files/aasx/Document/operating-manual-xp-xpc-xpk-en.pdf" - "http://aas-server.example.com:4001/aasServer/files/aasx/Document/operating-manual-xp-xpc-xpk-en.pdf" is pre-filled.
If I change the domain manually the download and pdf preview is working. I think the initial pre-filled info comes from the context.properties file from the AAS server, right? But thats actually the internal docker port and non TLS.
Hi, I have a small problem that the AAS GUI does not work behind a nginx with path like https://127.0.0.1/aasui/.
Unfortunately I can't directly use the publish port and have to route it behind a nginx configured path.
However, the container can not handle it at the moment.
As you can see in the response, all paths (from "/@vite/client" and "/src/main.ts") are absolute.
So the browser can't find them because the /aasui/ path is missing.
Is there any way to configure the docker container to work behind a path?
Thanks for your help.
docker-compose:
version: "3"
services:
aasui:
image: eclipsebasyx/aas-gui:v230403
container_name: aasui
restart: always
ports:
- "3000:3000"
nginx:
listen 80 default_server;
listen [::]:80 default_server;
sendfile on;
gzip on;
large_client_header_buffers 8 64k;
-----
location = /aasui {
return 302 /aasui/;
}
location /aasui/ {
proxy_pass http://127.0.0.1:3000/;
proxy_set_header X-Base-Path /aasui;
include proxy.conf;
}
proxy.conf:
proxy_buffers 32 4m;
proxy_busy_buffers_size 25m;
proxy_buffer_size 512k;
proxy_ignore_headers "Cache-Control" "Expires";
proxy_max_temp_file_size 0;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header Origin $request_uri;
client_max_body_size 1024m;
client_body_buffer_size 4m;
proxy_connect_timeout 600;
proxy_read_timeout 600;
proxy_send_timeout 600;
proxy_intercept_errors off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
response:
<!DOCTYPE html>
<html lang="en">
<head>
<script type="module" src="/@vite/client"></script>
<meta charset="UTF-8" />
<link rel="icon" href="./src/assets/Logo/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>AAS UI</title>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.ts"></script>
</body>
</html>
The AAS with its elements is displayed correctly in the GUI but I can't overwrite the value of a single submodel element. When I want to upload the new value an internal server error occurs. The same error occurs when I add new entries for example in a multilanguage property.
I tried to change the value in the aas environment via postman and this works.
Thanks for your help.
My Code for reproducing:
aas-env-setup - Kopie.zip
I tried to invoke the ExampleOperation in the TestAssetAdministrationShell (AAS-ID: https://acplt.org/Test_AssetAdministrationShell) of the test_demo_full_example AAS of the basyx-java-server-sdk/examples.
Therfore I entered one input and one in-/output variable. For simplicity I wrote Test for input and Eins for in/out. When I click Execute then the error status 405 occurs.
Thanks for your help.
My Code for reproducing:
aas-env-setup - Kopie.zip
Hi @aaronzi,
thank for your work.
It would be great to add a ?registry query parameter similar to ?aas paremeter in order to be able to set a default registry.
Even better it would be to pass a registry using environmental variables https://stackoverflow.com/questions/50828904/using-environment-variables-with-vue-js.
BR
Hi,
Where can I find some documentation and further examples about custom plugins? Is it mandatory to write my own plugin with Vue or other frameworks or vanila js would work too?
I would like to also know the limitations of this feature.
Thanks for your help.
The demo demo registry server: http://52.170.212.185:4999/ don't work.
Please provide it.
I add some reference elements into an operation element of the AAS. In the GUI the reference elements can't be entered correctly. I can only type numbers into the field.
docker-version: eclipsebasyx/aas-gui:v230703
Docker-compose: https://github.com/eclipse-basyx/basyx-java-examples/tree/main/basyx.docker/simple-deployment-with-gui
Run the following docker-compose file (contains aas-registry, aas-server, aas-db, aas-gui, traefik):
version: '3'
services:
traefik:
image: traefik:v3.0
ports:
- "8080:8080"
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- "./traefik_config.yml:/etc/traefik/traefik.yml"
aas-registry:
image: eclipsebasyx/aas-registry:1.4.0
depends_on:
- aas-database
- aas-server
- aas-gui
environment:
basyxregistry_registry_backend: MongoDB
basyxmongodb_dbconnectionstring: mongodb://aas-database:27017/
basyxcontext_accesscontrolalloworigin: "*"
labels:
- "traefik.enable=true"
- "traefik.http.routers.aas-registry.rule=PathPrefix(`/aas-registry/`)"
- "traefik.http.routers.aas-registry.service=aas-registry"
- "traefik.http.routers.aas-registry.middlewares=aas-registry"
- "traefik.http.middlewares.aas-registry.stripprefix.prefixes=/aas-registry"
- "traefik.http.services.aas-registry.loadbalancer.server.port=4000"
- "traefik.docker.network=default"
networks:
- default
aas-server:
image: eclipsebasyx/aas-server:1.4.0
depends_on:
- aas-database
environment:
basyxaas_registry_path: http://aas-registry:4000/registry/api/v1/registry
basyxaas_aas_backend: MongoDB
basyxaas_aas_aasxupload: Enabled
basyxaas_registry_host: http:///aas-server:4001/aas-server/aasServer
basyxmongodb_dbconnectionstring: mongodb://aas-database:27017/
basyxcontext_accesscontrolalloworigin: "*"
waiting_for: '[{"host":"aas-registry","port":"4000"}]'
labels:
- "traefik.enable=true"
- "traefik.http.routers.aas-server.rule=PathPrefix(`/aas-server/`)"
- "traefik.http.routers.aas-server.service=aas-server"
- "traefik.http.routers.aas-server.middlewares=aas-server"
- "traefik.http.middlewares.aas-server.stripprefix.prefixes=/aas-server"
- "traefik.http.services.aas-server.loadbalancer.server.port=4001"
- "traefik.docker.network=default"
networks:
- default
aas-database:
image: mongo:latest
volumes:
- "aas-database:/data/db"
aas-gui:
image: eclipsebasyx/aas-gui:v230703
environment:
VITE_BASE_PATH: "/aas-gui"
VITE_REGISTRY_PATH: "http:///localhost/aas-registry/registry"
VITE_AAS_SERVER_PATH: "http:///localhost/aas-server/aasServer"
labels:
- "traefik.enable=true"
- "traefik.http.routers.aas-gui.rule=PathPrefix(`/aas-gui/`)"
- "traefik.http.routers.aas-gui.service=aas-gui"
# - "traefik.http.routers.aas-gui.middlewares=aas-gui"
# - "traefik.http.middlewares.aas-gui.stripprefix.prefixes=/aas-gui"
- "traefik.http.services.aas-gui.loadbalancer.server.port=3000"
- "traefik.docker.network=default"
networks:
- default
networks:
default:
volumes:
aas-database:
with traefik_config.yml:
global:
checkNewVersion: false
sendAnonymousUsage: false
entryPoints:
web:
address: :80
websecure:
address: :443
api:
insecure: true
dashboard: true
providers:
docker:
endpoint: "unix:///var/run/docker.sock"
When opening http://localhost/aas-gui aas-gui should be visible
When opening http://localhost/aas-gui aas-gui is not loading and console is showing error messages:
AAS GUI tries to load /src/main.ts and /@vite/client from http://localhost and not from http://localhost/aas-gui and therefore requests for those files do not reach aas-gui because traefik has no routing rules for "/src" and "/@Vite" path.
Env variable VITE_BASE_PATH=/aas-gui does not fix the problem.
Add additional traefik routing routes, so requests to "/src", "/@Vite", "/node_modules" and "/@id" are also forwarded to aas-gui container:
labels:
- "traefik.http.routers.aas-gui.rule=PathPrefix(`/aas-gui/`) || PathPrefix(`/@vite/client`) || PathPrefix(`/src`) || PathPrefix(`/node_modules`) || PathPrefix(`/@id`)"
Opening http://localhost/aas-gui/ works with workaround:
AAS GUI rewrites hostname/path in address bar of browser (maybe this is part of the problem):
this:
turns into this:
Looks like env var VITE_BASE_PATH works for some parts of the App but not all. Loading the logo does not work when setting VITE_BASE_PATH=/aas-gui and do not strip path prefix via traefik.
When enabeling stripping path prefix in traefik, loading the logo works:
- "traefik.http.routers.aas-gui.middlewares=aas-gui"
- "traefik.http.middlewares.aas-gui.stripprefix.prefixes=/aas-gui"
Hi, when using the gui and trying to open an AAS, it doesn't show unfortunately the sumodels. By clicking on the AAS it says "Could not reach Asset Adminstration Shell!" Do you have any idea how to fix this problem? I activated in both context.properties (server and registry) accessControlAllowOrigin=*
and here is a screenshot:
The default font color of the graph visualization is (very close to) white and therefore not visible by default.
It will be changed after switching the themes, but reloading the site defaults back to the bright font color.
(This can be reproduced by using the white theme as a default when accessing the site.)
I add an Operation to my submodel with some InputVariables. To every InputVariable I had some default values. But in the GUI they are not displayed. But I can read the default values from the server.
docker-image: eclipsebasyx/aas-gui:v230703
docker-compose: https://github.com/eclipse-basyx/basyx-java-examples/tree/main/basyx.docker/simple-deployment-with-gui
When I add the Bill of Material Submodel to my AAS and want to display the submodel in the GUI, the GUI says "Invalid SubmodelElement!"
docker-image: eclipsebasyx/aas-gui:v230703
docker-compose: https://github.com/eclipse-basyx/basyx-java-examples/tree/main/basyx.docker/simple-deployment-with-gui
I create a docker-compose file with an aas-environment, an aas-registry and an aas-gui. I can register an AAS in the gui but when I click on my AAS the failure occur "Submodel URL can not be resolved". I have uploaded my AAS as json-file in the server, as at this time the aasx-file can not be upladed because of problems in serialization.
To reproduce:
I suspect these endpoints are deprecated, as I can't find a reference to widgets in basyx-java-server-sdk.
There's some widget related endpoints and code in the aas-gui, which are causing some errors.
(In my use-case, also errors in CORS, and due to these errors, the UI seems to be reloading - each reload of the UI is for some reason, downloading approximately 8.2MB each time)
Is there a particular reason to keep them? If not, I could create a PR to remove them.
This is in AppNavigation and MainMenu, with references in a few places to widgets as a concept.
// Function to check if Widget API is available and set the Widget Feature Activation Status in the store
checkWidgetApi() {
let WidgetApiURL = this.registryURL.split(':') as any;
WidgetApiURL[2] = '4000';
// join the array to a string
WidgetApiURL = WidgetApiURL.join(':');
// check if the Widget API is available
let path = WidgetApiURL + '/api/getallwidgets';
let context = 'trying to connect to Widget API';
let disableMessage = true;
// Send Request to get all Widgets
this.getRequest(path, context, disableMessage).then((response: any) => {
if (response.success) {
this.navigationStore.dispatchWidgetApiURL(WidgetApiURL); // save the Widget API URL in the NavigationStore
this.widgetsStore.dispatchWidgetFeatureActive(true); // set the Widget Feature Activation Status to true
} else {
this.navigationStore.dispatchWidgetApiURL(''); // clear the Widget API URL in the NavigationStore
this.widgetsStore.dispatchWidgetFeatureActive(false); // set the Widget Feature Activation Status to false
}
});
},
The MIME-types (contentType) of files are not read from AAS Metamodel v3 and images are therefore not displayed
Connecting to Basyx registry works as expected, the shells are listed.
When clicking on a shell a spinner appears in the submodels column, but it is stuck there for all eternity. No result is produced. I cannot find any problems in logs, neither in GUI nor in registry,
Blob submodel elements currently only show a warning that this element type is not supported.
We have a use case where our submodel contains a base64 encrypted blob with mimetype img/jpg
. It would be very nice to display this data as an image like a submodel element of type File with the same mime type.
Properties containing a DataSpecification IEC61360 are not showing the unit or symbol for the value.
The RBAC in Basyx v2 is being developed currently, and is a pretty cool feature - thus I'm creating an issue here to track the client-side of the OpenID + OAuth2 side of the Basyx-GUI.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.