Coder Social home page Coder Social logo

docker-sp's Introduction

Docker Resources for WSO2 Stream Processing

This repository contains following Docker resources:

  • Per profile Docker resources of WSO2 Stream Processor v4.4.x for Alpine, CentOS, Ubuntu
  • Docker Compose resources to evaluate most common Stream Processing deployment patterns

Per profile Docker resources of WSO2 Stream Processor help you build generic Docker images for deploying the corresponding product servers in containerized environments. Each Docker image includes the JDK, the relevant product distribution and a collection of utility libraries. Configurations, custom JDBC drivers other than the default MySQL JDBC driver provided, extensions and other deployable artifacts are designed to be provided via volume mounts to the containers spawned.

Docker Compose files have been created according to the most common Stream Processing deployment patterns available for allowing users to quickly evaluate product features along side their co-operate requirements. The Compose files make use of per profile Docker images of WSO2 Stream Processor and MySQL.

Change log from previous v4.3.0.2 release: View Here

docker-sp's People

Contributors

chamindi-a avatar chamithkumarage avatar chirangaalwis avatar ctienshi avatar dilanua avatar imesh avatar kavinduzoysa avatar maheshika avatar msmshariq avatar nadundesilva avatar pcnfernando avatar thilinamanamgoda avatar vimukthiperera avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

docker-sp's Issues

Copy extracted distribution directories to reduce image size

Description:
Reduce the Docker images by copying the extracted distros instead of copying the zip / tar.gz archives and then extracting during the docker build phase.

The size of the images can be reduced as the intermediate layers with the zip / tar.gz archives can be eliminated.

Suggested Labels:
Type/Improvement

Create the docker-compose configuration for SP

Description:
Stream Processor has different components such as manager, worker, dashboard, editor and require kafka to run a distributed setup. Create a docker-compose configuration for SP with manager, worker, dashboard and kafka.

Suggested Labels:
Type/New Feature

docker-compose up fails (authentication required at docker.wso2.com)

Description:
instructions from README to docker-compose up fail with authentication error on https://docker.wso2.com/v2/wso2sp-editor/manifests/4.3.0

Affected Product Version:
Current master branch (did not try any others)

Steps to reproduce:
Starting with a fresh checkout of the public docker-sp repository, and as an unprivileged user (not authenticated to the WSO2 web site):

  • cd docker-compose/editor-worker-dashboard
  • docker-compose up
  • watch the mysql image get pulled without problems
  • watch the next image (wso2sp-editor) fail due to authorisation problems
Pulling editor (docker.wso2.com/wso2sp-editor:4.3.0)...
ERROR: Get https://docker.wso2.com/v2/wso2sp-editor/manifests/4.3.0: unauthorized: authentication required

Confirming with a browser, GET https://docker.wso2.com/v2/wso2sp-editor/manifests/4.3.0 results on HTTP 401 response with an HTML page containing this body

{"errors":[{"code":"UNAUTHORIZED","message":"authentication required","detail":[{"Type":"repository","Class":"","Name":"wso2sp-editor","Action":"pull"}]}]}

Work around:
replacing all instances of docker.wso2.com with wso2 in the docker-compose file image specifications (thus using images hosted on dockerhub) seems to work.

Use OpenJDK in Ubuntu based Docker images

Description:
It is suggested to use OpenJDK with Ubuntu based Docker images for WSO2 Stream Processor.

Suggested Labels:
Type/Improvement

Suggested Assignees:
chirangaalwis

Affected Product Version:
WSO2 Stream Processor v4.3.x

OS, DB, other environment details and versions:
Ubuntu 18.04

Sub Tasks:

  • Use AdoptOpenJDK 8 Ubuntu Docker image as the base image
  • Testing the Docker images with Docker Compose resources
  • Code review

Unable to build wso2sp containers in alpine

Description:

By following the steps mentioned here, I'm unable to bring up the containers of the dashboard, editor, worker and manager in alpine. However I'm able to build the individual images (base, dashboard, editor, worker and manager) successfully.

When I try to bring up the containers, this is the error that repeats until the Mount verification timed out message appears.

Waiting for all volumes to be mounted...
Directory /home/wso2carbon/wso2-config-volume does not exist
Waiting for the volume to be mounted...
Retrying...
Directory /home/wso2carbon/wso2-config-volume does not exist
Waiting for the volume to be mounted...
Retrying...

