Giter VIP home page Giter VIP logo

cello-v2's Introduction

Build Status

Introduction

This is the repository for Cello v2, the successor of the Cello genetic circuit design software. This repository hosts the core of Cello v2, a command line tool that implements the circuit design routines. If you are looking for the web application, it is hosted at CIDARLAB/Cello-v2-webapp.

Installation

Options

You have a few options to install Cello:

  1. Get the Docker image from Docker hub and run it.
  2. Install the runtime dependencies, download a JAR file from the releases page of this repository, run the JAR file.
  3. Install the developer dependencies, clone the contents of this repository, and build the webapp from source.

The procedure for each option is described in the sections below.

In the future, Cello will be hosted with a GUI on cellocad.org. For now, the original version of Cello remains hosted there. The webapp for Cello-v2 is in development.

(Option 1) Docker

Download and install Docker.

Pull the image:

docker pull cidarlab/cello-dnacompiler:latest

Run the image, replacing fields surrounded by <> with files or directories appropriate for your use case:

docker run --rm -i \
-v <ABSOLUTE_PATH_TO_LOCAL_INPUT_DIRECTORY>:/root/input \
-v <ABSOLUTE_PATH_TO_LOCAL_OUTPUT_DIRECTORY>:/root/output \
-t cidarlab/cello-dnacompiler:latest \
java -classpath /root/app.jar org.cellocad.v2.DNACompiler.runtime.Main \
-inputNetlist /root/input/<VERILOG_FILE_IN_INPUT_DIRECTORY> \
-options /root/input/<OPTIONS_FILE_IN_INPUT_DIRECTORY> \
-userConstraintsFile /root/input/<UCF_IN_INPUT_DIRECTORY> \
-inputSensorFile /root/input/<INPUT_SENSOR_FILE_IN_INPUT_DIRECTORY> \
-outputDeviceFile /root/input/<OUTPUT_DEVICE_FILE_IN_INPUT_DIRECTORY> \
-pythonEnv python \
-outputDir /root/output

See the sample-input directory in this repository for example Verilog files, UCFs, and option files. An example invocation with all fields completed (omitting the options switch, thus using defaults) might be:

docker run --rm -i \
-v /home/foobar/input:/root/input \
-v /home/foobar/output:/root/output \
-t cidarlab/cello-dnacompiler:latest \
java -classpath /root/app.jar org.cellocad.v2.DNACompiler.runtime.Main \
-inputNetlist /root/input/and.v \
-userConstraintsFile /root/input/Eco1C1G1T1.UCF.json \
-inputSensorFile /root/input/Eco1C1G1T1.input.json \
-outputDeviceFile /root/input/Eco1C1G1T1.output.json \
-pythonEnv python \
-outputDir /root/output

After execution, check the output directory for generated files.

(Option 2) Prepackaged JAR file

Runtime dependencies

  • Java JRE 8 (Oracle JRE) or Java JDK 8 (see above)
  • Python 3
  • Yosys
  • Graphviz
    • Linux: check your package manager
    • Mac OSX: via Homebrew: brew install graphviz
    • Windows:
      • download and install the latest executable package, e.g. graphviz-2.38.msi
      • add path to dot.exe, e.g. C:\Program Files (x86)\Graphvix2.38\bin, to %Path%
  • dnaplotlib
    • pip install dnaplotlib
  • (Optional) pycello-v2
    • To support experimental feature: RNAseq profile generation.
    • pip install git+https://github.com/CIDARLAB/pycello-v2
  • The latest JAR from the releases page of this repository, or the latest snapshot from Sonatype.

Execution

Replace fields surrounded by <> with files or directories appropriate for your use case:

java -classpath <JAR_FILE> org.cellocad.v2.DNACompiler.runtime.Main \
-inputNetlist <PATH_TO_VERILOG_FILE> \
-options <PATH_TO_OPTIONS_FILE> \
-userConstraintsFile <PATH_TO_UCF> \
-inputSensorFile <PATH_TO_INPUT_SENSOR_FILE> \
-outputDeviceFile <PATH_TO_OUTPUT_DEVICE_FILE> \
-pythonEnv <ABSOLUTE_PATH_TO_PYTHON_OR_NAME_OF_EXECUTABLE_IN_ENVIRONMENT_PATH> \
-outputDir <PATH_TO_OUTPUT_DIRECTORY>

See the sample-input directory in this repository for example Verilog files, UCFs, and option files. An example invocation with all fields completed (omitting the options switch, thus using defaults) might be:

java -classpath cello-dnacompiler-2.0.0-SNAPSHOT-jar-with-dependencies.jar org.cellocad.v2.DNACompiler.runtime.Main \
-inputNetlist and.v \
-userConstraintsFile Eco1C1G1T1.UCF.json \
-inputSensorFile Eco1C1G1T1.input.json \
-outputDeviceFile Eco1C1G1T1.output.json \
-pythonEnv python \
-outputDir /home/cello_user/output

