Coder Social home page Coder Social logo

Spring Boot+datastore throws "Type must not be Null" when JsonNode is used as attribute on a Datastore Entity about spring-cloud-gcp HOT 15 CLOSED

jevanio avatar jevanio commented on July 18, 2024
Spring Boot+datastore throws "Type must not be Null" when JsonNode is used as attribute on a Datastore Entity

from spring-cloud-gcp.

Comments (15)

suztomo avatar suztomo commented on July 18, 2024 1

@jevanio Thank you for reporting the issue. Would you add more stacktrace?

image

Memo: Recent GCP client libraries have been built with Jackson 2.17.0 https://github.com/googleapis/sdk-platform-java/blob/ba648ceac869d4fab1a9cbeb40f2e04f69dad4e3/java-shared-dependencies/third-party-dependencies/pom.xml#L32C22-L32C28

@jevanio Do you observe the same problem with Jackson 2.17.0 and spring-cloud-gcp v5.1.2?

from spring-cloud-gcp.

jevanio avatar jevanio commented on July 18, 2024

Hey @suztomo, thanks for your answer
So, I tried upgrading to Jackson 2.17.0 and Spring-cloud-gcp 5.1.2 but the issue persist.

I have seen this happens when the entity contains an attribute of JsonNode :/

Regarding to the stacktrace, I can share the whole debug logs from working version before to upgrade jackson and with jackson 2.17.0. I have compare both logs to see any difference related to datastore but no clue yet what could be happening
jackson-2_13_4.txt
jackson-2_17_0.txt

If you check on this, the error points to a Datastore configuration class
EnableDatastoreRepositoriesConfiguration: Type must not be null
Hope this helpπŸ™

from spring-cloud-gcp.

suztomo avatar suztomo commented on July 18, 2024

Thank you for the stacktrace.

jackson-2_17_0.txt:

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'demoService' defined in file [C:\Users\XXX\IdeaProjects\demo\target\classes\com\example\demo\service\DemoService.class]: Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'demoRepository' defined in com.example.demo.repository.DemoRepository defined in @EnableDatastoreRepositories declared on DatastoreRepositoriesAutoConfigureRegistrar.EnableDatastoreRepositoriesConfiguration: Type must not be null
	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:795) ~[spring-beans-6.1.5.jar:6.1.5]
	at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:237) ~[spring-beans-6.1.5.jar:6.1.5]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1355) ~[spring-beans-6.1.5.jar:6.1.5]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1192) ~[spring-beans-6.1.5.jar:6.1.5]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:562) ~[spring-beans-6.1.5.jar:6.1.5]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) ~[spring-beans-6.1.5.jar:6.1.5]
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) ~[spring-beans-6.1.5.jar:6.1.5]
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.1.5.jar:6.1.5]
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) ~[spring-beans-6.1.5.jar:6.1.5]
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[spring-beans-6.1.5.jar:6.1.5]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:975) ~[spring-beans-6.1.5.jar:6.1.5]
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:962) ~[spring-context-6.1.5.jar:6.1.5]
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:624) ~[spring-context-6.1.5.jar:6.1.5]
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[spring-boot-3.2.4.jar:3.2.4]
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) ~[spring-boot-3.2.4.jar:3.2.4]
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) ~[spring-boot-3.2.4.jar:3.2.4]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:334) ~[spring-boot-3.2.4.jar:3.2.4]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1354) ~[spring-boot-3.2.4.jar:3.2.4]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1343) ~[spring-boot-3.2.4.jar:3.2.4]
	at com.example.demo.DemoApplication.main(DemoApplication.java:10) ~[classes/:na]
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'demoRepository' defined in com.example.demo.repository.DemoRepository defined in @EnableDatastoreRepositories declared on DatastoreRepositoriesAutoConfigureRegistrar.EnableDatastoreRepositoriesConfiguration: Type must not be null
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1786) ~[spring-beans-6.1.5.jar:6.1.5]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:600) ~[spring-beans-6.1.5.jar:6.1.5]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) ~[spring-beans-6.1.5.jar:6.1.5]
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) ~[spring-beans-6.1.5.jar:6.1.5]
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.1.5.jar:6.1.5]
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) ~[spring-beans-6.1.5.jar:6.1.5]
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[spring-beans-6.1.5.jar:6.1.5]
	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:254) ~[spring-beans-6.1.5.jar:6.1.5]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1443) ~[spring-beans-6.1.5.jar:6.1.5]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1353) ~[spring-beans-6.1.5.jar:6.1.5]
	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:904) ~[spring-beans-6.1.5.jar:6.1.5]
	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:782) ~[spring-beans-6.1.5.jar:6.1.5]
	... 19 common frames omitted