Suggested Labels:

Suggested Assignees:

Affected Product Version:
WSO2SP 4.4.0

OS, DB, other environment details and versions:
Ubuntu 16.04.2

Steps to reproduce:

Related Issues:

Upgrade Docker Compose version

Description:
Current Docker Compose resources refer to version 2.3. It is suggested to upgrade this to version 2.4 (version 2 of Docker Compose file format [1]) or to version 3 of Docker Compose file format [2].

[1]: Docker Compose version 2 file format
[2]: Docker Compose version 3 file format

Affected Product Version:
WSO2 Stream Processor v4.4.x

Sub Tasks:

  • Evaluate the Docker Compose version 3 constructs
  • Identify differences between the past version (v2.3) and latest version (v3)
  • Integrate the changes to the existing Docker Compose resources
  • Test with Alpine based Docker resources
  • Test with CentOS based Docker resources
  • Test with Ubuntu based Docker resources
  • Peer/Code review

Upgrade MySQL JDBC connector to latest version

Description:
Currently, the MySQL JDBC connector version used is of version 5.1.x range. This needs to be upgraded and tested with the latest version of MySQL JDBC connector version [1].

[1]: Latest MySQL JDBC Connector

Affected Product Version:
WSO2 Stream Processor v4.4.x

Sub Tasks:

  • Upgrade version in Alpine based Docker resources
  • Upgrade version in CentOS based Docker resources
  • Upgrade version in Ubuntu based Docker resources
  • Code/Peer review

Upgrade Ubuntu base OS version to 18.04 LTS

Description:
Upgrade Ubuntu base OS version from version 16.04 LTS to 18.04 LTS.

Suggested Labels:
Type/Improvement

Suggested Assignees:
chirangaalwis

Affected Product Version:
WSO2 Stream Processor v4.3.x

CentOS based Docker resources for WSO2 Stream Processor v4.3.x

Description:
It is required to create CentOS based Docker resources for WSO2 Stream Processor v4.3.x. Further, Docker-Compose resources need to be tested with these Docker resources.

Suggested Labels:
Type/NewFeature

Suggested Assignees:
chamindi-a

Affected Product Version:
WSO2 Stream Processor 4.3.x

Define user id and group id for user in Dockerfile

Description:
To manage permissions of volumes mounted to the Docker container in a clean manner, it is required to specify the user id and group id explicitly. Hence specify the user id and group id in the Dockerfile.

Suggested Labels:
Type/Improvement

Fix incorrect MOTDs set in Docker resources for WSO2 Stream Processing

Description:
The MOTD set in Docker resources for WSO2 Stream Processing by default should indicate about running the GA version of WSO2 product servers as these Docker resources are publicly available.

The current MOTDs set in Docker resources indicate about running WSO2 product servers with WSO2 updates. These need to be corrected.

Affected Product Version:
Docker resources for WSO2 Stream Processing v4.4.x and below

Sub Tasks:

  • Fixed in Alpine based Docker resources
  • Fixed in CentOS based Docker resources
  • Code/Peer review

Generalize WSO2 Stream Processor product Dockerfiles

Description:
Currently, the standard format of a WSO2 product Dockerfile uses the product profile server startup script (e.g. <WSO2_PRODUCT_HOME>/bin/wso2server.sh) as the entrypoint [1] (see example [2]).

This eliminates the opportunity to dynamically set any configurations based on the container environment (e.g. in WSO2 product clustering configuration, it is required to set the 'localMemberHost' based on the container IP or node IP).

Thus, it is proposed to introduce a new bash script which performs the required tasks (such as, configuration changes and etc.), perform the server startup, which could be used as the Dockerfile entrypoint.

Please see mail thread [3] for a detailed discussion on this proposal.

[1]: Dockerfile entrypoint
[2]: WSO2 Identity Server Dockerfile
[3]: [Architecture] [Deployment] [Containers] An update to WSO2 product Dockerfile generalization

Suggested Labels:
Type/Improvement

Suggested Assignees:
ThilinaManamgoda

Affected Product Version:
WSO2 Identity Server v4.1.0

Allow passing the MOTD as a build argument during the Docker image build

Description:
Allow passing the MOTD as a build argument during the Docker image build. This is to allow passing different MOTDs when building Docker images for the WSO2 Private Docker Registry and DockerHub.

Suggested Labels:
Type/Improvement

