Coder Social home page Coder Social logo

weso / rdfshape-api Goto Github PK

View Code? Open in Web Editor NEW
35.0 8.0 10.0 15.66 MB

API for validating and transforming RDF, ShEx, SHACL and more.

Home Page: https://www.weso.es/rdfshape-api/

License: MIT License

Scala 97.38% Dockerfile 0.40% JavaScript 1.87% CSS 0.35%
scala shex shacl rdf-validator rdf-library rdf turtle docusaurus mdoc

rdfshape-api's Issues

Parsing Exception

I have deployed play (2.3.1 and 2.3.3) and RDFShapes (Commit 96ad5c9) on my own machine.

The interface successfully runs. However, when I try to validate any documents, I get the following exception:

Error parsing RDF with syntax TURTLE: Exception :Illegal hexadecimal escape sequence near index 43
([a-zA-ZÀ-ÖØ-öø-˿Ͱ-ͽͿ-῿‌-‍⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�\x{10000}-\x{EFFFF}]((([a-zA-ZÀ-ÖØ-öø-˿Ͱ-ͽͿ-῿‌-‍⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�\x{10000}-\x{EFFFF}]|_|\-|[0-9]|·|[̀-ͯ]|[‿-⁀]|\.)*([a-zA-ZÀ-ÖØ-öø-˿Ͱ-ͽͿ-῿‌-‍⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�\x{10000}-\x{EFFFF}]|_|\-|[0-9]|·|[̀-ͯ]|[‿-⁀]))?))
                                           ^

Using the specific example of

prefix dctypes: <http://purl.org/dc/dcmitype/>
prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
prefix : <http://example.org/>
prefix prov: <http://www.w3.org/ns/prov#>

:dataset a dctypes:Dataset, prov:Entity .

and the ShEx

<SummaryShape> { 
     rdf:type (dctypes:Dataset)
   , rdf:type . * 
} 

this error corresponds with the first space character (URL encoded as +).

Is there something up with the URL encoding/decoding?

Support for other RDF/XML syntax

Add support for RDF/XML syntax. It should not be difficult...in fact, it may only need to change the RDF reader...and to add options to the RDF pane

Reflow code boxes in Shex page

In order to validate RDF you need the RDF, the Shex and the Shape maps. Right now the UI is designed such that only the RDF and the Shex is at first sight and you need to scroll in order to fix the mappings and to click the validate button.

That creates an unpleasant UX experience because of all the extra gimmicks you need to do in order to use the tool.

Maybe rearranging boxes in a single line and having the validate button at hand could help to alleviate this problem.

Validate value types

The parser does not ensure that the values assigned match their types.

For example the following is parsed as valid while "hello" is clearly not an xsd:date.

PREFIX dct: <http://purl.org/dc/terms/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>

<example> dct:created "hello"^^xsd:date.

See http://goo.gl/fPAxug for a working example

Add support for shorter permalinks

Right now the permalinks generated by the client are to verbose to remember or share. We should:
1 - Connect the server back-end to a URL shortening service to give the client readable links.
2 - Improve the client's usability (like giving the users the ability to copy the permalinks to clipboard, etc.)

Display line/col of error nodes after validation

The new implementation of ShEx-s reports information about the position of the node that has failed in the JSON API information object.

This position can be used to display in the RDF editor the nodes that have failed.

It may require to adapt YaTE's code to allow this option although it could also be done from the external window that shows the editor highlighting the position.

A similar option will be added to ShEx so we could also point to the shapes that have failed so it would also be interesting to check if it is possible to add this option to YASHE tool.

Add options in RDF pane

Add more options to the RDF pane. For example: type of parser (Wesin vs Jena), syntax (RDF/XML, JSON-LD, Turtle, N-Triples,...)

Repair strange error with uploaded application in Heroku

When the application is uploaded in Heroku, it gives an error:
Failure: URI scheme is not "file"

with the URI: https://raw.githubusercontent.com/chemaar/vaskos/master/trunk/vaskos/src/main/resources/skos/mountain-bike-simple.ttl

If the content is written in the input box, the message is:

Failure: Illegal hexadecimal escape sequence near index 43

(a-zA-ZÀ-ÖØ-öø-˿Ͱ-ͽͿ-῿‌-‍⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�\x{10000}-\x{EFFFF})

Support for https

Change the server to support https.

I think we need to add HSTS middleware.

One doubt I have is how to automatically translate requests to http://rdfshape.weso.es to https://rdfshape.weso.es...is there a way to do automatically do that or should we do it by hand adding support for both?

/validate API call return 404 on Heroku

