spatialos / unrealgdk Goto Github PK
View Code? Open in Web Editor NEWSpatialOS GDK for Unreal Plugin
Home Page: https://docs.improbable.io/unreal/
License: MIT License
SpatialOS GDK for Unreal Plugin
Home Page: https://docs.improbable.io/unreal/
License: MIT License
Changing Spatial related configurations through the Unreal Editor can lead to problems if the configuration files are not writable. For instance, trying to amend the number of maximum allowed dynamic subobjects per actor will not succeed if DefaultSpatialGDKSettings.ini
file is locked. Moreover, this operation will not be able to complete and will prevent the Unreal Editor from launching PIE sessions.
Make sure that all configuration files are writable.
As of release 0.6.0, you may get the following type of error when running a cloud deployment:
Could not download workers: could not download Artifact([email protected]) for Worker(SimulatedPlayerCoordinator); could not retrieve artifact information for [email protected]: rpc error: code = NotFound desc = Artifact([email protected]) of Assembly(offloading_workflow) of Project(demo) doesn't exist.
This happens because SpatialOS expects the worker package that corresponds to every worker config. In this case, Simulated Player binaries are missing.
We have two potential workarounds:
spatial/workers/improbable/spatialos.SimulatedPlayerCoordinator.worker.json
and re-run spatial build build-config
to remove the SimulatedPlayerCoordinator
bridge config and descriptor from the assembly and re-upload. With this approach Simulated Players will not work.This results in a failure to spawn or simulate. When using the editor if you Play - Stop - Play in quick succession you can sometimes fail to launch correctly.
Fixed in master
will be rolled out in 0.9.0 latest
Internal ticket:
UNR-2600
Internal ticket
Issue
Changing some SpatialOS settings after launching a local deployment will invalidate the currently launched deployment (e.g. Changing the number of servers, or toggling using Query Based Interest), as these settings modify the launch configuration.
Workaround
Manually stop and start your deployment after you make any changes that alter the launch configuration.
Internal ticket
Reliable RPCs may be executed multiple times on the receiving worker.
Do not rely on reliable RPCs being executed only once.
UNR-1267
Running Generate Schema (full or incremental) can crash the editor if assets are being asynchronously loaded via the Asset Manager.
Wait for the Asset Manager to finish any async loading tasks before generating schema
Issue
When launching a client from a cloud deployment, it chooses the first .exe
file in alphabetical order, rather than selecting a particular one.
Workaround
When building your client, an underscore is added to the correct executable name.
Internal Ticket
LAUNCH-341
When data is replicated at the same time for actor and one or more of its subobjects, the sequence on the receiver is the following:
Native networking:
Data is received for the actor
Data is received for the subobject
RepNotifies are called for the actor
RepNotifies are called for the subobject
Spatial networking:
Data is received for the actor
RepNotifies are called for the actor
Data is received for the subobject
RepNotifies are called for the subobject
This happens due to the GDK calling RepNotifies at the end of applying each component update, and receiving separate component updates for the actor and its subobjects.
Internal ticket UNR-2304
0.8
When calling DeploymentLauncher list the number of arguments is incorrect and will print usage when attempting to use it.
Fixed in master
When attempting to use list with the correct arguments listed it will fail because it expects a 4th.
Add a 4th dummy command-line argument
Repo:
Result: The client does not receive the RPC.
If the RPC is multicast the issue will not occur.
Perhaps the simplest case of this is simply setting an actors parent and sending a ClientRPC on the actor on the same frame.
The UnrealGDK requires schema to interoperate between the Unreal networking stack and the SpatialOS networking stack. Schema is generated by referencing Unreal's reflected data within the editor. If there are replicated properties within UObjects that get stripped out at runtime (ie. via the WITH_EDITORONLY_DATA macro), then the generated schema won't match the Object's layout at runtime, and instability will occur.
Don't add replicated data within preprocessor macros that may be compiled out at runtime.
UNR-917
Issue
Client connections will be closed by the ServerWorker when using Blueprint or C++ breakpoints during play-in-editor sessions due to connection heartbeating. This will cause all entities related to the player to be deleted, such as Character, PlayerController and PlayerState.
Workaround
When debugging locally, increase the value of the HeartbeatTimeout setting (which can be found in the "Runtime Settings" menu) to a large value. Note that this value should be set back the default for regular non-Editor testing.
This value defines the number of seconds that a ServerWorker will wait to receive a heartbeat message from the client before considering it to be unresponsive and destroying it's connection.
Internal ticket
We are accepting issues and we want your feedback.
When you return an ErrorMessage
from GameMode::PreLogin
(it's non-empty), SpatialOS doesn't account for it in SpatialReceiver::ReceiveActor
where it called NetDriver->AcceptNewPlayer. AcceptNewPlayer
returns null
if the Error is present, as SpatialOS has an assertion at the next line that it's not null
!
SpatialOS should allow for errors in PreLogin
(see SpatialNetDriver::AcceptNewPlayer
). There appears to be a note there already referencing UNR-584?
Assertion failure.
For now just gracefully close the connection, with a note in future that the calling client should be sent the error itself.
ErrorMessage
in PreLogin
to anything (non empty) in the shooter example.4.21.1
custom spatial release branch, using release
branch of GDK.
UnrealMetadata::GetNativeEntityClass
is public-facing but has an implicit dependency on non-public files due to the log line on 79. Because this function is also marked with FORCEINLINE
, this causes linking errors when trying to use this header as a dependency in an external module since the linker can't resolve the definition of LogSpatialClassInfoManager
(as the reference is no longer isolated to the dll but leaks across module boundaries).
ClientTravel from Map A to Map B, where Map B uses world composition, does not load any levels on Map B
All levels within streaming distance of the player spawn should be loaded.
No levels are spawned, character infinitely falls
PlayerController->ClientTravel(TravelURL, TRAVEL_Absolute, false /*bSeamless*/);
)UE4 commit:
09ec8ee75c32cb8779747ed5e43ece5bfc76ff81
GDK commit:
8b0c4ec
[improbable.bridge.logging.EngineLogMessageHandler] [Worker: UnrealClientF4586D6240DCA678DEE0B287D54F2F76] Object ref did not map to valid object, will be set to nullptr: (entity ID: 0, offset: 0) ./Game/FirstPersonBP/Maps/height/height_x0_y0.height_x0_y0.PersistentLevel.LandscapeStreamingProxy_0.LandscapeHeightfieldCollisionComponent_1923 -[WorkerLogger:Unreal]
First there's plenty of this:
LogStreaming: Display: ULevelStreaming::RequestLevel(/Game/FirstPersonBP/Maps/height/height_x3_y3) is flushing async loading
LogSpatialOSNetDriver: Connected to SpatialOS and map has been loaded.
and then many of these:
LogSpatialReceiver: Received reserve entity Id: request id: 0, entity id: 40
LogSpatialReceiver: Resolving pending object refs and RPCs which depend on object: WorldSettings (entity ID: 40, offset: 0).
LogSpatialSender: Sending create entity request for WorldSettings
LogSpatialReceiver: Entity for actor WorldSettings has been checked out on the worker which spawned it or is a singleton linked on this worker
LogSpatialReceiver: Received create entity response op for 40
We are accepting issues and we want your feedback.
Shader error in 'Hidden/PostProcessing/FinalPass': '#extension' : extension not supported: GL_AMD_vertex_shader_layer at line 4 (on vulkan)
Compiling Vertex program with STEREO_INSTANCING_ENABLED
Platform defines: UNITY_ENABLE_REFLECTION_BUFFERS UNITY_NO_SCREENSPACE_SHADOWS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_HARDWARE_TIER1 UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR
No error.
Followed by -
Shader error in 'Hidden/PostProcessing/FinalPass': '#extension' : extra tokens -- expected newline at line 4 (on vulkan)
Compiling Vertex program with STEREO_INSTANCING_ENABLED
Platform defines: UNITY_ENABLE_REFLECTION_BUFFERS UNITY_NO_SCREENSPACE_SHADOWS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_HARDWARE_TIER1 UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR
Then -
Shader error in 'Hidden/PostProcessing/FinalPass': '' : compilation terminated at line 4 (on vulkan)
Compiling Vertex program with STEREO_INSTANCING_ENABLED
Platform defines: UNITY_ENABLE_REFLECTION_BUFFERS UNITY_NO_SCREENSPACE_SHADOWS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_HARDWARE_TIER1 UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR
This is not obligatory but if you have a preference, please suggest a fix for the bug.
Provide an unambiguous set of steps to reproduce this bug. Include code snippets if relevant.
What were you trying to accomplish?
Please include your spatial diagnose output in full.
Please detail your OS and Unreal Engine versions.
x64 arch windows 10 and unity 2018.3.5f1, dotnet core 2.1.402
Provide a general summary of the issue in the title field above.
4.21.1 branch of UE4 from spatial does NOT contain a referenced header file in the latest (master) branch of the Unreal GDK. Therefore, I cannot build my project from source.
The file should be referenced in the 4.21.1 branch.
Classes that include "UObject/improbable/UnrealObjectRef.h" cannot find the file specified and fails the build/compile.
Include this file in the 4.21.1 spatial branch of UE4.
Provide an unambiguous set of steps to reproduce this bug. Include code snippets if relevant.
What were you trying to accomplish?
Building my project (which is currently using UE4 4.21.0
Please include your spatial diagnose output in full.
Please detail your OS and Unreal Engine versions.
Windows 10
UE4 4.21.1 (spatial fork)
Provide a general summary of the issue in the title field above.
Temporary Workaround:
We are accepting issues and we want your feedback.
Schema generation can generate Component IDs equal to 0.
Schema generation should never generate Component IDs below 100 and from 19000 to 19999, as these are reserved for use by Improbable.
Schema generation can generate Component IDs equal to 0.
Development/Debug servers are incompatible with Test/Shipping clients and vice versa.
For deployments running with Development or Debug servers, use Development or Debug clients, and for deployments with Test or Shipping servers, use Test or Shipping clients.
UNR-1368
Issue
Schema generation doesn't support non-alphanumeric characters
Workaround
Use alphanumeric characters only.
Internal ticket
UNR-1322
Actors which have their dormancy set to DORM_Initial
won't be deleted on observing clients if they don't have their network relevancy flushed before being deleted.
Deletion of DORM_Initial
Actors is always processed by clients.
Don't use DORM_Initial
or ensure that Actors have their network dormancy flushed before being deleted.
LocalRole
of the player's character during BeginPlayIssue
Order of reliable RPCs is not respected in case of unresolved UObject* parameter.
Workaround
Potential user-code workaround to explicitly enforce the order of RPCs.
Internal ticket
UNR-336
Issue
Schema generator fails when the destination file is locked. The workflow is less than ideal as you can’t run it again until you restart the Unreal Editor.
Workaround
Ensure destination files/folders are unlocked.
Internal Ticket
UNR-350
Internal ticket
Issue
NetMulticast RPCs do not work on Singleton Actors.
Workaround
Do not use NetMulticast RPCs on Singleton Actors.
Internal Ticket
UNR-856
The UnrealGDK does not support user's manually creating UChannels directly on UNetConnections.
Manually calling UNetConnection::CreateChannelByName will result in undefined behaviour.
Leave creation of channels to the UNetDriver.
We are accepting issues and we want your feedback.
Note that this is specific to 4.21, which introduces MappedClientConnections in NetDriver. This is unaccounted for in the current SpatialOS release in it's SpatialNetDriver so it's failing when trying to remove the address from MappedClientConnections.
The address should be added and removed from MappedClientConnections.
Failure at RemoveClientConnection (as the address was never added in SpatialNetDriver).
Wrap the calls like so:
#if ENGINE_MINOR_VERSION >= 21
// 4.21+ stuff here
#endif
Regular join and quit loop in the shooter example using my 4.21 spatial release engine branch.
Obviously not a high priority until/if you move to 4.21 but would appreciate some guidance.
Issue
Replicated TimelineComponents are not supported.
Workaround
Use an alternative method of achieving the desired behaviour, such as playing the timeline on a multicast event, or replicating what is changed by the timeline.
Internal ticket
When a client switches pawn possession, server and/or client RPCs can get indefinitely queued, sometimes resulting in a client soft-lock.
Issue
Generating schema for UClasses that are not explicitly loaded/referenced by the currently loaded level is not supported. For example, a hard coded path loaded at run-time will not be detected by the schema generator.
Workaround
Reference the class explicitly from an already loaded class (Level blueprint, GameMode etc). Alternatively, you can open the Blueprints for soft references before generating schema so that they are loaded into memory.
Internal ticket
NA
We are accepting issues and we want your feedback.
Currently on server worker BeginPlay() gets called only on WorldSettings actor for the persistent level, but not on WorldSettings actors for any of the streamed levels.
For native Unreal on server BeginPlay() gets called on WorldSettings actor for the persistent level as well as each of the streamed levels.
UNR-1408
Running the UnrealGDK/Setup.bat return the following errors:
Error 1:
...
Successfully retrieved package type 'worker_sdk' with name 'c-dynamic-x86_64-gcc_libstdcpp-linux' and version '13.8.1' to '...\UnrealGDK\SpatialGDK\Build\core_sdk\worker_sdk\c-dynamic-x86_64-gcc_libstdcpp-linux.zip'
Encountered an error during command execution. ] 43% [0.7MiB/s]s]
failed to download package.
failed to retrieve worker package: rpc error: context deadline exceeded
Error 2:
...
Finished: Retrieve dependencies
Starting: Unpack dependencies
Expand-Archive : The path '...\UnrealGDK\SpatialGDK\Build\core_sdk\worker_sdk\c-static-fullylinked-arm-clang_libcpp-ios.zip' either does not exist or is not a valid file system path.
At line:1 char:1136
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
OS : Windows 10
Unreal Engine Version : 4.22-SpatialOSUnrealGDK-release (21/08/19)
UnrealGDK : release (21/08/19)
Issue
Schema generation removes non-alphanumeric characters. This can lead to name collisions in subobjects, properties, and RPCs, which is not supported and will result in an error.
Workaround
Ensure that names are not identical with non-alphanumeric characters removed. For example, My Property
and MyProperty
will result in an error, but My Property
and MyProperty2
will not.
Internal ticket
UNR-1322.
We are accepting issues and we want your feedback.
After possessing a pawn that is currently controlled by a different player (or exchanging pawns), the movement will stop replicating for the duration that the previous player controlled this pawn. On your machine, it will looks like the pawn is moving fine, but this movement will not be applied on the server.
After possessing a pawn, you can move immediately, and the server applies this movement.
After possessing a pawn controlled by a different player, movement is not replicated for some time.
Windows 10
UnrealGDK 0.4.2
Setup.bat copying to wrong folder.
It created folder in desktop but it must be on project folder.
bug in setup.bat line 46 "......\spatial\schema"
I think it must be "....\spatial\schema"
Setup.bat to copy files to projectfolder/spatial
Setup.bat copies files to upper folder /projectfolder/../
change a single line
Windows 10
UE 4.20
Note that in 4.21, the following warning is thrown:
\Game\Plugins\UnrealGDK\SpatialGDK\Source\SpatialGDK\Public\EngineClasses/SpatialNetConnection.h(20): warning C4996: 'UNetConnection::LowLevelSend': Use the method that allows for packet traits for analytics and modification Please update your code to the new API before upgrading to the next release, otherwise your project will no longer compile.
This call should be changed for eventual 4.21 compatiblity (will presumably error out in 4.22)
How to use proxy when I try build dependencies of SpatialGDK
Provide an unambiguous set of steps to reproduce this bug. Include code snippets if relevant.
What were you trying to accomplish?
I try build dependencies
So I double-click Setup.bat in the root directory of the Unreal GDK repository,
Please include your spatial diagnose output in full.
Starting: Setup.bat
Starting: Setup the git hooks
Finished: Setup the git hooks
Starting: Check dependencies
Finished: Check dependencies
Starting: Setup variables
Finished: Setup variables
Starting: Clean folders
Finished: Clean folders
Starting: Create folders
Finished: Create folders
Starting: Retrieve dependencies
Encountered an error during command execution.
failed to download package.
Cannot create connection to SpatialOS: context deadline exceeded
context deadline exceeded
Please detail your OS and Unreal Engine versions.
win7 and UnrealEngine-4.20-SpatialOSUnrealGDK
Provide a general summary of the issue in the title field above.
In Unreal, when you specify a RepNotify variable with the OnRep function accepting an argument, Unreal passes the old value of the variable as the argument. This old value supplied can differ between native Unreal and Spatial. Specifically in the case of complex replicated properties (e.g. structs, TArrays, etc.).
Parity between native and Spatial.
The value supplied as an argument to the OnRepNotify function can be in an indeterminate and different state than in native for arrays and other complex types.
Will not fix, the state is indeterminate in native as well, and should not be relied on.
OldValue = [1,2,0]
OldValue = [1,2]
GDK 0.6, GDK 0.8, possibly later.
Spawning a blueprint that specialises an actor, with a c++ ActorComponent added to it, will fail to replicate the added component.
According to the docs and discussions with the team, ActorComponents added in this way should replicate properly.
The ActorComponent on this blueprint will not be managed by SpatialOS and it will not be replicated to the client. This can be observed by noting that the component is not mentioned in the Inspector breakdown of the spawned actor.
In SpatialGDK/Public/Schema/UnrealMetadata.h:
FORCEINLINE SubobjectToOffsetMap CreateOffsetMapFromActor(AActor* Actor, const FClassInfo& Info)
{
SubobjectToOffsetMap SubobjectNameToOffset;
for (auto& SubobjectInfoPair : Info.SubobjectInfo)
{
// REMOVED
//UObject* Subobject = Actor->GetDefaultSubobjectByName(SubobjectInfoPair.Value->SubobjectName);
// ADDED
UObject* Subobject = StaticFindObjectFast(UObject::StaticClass(), Actor, SubobjectInfoPair.Value->SubobjectName);
uint32 Offset = SubobjectInfoPair.Key;
if (Subobject != nullptr && Subobject->IsPendingKill() == false && Subobject->IsSupportedForNetworking())
{
SubobjectNameToOffset.Add(Subobject, Offset);
}
}
return SubobjectNameToOffset;
}
Provide an unambiguous set of steps to reproduce this bug. Include code snippets if relevant.
UBlueprint* MyBlueprint = LoadObject<UBlueprint>(nullptr, TEXT("Blueprint'/Game/MyBlueprint.MyBlueprint'"));
MyActor* spawnedActor = GetWorld()->SpawnActor<MyActor>(MyBlueprint->GeneratedClass, position, rotation);
[improbable.bridge.logging.EngineLogMessageHandler] [Worker: UnrealWorker5F6F8A35461C4C67A6C5A994E7B46699] Tried to generate initial replication state for an invalid sub-object (class SimpleBlockComponent, sub-object SimpleBlock, actor SimpleBlock_C_96). Object may have been deleted or is PendingKill. -[WorkerLogger:Unreal]
We are accepting issues and we want your feedback.
For dynamic actors marked with Singleton
(e.g. GameState
or GameMode
), BeginPlay
may be called with authority on more than one server.
For all actors, BeginPlay
should only be called with authority on one server. All other servers must call BeginPlay
without authority.
If the non-authoritative server checks out the singleton entity before triggering BeginPlay
, it will call BeginPlay
without authority (correct). If, however, it triggers BeginPlay
before checking out that entity, it will call BeginPlay
with authority.
Windows 10
UnrealGDK 0.4.2
UNR-1191
We are accepting issues and we want your feedback.
The Multiserver Tutorial is failing to build in Visual Studio or launch in the clones engine
The Tutorial should build without failure and be able to be launched
Whenever I build the Multiserver Shooter Tutorial it always fails because it claims there is no directory such as WorkerSDK in the Unreal GDK that contains a schema. And sure enough I looked and couldn't find it either. It also gives me a Fatal error message when I try to open it with the cloned engine, saying that it is unable to read the module manifest from the UE4Engine.manifest
This is not obligatory but if you have a preference, please suggest a fix for the bug.
Provide an unambiguous set of steps to reproduce this bug. Include code snippets if relevant.
Follow the Multiserver Shooter Tutorial until the point of building the project
What were you trying to accomplish?
I am trying to setup the tutorial to get started with Spatial in Unreal. I am using Unreal 4.21, and Spatial 13.2
We are accepting issues and we want your feedback.
Some replication conditions do not always match native behaviour.
All replication conditions should match native Unreal.
Some replication conditions do not match native Unreal. Some examples include:
SimulatedOnly
+ SimulatedOrPhysics
] Initial value of property replicated with condition SimulatedOnly
or SimulatedOrPhysics
is being applied on clients with Role != SimulatedProxy
.InitialOrOwner
] Non-Initial updates of property replicated with condition InitialOrOwner
is being applied on non-owning clients.AutonomousOnly
] Initial updates of properties replicated with condition AutonomousOnly
are flaky (there is a low chance of receiving the initial update, the following updates work fine)Windows 10
UnrealGDK 0.4.2
UNR-1423
We are accepting issues and we want your feedback.
When running PIE with Use single process disabled only the first client connects successfully to Spatial OS.
UnrealClient equal to the number of players selected connect successfully to Spatial OS.
Only one UnrealClient Connects to Spatial OS.
What were you trying to accomplish?
Unreal Engine version 4.22 in Windows.
I was wondering how large this download was gonna be and based on the git page it sounded like 3 - 4Gb but in fact it is 15Gb. The placing of the size information in the description needs to be adjusted and possibly updated
When looking at the installation steps it gets to the point where it says "Run setup.bat. This will download binaries and dependencies. Currently the complete fork is about 3 to 4Gb". This lead me to believe that once I run setup.bat it would download 3 to 4Gb of content
When I fork the project I download about 3 to 4Gb but when I run setup.bat it downloads an additional 11Gb which I was not aware of.
Fix 1. Move that "the fork size is 3 - 4Gb" bit to the step where you say "Download this fork" rather than having it at the step that says "Run setup.bat to download additional stuff"
Fix 2. During the "Run setup.bat" step, add a note that the extra stuff being downloaded is 11Gb in size
The only size information on the page is the 3 to 4Gb info but the actual total size of the downloads amount to 15Gb. If I had this information before hand I would have stuck with the Unity version instead so this is rather a big consideration to keep in mind for people like me with (for example) 50Gb per month metered connections ...
What were you trying to accomplish?
Download your fork so I could try out your system
Please detail your OS and Unreal Engine versions.
Running Win10 64 bit. I downloaded the 4.24 GDK Merge branch
Provide a general summary of the issue in the title field above.
As explained above. The download size information is placed in a very ambiguous and misleading place giving a false sense of size that turned out to be more than 25% of my monthly data where I was expecting to use less than 10%.
Issue
Opening the Editor while you are uploading or launching a cloud deployment disables the GDK Toolbar Start button, and Selecting Stop on the GDK Toolbar stops the running cloud deployment.
Workaround
Wait for the cloud launch to finish, or launch the cloud deployment whilst the Editor is already open.
Internal Ticket
UNR-1006
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.