Caused by: java.lang.IllegalArgumentException: Type must not be null
	at org.springframework.util.Assert.notNull(Assert.java:172) ~[spring-core-6.1.5.jar:6.1.5]
	at org.springframework.data.util.TypeInformation.of(TypeInformation.java:75) ~[spring-data-commons-3.2.4.jar:3.2.4]
	at org.springframework.data.mapping.context.AbstractMappingContext.getPersistentEntity(AbstractMappingContext.java:205) ~[spring-data-commons-3.2.4.jar:3.2.4]
	at com.google.cloud.spring.data.datastore.core.mapping.DatastorePersistentEntityImpl.addEntityToDiscriminationFamily(DatastorePersistentEntityImpl.java:170) ~[spring-cloud-gcp-data-datastore-5.1.2.jar:5.1.2]
	at com.google.cloud.spring.data.datastore.core.mapping.DatastorePersistentEntityImpl.verify(DatastorePersistentEntityImpl.java:144) ~[spring-cloud-gcp-data-datastore-5.1.2.jar:5.1.2]
	at org.springframework.data.mapping.context.AbstractMappingContext.doAddPersistentEntity(AbstractMappingContext.java:431) ~[spring-data-commons-3.2.4.jar:3.2.4]
	at org.springframework.data.mapping.context.AbstractMappingContext.addPersistentEntity(AbstractMappingContext.java:383) ~[spring-data-commons-3.2.4.jar:3.2.4]
	at org.springframework.data.mapping.context.AbstractMappingContext$PersistentPropertyCreator.lambda$createAndRegisterProperty$3(AbstractMappingContext.java:627) ~[spring-data-commons-3.2.4.jar:3.2.4]
	at java.base/java.lang.Iterable.forEach(Iterable.java:75) ~[na:na]
	at org.springframework.data.mapping.context.AbstractMappingContext$PersistentPropertyCreator.createAndRegisterProperty(AbstractMappingContext.java:624) ~[spring-data-commons-3.2.4.jar:3.2.4]
	at org.springframework.data.mapping.context.AbstractMappingContext$PersistentPropertyCreator.doWith(AbstractMappingContext.java:578) ~[spring-data-commons-3.2.4.jar:3.2.4]
	at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:728) ~[spring-core-6.1.5.jar:6.1.5]
	at org.springframework.data.mapping.context.AbstractMappingContext.doAddPersistentEntity(AbstractMappingContext.java:427) ~[spring-data-commons-3.2.4.jar:3.2.4]
	at org.springframework.data.mapping.context.AbstractMappingContext.addPersistentEntity(AbstractMappingContext.java:383) ~[spring-data-commons-3.2.4.jar:3.2.4]
	at org.springframework.data.mapping.context.AbstractMappingContext.getPersistentEntity(AbstractMappingContext.java:279) ~[spring-data-commons-3.2.4.jar:3.2.4]
	at org.springframework.data.mapping.context.AbstractMappingContext.getPersistentEntity(AbstractMappingContext.java:205) ~[spring-data-commons-3.2.4.jar:3.2.4]
	at com.google.cloud.spring.data.datastore.core.mapping.DatastorePersistentEntityImpl.initializeSubclassEntities(DatastorePersistentEntityImpl.java:259) ~[spring-cloud-gcp-data-datastore-5.1.2.jar:5.1.2]
	at com.google.cloud.spring.data.datastore.core.mapping.DatastorePersistentEntityImpl.verify(DatastorePersistentEntityImpl.java:143) ~[spring-cloud-gcp-data-datastore-5.1.2.jar:5.1.2]
	at org.springframework.data.mapping.context.AbstractMappingContext.doAddPersistentEntity(AbstractMappingContext.java:431) ~[spring-data-commons-3.2.4.jar:3.2.4]
	at org.springframework.data.mapping.context.AbstractMappingContext.addPersistentEntity(AbstractMappingContext.java:383) ~[spring-data-commons-3.2.4.jar:3.2.4]
	at org.springframework.data.mapping.context.AbstractMappingContext$PersistentPropertyCreator.lambda$createAndRegisterProperty$3(AbstractMappingContext.java:627) ~[spring-data-commons-3.2.4.jar:3.2.4]
	at java.base/java.lang.Iterable.forEach(Iterable.java:75) ~[na:na]
	at org.springframework.data.mapping.context.AbstractMappingContext$PersistentPropertyCreator.createAndRegisterProperty(AbstractMappingContext.java:624) ~[spring-data-commons-3.2.4.jar:3.2.4]
	at org.springframework.data.mapping.context.AbstractMappingContext$PersistentPropertyCreator.doWith(AbstractMappingContext.java:578) ~[spring-data-commons-3.2.4.jar:3.2.4]
	at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:728) ~[spring-core-6.1.5.jar:6.1.5]
	at org.springframework.data.mapping.context.AbstractMappingContext.doAddPersistentEntity(AbstractMappingContext.java:427) ~[spring-data-commons-3.2.4.jar:3.2.4]
	at org.springframework.data.mapping.context.AbstractMappingContext.addPersistentEntity(AbstractMappingContext.java:383) ~[spring-data-commons-3.2.4.jar:3.2.4]
	at org.springframework.data.mapping.context.AbstractMappingContext$PersistentPropertyCreator.lambda$createAndRegisterProperty$3(AbstractMappingContext.java:627) ~[spring-data-commons-3.2.4.jar:3.2.4]
	at java.base/java.lang.Iterable.forEach(Iterable.java:75) ~[na:na]
	at org.springframework.data.mapping.context.AbstractMappingContext$PersistentPropertyCreator.createAndRegisterProperty(AbstractMappingContext.java:624) ~[spring-data-commons-3.2.4.jar:3.2.4]
	at org.springframework.data.mapping.context.AbstractMappingContext$PersistentPropertyCreator.doWith(AbstractMappingContext.java:578) ~[spring-data-commons-3.2.4.jar:3.2.4]
	at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:728) ~[spring-core-6.1.5.jar:6.1.5]
	at org.springframework.data.mapping.context.AbstractMappingContext.doAddPersistentEntity(AbstractMappingContext.java:427) ~[spring-data-commons-3.2.4.jar:3.2.4]
	at org.springframework.data.mapping.context.AbstractMappingContext.addPersistentEntity(AbstractMappingContext.java:383) ~[spring-data-commons-3.2.4.jar:3.2.4]
	at org.springframework.data.mapping.context.AbstractMappingContext$PersistentPropertyCreator.lambda$createAndRegisterProperty$3(AbstractMappingContext.java:627) ~[spring-data-commons-3.2.4.jar:3.2.4]
	at java.base/java.lang.Iterable.forEach(Iterable.java:75) ~[na:na]
	at org.springframework.data.mapping.context.AbstractMappingContext$PersistentPropertyCreator.createAndRegisterProperty(AbstractMappingContext.java:624) ~[spring-data-commons-3.2.4.jar:3.2.4]
	at org.springframework.data.mapping.context.AbstractMappingContext$PersistentPropertyCreator.doWith(AbstractMappingContext.java:578) ~[spring-data-commons-3.2.4.jar:3.2.4]
	at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:728) ~[spring-core-6.1.5.jar:6.1.5]
	at org.springframework.data.mapping.context.AbstractMappingContext.doAddPersistentEntity(AbstractMappingContext.java:427) ~[spring-data-commons-3.2.4.jar:3.2.4]
	at org.springframework.data.mapping.context.AbstractMappingContext.addPersistentEntity(AbstractMappingContext.java:383) ~[spring-data-commons-3.2.4.jar:3.2.4]
	at org.springframework.data.mapping.context.AbstractMappingContext.getPersistentEntity(AbstractMappingContext.java:279) ~[spring-data-commons-3.2.4.jar:3.2.4]
	at org.springframework.data.mapping.context.AbstractMappingContext.getPersistentEntity(AbstractMappingContext.java:205) ~[spring-data-commons-3.2.4.jar:3.2.4]
	at com.google.cloud.spring.data.datastore.core.mapping.DatastorePersistentEntityImpl.initializeSubclassEntities(DatastorePersistentEntityImpl.java:259) ~[spring-cloud-gcp-data-datastore-5.1.2.jar:5.1.2]
	at com.google.cloud.spring.data.datastore.core.mapping.DatastorePersistentEntityImpl.verify(DatastorePersistentEntityImpl.java:143) ~[spring-cloud-gcp-data-datastore-5.1.2.jar:5.1.2]
	at org.springframework.data.mapping.context.AbstractMappingContext.doAddPersistentEntity(AbstractMappingContext.java:431) ~[spring-data-commons-3.2.4.jar:3.2.4]
	at org.springframework.data.mapping.context.AbstractMappingContext.addPersistentEntity(AbstractMappingContext.java:383) ~[spring-data-commons-3.2.4.jar:3.2.4]
	at org.springframework.data.mapping.context.AbstractMappingContext.getPersistentEntity(AbstractMappingContext.java:279) ~[spring-data-commons-3.2.4.jar:3.2.4]
	at org.springframework.data.mapping.context.AbstractMappingContext.getPersistentEntity(AbstractMappingContext.java:205) ~[spring-data-commons-3.2.4.jar:3.2.4]
	at com.google.cloud.spring.data.datastore.core.mapping.DatastorePersistentEntityImpl.addEntityToDiscriminationFamily(DatastorePersistentEntityImpl.java:170) ~[spring-cloud-gcp-data-datastore-5.1.2.jar:5.1.2]
	at com.google.cloud.spring.data.datastore.core.mapping.DatastorePersistentEntityImpl.verify(DatastorePersistentEntityImpl.java:144) ~[spring-cloud-gcp-data-datastore-5.1.2.jar:5.1.2]
	at org.springframework.data.mapping.context.AbstractMappingContext.doAddPersistentEntity(AbstractMappingContext.java:431) ~[spring-data-commons-3.2.4.jar:3.2.4]
	at org.springframework.data.mapping.context.AbstractMappingContext.addPersistentEntity(AbstractMappingContext.java:383) ~[spring-data-commons-3.2.4.jar:3.2.4]
	at org.springframework.data.mapping.context.AbstractMappingContext$PersistentPropertyCreator.lambda$createAndRegisterProperty$3(AbstractMappingContext.java:627) ~[spring-data-commons-3.2.4.jar:3.2.4]
	at java.base/java.lang.Iterable.forEach(Iterable.java:75) ~[na:na]
	at org.springframework.data.mapping.context.AbstractMappingContext$PersistentPropertyCreator.createAndRegisterProperty(AbstractMappingContext.java:624) ~[spring-data-commons-3.2.4.jar:3.2.4]
	at org.springframework.data.mapping.context.AbstractMappingContext$PersistentPropertyCreator.doWith(AbstractMappingContext.java:578) ~[spring-data-commons-3.2.4.jar:3.2.4]
	at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:728) ~[spring-core-6.1.5.jar:6.1.5]
	at org.springframework.data.mapping.context.AbstractMappingContext.doAddPersistentEntity(AbstractMappingContext.java:427) ~[spring-data-commons-3.2.4.jar:3.2.4]
	at org.springframework.data.mapping.context.AbstractMappingContext.addPersistentEntity(AbstractMappingContext.java:383) ~[spring-data-commons-3.2.4.jar:3.2.4]
	at org.springframework.data.mapping.context.AbstractMappingContext.getPersistentEntity(AbstractMappingContext.java:279) ~[spring-data-commons-3.2.4.jar:3.2.4]
	at org.springframework.data.mapping.context.AbstractMappingContext.getPersistentEntity(AbstractMappingContext.java:205) ~[spring-data-commons-3.2.4.jar:3.2.4]
	at org.springframework.data.mapping.context.AbstractMappingContext.getPersistentEntity(AbstractMappingContext.java:92) ~[spring-data-commons-3.2.4.jar:3.2.4]
	at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.lambda$afterPropertiesSet$6(RepositoryFactoryBeanSupport.java:282) ~[spring-data-commons-3.2.4.jar:3.2.4]
	at java.base/java.util.Optional.ifPresent(Optional.java:178) ~[na:na]
	at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet(RepositoryFactoryBeanSupport.java:282) ~[spring-data-commons-3.2.4.jar:3.2.4]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1833) ~[spring-beans-6.1.5.jar:6.1.5]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1782) ~[spring-beans-6.1.5.jar:6.1.5]
	... 30 common frames omitted