Suggested Assignees:
chirangaalwis

Affected Product Version:
WSO2 Stream Processor v4.3.x

[Distributed Docker Compose] The managers does not share a mount path to share the siddhi artifacts

Description:
As per the official Fully Distributed deployment documentation, to deploy Siddhi applications in Distributed deployment it is recommended to use a content synchronization mechanism since Siddhi applications must be deployed to both manager nodes.

Therefore, we need to support this content synchronization within the docker compose as well.

Suggested Labels:

Suggested Assignees:

Affected Product Version:

OS, DB, other environment details and versions:

Steps to reproduce:

Related Issues:

Use Dockerfile LABEL construct for defining the maintainer

Description:
Use the Dockerfile LABEL construct instead of using the deprecated MAINTAINER construct as per recommended Dockerfile best practices [1].

[1]: Using MAINTAINER construct

Affected Product Version:
Docker resources for WSO2 Stream Processing v4.4.x and below

Sub Tasks:

  • Improved in Alpine based Docker resources
  • Improved in CentOS based Docker resources
  • Improved in Ubuntu based Docker resources
  • Code/Peer review

Alpine based Docker resources for WSO2 Stream Processor v4.3.x

Description:
It is required to create Alpine based Docker resources for WSO2 Stream Processor v4.3.x. Further, Docker-Compose resources need to be tested with these Docker resources.

Suggested Labels:
Type/NewFeature

Suggested Assignees:
chamindi-a

Affected Product Version:
WSO2 Stream Processor 4.3.x

Use AdoptOpenJDK in Alpine based Docker images

Description:
It is suggested to use AdoptOpenJDK with Alpine based Docker images for WSO2 Stream Processor.

Suggested Labels:
Type/Improvement

Suggested Assignees:
chirangaalwis

Affected Product Version:
WSO2 Stream Processor v4.3.x

Sub Tasks:

  • Use AdoptOpenJDK 8 Alpine Docker image as the base image
  • Testing the Docker images with Docker Compose resources
  • Code review

Use OpenJDK in CentOS based Docker images

Description:
It is suggested to use OpenJDK with CentOS based Docker images for WSO2 Stream Processor.

Suggested Labels:
Type/Improvement

Suggested Assignees:
chirangaalwis

Affected Product Version:
WSO2 Stream Processor v4.3.x

OS, DB, other environment details and versions:
CentOS 7

Sub Tasks:

  • Install AdoptOpenJDK 8 in the CentOS Docker base image
  • Testing the Docker images with Docker Compose resources
  • Code review

Docker Compose resources for WSO2 Stream Processor v4.4.x

Description:
Docker Compose resources need to be created for deployment patterns involving WSO2 Stream Processor v4.4.x.

Affected Product Version:
WSO2 Stream Processor v4.4.x

Sub Tasks:

  • Test with Alpine based Docker resources
  • Test with CentOS based Docker resources
  • Test with Ubuntu based Docker resources
  • Code/Peer review

Exception "io.netty.handler.ssl.NotSslRecordException: not an SSL/TLS record" when accessing the Editor profile console

Description:
When accessing the WSO2 Stream Processor 4.2.x Editor console using https://localhost:9743/editor, the following error was experienced:

