Giter Site home page Giter Site logo

robinyo / js-docker Goto Github PK

View Code? Open in Web Editor NEW

This project forked from tibcosoftware/js-docker

8.0 8.0 4.0 4.37 MB

Container deployment of TIBCO JasperReports Server Community Edition

License: BSD 3-Clause "New" or "Revised" License

Shell 85.44% Dockerfile 4.39% Batchfile 7.22% Smarty 2.95%
docker docker-compose docker-image jasperreports pgadmin postgresql

js-docker's People

Contributors

nataliiakel avatar robinyo avatar sgwood63 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

js-docker's Issues

7.8.0-ce fails to load on jdk-11 Tomcat

Getting the following error in the log:

07-Oct-2020 08:48:30.759 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.desktop/sun.font=ALL-UNNAMED
07-Oct-2020 08:48:30.760 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdk.tls.ephemeralDHKeySize=2048
07-Oct-2020 08:48:30.760 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources
07-Oct-2020 08:48:30.760 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dorg.apache.catalina.security.SecurityListener.UMASK=0027
07-Oct-2020 08:48:30.760 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dignore.endorsed.dirs=
07-Oct-2020 08:48:30.760 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=/usr/local/tomcat
07-Oct-2020 08:48:30.761 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=/usr/local/tomcat
07-Oct-2020 08:48:30.761 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=/usr/local/tomcat/temp
07-Oct-2020 08:48:30.761 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent Loaded Apache Tomcat Native library [1.2.24] using APR version [1.6.5].
07-Oct-2020 08:48:30.761 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
07-Oct-2020 08:48:30.761 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true]
07-Oct-2020 08:48:30.765 INFO [main] org.apache.catalina.core.AprLifecycleListener.initializeSSL OpenSSL successfully initialized [OpenSSL 1.1.1d  10 Sep 2019]
07-Oct-2020 08:48:31.172 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"]
07-Oct-2020 08:48:31.208 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["https-openssl-nio-8443"]
07-Oct-2020 08:48:31.520 INFO [main] org.apache.catalina.startup.Catalina.load Server initialization in [1051] milliseconds
07-Oct-2020 08:48:31.576 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina]
07-Oct-2020 08:48:31.576 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet engine: [Apache Tomcat/9.0.37]
07-Oct-2020 08:48:31.585 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat/webapps/jasperserver]
07-Oct-2020 08:48:31.722 SEVERE [main] org.apache.catalina.startup.HostConfig.deployDirectory Error deploying web application directory [/usr/local/tomcat/webapps/jasperserver]
	java.lang.IllegalStateException: Error starting child
		at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:720)
		at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:690)
		at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:705)
		at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1133)
		at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1866)
		at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
		at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
		at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
		at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:118)
		at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1045)
		at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:429)
		at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1576)
		at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:309)
		at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)
		at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:423)
		at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:366)
		at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:936)
		at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:841)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
		at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1384)
		at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1374)
		at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
		at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
		at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)
		at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909)
		at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
		at org.apache.catalina.core.StandardService.startInternal(StandardService.java:421)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
		at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:930)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
		at org.apache.catalina.startup.Catalina.start(Catalina.java:738)
		at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
		at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
		at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
		at java.base/java.lang.reflect.Method.invoke(Method.java:566)
		at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:342)
		at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:473)
	Caused by: org.apache.catalina.LifecycleException: Failed to initialize component [org.apache.catalina.webresources.JarResourceSet@7829b776]
		at org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:440)
		at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:139)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:173)
		at org.apache.catalina.webresources.StandardRoot.startInternal(StandardRoot.java:726)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
		at org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:4792)
		at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4928)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
		at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:717)
		... 37 more
	Caused by: java.lang.IllegalArgumentException: java.io.IOException: java.lang.reflect.InvocationTargetException
		at org.apache.catalina.webresources.AbstractSingleArchiveResourceSet.initInternal(AbstractSingleArchiveResourceSet.java:143)
		at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136)
		... 44 more
	Caused by: java.io.IOException: java.lang.reflect.InvocationTargetException
		at org.apache.tomcat.util.compat.Jre9Compat.jarFileNewInstance(Jre9Compat.java:205)
		at org.apache.tomcat.util.compat.JreCompat.jarFileNewInstance(JreCompat.java:206)
		at org.apache.catalina.webresources.AbstractSingleArchiveResourceSet.initInternal(AbstractSingleArchiveResourceSet.java:140)
		... 45 more
	Caused by: java.lang.reflect.InvocationTargetException
		at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
		at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
		at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
		at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
		at org.apache.tomcat.util.compat.Jre9Compat.jarFileNewInstance(Jre9Compat.java:202)
		... 47 more
	Caused by: java.util.zip.ZipException: invalid END header (bad central directory offset)
		at java.base/java.util.zip.ZipFile$Source.zerror(ZipFile.java:1567)
		at java.base/java.util.zip.ZipFile$Source.initCEN(ZipFile.java:1484)
		at java.base/java.util.zip.ZipFile$Source.<init>(ZipFile.java:1274)
		at java.base/java.util.zip.ZipFile$Source.get(ZipFile.java:1237)
		at java.base/java.util.zip.ZipFile$CleanableResource.<init>(ZipFile.java:727)
		at java.base/java.util.zip.ZipFile$CleanableResource.get(ZipFile.java:844)
		at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:247)
		at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:177)
		at java.base/java.util.jar.JarFile.<init>(JarFile.java:348)
		... 52 more