from spring-cloud-gcp.

meltsufin avatar meltsufin commented on July 18, 2024

JsonNode is not one of the supported types in Spring Data Datastore. So, there must be some conversion going on. What is the actual data type you are using in Datastore? You can try registering your own converter as described in the documentation.

from spring-cloud-gcp.

jevanio avatar jevanio commented on July 18, 2024

@meltsufin Thanks for your comment
Actually, this implementation was working before the upgrade, which makes sense as this JsonNode is on another object which is been store.
I did include an specific converter to convert from/to JsonNode-String but the error persist.
I have updated the project with the converter. Please let me know if there's something missing

from spring-cloud-gcp.

jevanio avatar jevanio commented on July 18, 2024

@suztomo has the stacktrace helped to identify the cause?

from spring-cloud-gcp.

meltsufin avatar meltsufin commented on July 18, 2024

@jevanio What's the last version of Spring Boot / Spring Cloud / Spring Cloud GCP that your project worked with?

from spring-cloud-gcp.

meltsufin avatar meltsufin commented on July 18, 2024

@jevanio If you annotate private JsonNode node with @Transient and create a converter for Pojo, it seems to work.

from spring-cloud-gcp.

meltsufin avatar meltsufin commented on July 18, 2024

@mp911de Do you have any insight into why this might be happening?