JAVA_HOME environment variable is set to /home/wso2carbon/java
CARBON_HOME environment variable is set to /home/wso2carbon/wso2sp-4.2.0
RUNTIME_HOME environment variable is set to /home/wso2carbon/wso2sp-4.2.0/wso2/editor
[2018-07-07 19:54:56,316]  INFO {org.wso2.carbon.launcher.extensions.OSGiLibBundleDeployerUtils updateOSGiLib} - Successfully updated the OSGi bundle information of Carbon Runtime: editor  
osgi> [2018-07-07 19:54:58,830]  INFO {org.wso2.msf4j.internal.websocket.WebSocketServerSC} - All required capabilities are available of WebSocket service component is available.
[2018-07-07 19:54:58,871]  INFO {org.wso2.carbon.metrics.core.config.model.JmxReporterConfig} - Creating JMX reporter for Metrics with domain 'org.wso2.carbon.metrics'
[2018-07-07 19:54:58,883]  INFO {org.wso2.carbon.metrics.core.reporter.impl.AbstractReporter} - Started JMX reporter for Metrics
[2018-07-07 19:54:59,005]  INFO {org.wso2.msf4j.analytics.metrics.MetricsComponent} - Metrics Component is activated
[2018-07-07 19:54:59,008]  INFO {org.wso2.carbon.databridge.agent.internal.DataAgentDS} - Successfully deployed Agent Server 
[2018-07-07 19:54:59,033]  INFO {org.wso2.msf4j.internal.websocket.EndpointsRegistryImpl} - Endpoint Registered : /console
[2018-07-07 19:54:59,388]  INFO {org.wso2.carbon.event.simulator.core.service.CSVFileDeployer} - CSV file deployer initiated.
[2018-07-07 19:54:59,391]  INFO {org.wso2.carbon.event.simulator.core.service.SimulationConfigDeployer} - Simulation config deployer initiated.
[2018-07-07 19:54:59,403]  INFO {org.wso2.carbon.siddhi.editor.core.internal.WorkspaceDeployer} - Workspace artifact deployer initiated.
[2018-07-07 19:54:59,625]  INFO {org.wso2.carbon.cluster.coordinator.rdbms.internal.RDBMSCoordinationServiceComponent} - Cluster coordination has been disabled. Enable it in deployment.yaml to use the clustering service
[2018-07-07 19:54:59,727]  INFO {org.wso2.carbon.stream.processor.statistics.api.StatisticsApi} - org.wso2.carbon.stream.processor.statistics.api.StatisticsApi service component has  started.
[2018-07-07 19:54:59,728]  INFO {org.wso2.carbon.stream.processor.statistics.internal.service.OperatingSystemMetricsServiceComponent} - OperatingSystemMetricsService Component activated
[2018-07-07 19:54:59,803]  INFO {org.wso2.carbon.databridge.receiver.binary.internal.BinaryDataReceiver} - Started Binary SSL Transport on port : 9715
[2018-07-07 19:54:59,804]  INFO {org.wso2.carbon.databridge.receiver.binary.internal.BinaryDataReceiver} - Started Binary TCP Transport on port : 9615
[2018-07-07 19:54:59,814]  INFO {org.wso2.carbon.databridge.receiver.thrift.ThriftDataReceiver} - Thrift Server started at 0.0.0.0
[2018-07-07 19:54:59,822]  INFO {org.wso2.carbon.databridge.receiver.thrift.ThriftDataReceiver} - Thrift SSL port : 7714
[2018-07-07 19:54:59,824]  INFO {org.wso2.carbon.databridge.receiver.thrift.ThriftDataReceiver} - Thrift port : 7614
[2018-07-07 19:54:59,827]  INFO {org.wso2.carbon.databridge.core.internal.DataBridgeDS} - Successfully deployed Agent Server 
[2018-07-07 19:54:59,954]  INFO {org.wso2.carbon.business.rules.templates.editor.core.internal.StartupComponent} - Template Editor Started on : http://172.23.0.3:9390/template-editor
[2018-07-07 19:54:59,957]  INFO {org.wso2.carbon.siddhi.editor.core.internal.StartupComponent} - Editor Started on : http://172.23.0.3:9390/editor
[2018-07-07 19:54:59,960]  INFO {org.wso2.msf4j.internal.MicroservicesServerSC} - All microservices are available
[2018-07-07 19:55:00,018]  INFO {org.wso2.transport.http.netty.listener.ServerConnectorBootstrap$HTTPServerConnector} - HTTP(S) Interface starting on host 0.0.0.0 and port 9743
[2018-07-07 19:55:00,019]  INFO {org.wso2.transport.http.netty.listener.ServerConnectorBootstrap$HTTPServerConnector} - HTTP(S) Interface starting on host 0.0.0.0 and port 9390
[2018-07-07 19:55:00,021]  INFO {org.wso2.carbon.kernel.internal.CarbonStartupHandler} - WSO2 Stream Processor started in 4.034 sec
[2018-07-07 20:04:33,339]  WARN {io.netty.channel.DefaultChannelPipeline} - An exceptionCaught() event was fired, and it reached at the tail of the pipeline. It usually means the last handler in the pipeline did not handle the exception. io.netty.handler.codec.DecoderException: io.netty.handler.ssl.NotSslRecordException: not an SSL/TLS record: 474554202f636f6e736f6c6520485454502f312e310d0a486f73743a206c6f63616c686f73743a393734330d0a436f6e6e656374696f6e3a20557067726164650d0a507261676d613a206e6f2d63616368650d0a43616368652d436f6e74726f6c3a206e6f2d63616368650d0a557067726164653a20776562736f636b65740d0a4f726967696e3a2068747470733a2f2f6c6f63616c686f73743a393734330d0a5365632d576562536f636b65742d56657273696f6e3a2031330d0a557365722d4167656e743a204d6f7a696c6c612f352e3020285831313b204c696e7578207838365f363429204170706c655765624b69742f3533372e333620284b48544d4c2c206c696b65204765636b6f29204368726f6d652f36372e302e333339362e3939205361666172692f3533372e33360d0a4163636570742d456e636f64696e673a20677a69702c206465666c6174652c2062720d0a4163636570742d4c616e67756167653a20656e2d55532c656e3b713d302e390d0a5365632d576562536f636b65742d4b65793a206433302b3572794c6238674a336141376b33594331513d3d0d0a5365632d576562536f636b65742d457874656e73696f6e733a207065726d6573736167652d6465666c6174653b20636c69656e745f6d61785f77696e646f775f626974730d0a0d0a
	at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:459)
	at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:265)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1359)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
	at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:935)
	at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:134)
	at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:645)
	at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:580)
	at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:497)
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:459)
	at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858)
	at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:138)
	at java.lang.Thread.run(Thread.java:748)