(Option 3) Building from source

Runtime dependencies

  • Java JDK 8 (Oracle, OpenJDK)
  • All other dependencies from (Option 2) above.
  1. Clone the repository:

     git clone --recurse-submodules https://github.com/CIDARLAB/Cello-v2.git
    
  2. Build & package:

     cd Cello-v2/cello
     mvn clean package
    

Example execution

First go to the target directory:

cd cello-dnacompiler/target

Then proceed as in the Execution section from (Option 2) above.

Development

Code style

This project uses the Maven Checkstyle Plugin with a slightly relaxed version of google_checks.xml to enforce code style. If the code does not match the style requirements, maven will fail during the validate phase. If using Eclipse, you can use the Eclipse Checkstyle Plugin to show warnings when code does not meet the style requirements. You can also automatically format written code with the google-java-format, which can be used from the command line, or as a plugin in Eclipse or JetBrains IDEs.

Deployment

Sonatype OSS

  • mvn clean deploy -Pdeploy
  • See configuration in the parent pom.xml.

Docker Hub

  • Docker images are built and deployed automatically via Travis CI. See .travis.yml.

  • Manual:

    mvn docker:build
    mvn docker:push
    

cello-v2's People

Contributors

tim-tx 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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

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

cello-v2's Issues

Sequential logic in Cello-v2?

I am trying to design a simple sequential logic circuit, and tried with a flip-flop. It gave an Java segfault when I try to connect the two NOR gates to each other. I have created a github repo here to demo the problem : https://github.com/sness23/cello-sequential

