eclipse-velocitas / vehicle-app-python-sdk Goto Github PK
View Code? Open in Web Editor NEWvehicle-app-python-sdk
License: Apache License 2.0
vehicle-app-python-sdk
License: Apache License 2.0
High
v0.11.0
The SDK is missing a required dependency: cloudevents in its setup.py.
It is used here:
.Install SDK and try to use it without installing cloudevents manually.
All required dependencies shall be declared in setup.py
No response
No response
Don't know which python packages upgrade cause this issue? I can build successfully, but try to deploy on Rpi4B, it crash at
startup ,
PyInstaller sdv/util/log.py line:22
More details, please find in logs.
Linux
sdk 0.7.1
{"stream":"stderr","log":"Traceback (most recent call last):\n","time":"2023-02-20T23:41:54.901405725Z"}
{"stream":"stderr","log":" File \"src/main.py\", line 26, in \u003cmodule\u003e\n","time":"2023-02-20T23:41:54.901573632Z"}
{"stream":"stderr","log":" File \"PyInstaller/loader/pyimod02_importers.py\", line 352, in exec_module\n","time":"2023-02-20T23:41:54.901850502Z"}
{"stream":"stderr","log":" File \"sdv/util/log.py\", line 22, in \u003cmodule\u003e\n","time":"2023-02-20T23:41:54.902372799Z"}
{"stream":"stderr","log":" File \"PyInstaller/loader/pyimod02_importers.py\", line 352, in exec_module\n","time":"2023-02-20T23:41:54.902976095Z"}
{"stream":"stderr","log":" File \"opentelemetry/sdk/trace/__init__.py\", line 58, in \u003cmodule\u003e\n","time":"2023-02-20T23:41:54.903288669Z"}
{"stream":"stderr","log":" File \"PyInstaller/loader/pyimod02_importers.py\", line 352, in exec_module\n","time":"2023-02-20T23:41:54.903810077Z"}
{"stream":"stderr","log":" File \"opentelemetry/sdk/resources/__init__.py\", line 138, in \u003cmodule\u003e\n","time":"2023-02-20T23:41:54.904067928Z"}
{"stream":"stderr","log":" File \"importlib/metadata.py\", line 551, in version\n","time":"2023-02-20T23:41:54.904406632Z"}
{"stream":"stderr","log":" File \"importlib/metadata.py\", line 524, in distribution\n","time":"2023-02-20T23:41:54.90484728Z"}
{"stream":"stderr","log":" File \"importlib/metadata.py\", line 187, in from_name\n","time":"2023-02-20T23:41:54.905142317Z"}
{"stream":"stderr","log":"importlib.metadata.PackageNotFoundError: opentelemetry-sdk\n","time":"2023-02-20T23:41:54.905457928Z"}
{"stream":"stderr","log":"[8] Failed to execute script 'main' due to unhandled exception!\n","time":"2023-02-20T23:41:54.905520947Z"}
{"stream":"stderr","log":"Error in sys.excepthook:\n","time":"2023-02-20T23:41:55.082321836Z"}
{"stream":"stderr","log":"\n","time":"2023-02-20T23:41:55.082474465Z"}
{"stream":"stderr","log":"Original exception was:\n","time":"2023-02-20T23:41:55.08252128Z"}
The readme in the following repo requires a bit more information on how to run the example:
https://github.com/eclipse-velocitas/vehicle-app-python-sdk/tree/main/examples/seat-adjuster
Esp. it would make sense to describe how to run the application also without DAPR, which environment variables are needed etc. As this is the main example, the readme here should really be updated, as it's the main reference.
Please do not just point to the documentation website.
Other
main
No response
When launching an app with sidecar the wait_for_sidecar
API fails as the dapr healthz returns 500. However if a delay is added before calling health check it succeeds.
Detailed log is attached.
Linux
0.4.6
#######################################################
### Running Vehicle Light Application ###
#######################################################
ℹ️ Starting Dapr with id mylightapp. HTTP Port: 3500. gRPC Port: 33693
INFO[0000] starting Dapr Runtime -- version 1.9.1 -- commit 8aaa4e6f3a5333c7b2d6d4a68b89413b2b0078c2 app_id=mylightapp instance=codespaces-d83eeb scope=dapr.runtime type=log ver=1.9.1
INFO[0000] log level set to: debug app_id=mylightapp instance=codespaces-d83eeb scope=dapr.runtime type=log ver=1.9.1
INFO[0000] metrics server started on :39405/ app_id=mylightapp instance=codespaces-d83eeb scope=dapr.metrics type=log ver=1.9.1
WARN[0000] App health checks are a preview feature and require the AppHealthCheck feature flag to be enabled. See https://docs.dapr.io/operations/configuration/preview-features/ on how to enable preview features. app_id=mylightapp instance=codespaces-d83eeb scope=dapr.runtime type=log ver=1.9.1
DEBU[0000] Resiliency is not enabled. app_id=mylightapp instance=codespaces-d83eeb scope=dapr.runtime type=log ver=1.9.1
INFO[0000] standalone mode configured app_id=mylightapp instance=codespaces-d83eeb scope=dapr.runtime type=log ver=1.9.1
INFO[0000] app id: mylightapp app_id=mylightapp instance=codespaces-d83eeb scope=dapr.runtime type=log ver=1.9.1
INFO[0000] mTLS is disabled. Skipping certificate request and tls validation app_id=mylightapp instance=codespaces-d83eeb scope=dapr.runtime type=log ver=1.9.1
INFO[0000] local service entry announced: mylightapp -> 172.16.5.4:42751 app_id=mylightapp instance=codespaces-d83eeb scope=dapr.contrib type=log ver=1.9.1
INFO[0000] Initialized name resolution to mdns app_id=mylightapp instance=codespaces-d83eeb scope=dapr.runtime type=log ver=1.9.1
INFO[0000] loading components app_id=mylightapp instance=codespaces-d83eeb scope=dapr.runtime type=log ver=1.9.1
DEBU[0000] found component. name: mqtt-pubsub, type: pubsub.mqtt/v1 app_id=mylightapp instance=codespaces-d83eeb scope=dapr.runtime type=log ver=1.9.1
INFO[0000] waiting for all outstanding components to be processed app_id=mylightapp instance=codespaces-d83eeb scope=dapr.runtime type=log ver=1.9.1
DEBU[0000] loading component. name: mqtt-pubsub, type: pubsub.mqtt/v1 app_id=mylightapp instance=codespaces-d83eeb scope=dapr.runtime type=log ver=1.9.1
DEBU[0000] mqtt message bus initialization complete app_id=mylightapp instance=codespaces-d83eeb scope=dapr.contrib type=log ver=1.9.1
INFO[0000] component loaded. name: mqtt-pubsub, type: pubsub.mqtt/v1 app_id=mylightapp instance=codespaces-d83eeb scope=dapr.runtime type=log ver=1.9.1
INFO[0000] all outstanding components processed app_id=mylightapp instance=codespaces-d83eeb scope=dapr.runtime type=log ver=1.9.1
INFO[0000] gRPC proxy enabled app_id=mylightapp instance=codespaces-d83eeb scope=dapr.runtime type=log ver=1.9.1
INFO[0000] enabled gRPC tracing middleware app_id=mylightapp instance=codespaces-d83eeb scope=dapr.runtime.grpc.api type=log ver=1.9.1
INFO[0000] enabled gRPC metrics middleware app_id=mylightapp instance=codespaces-d83eeb scope=dapr.runtime.grpc.api type=log ver=1.9.1
INFO[0000] API gRPC server is running on port 33693 app_id=mylightapp instance=codespaces-d83eeb scope=dapr.runtime type=log ver=1.9.1
INFO[0000] enabled metrics http middleware app_id=mylightapp instance=codespaces-d83eeb scope=dapr.runtime.http type=log ver=1.9.1
INFO[0000] enabled tracing http middleware app_id=mylightapp instance=codespaces-d83eeb scope=dapr.runtime.http type=log ver=1.9.1
INFO[0000] http server is running on port 3500 app_id=mylightapp instance=codespaces-d83eeb scope=dapr.runtime type=log ver=1.9.1
INFO[0000] The request body size parameter is: 4 app_id=mylightapp instance=codespaces-d83eeb scope=dapr.runtime type=log ver=1.9.1
INFO[0000] enabled gRPC tracing middleware app_id=mylightapp instance=codespaces-d83eeb scope=dapr.runtime.grpc.internal type=log ver=1.9.1
INFO[0000] enabled gRPC metrics middleware app_id=mylightapp instance=codespaces-d83eeb scope=dapr.runtime.grpc.internal type=log ver=1.9.1
INFO[0000] internal gRPC server is running on port 42751 app_id=mylightapp instance=codespaces-d83eeb scope=dapr.runtime type=log ver=1.9.1
INFO[0000] application protocol: grpc. waiting on port 50008. This will block until the app is listening on that port. app_id=mylightapp instance=codespaces-d83eeb scope=dapr.runtime type=log ver=1.9.1
== APP == /workspaces/geely-poc/src/vehicle_app/light_application.py:99: DeprecationWarning: There is no current event loop
== APP == LOOP = asyncio.get_event_loop()
== APP == INFO:Light_Application:Starting my VehicleApp...
== APP == DEBUG:sdv.vehicle_app:Talent instantiation successfully done
== APP == DEBUG:sdv.dapr._servicier:Registering topic 'ambientLight1/brightness/command'
== APP == DEBUG:sdv.dapr.client:entering wait state
DEBU[0000] {ERR_HEALTH_NOT_READY dapr is not ready} app_id=mylightapp instance=codespaces-d83eeb scope=dapr.runtime.http type=log ver=1.9.1
== APP == DEBUG:sdv.dapr.client:HTTP Error 500: Internal Server Error
INFO[0000] application discovered on port 50008 app_id=mylightapp instance=codespaces-d83eeb scope=dapr.runtime type=log ver=1.9.1
INFO[0000] actors: state store is not configured - this is okay for clients but services with hosted actors will fail to initialize! app_id=mylightapp instance=codespaces-d83eeb scope=dapr.runtime type=log ver=1.9.1
The vehicle app examples use a verbose form for initializing the event loop for asyncio:
LOOP = asyncio.get_event_loop()
LOOP.add_signal_handler(signal.SIGTERM, LOOP.stop)
LOOP.run_until_complete(main())
LOOP.close()
there is a new recommended short form that does all this in one line:
asyncio.run(main())
We should change this for all of the examples to reduce clutter and reduce the amount of boilerplate code.
macOS (Default)
latest
not relevant.
Medium
current
After some time (~ 5 minutes) it is not possible to publish MQTT-messages to the MQTT-broker anymore. The logs do not show any error. The connection to MQTT-Broker is not generally lost, because the receipt of messages still works.
Example app: https://github.com/SoftwareDefinedVehicle/seat-adjuster
The connection must not be lost to publish messages.
No response
No response
After the release of #107 linting of examples is disabled. This is because once create copies the examples into a new project structure and runs pre-commit in that new app repository, the linters (black and isort) behave differently than in the main SDK repo. To circumvent this, examples have been pre-formatted for proper layout in app repositories and linting them in the SDK has been disabled.
Investigate why linters behave differently under SDK and app repositories and fix the issue. Lastly, linting for examples shall be re-enabled in the SDK repo.
No response
No response
When using the @subscribe_data_points
decorator expectation is that the decorated function gets called whenever there is a change in the value in databroker.
But the behavior is that for the very first time the function is called regardless of update in the databroker.
Ex:
@subscribe_data_points("Vehicle.CurrentLocation.Latitude")
async def do_something(self, data: DatapointReply):
trigger_some_action(data.get(Vehicle.CurrentLocation.Latitude).value)
Here the `trigger_some_action' will get called with initial values from the databroker, which i do not want.
Is this an intentional design or an oversight?
Linux
0.7.1
No response
When trying to build the Seat Adjuster example using the provided Dockerfile, it fails due to a missing folder.
The folder ./app
does not exist in the repository.
Linux
v0.9.0
$ docker build https://github.com/eclipse-velocitas/vehicle-app-python-sdk.git#v0.9.0:examples/seat-adjuster
[+] Building 3.6s (6/16)
=> [internal] load git source https://github.com/eclipse-velocitas/vehicle-app-python-sdk.git#v0.9.0:examples/seat-adjuster 1.8s
=> [internal] load metadata for docker.io/library/python:3.10-slim-bullseye@sha256:1ee6094f44c67781fa9533a4215f44f80dd3f43a68751ad2c855712116c03b05 1.7s
=> [auth] library/python:pull token for registry-1.docker.io 0.0s
=> [builder 1/10] FROM docker.io/library/python:3.10-slim-bullseye@sha256:1ee6094f44c67781fa9533a4215f44f80dd3f43a68751ad2c855712116c03b05 0.2s
=> => resolve docker.io/library/python:3.10-slim-bullseye@sha256:1ee6094f44c67781fa9533a4215f44f80dd3f43a68751ad2c855712116c03b05 0.2s
=> CACHED [builder 2/10] RUN apt-get update && apt-get install -y binutils 0.0s
=> ERROR [builder 3/10] COPY ./app /app 0.0s
------
> [builder 3/10] COPY ./app /app:
------
Dockerfile:22
--------------------
20 | RUN apt-get update && apt-get install -y binutils
21 |
22 | >>> COPY ./app /app
23 |
24 | # Remove this installation for Arm64 once staticx has a prebuilt wheel for Arm64
--------------------
ERROR: failed to solve: failed to compute cache key: failed to calculate checksum of ref moby::eqy6el1uiuv39ll6w2awkcg3g: "/app": not found
High
latest
The following exception causes the complete application to crash:
{"stream":"stderr","log":"Exception in thread Thread-3 (_thread_main):\n","time":"2023-08-23T05:36:35.369153375Z"}
{"stream":"stderr","log":"Traceback (most recent call last):\n","time":"2023-08-23T05:36:35.3692995Z"}
{"stream":"stderr","log":" File "threading.py", line 1016, in _bootstrap_inner\n","time":"2023-08-23T05:36:35.3693405Z"}
{"stream":"stderr","log":" File "threading.py", line 953, in run\n","time":"2023-08-23T05:36:35.369369625Z"}
{"stream":"stderr","log":" File "paho/mqtt/client.py", line 3591, in _thread_main\n","time":"2023-08-23T05:36:35.36950125Z"}
{"stream":"stderr","log":" File "paho/mqtt/client.py", line 1756, in loop_forever\n","time":"2023-08-23T05:36:35.369580125Z"}
{"stream":"stderr","log":" File "paho/mqtt/client.py", line 1164, in _loop\n","time":"2023-08-23T05:36:35.36977275Z"}
{"stream":"stderr","log":" File "paho/mqtt/client.py", line 1556, in loop_read\n","time":"2023-08-23T05:36:35.369903625Z"}
{"stream":"stderr","log":" File "paho/mqtt/client.py", line 2439, in _packet_read\n","time":"2023-08-23T05:36:35.37008025Z"}
{"stream":"stderr","log":" File "paho/mqtt/client.py", line 3033, in _packet_handle\n","time":"2023-08-23T05:36:35.3702365Z"}
{"stream":"stderr","log":" File "paho/mqtt/client.py", line 3327, in _handle_publish\n","time":"2023-08-23T05:36:35.370446375Z"}
{"stream":"stderr","log":" File "paho/mqtt/client.py", line 3556, in _handle_on_message\n","time":"2023-08-23T05:36:35.370536Z"}
{"stream":"stderr","log":" File "sdv/native/mqtt.py", line 78, in handle\n","time":"2023-08-23T05:36:35.37064Z"}
{"stream":"stderr","log":"UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc3 in position 15: invalid continuation byte\n","time":"2023-08-23T05:36:35.370898625Z"}
The root cause here is that my app has been registered to a certain MQTT-topic and I have published a wrong character to the MQTT-broker by mistake. This wrong character was read inside the SDK and causes the crash of a thread. Afterwards the app was dead.
I have pushed the following:
mosquitto_pub -t seatadjuster/setPosition/request -m '{"position": 10�0, "requestId": 121}'
App should not crash
No response
No response
We remove support for K3D runtime and Dapr middleware
No response
No response
No response
vehicle-app-python-sdk/tree/main/examples/seat-adjuster)/Dockerfile
Please downgrade patchelf in SDK examples code.
macOS (Default)
main
core dump when run staticx.
For performance measurement purposes an example test app should be provided which subscribes to a number of signals and prints out the signal information + timestamps on the initial response.
No response
No response
Blocker
v0.13.0
During startup of a Velocitas Python Template based app, the following error occurs
{"stream":"stderr","log":" File \"\u003cfrozen importlib._bootstrap\u003e\", line 1006, in _find_and_load_unlocked\n","time":"2024-02-15T11:15:26.165212Z"} {"stream":"stderr","log":" File \"\u003cfrozen importlib._bootstrap\u003e\", line 688, in _load_unlocked\n","time":"2024-02-15T11:15:26.165270625Z"} {"stream":"stderr","log":" File \"PyInstaller/loader/pyimod02_importers.py\", line 352, in exec_module\n","time":"2024-02-15T11:15:26.165298375Z"} {"stream":"stderr","log":" File \"sdv/config.py\", line 49, in \u003cmodule\u003e\n","time":"2024-02-15T11:15:26.16534975Z"} {"stream":"stderr","log":" File \"sdv/config.py\", line 36, in __init__\n","time":"2024-02-15T11:15:26.165594875Z"} {"stream":"stderr","log":" File \"sdv/config.py\", line 41, in __create_middleware\n","time":"2024-02-15T11:15:26.1660935Z"} {"stream":"stderr","log":" File \"sdv/native/middleware.py\", line 34, in __init__\n","time":"2024-02-15T11:15:26.16616375Z"} {"stream":"stderr","log":" File \"sdv/native/mqtt.py\", line 42, in __init__\n","time":"2024-02-15T11:15:26.16621375Z"} {"stream":"stderr","log":"TypeError: Client.__init__() missing 1 required positional argument: 'callback_api_version'\n","time":"2024-02-15T11:15:26.166349125Z"} {"stream":"stderr","log":"[9] Failed to execute script 'main' due to unhandled exception!\n","time":"2024-02-15T11:15:26.16640025Z"}
Seems to be due to
https://stackoverflow.com/questions/77984857/paho-mqtt-unsupported-callback-api-version-error
https://eclipse.dev/paho/files/paho.mqtt.python/html/migrations.html
Indeed, the Velocitas app is build using paho_mqtt-2.0.0
Output from Github Action:
#11 134.1 Requirement already satisfied: dapr>=1.6.0 in /usr/local/lib/python3.10/site-packages (from sdv==0.9.2->-r ./app/requirements-links.txt (line 1)) (1.8.3) #11 134.4 Collecting paho-mqtt>=1.6.1 #11 134.6 Downloading paho_mqtt-2.0.0-py3-none-any.whl (66 kB) #11 134.6 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 66.9/66.9 kB 7.3 MB/s eta 0:00:00 #11 134.8 Collecting opentelemetry-distro<=0.36b0 #11 134.8 Downloading opentelemetry_distro-0.36b0-py3-none-any.whl (3.3 kB) #11 135.0 Collecting opentelemetry-instrumentation-logging<=0.36b0
Build a new app based on the Velocitas Python Template
The app builds fine but will include paho_mqtt-2.0.0 which requires an additional parameter for client creation and thus causes an error in sdv/native/mqtt.py
Middleware should initialize correctly
https://stackoverflow.com/questions/77984857/paho-mqtt-unsupported-callback-api-version-error
https://eclipse.dev/paho/files/paho.mqtt.python/html/migrations.html
Add Version argument here?
Fix version to pre 2.0 here?
vehicle-app-python-sdk/setup.py
Line 23 in de93359
No response
Vehicle.Body.Trunk.element_at("Rear").IsOpen.subscribe()
The vehicle model generator for python currently uses ModelCollections and either NamedRanges and/or Dicitionary Entities for access of those. The SDK allows access to the generated Model and also has check in place to verify the "key" that is used for access of the Dictionary is valid.
The Vehicle Model Generator currently uses a list of strings to initialize the Dictionary, whereas the SDK expects a class with keys and values (properties). This inconsistency does not allow to access branches like Vehicle.Body.Trunk.Front|Rear
macOS (Default)
main
No response
At least the unit tests of the seat-adjuster example are outdated. Means they are referring the previous model package sdv_model
(as provided by the python model repo).
Observed behaviour: The unit tests are failing after importing this example from Python template (based) repo(s).
Please also check the integration tests.
Other
Current main: 0655c67
No response
SeatAdjuster App in Python SDK does not work anymore. Throws the following error. The application launcher works until v0.8.2.
In the current version, import library changed from sdv_model to vehicle for examples/seatadjuster, and requirement-links.txt does not contain the sdv_model Github link anymore.
Please explain the issue.
Linux
v0.9.0: latest
No response
DevContainer name for VehicleApp Python SDK is same as for Vehicle App Python Template. When both DevContainers are running in VS Code, you cannot distinguish both easily.
Steps to reproduce:
Expected result:
Actual result:
macOS (Default)
main
No response
The name is a bit misleading: "MQTT" is a protocol and cannot have an address. The address refers to the message broker.
Replace name of the variable by "SDV_MQTTBROKER_ADDRESS" (or maybe "SDV_MQTT_BROKER_ADDRESS" (depending on the possible service names).
Maybe keep old name for a while with deprecation warning if still used.
No response
Needs to be fixed in Python and C++ SDK plus devenv-runtimes.
Deploying the seatadjuster example and running it in the Kanto container runtime reveals that the log output is actually written to stderr
.
I would expect that DEBUG, INFO is logged to stdout
by default and only ERROR log statements are logged to stderr
.
If this is intentional, maybe a documentation about how to configure the logging would make sense.
Linux
0.9.0
root@qemux86-64:~# kanto-cm logs --name seatadjuster-app
{"stream":"stderr","log":"2023-06-06 08:12:29,801 DEBUG [sdv.vehicle_app] [vehicle_app.py:72] [trace_id=7ce3eb42d63c2e79294ba9f45cf50b74 span_id=eb5a71e0ee91a35f resource.service.name=/tmp/staticx-kJGoHg/main] - VehicleApp instantiation successfully done\n","time":"2023-06-06T08:12:29.801430658Z"}
{"stream":"stderr","log":"2023-06-06 08:12:29,801 INFO [sdv.vdb.subscriptions] [subscriptions.py:72] [trace_id=7ce3eb42d63c2e79294ba9f45cf50b74 span_id=eb5a71e0ee91a35f resource.service.name=/tmp/staticx-kJGoHg/main] - Subscribing to SELECT Vehicle.Cabin.Seat.Row1.Pos1.Position\n","time":"2023-06-06T08:12:29.801524843Z"}
{"stream":"stderr","log":"2023-06-06 08:12:29,803 DEBUG [sdv.native.mqtt] [mqtt.py:52] [trace_id=7ce3eb42d63c2e79294ba9f45cf50b74 span_id=eb5a71e0ee91a35f resource.service.name=/tmp/staticx-kJGoHg/main] - Mqtt native connection OK!\n","time":"2023-06-06T08:12:29.803218285Z"}
### Code of Conduct
- [X] I agree to follow this project's rules for contributions
https://eclipse-velocitas.github.io/velocitas-docs/docs/concepts/development_model/ does not exist, the main Readme links it as Velocitas Development Model
Other
master
No response
Kuksa Data Broker defines "timestamp" as a metadata for datapoints.
For calculation of for example moving averages, I need to access the timestamps of the data as well.
Unfortunately, the velocitas vehicle model does not seem to expose the ".timestamp" attribute.
Other
main
No response
I go a little bit deeper, and figure out that PEP503 is obligate to normalize names of packages and replace all `-`,`.` and `_` with `-`.
LInk: https://peps.python.org/pep-0503/#normalized-names
As far as it is required renaming and releasing new package, and can lead for inconsistency, I've decided to separate this activity with the new task.
Originally posted by @kse3hi in eclipse-velocitas/devenv-devcontainer-setup#51 (comment)
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.