Caused by: io.netty.handler.ssl.NotSslRecordException: not an SSL/TLS record: 474554202f636f6e736f6c6520485454502f312e310d0a486f73743a206c6f63616c686f73743a393734330d0a436f6e6e656374696f6e3a20557067726164650d0a507261676d613a206e6f2d63616368650d0a43616368652d436f6e74726f6c3a206e6f2d63616368650d0a557067726164653a20776562736f636b65740d0a4f726967696e3a2068747470733a2f2f6c6f63616c686f73743a393734330d0a5365632d576562536f636b65742d56657273696f6e3a2031330d0a557365722d4167656e743a204d6f7a696c6c612f352e3020285831313b204c696e7578207838365f363429204170706c655765624b69742f3533372e333620284b48544d4c2c206c696b65204765636b6f29204368726f6d652f36372e302e333339362e3939205361666172692f3533372e33360d0a4163636570742d456e636f64696e673a20677a69702c206465666c6174652c2062720d0a4163636570742d4c616e67756167653a20656e2d55532c656e3b713d302e390d0a5365632d576562536f636b65742d4b65793a206433302b3572794c6238674a336141376b33594331513d3d0d0a5365632d576562536f636b65742d457874656e73696f6e733a207065726d6573736167652d6465666c6174653b20636c69656e745f6d61785f77696e646f775f626974730d0a0d0a
	at io.netty.handler.ssl.SslHandler.decodeJdkCompatible(SslHandler.java:1106)
	at io.netty.handler.ssl.SslHandler.decode(SslHandler.java:1162)
	at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:489)
	at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:428)
	... 16 more

Suggested Labels:
Type/Bug

Affected Product Version:
WSO2 Stream Processor 4.2.x

Docker Compose resources for WSO2 Stream Processor v4.3.x

Description:
Docker Compose resources need to be created for deployment patterns involving WSO2 Stream Processor v4.3.x.

Suggested Labels:
Type/NewFeature

Suggested Assignees:
chirangaalwis

Affected Product Version:
WSO2 Stream Processor v4.3.x

Prepackage MySQL JDBC connector in Docker images via a downloadable link

Description:
Currently in Dockerfiles, it is instructed to include the MySQL JDBC connector using a Dockerfile COPY instruction [1]. It could be instructed to include the MySQL JDBC connector via a downloadable link (available from Maven Central) using the Dockerfile ADD construct.

[1]: COPY instruction

Affected Product Version:
Docker resources for WSO2 Stream Processing v4.4.x and below

Sub Tasks:

  • Improved in Alpine based Docker resources
  • Improved in CentOS based Docker resources
  • Improved in Ubuntu based Docker resources
  • Code/Peer review

Upgrade AdoptOpenJDK version to the latest version - jdk8u212-b03

Description:
The AdoptOpenJDK version needs to be updated to the latest version (at 10/05/2019) - jdk8u212-b03.

Sub Tasks:

  • Upgrade version in Alpine based Docker resources
  • Upgrade version in CentOS based Docker resources
  • Upgrade version in Ubuntu based Docker resources
  • Code/Peer review

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.