from spring-cloud-gcp.

meltsufin avatar meltsufin commented on July 18, 2024

Asked related questions: spring-projects/spring-data-commons#3085

from spring-cloud-gcp.

mp911de avatar mp911de commented on July 18, 2024

DatastorePersistentEntityImpl.addEntityToDiscriminationFamily(DatastorePersistentEntityImpl.java:170) is passing on a null value for the Class argument in MappingContext.getPersistentEntity(…). If JsonNode is considered a store-native type, then you must not call getPersistentEntity(…) for it, instead, CustomConversions.isSimpleType(…) provides whether a type is considered a simple (store-native) one.

from spring-cloud-gcp.

meltsufin avatar meltsufin commented on July 18, 2024

@mp911de This is very helpful because we can fix the problem by checking for null at DatastorePersistentEntityImpl.addEntityToDiscriminationFamily(DatastorePersistentEntityImpl.java:170). However, I'm still not sure how to prevent entities from being created for JsonNode or other convertible types. Should we override CustomConversion.isSimpleType() in our DatastoreCustomConversions class?

from spring-cloud-gcp.

mp911de avatar mp911de commented on July 18, 2024

Should we override CustomConversion.isSimpleType() in our DatastoreCustomConversions class?

You can address this issue by creating a SimpleTypeHolder that defines the types that are considered simple ones. Then, you pass on that SimpleTypeHolder instance to CustomConversion (see Mongo and Cassandra examples from my previous comment).

from spring-cloud-gcp.

meltsufin avatar meltsufin commented on July 18, 2024

I tried that but by the time AbstractMappingContext.shouldCreatePersistentEntityFor() is called, AbstractMappingContext.simpleTypeHolder has the custom types marked as not simple. I might need to dig further.

from spring-cloud-gcp.

jevanio avatar jevanio commented on July 18, 2024

Hey Folks,
As you mention, looks like including the transient help this demo service to start.
Which could be the impact of marking this JsonNode as transient?

from spring-cloud-gcp.

Related Issues (20)

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.