kpelykh / docker-java Goto Github PK
View Code? Open in Web Editor NEWJava Docker API Client
License: Apache License 2.0
Java Docker API Client
License: Apache License 2.0
I'm trying to set up a volume in my container which points to a folder on my host machine using docker-java.
On the commandline I can do this with docker run -v /home/michael:/workspace:ro <container-id> <command> <arguments>
for instance. But I don't seem to be able to do this with docker-java as well.
When I define my volume in ContainerConfig like so: containerConfig.setVolumes("/home/michael:/workspace:ro");
I get a 500 error code back from the jersey client when running this.
Do I need to define volumes differently? I noticed that the setVolumes()
method takes an Object
and not the expected String
or String[]
.
The following ContainerConfig options:
@JsonProperty("Memory") private int memoryLimit;
@JsonProperty("MemorySwap") private int memorySwap;
should be long
. Otherwise we can't set them to higher than 2,147,483,647 (2GB)
@marcuslinke I found a problem with maven-release-plugin 2.3.1:
https://jira.codehaus.org/browse/MRELEASE-812
Might be good to update to 2.5?
Hi!
I have problem using the this library on my Jersey 2.x Project. The codehaus annotation aren't processed by my default JSON mapper.
Can I migrate to Jerser 2.x? or could I do some hack to fix it on my project.
Thanks!
It seems that docker-java just cannot find any images with docker 0.9.1, no matter what i try I keep getting this error:
com.kpelykh.docker.client.NotFoundException: 870f64002218e3a454b1492d1222bdaf6fe67b3fba624e5afae009b8e521f8f1 is an unrecognized image. Please pull the image first.
at com.kpelykh.docker.client.DockerClient.createContainer(DockerClient.java:370)
at com.kpelykh.docker.client.DockerClient.createContainer(DockerClient.java:352)
at com.r.s.minion.services.ContainerService.run(ContainerService.java:178)
at com.r.s.minion.cli.RunCommand.run(RunCommand.java:38)
at com.r.s.minion.cli.RunCommand.run(RunCommand.java:17)
at io.dropwizard.cli.ConfiguredCommand.run(ConfiguredCommand.java:76)
at io.dropwizard.cli.Cli.run(Cli.java:70)
at io.dropwizard.Application.run(Application.java:72)
at com.r.s.minion.Minion.main(Minion.java:27)
INFO [2014-04-07 13:26:07,544] com.sun.jersey.api.client.filter.LoggingFilter: 1 * Client out-bound request
docker info:
$ docker version
Client version: 0.9.0
Go version (client): go1.2.1
Git commit (client): 2b3fdf2
Server version: 0.9.1
Git commit (server): 3600720
Go version (server): go1.2.1
Last stable version: 0.9.1, please update docker
Should be possible to use full range of functionality in POST /containers/{id}/attach. Right now can only do logs=1&stdin=false&stdout=true&stderr=true , and the response entity contains the raw (multiplexed) application/vnd.docker.raw-stream
I tried using the API with a recent Docker 0.6.7, and I got intermittent timeouts when waiting for container, and intermittent "Socket closed" errors when reading from InputStream.
Some tweaks may be needed for recent Docker versions.
Recently the Docker Remote API 1.20 has been released . Basically it changes the way the files are copied from host to container and also from container to host:
V1.20 What's new: https://docs.docker.com/reference/api/docker_remote_api/
Retrieving the Docker version using the version()
method throws the following exception:
Caused by: org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "ApiVersion" (Class com.kpelykh.docker.client.model.Version), not marked as ignorable
at [Source: com.sun.jersey.client.apache4.ApacheHttpClient4Handler$HttpClientResponseInputStream@1206cda0; line: 1, column: 16] (through reference chain: com.kpelykh.docker.client.model.Version["ApiVersion"])
at org.codehaus.jackson.map.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:53)
at org.codehaus.jackson.map.deser.StdDeserializationContext.unknownFieldException(StdDeserializationContext.java:267)
at org.codehaus.jackson.map.deser.std.StdDeserializer.reportUnknownProperty(StdDeserializer.java:649)
at org.codehaus.jackson.map.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:635)
at org.codehaus.jackson.map.deser.BeanDeserializer.handleUnknownProperty(BeanDeserializer.java:1355)
at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:717)
at org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:580)
at org.codehaus.jackson.map.ObjectMapper._readValue(ObjectMapper.java:2695)
at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1308)
at org.codehaus.jackson.jaxrs.JacksonJsonProvider.readFrom(JacksonJsonProvider.java:419)
at com.sun.jersey.json.impl.provider.entity.JacksonProviderProxy.readFrom(JacksonProviderProxy.java:139)
at com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:634)
... 63 more
This is my Docker environment:
$ docker version
Client version: 0.10.0
Client API version: 1.10
Go version (client): go1.2.1
Git commit (client): dc9c28f
Server version: 0.10.0
Server API version: 1.10
Git commit (server): dc9c28f
Go version (server): go1.2.1
Last stable version: 0.11.1, please update docker
Hi @marcuslinke, I noted that there are now some ways to configure. Do we want to make them common some how?
Some thoughts, perhaps we might want to search for them in common places:
docker.io.properties
file is the class path. Or maybe docker-java.properties
.~/.docker.io.propreties
in the file system.Thoughts?
docker-java client doesn't seem with the latest docker version:
Client version: 0.11.0
Client API version: 1.11
Go version (client): go1.2.1
Git commit (client): 15209c3
Server version: 0.11.0
Server API version: 1.11
Git commit (server): 15209c3
Go version (server): go1.2.1
Last stable version: 0.11.0
I am running into the following issue:
com.sun.jersey.api.client.ClientHandlerException: org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "ExecDriver" (Class com.kpelykh.docker.client.model.ContainerInspectResponse), not marked as ignorable
at [Source: com.sun.jersey.client.apache4.ApacheHttpClient4Handler$HttpClientResponseInputStream@5328a9c1; line: 1, column: 1331] (through reference chain: com.kpelykh.docker.client.model.ContainerInspectResponse["ExecDriver"])
Perhaps docker-java deserialization should be more lenient when it comes to unrecognized properties?
Same problem happens with 0.8.1 and 0.8.2-SNAPSHOT
DockerClient dc = new DockerClient("http://master:4243/");
try {
List<Image> images = dc.getImages("nr-base");
LOG.debug(images.toString());
} catch (DockerException e) {
e.printStackTrace();
}
causes:
Exception in thread "main" com.sun.jersey.api.client.ClientHandlerException: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "Created" (class com.kpelykh.docker.client.model.Image), not marked as ignorable (8 known properties: "size", "parentId", "created", "repository", "tag", "id", "repoTags", "virtualSize"])
at [Source: com.sun.jersey.client.apache4.ApacheHttpClient4Handler$HttpClientResponseInputStream@79b84841; line: 1, column: 23] (through reference chain: com.kpelykh.docker.client.model.Image["Created"])
at com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:644)
at com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:604)
at com.sun.jersey.api.client.WebResource.handle(WebResource.java:698)
at com.sun.jersey.api.client.WebResource.access$300(WebResource.java:74)
at com.sun.jersey.api.client.WebResource$Builder.get(WebResource.java:514)
at com.kpelykh.docker.client.DockerClient.getImages(DockerClient.java:276)
at com.kpelykh.docker.client.DockerClient.getImages(DockerClient.java:263)
at com.n.s.minion.services.ContainerService.run(ContainerService.java:99)
at com.n.s.minion.cli.RunCommand.run(RunCommand.java:38)
at com.n.s.minion.cli.RunCommand.run(RunCommand.java:17)
at io.dropwizard.cli.ConfiguredCommand.run(ConfiguredCommand.java:76)
at io.dropwizard.cli.Cli.run(Cli.java:70)
at io.dropwizard.Application.run(Application.java:72)
at com.n.s.minion.Minion.main(Minion.java:30)
Caused by: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "Created" (class com.kpelykh.docker.client.model.Image), not marked as ignorable (8 known properties: "size", "parentId", "created", "repository", "tag", "id", "repoTags", "virtualSize"])
at [Source: com.sun.jersey.client.apache4.ApacheHttpClient4Handler$HttpClientResponseInputStream@79b84841; line: 1, column: 23] (through reference chain: com.kpelykh.docker.client.model.Image["Created"])
at com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:51)
at com.fasterxml.jackson.databind.DeserializationContext.reportUnknownProperty(DeserializationContext.java:671)
at com.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:762)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty(BeanDeserializerBase.java:1297)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownVanilla(BeanDeserializerBase.java:1275)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:247)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:118)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:227)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:204)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:23)
at com.fasterxml.jackson.databind.ObjectReader._bind(ObjectReader.java:1233)
at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:677)
at com.fasterxml.jackson.jaxrs.base.ProviderBase.readFrom(ProviderBase.java:764)
at com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:634)
... 13 more
The Docker team has requested an official port number be assigned by IANA.
Track the corresponding issue, which is currently tagged for 1.0 milestone.
Pulling the latest and running against Docker 1.0.0 yields:
Failed tests:
restartContainer(com.kpelykh.docker.client.test.DockerClientTest): com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "Paused" (class com.kpelykh.docker.client.model.ContainerInspectResponse$ContainerState), not marked as ignorable (6 known properties: "StartedAt", "FinishedAt", "Pid", "ExitCode", "Running", "Ghost"])
testDockerBuilderAddUrl(com.kpelykh.docker.client.test.DockerClientTest):
testKillContainer(com.kpelykh.docker.client.test.DockerClientTest): com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "Paused" (class com.kpelykh.docker.client.model.ContainerInspectResponse$ContainerState), not marked as ignorable (6 known properties: "StartedAt", "FinishedAt", "Pid", "ExitCode", "Running", "Ghost"])
testListContainers(com.kpelykh.docker.client.test.DockerClientTest): com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "Paused" (class com.kpelykh.docker.client.model.ContainerInspectResponse$ContainerState), not marked as ignorable (6 known properties: "StartedAt", "FinishedAt", "Pid", "ExitCode", "Running", "Ghost"])
testNetCatDockerfileBuilder(com.kpelykh.docker.client.test.DockerClientTest): com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "Paused" (class com.kpelykh.docker.client.model.ContainerInspectResponse$ContainerState), not marked as ignorable (6 known properties: "StartedAt", "FinishedAt", "Pid", "ExitCode", "Running", "Ghost"])
testStartContainer(com.kpelykh.docker.client.test.DockerClientTest): com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "Paused" (class com.kpelykh.docker.client.model.ContainerInspectResponse$ContainerState), not marked as ignorable (6 known properties: "StartedAt", "FinishedAt", "Pid", "ExitCode", "Running", "Ghost"])
testStopContainer(com.kpelykh.docker.client.test.DockerClientTest): com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "Paused" (class com.kpelykh.docker.client.model.ContainerInspectResponse$ContainerState), not marked as ignorable (6 known properties: "StartedAt", "FinishedAt", "Pid", "ExitCode", "Running", "Ghost"])
testWaitContainer(com.kpelykh.docker.client.test.DockerClientTest): com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "Paused" (class com.kpelykh.docker.client.model.ContainerInspectResponse$ContainerState), not marked as ignorable (6 known properties: "StartedAt", "FinishedAt", "Pid", "ExitCode", "Running", "Ghost"])
testPushLatest(com.kpelykh.docker.client.test.DockerPushTest):
Logs of the issue.
SO question with how to do this: http://stackoverflow.com/questions/20428302/binding-a-port-to-a-host-interface-using-the-rest-api
INFO: 1 * Client out-bound request
1 > POST http://localhost:4243/v1.8/containers/create
1 > Accept: application/json
1 > Content-Type: application/json
{"Hostname":"","PortSpecs":["5432:5432"],"User":"","Tty":false,"OpenStdin":false,"StdinOnce":false,"Memory":0,"MemorySwap":0,"CpuShares":0,"AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Env":["POSTGRESQL_USER=control","POSTGRESQL_PASS=XXXX","POSTGRESQL_DB=control_db"],"Cmd":null,"Dns":null,"Image":"ot/postgres","Volumes":null,"VolumesFrom":"","Entrypoint":[],"NetworkDisabled":false,"Privileged":false,"WorkingDir":"","Domainname":"","ExposedPorts":null,"OnBuild":null}
Mar 10, 2014 12:16:58 PM com.sun.jersey.api.client.filter.LoggingFilter log
INFO: 1 * Client in-bound response
1 < 500
1 < Content-Type: application/json; charset=utf-8
1 < Date: Sat, 22 Feb 2014 08:06:08 GMT
1 < Content-Length: 99
1 <
create: The mapping to public ports on your host has been deprecated. Use -p to publish the ports.
When running the test suite against docker server version 0.8.1 by invoking 'mvn clean install' I get a number of failed tests all with jackson UnrecognizedPropertyExceptions as below.
Is this an incompatibility with this server version?
Failed tests:
commitImage(com.kpelykh.docker.client.test.DockerClientTest): org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "OnBuild" (Class com.kpelykh.docker.client.model.ContainerConfig), not marked as ignorable
restartContainer(com.kpelykh.docker.client.test.DockerClientTest): org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "OnBuild" (Class com.kpelykh.docker.client.model.ContainerConfig), not marked as ignorable
testDockerBuilderAddFile(com.kpelykh.docker.client.test.DockerClientTest):
testDockerBuilderAddFolder(com.kpelykh.docker.client.test.DockerClientTest):
testDockerInfo(com.kpelykh.docker.client.test.DockerClientTest): org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "ExecutionDriver" (Class com.kpelykh.docker.client.model.Info), not marked as ignorable
testImages(com.kpelykh.docker.client.test.DockerClientTest): org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "ExecutionDriver" (Class com.kpelykh.docker.client.model.Info), not marked as ignorable
testKillContainer(com.kpelykh.docker.client.test.DockerClientTest): org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "OnBuild" (Class com.kpelykh.docker.client.model.ContainerConfig), not marked as ignorable
testNetCatDockerfileBuilder(com.kpelykh.docker.client.test.DockerClientTest): org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "OnBuild" (Class com.kpelykh.docker.client.model.ContainerConfig), not marked as ignorable
testNginxDockerfileBuilder(com.kpelykh.docker.client.test.DockerClientTest): org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "OnBuild" (Class com.kpelykh.docker.client.model.ContainerConfig), not marked as ignorable
testPullImage(com.kpelykh.docker.client.test.DockerClientTest): org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "ExecutionDriver" (Class com.kpelykh.docker.client.model.Info), not marked as ignorable
testRemoveImage(com.kpelykh.docker.client.test.DockerClientTest): Server error
testStartContainer(com.kpelykh.docker.client.test.DockerClientTest): org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "OnBuild" (Class com.kpelykh.docker.client.model.ContainerConfig), not marked as ignorable
testStopContainer(com.kpelykh.docker.client.test.DockerClientTest): org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "OnBuild" (Class com.kpelykh.docker.client.model.ContainerConfig), not marked as ignorable
testWaitContainer(com.kpelykh.docker.client.test.DockerClientTest): org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "OnBuild" (Class com.kpelykh.docker.client.model.ContainerConfig), not marked as ignorable
Tests run: 22, Failures: 14, Errors: 0, Skipped: 0
Output from sudo docker version:
Client version: 0.8.1
Go version (client): go1.2
Git commit (client): a1598d1
Server version: 0.8.1
Git commit (server): a1598d1
Go version (server): go1.2
Last stable version: 0.8.1
A recent commit introduced support for defining host-bound volumes (e796c76). A design issue around the overloaded use of the BoundHostVolumes type has led to hacky and incomplete support for inspecting containers that contain volumes.
For background, running a Docker container involves two API calls, createContainer(ContainerConfig) and startContainer(HostConfig). Bound host volumes are partially defined in ContainerConfig and partially defined in HostConfig. Commit e796c76 strives to use a single type - BoundHostVolumes - as the property type within both ContainerConfig and HostConfig. The solution is non-functional - inspectContainer is broken and incomplete.
I propose we:
The following properties in Image class should be long so that images larger than 2GB can be used.
@JsonProperty("Size")
public int size;
@JsonProperty("VirtualSize")
public int virtualSize;
The current remote API (for some reason) uses an array of strings instead of a map to represent environment variables.
Hi, I'm just starting out on a Maven plugin and was hoping to use your excellent library as the engine for it. I'd like to tame the logging, I'd hoped that by redirecting JCL via SLF4J to Logback, I could log via the Maven logger, but I'm getting HTTP written to the console, e.g.:
INFO: 1 * Client out-bound request
1 > GET http://127.0.0.1:4243/v1.8/version
1 > Accept: application/json
Do you have any thoughts?
Executing unit tests:
mvn install -DskipTest=false
Output (truncated):
Failed tests:
restartContainer(com.kpelykh.docker.client.test.DockerClientTest): org.codehaus.jackson.map.JsonMappingException: Conflicting setter definitions for property "Binds": com.kpelykh.docker.client.model.HostConfig#setBinds(1 params) vs com.kpelykh.docker.client.model.HostConfig#setBinds(1 params)
The issue is likely due to e796c76 since it introduced an overloaded setBinds method.
Would you be willing to publish to Maven Central using Sonatype's OSS Maven Repository? I am willing to provide the needed patch and assistance with the process.
I'm getting following error (shortened):
UnrecognizedPropertyException: Unrecognized field "Names" (Class com.kpelykh.docker.client.model.Container), not marked as ignorable
at [ByteArrayInputStream; line: 1, column: 226] (through reference chain: com.kpelykh.docker.client.model.Container["Names"])
with the request/response:
INFO hudson.slaves.NodeProvisioner update
Image of jenkins-centos-1 provisioningE successfully completed. We have now 1 computer(s)
INFO com.nirima.jenkins.plugins.docker.DockerCloud provision
Excess workload after pending Spot instances: 1
INFO com.sun.jersey.api.client.filter.LoggingFilter log
19 * Client out-bound request
19 > GET http://localhost:4243//v1.8/containers/json?limit=-1&before=&since=&all=0&size=0
19 > Accept: application/json
INFO com.sun.jersey.api.client.filter.LoggingFilter log
19 * Client in-bound response
19 < 200
19 < Content-Type: application/json
19 < Content-Length: 249
19 < Date: Fri, 31 Jan 2014 16:57:34 GMT
19 <
[{"Id":"c1bc8e3e2cd45b2a2561f494a0920e9f12956d1563718e84a4e81de404bfa62a","Image":"jenkins-centos-1:latest","Command":"/bin/bash ","Created":1391186016,"Status":"Up 23 minutes","Ports":null,"SizeRw":0,"SizeRootFs":0,"Names":["/agitated_albattani"]}]
whole stacktrace:
https://gist.github.com/lfryc/929086d704418e00d8b1
I'm seeing a couple issues in archiveTARFiles.
Deleting the tarFile on exit seems like a bad approach for long running applications. I recommend deleting the tarFile immediately after the new image is built. tarFile.deleteOnExit();
I need to add an executable file to the new image with the following line in Dockerfile:
ADD run.sh /
When using DockerClient.build method, the file becomes non-executable in the image. Using the command-line docker build .
adds the file correctly with permissions intact.
Can the API be upgraded to copy files or folders from a container?
http://docs.docker.io/en/latest/api/docker_remote_api_v1.5/#copy-files-or-folders-from-a-container
I'm trying to get it working in my local workarea with API v1.4, but so far Docker doesn't recognize my requests.
Otherwise, simply changing v1.3 to v1.4 in DockerClient doesn't cause any issues for me. Changing to v1.5, on the other hand, breaks the code.
There have been all these great contributions lately. Could we please release a new version of the library to Maven Central? If you already have everything set up and permissions to publish to the group ID, this shouldn't take longer than 10 minutes.
Please add ability to set connect timeout in DockerClientConfig
The ADD
command in a Dockerfile allows for using a remote file URL as the first parameter. For example:
ADD http://mirrors.jenkins-ci.org/war/1.562/jenkins.war /opt/jenkins.war
The current implementation only checks for the existence of a local file. If a HTTP URL is used, an exception is thrown. This constraint would have to be less strict to allow remote URLs.
The REST API provides support for image/push, but the API currently does not. Seems pretty easy to add so I plan to do so.
Is it possible to get the InputStream for stdout and stderr from a running container using docker-java, like you can from java.lang.Process?
Currently I'm trying to run a docker container without using this API by using ProcessBuilder.start(). However, I see that Process.waitFor() gets stuck and never returns for simple commands like "docker run base echo hello"
Passing "{host-path}:{container-patch}:[rw|ro]" format does not preserve the host mount location. Instead the host mount is created under /var/lib/docker/vfs/dir/* directory but the target mount is properly created in the container.
I think it can ba valuable to be able to read docker in java via unix socket as well.
It let us more easily continue to give rights on clients.
This project has a very good support for unix socket domain in mail unixes
https://github.com/jnr/jnr-unixsocket
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.