Giter Club home page Giter Club logo

spring-boot-starter's Introduction

spring-boot-starter

本示例项目基于Java SDK + Gradle + SpringBoot方式来调用智能合约。

前置条件

搭建FISCO BCOS 单群组区块链(Air版本),具体步骤参考这里

下载spring-boot-starter、证书拷贝

git clone https://github.com/FISCO-BCOS/spring-boot-starter.git

进入spring-boot-starter项目

cd spring-boot-starter

请将证书拷贝到src/main/resources/conf目录下。

配置连接节点

请修改application.properties,该文件包含如下信息:

### Java sdk configuration
cryptoMaterial.certPath=conf
network.peers[0]=127.0.0.1:20200
        #network.peers[1]=127.0.0.1:20201

        ### System configuration
system.groupId=group0
system.hexPrivateKey=

        ### Springboot configuration
server.port=8080

其中:

  • Java SDK configuration配置部分与 Java SDK一致。就本例而言,用户需要:

    • 请将network.peers更换成实际的链节点监听地址。
    • cryptoMaterial.certPath设为conf
  • System configuration配置部分,需要配置:

    • system.hexPrivateKey是16进制的私钥明文,可运行Demos.java中的keyGeneration生成(文件路径:src/test/java/org/example/demo/Demos.java)。该配置允许为空,此时系统会随机生成一个私钥。
    • system.groupId设为目标群组,默认为group0