The Java stacktrace is:
12. Generating Graphviz representation of design.
Writing dot description to `/root/output/subleq_yosys.dot'.
Dumping module and_gate to page 1.
Exec: dot -Tpdf '/root/output/subleq_yosys.dot' > '/root/output/subleq_yosys.pdf.new' && mv '/root/output/subleq_yosys.pdf.new' '/root/output/subleq_yosys.pdf'

  1. Executing EDIF backend.

  2. Executing JSON backend.

End of script. Logfile hash: bfb12311a5
CPU: user 0.01s system 0.00s, MEM: 19.67 MB total, 10.30 MB resident
Yosys 0.9 (git sha1 1979e0b)
Time spent: 47% 3x read_verilog (0 sec), 11% 4x opt_expr (0 sec), ...

15:56:11.297 [main] INFO Yosys -
Exception in thread "main" java.lang.NullPointerException
at org.cellocad.BU.subcircuit.subCircuitEnumerator.getSubCircuitInputs(subCircuitEnumerator.java:81)
at org.cellocad.BU.subcircuit.subCircuitEnumerator.getSubCircuitInputs(subCircuitEnumerator.java:87)
at org.cellocad.BU.subcircuit.subCircuitEnumerator.getSubNetlistDetailsGraph(subCircuitEnumerator.java:258)
at org.cellocad.BU.subcircuit.subCircuitSwap.nodeRewrite(subCircuitSwap.java:105)
at org.cellocad.BU.subcircuit.subCircuitSwap.implementSwap(subCircuitSwap.java:71)
at org.cellocad.BU.netsynth.NetSynth.runSubCircSwap(NetSynth.java:759)
at org.cellocad.BU.netsynth.NetSynth.getNetlistCode(NetSynth.java:617)
at org.cellocad.BU.netsynth.NetSynth.getNetlist(NetSynth.java:564)
at org.cellocad.BU.netsynth.NetSynth.runNetSynth(NetSynth.java:515)
at org.cellocad.BU.netsynth.NetSynth.runNetSynth(NetSynth.java:501)
at org.cellocad.v2.logicSynthesis.algorithm.Yosys.NetSynthUtils.getNetSynthNetlist(NetSynthUtils.java:295)
at org.cellocad.v2.logicSynthesis.algorithm.Yosys.Yosys.postprocessing(Yosys.java:282)
at org.cellocad.v2.common.algorithm.Algorithm.execute(Algorithm.java:90)
at org.cellocad.v2.common.runtime.RuntimeObject.executeAlgo(RuntimeObject.java:375)
at org.cellocad.v2.logicSynthesis.runtime.LSRuntimeObject.runAlgo(LSRuntimeObject.java:182)
at org.cellocad.v2.common.runtime.RuntimeObject.execute(RuntimeObject.java:403)
at org.cellocad.v2.DNACompiler.runtime.Main.main(Main.java:169)

Read available inputs from input list, not device structure

E.g. for the gate below, use in1 first, then in2.

{
    "collection": "structures",
    "name": "S4_SrpR_structure",
    "inputs": [
        {
            "name": "in1",
            "part_type": "promoter"
        },
        {
            "name": "in2",
            "part_type": "promoter"
        }
    ],
    "outputs": [
        "pSrpR"
    ],
    "devices": [
        {
            "name": "S4_SrpR",
            "components": [
                "#in2",
                "#in1",
                "S4_SrpR_cassette"
            ]
        },
        {
            "name": "S4_SrpR_cassette",
            "components": [
                "RiboJ10",
                "S4",
                "SrpR",
                "ECK120029600"
            ]
        }
    ]
}

cello-v2: snakemake pipeline

Dear Cello-v2 team,

Examine your awesome tool was the aim of one of my master's program seminar.
I would like to share my pipeline (https://github.com/mariafiruleva/cello2) with you: it easily works with installation via option 2 (using jar file), and I hope it can be helpful for your users since pipeline execution is really a user-friendly and scalable procedure.

Best wishes,
Maria

Fix Broken Tests

Upon running mvn clean package I get the following tests as failures and have to use the flag -DskipTests to skip tests.

 org.cellocad.v2.common.file.dot.utils.DotUtilsTest
  org.cellocad.v2.common.target.data.data.LookupTableFunctionTest
  org.cellocad.v2.common.target.data.data.UnivariateLookupTableFunctionTest
  org.cellocad.v2.common.target.data.TargetDataTest
  org.cellocad.v2.common.target.data.TargetDataInstanceTest

 T E S T S
-------------------------------------------------------
Running org.cellocad.v2.common.file.dot.utils.DotUtilsTest
java.io.IOException: Cannot run program "dot": error=2, No such file or directory
        at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
        at java.lang.Runtime.exec(Runtime.java:620)
        at java.lang.Runtime.exec(Runtime.java:485)
        at org.cellocad.v2.common.ExecCommand.<init>(ExecCommand.java:146)
        at org.cellocad.v2.common.Utils.executeAndWaitForCommand(Utils.java:288)
        at org.cellocad.v2.common.file.dot.utils.DotUtils.dot2any(DotUtils.java:56)
        at org.cellocad.v2.common.file.dot.utils.DotUtils.dot2pdf(DotUtils.java:73)
        at org.cellocad.v2.common.file.dot.utils.DotUtilsTest.test(DotUtilsTest.java:48)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
        at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
        at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
        at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
        at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
        at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
        at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
        at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
        at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
        at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
        at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:252)
        at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141)
        at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189)
        at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165)
        at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85)
        at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115)
        at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75)
Caused by: java.io.IOException: error=2, No such file or directory
        at java.lang.UNIXProcess.forkAndExec(Native Method)
        at java.lang.UNIXProcess.<init>(UNIXProcess.java:247)
        at java.lang.ProcessImpl.start(ProcessImpl.java:134)
        at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
        ... 36 more
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.411 sec <<< FAILURE!
test(org.cellocad.v2.common.file.dot.utils.DotUtilsTest)  Time elapsed: 0.372 sec  <<< ERROR!
java.lang.NullPointerException
        at org.cellocad.v2.common.ExecCommand.getError(ExecCommand.java:180)
        at org.cellocad.v2.common.file.dot.utils.DotUtils.dot2any(DotUtils.java:57)
        at org.cellocad.v2.common.file.dot.utils.DotUtils.dot2pdf(DotUtils.java:73)
        at org.cellocad.v2.common.file.dot.utils.DotUtilsTest.test(DotUtilsTest.java:48)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
        at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
        at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
        at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
        at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
        at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
        at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
        at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
        at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
        at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
        at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:252)
        at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141)
        at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189)
        at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165)
        at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85)
        at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115)
        at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75)

Running org.cellocad.v2.common.target.data.data.CircuitRulesTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.442 sec
Running org.cellocad.v2.common.target.data.data.LookupTableFunctionTest
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.015 sec <<< FAILURE!
org.cellocad.v2.common.target.data.data.LookupTableFunctionTest  Time elapsed: 0.015 sec  <<< ERROR!
java.lang.NullPointerException
        at org.cellocad.v2.common.Utils.getResourceAsString(Utils.java:103)
        at org.cellocad.v2.common.target.data.data.LookupTableFunctionTest.init(LookupTableFunctionTest.java:63)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
        at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
        at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
        at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:27)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
        at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:252)
        at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141)
        at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189)
        at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165)
        at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85)
        at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115)
        at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75)

Running org.cellocad.v2.common.target.data.data.UnivariateLookupTableFunctionTest
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.002 sec <<< FAILURE!
org.cellocad.v2.common.target.data.data.UnivariateLookupTableFunctionTest  Time elapsed: 0.001 sec  <<< ERROR!
java.lang.NullPointerException
        at org.cellocad.v2.common.Utils.getResourceAsString(Utils.java:103)
        at org.cellocad.v2.common.target.data.data.UnivariateLookupTableFunctionTest.init(UnivariateLookupTableFunctionTest.java:63)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
        at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
        at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
        at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:27)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
        at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:252)
        at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141)
        at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189)
        at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165)
        at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85)
        at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115)
        at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75)

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.