This might not be applicable if the Heroku server is non-stable, however it appears that /validate calls return 404 - Not Found there.

Example with data:

curl 'http://shaclex.herokuapp.com/api/validate?data=%3Cgenid-c7a50d6e828f4595a195f9c67304f6d2-0AE87CB066C8D9CD43117E0C5A3090F0%3E%20a%20%3Chttp%3A%2F%2Fschema.org%2FDataset%3E%3B%0A%20%20%3Chttp%3A%2F%2Fschema.org%2Fdescription%3E%20%22The%20GeneChip%C2%AE%20Drosophila%20Genome%20Array%20is%20a%20microarray%20tool%20for%20studying%20expression%20of%20Drosophila%20melanogaster%20transcripts.%22%3B%0A%20%20%3Chttp%3A%2F%2Fschema.org%2Fidentifier%3E%20%22http%3A%2F%2Fwww.affymetrix.com%2Fproducts%2Farrays%2Fspecific%2Ffly.affx%22%3B%0A%20%20%3Chttp%3A%2F%2Fschema.org%2Fname%3E%20%22Affymetrix%20array%3A%20GeneChip%20Drosophila%20Genome%202.0%20Array%22%3B%0A%20%20%3Chttp%3A%2F%2Fschema.org%2Furl%3E%20%3Chttps%3A%2F%2Fwww.flymine.org%2Fflymine%2Fdataset%3E%20.%0A&dataFormat=turtle&schema=PREFIX%20schema%3A%20%3Chttp%3A%2F%2Fschema.org%2F%3E%20%0A%20%20%20%20PREFIX%20rdf%3A%20%3Chttp%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%3E%20%0A%20%20%20%20PREFIX%20rdfs%3A%20%3Chttp%3A%2F%2Fwww.w3.org%2F2000%2F01%2Frdf-schema%23%3E%20%0A%20%20%20%20PREFIX%20xsd%3A%20%3Chttp%3A%2F%2Fwww.w3.org%2F2001%2FXMLSchema%23%3E%20%0A%20%20%20%20%3CURL%3E%0A%20%20%20%20%20%20xsd%3Astring%20OR%20IRI%0A%0A%0Astart%20%3D%20%40%3CDatasetMinimum%3E%0A%20%20%20%0A%3CDatasetMinimum%3E%20%7B%0A%20%20rdf%3Atype%20%5Bschema%3ADataset%5D%20%3B%0A%20%20schema%3Adescription%20xsd%3Astring%20%20%3B%0A%20%20schema%3Aidentifier%20xsd%3Astring%20OR%20%40%3CURL%3E%20OR%20%7Ba%20%5Bschema%3APropertyValue%5D%7D%20OR%20IRI%20%2B%20%3B%0A%20%20schema%3Akeywords%20xsd%3Astring%20%2B%20%3B%0A%20%20schema%3Aname%20xsd%3Astring%20%20%3B%0A%20%20schema%3Aurl%20%40%3CURL%3E%20%20%3B%0A%7D%0A%0A%3CDatasetRecommended%3E%20%7B%0A%20%20rdf%3Atype%20%5Bschema%3ADataset%5D%20%3B%0A%20%20schema%3Acitation%20xsd%3Astring%20OR%20%7Ba%20%5Bschema%3ACreativeWork%5D%7D%20OR%20IRI%20%2A%20%3B%0A%20%20schema%3Acreator%20%20%40%3COrganizationOrPerson%3E%20OR%20IRI%20%2A%20%3B%0A%20%20schema%3Adistribution%20%20%7Ba%20%5Bschema%3ADataDownload%5D%7D%20OR%20IRI%20%3F%20%3B%0A%20%20schema%3AincludedInDataCatalog%20%20%7Ba%20%5Bschema%3ADataCatalog%5D%7D%20OR%20IRI%20%2A%20%3B%0A%20%20schema%3Alicense%20%40%3CURL%3E%20OR%20%7Ba%20%5Bschema%3ACreativeWork%5D%7D%20OR%20IRI%20%3F%20%3B%0A%20%20schema%3AmeasurementTechnique%20xsd%3Astring%20OR%20%40%3CURL%3E%20%2A%20%3B%0A%20%20schema%3AvariableMeasured%20xsd%3Astring%20OR%20%7Ba%20%5Bschema%3APropertyValue%5D%7D%20OR%20IRI%20%2A%20%3B%0A%20%20schema%3Aversion%20xsd%3Adouble%20OR%20xsd%3Astring%20%3F%20%3B%0A%7D%0A%0A%3CDatasetOptional%3E%20%7B%0A%20%20rdf%3Atype%20%5Bschema%3ADataset%5D%20%3B%0A%7D%0A%0A%3COrganizationOrPerson%3E%7B%0A%20%20rdf%3Atype%20%5B%20schema%3AOrganization%20schema%3APerson%5D%0A%7D&schemaFormat=ShExC&shape-map=%3Cgenid-c7a50d6e828f4595a195f9c67304f6d2-0AE87CB066C8D9CD43117E0C5A3090F0%3E%40%3CDatasetMinimum%3E&shapeMapFormat=compact' -X POST -H 'Connection: keep-alive' -H 'Content-Length: 0' -H 'Origin: http://localhost:3000' -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36' -H 'Accept: */*' -H 'Referer: http://localhost:3000/' -H 'Accept-Language: en-GB,en-US;q=0.9,en;q=0.8' --compressed --insecure

Timeout when validating resources with large number of arcs

The following attempt of validation (a Shanghai hospital) agains the entity schema of hospitals:

curl -i -X POST -H "Content-type:multipart/form-data" 'http://localhost:8080/api/wikidata/validate' \
                                                         --form-string 'item=<http://www.wikidata.org/entity/Q33121756>' \
                                                         --form-string 'entitySchema=E187'

gives a timeout because the entity schema E187 refers to country and the country is Chile (Q148) which seems to take more time than expected to be retrieved and the whole result is a timeout.

Check how we can improve this situation by increasing the time the server waits or using some kind of streaming retrieval.

Update Swagger documentation about the API

The API documentation has not been updated and there are several services that are not documented in swagger:

https://app.swaggerhub.com/apis-docs/labra/rdfshape/1.0.1

Notice that the client points to this documentation in the Help -> API Documentation.

One problem is that the server is hidden in the 8080 port and now it uses https instead of http.

For example, instead of:

http://rdfshape.weso.es/api/schema/engines

it should point to:

https://rdfshape.weso.es:8080/api/schema/engines

Server crashing when validating with SHACL and SHACLex schema engine

When validating data with shacl

How to reproduce (I'd suggest testing this locally to avoid server errors):

  1. Start a new SHACL validation in rdfshape, like the webpage example.
  2. The validation should work because it is using JenaSHACL schema engine.
  3. Change the schema engine to SHACLex and try to validate.
  4. Network error appears and server has crashed.

Any ideas? @labra

Error trace:


[info] APIHelper: validate
[error] java.lang.NoSuchMethodError: 'scala.collection.immutable.Map es.weso.typing.Typing.getMap()'
[error]         at es.weso.shacl.validator.ShapeTyping.toValidationReport(ShapeTyping.scala:39)
[error]         at es.weso.schema.ShaclexSchema.$anonfun$cnvResult$2(ShaclexSchema.scala:50)
[error]         at scala.util.Either.fold(Either.scala:191)
[error]         at es.weso.schema.ShaclexSchema.cnvResult(ShaclexSchema.scala:49)
[error]         at es.weso.schema.ShaclexSchema.$anonfun$validateTargetDecls$4(ShaclexSchema.scala:39)
[error]         at cats.effect.internals.IORunLoop$.cats$effect$internals$IORunLoop$$loop(IORunLoop.scala:181)
[error]         at cats.effect.internals.IORunLoop$RestartCallback.signal(IORunLoop.scala:455)
[error]         at cats.effect.internals.IORunLoop$RestartCallback.run(IORunLoop.scala:466)
[error]         at cats.effect.internals.Trampoline.cats$effect$internals$Trampoline$$immediateLoop(Trampoline.scala:67)
[error]         at cats.effect.internals.Trampoline.startLoop(Trampoline.scala:35)
[error]         at cats.effect.internals.TrampolineEC$JVMTrampoline.super$startLoop(TrampolineEC.scala:90)
[error]         at cats.effect.internals.TrampolineEC$JVMTrampoline.$anonfun$startLoop$1(TrampolineEC.scala:90)
[error]         at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
[error]         at scala.concurrent.BlockContext$.withBlockContext(BlockContext.scala:85)
[error]         at cats.effect.internals.TrampolineEC$JVMTrampoline.startLoop(TrampolineEC.scala:90)
[error]         at cats.effect.internals.Trampoline.execute(Trampoline.scala:43)
[error]         at cats.effect.internals.TrampolineEC.execute(TrampolineEC.scala:42)
[error]         at cats.effect.internals.IOBracket$.$anonfun$guaranteeCase$1(IOBracket.scala:116)
[error]         at cats.effect.internals.IOBracket$.$anonfun$guaranteeCase$1$adapted(IOBracket.scala:114)
[error]         at cats.effect.internals.IOAsync$.$anonfun$apply$1(IOAsync.scala:37)
[error]         at cats.effect.internals.IOAsync$.$anonfun$apply$1$adapted(IOAsync.scala:37)
[error]         at cats.effect.internals.IORunLoop$RestartCallback.start(IORunLoop.scala:439)
[error]         at cats.effect.internals.IORunLoop$.cats$effect$internals$IORunLoop$$loop(IORunLoop.scala:155)
[error]         at cats.effect.internals.IORunLoop$RestartCallback.signal(IORunLoop.scala:455)
[error]         at cats.effect.internals.IORunLoop$RestartCallback.apply(IORunLoop.scala:476)
[error]         at cats.effect.internals.IORunLoop$RestartCallback.apply(IORunLoop.scala:414)
[error]         at cats.effect.internals.IOShift$Tick.run(IOShift.scala:36)
[error]         at cats.effect.internals.PoolUtils$$anon$2$$anon$3.run(PoolUtils.scala:52)
[error]         at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
[error]         at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
[error]         at java.base/java.lang.Thread.run(Thread.java:834)
[info] Closing RDF data
[error] Nonzero exit code returned from runner: 1
[error] (Compile / run) Nonzero exit code returned from runner: 1

Add a "Short URL to this page" buttom

It would be very useful to have some kind of URL shortener which would allow to copy/paste links to RDFShape examples easily.

An inspiration would be the buttom provided by the wikimedia query service. I think it uses a URL shortener service.

And the source code seems to be here.

I am also guessing that the URL shortener service uses a database to store the shortened URLs.

There is some background on URL shortening in stackoverflow which contains several implementations.

The system does not automatically recover from failures

When there's an error in the server the system does not have the abillity to automatically recover from that error, for example kill the process and launch it again.

The easiest way to notice is that the fields on the forms appear empty since the front does not connect to the back, which is down.

This is interesting as the system goes down more often than we'd like.

Extra margin when showing two panels

There seems to be a problem in bootstrap when there are two panels.
The problem is shown when the browser is using a desktop. It seems the max-width and margin-left/right are fixed for the container div.

shacl2ShEx/shaclConvert Not Working

Hello,
tried with Firefox and Chrome, but:

  • All "Data format" drop downs are empty
  • I can't paste or write in "by Input" text boxes

(And shouldn't there be a "Visualize SHACL schema" option?)

Thank you for your work!

Negated path not leading to failure

Simple shape with one required type and one type that is negated.

prefix dctypes: <http://purl.org/dc/dcmitype/>
prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
prefix void: <http://rdfs.org/ns/void#>

<SummaryShape> {
    rdf:type (dctypes:Dataset),
    !rdf:type (void:Dataset)
}

When tested with a document containing a dctypes:Dataset and void:Dataset, the result is still matching a summary shape.

prefix dctypes: <http://purl.org/dc/dcmitype/>
prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
prefix : <http://example.org/>
prefix void: <http://rdfs.org/ns/void#>

:dataset a dctypes:Dataset, void:Dataset .

I believe that it should not match the summary shape.
You can try it out at
http://goo.gl/jnHafO

User should be able to generate java code from Shape Expressions

User Story

As a User of the rdfshape tool
I want to be able to generate java domain models from shape expressions
Because I don't want to code the shape expressions and the java domain models for my applications separately.

Summary

The WESO group has implemented a tool called ShEx-Lite. ShEx-Lite is capable of transforming Shape Expressions in compact syntax to domain models of Java, Python... The main idea behind this issue is to integrate this tool into the rdfshape system.

Show RDF graphs as PNG also

At this moment we visualize RDF graphs using viz.js option to render as SVG. The library provides also the option to generate PNG images which may be useful to save those images and reuse in presentations.

Upload entity schemas to wikidata/wikibase

It would be great to allow a user to upload entity schemas created with YasHE to wikidata/wikibase.

It would require to use the wikidata's API and I am not sure about the details...any help would be appreciated.

This functionality could also be added to wikishape.

HTML page responses in api instead of data

It appears that currently, when using the http://rdfshape.weso.es/api/ server for API calls, HTML documents are being received as answer one or more endpoints.

For Example:
curl -X GET "http://rdfshape.weso.es/api/data/formats" -H "accept: application/json"
returns

<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="shortcut icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="RDFShape client"/><link rel="manifest" href="/manifest.json"/><title>RDFShape</title><link href="/static/css/2.4f4d5dfe.chunk.css" rel="stylesheet"><link href="/static/css/main.3b104fc2.chunk.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><script>!function(i){function e(e){for(var r,t,n=e[0],o=e[1],u=e[2],l=0,f=[];l<n.length;l++)t=n[l],Object.prototype.hasOwnProperty.call(p,t)&&p[t]&&f.push(p[t][0]),p[t]=0;for(r in o)Object.prototype.hasOwnProperty.call(o,r)&&(i[r]=o[r]);for(s&&s(e);f.length;)f.shift()();return c.push.apply(c,u||[]),a()}function a(){for(var e,r=0;r<c.length;r++){for(var t=c[r],n=!0,o=1;o<t.length;o++){var u=t[o];0!==p[u]&&(n=!1)}n&&(c.splice(r--,1),e=l(l.s=t[0]))}return e}var t={},p={1:0},c=[];function l(e){if(t[e])return t[e].exports;var r=t[e]={i:e,l:!1,exports:{}};return i[e].call(r.exports,r,r.exports,l),r.l=!0,r.exports}l.m=i,l.c=t,l.d=function(e,r,t){l.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},l.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},l.t=function(r,e){if(1&e&&(r=l(r)),8&e)return r;if(4&e&&"object"==typeof r&&r&&r.__esModule)return r;var t=Object.create(null);if(l.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:r}),2&e&&"string"!=typeof r)for(var n in r)l.d(t,n,function(e){return r[e]}.bind(null,n));return t},l.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return l.d(r,"a",r),r},l.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},l.p="/";var r=window["webpackJsonprdfshape-client"]=window["webpackJsonprdfshape-client"]||[],n=r.push.bind(r);r.push=e,r=r.slice();for(var o=0;o<r.length;o++)e(r[o]);var s=n;a()}([])</script><script src="/static/js/2.5a3941e3.chunk.js"></script><script src="/static/js/main.77a91491.chunk.js"></script></body></html>

while
curl -X GET "http://shaclex.herokuapp.com/api/data/formats" -H "accept: application/json"
returns a JSON array, as expected:

["TURTLE","RDF/XML","JSON-LD","N-TRIPLES","RDF/JSON","TRIG","DOT"]

Validating Shex requires to refresh the whole page

I've realised that the button validate in http://rdfshape.weso.es/shexValidate only works the first time the page loads.

Steps to reproduce:

  • Fill code boxes with content from https://github.com/weso/simpleShExScala/tree/master/examples
  • Click on Validate button
  • A green box on top of the page appears telling that the RDF is valid
  • Go to the RDF box and remove the snippet ; :age :unknown
  • Click on Validate again
  • Still the green box can be seen on top

Expected behaviour

  • Since we've removed a mandatory field for User an error message would be expected somewhere.

Tested

  • Google Chrome 78.0.3904.108 (Official Build) (64-bit)
  • MacOS Mojave

Language in RDF Data validation fails

When there's a white space between the object and the language label the validation fails.
I'll show you an example to be more specific:

<product> <label> "Blueberry Muffin" @en .

RDFShape says it's not valid.

<product> <label> "Blueberry Muffin"@en .

RDFShape says it's valid.
While in rdfcat both of them are valid.

Add shape profiles

Add a list of Shape profiles...for example: Issues, Skos, WebIndex, etc....

Visualize the SHACL validation report

In the case of SHACL, the output of the validation process if a SHACL validation report, which is an RDF graph. Shaclex already generates it, but it is not visualized yet.

Automatic deploy to heroku fails

A looong time ago, we did an automatic deployment pipeline to Heroku from github pushes.

It doesn't work at this moment, I think it would be a matter of looking what changes we need to do to deploy it there. Probably we would only need to deploy rdfshape-client to heroku and point to the rdfshape local server we already have.

It is a pity that it doesn't work, because some applications are still pointing to the heroku deployment...another possibility could be to just create a landing page redirecting from heroku to http://rdfshape.weso.es

Check why tests are failing in Travis

It seems that some module has added coverage code that prevents the tests to be run in Travis. The error shown is:

[error] ## Exception when compiling 2 sources to /home/travis/build/weso/rdfshape/target/scala-2.13/classes
[error] java.lang.NoSuchMethodError: scala.tools.nsc.Global.reporter()Lscala/tools/nsc/reporters/Reporter;
[error] com.github.ghik.silencer.SilencerPlugin.reporter$lzycompute(SilencerPlugin.scala:27)
[error] com.github.ghik.silencer.SilencerPlugin.com$github$ghik$silencer$SilencerPlugin$$reporter(SilencerPlugin.scala:26)
[error] com.github.ghik.silencer.SilencerPlugin.processOptions(SilencerPlugin.scala:50)
. . .

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.