07-Oct-2020 08:48:31.728 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/jasperserver] has finished in [143] ms
07-Oct-2020 08:48:31.732 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
07-Oct-2020 08:48:31.744 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["https-openssl-nio-8443"]
07-Oct-2020 08:48:31.746 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in [225] milliseconds

Dockerfile (first few lines):

ARG TOMCAT_BASE_IMAGE=tomcat:9.0.37-jdk11-openjdk
FROM ${TOMCAT_BASE_IMAGE}

ARG DN_HOSTNAME
ARG KS_PASSWORD
ARG JRS_HTTPS_ONLY
ARG HTTP_PORT
ARG HTTPS_PORT
ARG POSTGRES_JDBC_DRIVER_VERSION
ARG JASPERREPORTS_SERVER_VERSION
ARG EXPLODED_INSTALLER_DIRECTORY

ENV PHANTOMJS_VERSION ${PHANTOMJS_VERSION:-2.1.1}
ENV DN_HOSTNAME ${DN_HOSTNAME:-localhost.localdomain}
ENV KS_PASSWORD ${KS_PASSWORD:-changeit}
ENV JRS_HTTPS_ONLY ${JRS_HTTPS_ONLY:-false}
ENV HTTP_PORT ${HTTP_PORT:-8080}
ENV HTTPS_PORT ${HTTPS_PORT:-8443}
ENV POSTGRES_JDBC_DRIVER_VERSION ${POSTGRES_JDBC_DRIVER_VERSION:-42.2.16}
ENV JASPERREPORTS_SERVER_VERSION ${JASPERREPORTS_SERVER_VERSION:-7.8.0}
ENV EXPLODED_INSTALLER_DIRECTORY ${EXPLODED_INSTALLER_DIRECTORY:-resources/jasperreports-server-cp-$JASPERREPORTS_SERVER_VERSION-bin}

jasperreports-server can not be deployed

Hi,
tomcat reports

Caused by: java.util.zip.ZipException: invalid END header (bad central directory offset)
                at java.base/java.util.zip.ZipFile$Source.zerror(ZipFile.java:1535)
                at java.base/java.util.zip.ZipFile$Source.initCEN(ZipFile.java:1458)
                at java.base/java.util.zip.ZipFile$Source.<init>(ZipFile.java:1274)
                at java.base/java.util.zip.ZipFile$Source.get(ZipFile.java:1237)
                at java.base/java.util.zip.ZipFile$CleanableResource.<init>(ZipFile.java:727)
                at java.base/java.util.zip.ZipFile$CleanableResource.get(ZipFile.java:844)
                at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:247)
                at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:177)
                at java.base/java.util.jar.JarFile.<init>(JarFile.java:348)
                ... 51 more

it seems that open-sans-fonts-extension.jar is corrupted.

$ unzip -t open-sans-fonts-extension.jar
Archive:  open-sans-fonts-extension.jar
error [open-sans-fonts-extension.jar]:  missing 3 bytes in zipfile
  (attempting to process anyway)
error [open-sans-fonts-extension.jar]:  attempt to seek before beginning of zipfile
  (please check that you have transferred or created the zipfile in the
  appropriate BINARY mode and that you have compiled UnZip properly)
  (attempting to re-compensate)
    testing: jasperreports_extension.properties   OK
    testing: fonts/OpenSans/OpenSans-Light.ttf   bad CRC 4ae3134f  (should be e70f05f5)
file #3:  bad zipfile offset (local header sig):  61199
  (attempting to re-compensate)
file #3:  bad zipfile offset (local header sig):  61199
file #4:  bad zipfile offset (local header sig):  123240
    testing: fonts/OpenSans/OpenSans-BoldItalic.ttf   OK
    testing: fonts/fontsfamily1592346500512.xml   OK
At least one error was detected in open-sans-fonts-extension.jar.