Demos.java 代码如下:(以项目最新文件为准

package org.example.demo;

import java.util.Arrays;
import org.example.demo.constants.ContractConstants;
import org.fisco.bcos.sdk.client.Client;
import org.fisco.bcos.sdk.crypto.keypair.CryptoKeyPair;
import org.fisco.bcos.sdk.crypto.keypair.ECDSAKeyPair;
import org.fisco.bcos.sdk.crypto.keypair.SM2KeyPair;
import org.fisco.bcos.sdk.model.TransactionReceipt;
import org.fisco.bcos.sdk.transaction.manager.AssembleTransactionProcessor;
import org.fisco.bcos.sdk.transaction.manager.TransactionProcessorFactory;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@SpringBootTest
@RunWith(SpringRunner.class)
public class Demos {

  @Autowired private Client client;

  @Test
  public void keyGeneration() throws Exception {
    // ECDSA key generation
    CryptoKeyPair ecdsaKeyPair = new ECDSAKeyPair().generateKeyPair();
    System.out.println("ecdsa private key :" + ecdsaKeyPair.getHexPrivateKey());
    System.out.println("ecdsa public key :" + ecdsaKeyPair.getHexPublicKey());
    System.out.println("ecdsa address :" + ecdsaKeyPair.getAddress());
    // SM2 key generation
    CryptoKeyPair sm2KeyPair = new SM2KeyPair().generateKeyPair();
    System.out.println("sm2 private key :" + sm2KeyPair.getHexPrivateKey());
    System.out.println("sm2 public key :" + sm2KeyPair.getHexPublicKey());
    System.out.println("sm2 address :" + sm2KeyPair.getAddress());
  }

  @Test
  public void deploy() throws Exception {
    AssembleTransactionProcessor txProcessor =
            TransactionProcessorFactory.createAssembleTransactionProcessor(
                    client, client.getCryptoSuite().getCryptoKeyPair());
    String abi = ContractConstants.HelloWorldAbi;
    String bin = ContractConstants.HelloWorldBinary;
    TransactionReceipt receipt =
            txProcessor.deployAndGetResponse(abi, bin, Arrays.asList()).getTransactionReceipt();
    if (receipt.isStatusOK()) {
      System.out.println("Contract Address:" + receipt.getContractAddress());
    } else {
      System.out.println("Status code:" + receipt.getStatus() + "-" + receipt.getStatusMsg());
    }
  }
}

编译和运行

您可以在idea内直接运行,也可以编译成可执行jar包后运行。以编译jar包方式为例:

cd spring-boot-starter
bash gradlew bootJar
cd dist

会在dist目录生成spring-boot-starter-exec.jar,可执行此jar包:

java -jar spring-boot-starter-exec.jar

随后,即可访问相关接口。

set示例:

curl http://127.0.0.1:8080/hello/set?n=hello

返回示例(表示交易哈希):

0x1c8b283daef12b38632e8a6b8fe4d798e053feb5128d9eaf2be77c324645763b

get示例:

curl http://127.0.0.1:8080/hello/get

返回示例:

["hello"]

加入我们的社区

FISCO BCOS开源社区是国内活跃的开源社区,社区长期为机构和个人开发者提供各类支持与帮助。已有来自各行业的数千名技术爱好者在研究和使用FISCO BCOS。如您对FISCO BCOS开源技术及应用感兴趣,欢迎加入社区获得更多支持与帮助。

相关链接

spring-boot-starter's People

Contributors

arc0035 avatar bxq2011hust avatar chaychen2005 avatar cyjseagull avatar dalaocu avatar fqliao avatar handsometea avatar jimmyshi22 avatar kyonray avatar yanyanho avatar ywy2090 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  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

spring-boot-starter's Issues

提示:YML配置字符串应尽量使用双引号

虽然YAML可以对字符串值不用引号,但是SpringBoot的YML解析器会把纯数字的字符串解析成数字后转成该数字的字符串,比如 application.yml 中的 password,如果给值 0123456,会按8进制解析成字符串 42798,如果是 0x123456 会按16进制解析为字符串 1193046,造成取得值与实际值不符。因此建议在YML文件字符串类型的都加上双引号,以免造成很难发觉的错误。

怎样根据交易哈希查询交易详情和n的明文值呢?

set示例:

curl http://127.0.0.1:8080/hello/set?n=hello
返回示例(表示交易哈希):

0x1c8b283daef12b38632e8a6b8fe4d798e053feb5128d9eaf2be77c324645763b
get示例:

curl http://127.0.0.1:8080/hello/get
返回示例:

["hello"]

这个hello好像是最后一次交易发送的值,如果要获取
0x1c8b283daef12b38632e8a6b8fe4d798e053feb5128d9eaf2be77c324645763b这个哈希的交易回执和 n=hello的明文信息,应该怎么写呢?

编译项目时出错

AILURE: Build failed with an exception.

  • What went wrong:
    Execution failed for task ':compileJava'.

Could not resolve all files for configuration ':compileClasspath'.
Could not resolve org.ethereum:solcJ-all:0.4.25.
Required by:
project : > org.fisco-bcos:web3sdk:2.5.0
> Could not resolve org.ethereum:solcJ-all:0.4.25.
> Could not get resource 'https://dl.bintray.com/ethereum/maven/org/ethereum/solcJ-all/0.4.25/solcJ-all-0.4.25.pom'.
> Could not GET 'https://dl.bintray.com/ethereum/maven/org/ethereum/solcJ-all/0.4.25/solcJ-all-0.4.25.pom'. Received status code 403 from server: Forbidden

启动项目报错handshake failed

问题描述

我按照readme里面的指引,首先复制了sdk的三个证书文件到resource目录,然后修改了application.yml配置

启动项目报handshake failed错误,message: not an SSL/TLS record

image

版本信息

fisco 2.4.0
国密版

重现步骤

** step1: 部署链,使用sdk和链交互**
全过程步骤记录

step2: 配置示例springboot sdk项目
克隆本项目,并将控制台的证书文件拷贝到resource文件夹

image

修改application.yml配置

encrypt-type: # 0:standard, 1:guomi
  encrypt-type: 1

group-channel-connections-config:
  caCert: classpath:ca.crt
  sslCert: classpath:sdk.crt
  sslKey: classpath:sdk.key
  all-channel-connections:
    - group-id: 1 #group ID
      connections-str:
        - 192.168.10.239:9025 # node listen_ip:channel_listen_port
    - group-id: 2
      connections-str:
        - 192.168.10.239:9026 # node listen_ip:channel_listen_port
    - group-id: 3
      connections-str:
        - 192.168.10.239:9027 # node listen_ip:channel_listen_port

channel-service:
  group-id: 1 # The specified group to which the SDK connects
  agency-name: agencyB # agency name

accounts:
  pem-file: 0xcdcce60801c0a2e6bb534322c32ae528b9dec8d2.pem
  p12-file: 0x98333491efac02f8ce109b0c499074d47e7779a6.p12
  password: 123456

其中192.168.10.239:9025,9026,9027就是三个群组节点的channel_listen_port

另外多问一句:accounts是干嘛用的?

step3: 启动项目,报错
handshake failed错误,message: not an SSL/TLS record

详细错误日志

ContractTest测试跑不过,报错The execution of the contract rolled back.

版本:国密2.4.0

使用console交互没问题

[group:1]> deploy HelloWorld
contract address: 0x4375eddc0500ef67d242843c2f10744135fa6297

[group:1]> call HelloWorld 0x4375eddc0500ef67d242843c2f10744135fa6297 set "hi"
transaction hash: 0x351afea4c84d99e5f514cdf1f4568ca6df18fef21c2cc22bf2a73de9421ac7f1

[group:1]> call HelloWorld 0x4375eddc0500ef67d242843c2f10744135fa6297 get
hi

使用web3j跑测试ContractTest报错

The execution of the contract rolled back.
org.fisco.bcos.web3j.tx.exceptions.ContractCallException: The execution of the contract rolled back.

在报错信息之前还有一个信息,说明合约部署是没问题的,所以sdk是可以连接区块链的,连接应该没有问题

HelloWorld address is: 0xc48a6d8a3c38f256be2c238f1f8c221fba1e2fb5
2020-06-09 17:35:57,903 [nioEventLoopGroup-2-1] INFO  [org.fisco.bcos.channel.client.Service] Service.java:1388 - Receive block notify: {"blockNumber":5,"groupID":1}

备注:
在applicaton.yml中已经设置了使用国密

encrypt-type: # 0:standard, 1:guomi
  encrypt-type: 1

FISCO-BCOS2.5后,EncryptType注入问题

区块链节点升级到2.5版本后,如采用国密SSL连接配置时,启动springboot工程汇报如下错误:
javax.net.ssl.SSLException: Failed to initialize the SSLContext: null

查看了下代码:
@Autowired private EncryptType encryptType;

原来在com.dcits.tbchain.base.autoconfigure.AccountConfig下注入的encryptType,没有起作用,导致后面报错

将该注入调整到com.dcits.tbchain.base.autoconfigure.ServiceConfig后,问题解决。

请验证此处是否确实有问题,还是我这边环境的个别现象

运行 deployAndCallHelloWorld 报错

java.lang.RuntimeException: org.fisco.bcos.web3j.protocol.exceptions.MessageDecodingException: {"error":{"code":-32601,"message":"METHOD_NOT_FOUND: The method being requested is not available on this server"},"id":1,"jsonrpc":"2.0"}

at org.fisco.bcos.web3j.tx.Contract.deploy(Contract.java:363)
at org.fisco.bcos.web3j.tx.Contract.lambda$deployRemoteCall$6(Contract.java:429)
at org.fisco.bcos.web3j.protocol.core.RemoteCall.send(RemoteCall.java:31)
at org.fisco.bcos.ContractTest.deployAndCallHelloWorld(ContractTest.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:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86)
at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:252)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)