directory "${EXPLODED_INSTALLER_DIRECTORY}/buildomatic/target" doesn't exist.

I'm trying to get this working with 7.8.0 (I haven't tried 7.5.0), but there is a missing target folder. Have you tried this?

$ docker build -t jasperserver-ce:7.8.0 .
Sending build context to Docker daemon  1.176GB
Step 1/36 : ARG TOMCAT_BASE_IMAGE=tomcat:9.0.38-jdk11-openjdk
Step 2/36 : FROM ${TOMCAT_BASE_IMAGE}
 ---> f796d3d2c195
Step 3/36 : ARG DN_HOSTNAME
 ---> Using cache
 ---> 0f3318136b8a
Step 4/36 : ARG KS_PASSWORD
 ---> Using cache
 ---> c2b1c6bd532a
Step 5/36 : ARG JRS_HTTPS_ONLY
 ---> Using cache
 ---> 2e5eeacf128f
Step 6/36 : ARG HTTP_PORT
 ---> Using cache
 ---> eac70e449bb6
Step 7/36 : ARG HTTPS_PORT
 ---> Using cache
 ---> 28d3b917150a
Step 8/36 : ARG POSTGRES_JDBC_DRIVER_VERSION
 ---> Using cache
 ---> e0e9a4d77d36
Step 9/36 : ARG JASPERREPORTS_SERVER_VERSION
 ---> Using cache
 ---> e8a3d53aba38
Step 10/36 : ARG EXPLODED_INSTALLER_DIRECTORY
 ---> Using cache
 ---> 426a190d1f4f
Step 11/36 : ENV PHANTOMJS_VERSION ${PHANTOMJS_VERSION:-2.1.1}
 ---> Using cache
 ---> 3e040cf8e553
Step 12/36 : ENV DN_HOSTNAME ${DN_HOSTNAME:-localhost.localdomain}
 ---> Using cache
 ---> 85b0929ac73c
Step 13/36 : ENV KS_PASSWORD ${KS_PASSWORD:-changeit}
 ---> Using cache
 ---> 325243cb23ff
Step 14/36 : ENV JRS_HTTPS_ONLY ${JRS_HTTPS_ONLY:-false}
 ---> Using cache
 ---> 75d2513607e1
Step 15/36 : ENV HTTP_PORT ${HTTP_PORT:-8080}
 ---> Using cache
 ---> ac2af94a0a3e
Step 16/36 : ENV HTTPS_PORT ${HTTPS_PORT:-8443}
 ---> Using cache
 ---> f7500691839c
Step 17/36 : ENV POSTGRES_JDBC_DRIVER_VERSION ${POSTGRES_JDBC_DRIVER_VERSION:-42.2.16}
 ---> Using cache
 ---> 92f14389cf95
Step 18/36 : ENV JASPERREPORTS_SERVER_VERSION ${JASPERREPORTS_SERVER_VERSION:-7.8.0}
 ---> Using cache
 ---> c084c387a8c8
Step 19/36 : ENV EXPLODED_INSTALLER_DIRECTORY ${EXPLODED_INSTALLER_DIRECTORY:-resources/jasperreports-server-cp-$JASPERREPORTS_SERVER_VERSION-bin}
 ---> Using cache
 ---> 124af7ca4b28
Step 20/36 : RUN mkdir -p /usr/src/jasperreports-server
 ---> Using cache
 ---> 5a28e6bbfbd2
Step 21/36 : COPY ${EXPLODED_INSTALLER_DIRECTORY}/jasperserver $CATALINA_HOME/webapps/jasperserver/
 ---> Using cache
 ---> 49438b4200f8
Step 22/36 : COPY ${EXPLODED_INSTALLER_DIRECTORY}/TIB* /usr/src/jasperreports-server/
 ---> Using cache
 ---> 254f4de6b1b3
Step 23/36 : COPY ${EXPLODED_INSTALLER_DIRECTORY}/apache-ant /usr/src/jasperreports-server/apache-ant/
 ---> Using cache
 ---> 76c8e1b4059fStep 24/36 : COPY ${EXPLODED_INSTALLER_DIRECTORY}/buildomatic/js-ant /usr/src/jasperreports-server/buildomatic/
 ---> Using cache
 ---> 81816a9efd60
Step 25/36 : COPY ${EXPLODED_INSTALLER_DIRECTORY}/buildomatic/build.xml /usr/src/jasperreports-server/buildomatic/
 ---> Using cache
 ---> 1524698e3b0e
Step 26/36 : COPY ${EXPLODED_INSTALLER_DIRECTORY}/buildomatic/bin/*.xml /usr/src/jasperreports-server/buildomatic/bin/
 ---> Using cache
 ---> 186c37e0c27c
Step 27/36 : COPY ${EXPLODED_INSTALLER_DIRECTORY}/buildomatic/bin/app-server /usr/src/jasperreports-server/buildomatic/bin/app-server/
 ---> Using cache
 ---> c66e642abfc2
Step 28/36 : COPY ${EXPLODED_INSTALLER_DIRECTORY}/buildomatic/bin/groovy /usr/src/jasperreports-server/buildomatic/bin/groovy/
 ---> Using cache
 ---> d451cb00ce8c
Step 29/36 : COPY ${EXPLODED_INSTALLER_DIRECTORY}/buildomatic/conf_source /usr/src/jasperreports-server/buildomatic/conf_source/
 ---> Using cache
 ---> 14f459cff404
Step 30/36 : COPY ${EXPLODED_INSTALLER_DIRECTORY}/buildomatic/target /usr/src/jasperreports-server/buildomatic/target/
COPY failed: stat /var/lib/docker/tmp/docker-builder153074697/resources/jasperreports-server-cp-7.8.0-bin/buildomatic/target: no such file or directory

Dockerfile to change Tomcat, Postgres driver versions:

ARG TOMCAT_BASE_IMAGE=tomcat:9.0.38-jdk11-openjdk
FROM ${TOMCAT_BASE_IMAGE}

ARG DN_HOSTNAME
ARG KS_PASSWORD
ARG JRS_HTTPS_ONLY
ARG HTTP_PORT
ARG HTTPS_PORT
ARG POSTGRES_JDBC_DRIVER_VERSION
ARG JASPERREPORTS_SERVER_VERSION
ARG EXPLODED_INSTALLER_DIRECTORY

ENV PHANTOMJS_VERSION ${PHANTOMJS_VERSION:-2.1.1}
ENV DN_HOSTNAME ${DN_HOSTNAME:-localhost.localdomain}
ENV KS_PASSWORD ${KS_PASSWORD:-changeit}
ENV JRS_HTTPS_ONLY ${JRS_HTTPS_ONLY:-false}
ENV HTTP_PORT ${HTTP_PORT:-8080}
ENV HTTPS_PORT ${HTTPS_PORT:-8443}
ENV POSTGRES_JDBC_DRIVER_VERSION ${POSTGRES_JDBC_DRIVER_VERSION:-42.2.16}
ENV JASPERREPORTS_SERVER_VERSION ${JASPERREPORTS_SERVER_VERSION:-7.8.0}
ENV EXPLODED_INSTALLER_DIRECTORY ${EXPLODED_INSTALLER_DIRECTORY:-resources/jasperreports-server-cp-$JASPERREPORTS_SERVER_VERSION-bin}

Changes to resources/unpackWARInstaller-ce.sh:

#!/bin/bash

JASPERREPORTS_SERVER_VERSION=7.8.0

# The JasperReports Server CE War File Distribution
# For example: TIB_js-jrs-cp_7.5.0_bin.zip

unzip -o -q TIB_js-jrs-cp_${JASPERREPORTS_SERVER_VERSION}_bin.zip -d .
cd jasperreports-server-cp-${JASPERREPORTS_SERVER_VERSION}-bin || exit
unzip -o -q jasperserver.war -d jasperserver

Downloaded files to resources:

phantomjs-2.1.1-linux-x86_64.tar.bz2
postgresql-42.2.16.jar
TIB_js-jrs-cp_7.8.0_bin.zip

wait-for-container-to-exit.sh script is not swarm friendly

With swarms, the container name is dynamic. More so, container_name in the compose file won't work with them. Perhaps a better way to search for a running instance of the WAITFORIT_CONTAINER is to look for an image ancestor. Below is an example where is looks for zero running containers. (I also locked the API version to v1.4 in case future versions of Docker change the default API):

wait_for()
{
  while :
  do

    INSPECT_CONTAINER=`curl --silent --unix-socket /var/run/docker.sock ${API_SERVER}/v1.40/containers/json?filters=%7B%22ancestor%22%3A%5B%22${WAITFORIT_CONTAINER}%22%5D%7D`

    INSPECT_CONTAINER_RESULT=$(jq --raw-output '. | length' <<< "${INSPECT_CONTAINER}")

    # echoerr $INSPECT_CONTAINER_RESULT

    if [[ $INSPECT_CONTAINER_RESULT == "0" ]]; then
      exec "${WAITFORIT_CLI[@]}"
      exit
    else
      sleep $WAITFORIT_TIMEOUT
    fi

  done
}

And it's usage would be something like:

    command: ["/wait-for-container-to-exit.sh", "jasperserver-ce-cmdline:7.8.0", "-t" , "30", "--", "/entrypoint-ce.sh", "run"]

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.