Caused by: org.fisco.bcos.web3j.protocol.exceptions.MessageDecodingException: {"error":{"code":-32601,"message":"METHOD_NOT_FOUND: The method being requested is not available on this server"},"id":1,"jsonrpc":"2.0"}

at org.fisco.bcos.web3j.protocol.channel.ChannelEthereumService.send(ChannelEthereumService.java:67)
at org.fisco.bcos.web3j.protocol.core.Request.send(Request.java:96)
at org.fisco.bcos.web3j.tx.RawTransactionManager.signAndSend(RawTransactionManager.java:128)
at org.fisco.bcos.web3j.tx.RawTransactionManager.sendTransaction(RawTransactionManager.java:95)
at org.fisco.bcos.web3j.tx.TransactionManager.executeTransaction(TransactionManager.java:53)
at org.fisco.bcos.web3j.tx.ManagedTransaction.send(ManagedTransaction.java:45)
at org.fisco.bcos.web3j.tx.Contract.executeTransaction(Contract.java:290)
at org.fisco.bcos.web3j.tx.Contract.create(Contract.java:333)
at org.fisco.bcos.web3j.tx.Contract.deploy(Contract.java:359)
... 33 more

配置好以后 运行tast报错如下,请问什么原因。

java.lang.IllegalStateException: Failed to load ApplicationContext

at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:83)
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:117)
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83)
at org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener.prepareTestInstance(SpringBootDependencyInjectionTestExecutionListener.java:44)
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:230)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:228)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:287)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:289)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:247)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'getWeb3j' defined in org.fisco.bcos.Application: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.fisco.bcos.web3j.protocol.Web3j]: Factory method 'getWeb3j' threw exception; nested exception is java.lang.Exception: Init ChannelService fail!Please Refer To Link Below:https://github.com/FISCO-BCOS/web3sdk/wiki/web3sdk-debug
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:599)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1181)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1075)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:312)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:308)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:867)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:543)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:303)
at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:121)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
... 25 more
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.fisco.bcos.web3j.protocol.Web3j]: Factory method 'getWeb3j' threw exception; nested exception is java.lang.Exception: Init ChannelService fail!Please Refer To Link Below:https://github.com/FISCO-BCOS/web3sdk/wiki/web3sdk-debug
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:189)
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588)
... 42 more
Caused by: java.lang.Exception: Init ChannelService fail!Please Refer To Link Below:https://github.com/FISCO-BCOS/web3sdk/wiki/web3sdk-debug
at org.fisco.bcos.channel.client.Service.run(Service.java:139)
at org.fisco.bcos.Application.getWeb3j(Application.java:23)
at org.fisco.bcos.Application$$EnhancerBySpringCGLIB$$340d8146.CGLIB$getWeb3j$0()
at org.fisco.bcos.Application$$EnhancerBySpringCGLIB$$340d8146$$FastClassBySpringCGLIB$$8edda586.invoke()
at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:358)
at org.fisco.bcos.Application$$EnhancerBySpringCGLIB$$340d8146.getWeb3j()
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.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162)
... 43 more

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.