dhruvbird / http-sync Goto Github PK
View Code? Open in Web Editor NEWA synchronous http(s) client for node.js
License: BSD 3-Clause "New" or "Revised" License
A synchronous http(s) client for node.js
License: BSD 3-Clause "New" or "Revised" License
When I try to use the version on npm, it seems to install just fine (with some warnings):
npm http GET https://registry.npmjs.org/http-sync/0.0.1
npm http 200 https://registry.npmjs.org/http-sync/0.0.1
npm http GET https://registry.npmjs.org/http-sync/-/http-sync-0.0.1.tgz
npm http 200 https://registry.npmjs.org/http-sync/-/http-sync-0.0.1.tgz
> [email protected] install /home/smassa/source/test/node_modules/http-sync
> node-gyp rebuild
make[1]: Entering directory `/home/smassa/source/test/node_modules/http-sync/build'
CXX(target) Release/obj.target/curllib/curllib.o
../curllib.cc: In static member function ‘static v8::Handle<v8::Value> CurlLib::Run(const v8::Arguments&)’:
../curllib.cc:148:14: warning: unused variable ‘curllib’ [-Wunused-variable]
../curllib.cc:208:77: warning: ‘res’ may be used uninitialized in this function [-Wmaybe-uninitialized]
SOLINK_MODULE(target) Release/obj.target/curllib.node
SOLINK_MODULE(target) Release/obj.target/curllib.node: Finished
COPY Release/curllib.node
make[1]: Leaving directory `/home/smassa/source/test/node_modules/http-sync/build'
[email protected] node_modules/http-sync
But when I try to use it, like:
http = require 'http-sync'
http.request
url: 'http://www.google.com'
method: 'get'
Then I get this error:
module.js:340
throw err;
^
Error: Cannot find module './curllib'
at Function.Module._resolveFilename (module.js:338:15)
at Function.Module._load (module.js:280:25)
at Module.require (module.js:362:17)
at require (module.js:378:17)
at Object.<anonymous> (/home/smassa/source/test/node_modules/http-sync/http-sync.js:1:73)
at Module._compile (module.js:449:26)
at Object.Module._extensions..js (module.js:467:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.require (module.js:362:17)
Please consider choosing a license for this project. It will make it easier for other people to open source projects that use http-sync
.
Can we get a new version released on npm so that we can use the timeout option?
This fails on node-gyp rebuild:
$ node-gyp rebuild
gyp info it worked if it ends with ok
gyp info using [email protected]
gyp info using [email protected] | darwin | x64
gyp info spawn python
gyp info spawn args [ '/usr/local/lib/node_modules/node-gyp/gyp/gyp_main.py',
gyp info spawn args 'binding.gyp',
gyp info spawn args '-f',
gyp info spawn args 'make',
gyp info spawn args '-I',
gyp info spawn args '/Users/sam/code/fsp-app/node/node_modules/http-sync/build/config.gypi',
gyp info spawn args '-I',
gyp info spawn args '/usr/local/lib/node_modules/node-gyp/addon.gypi',
gyp info spawn args '-I',
gyp info spawn args '/Users/sam/.node-gyp/0.11.11/common.gypi',
gyp info spawn args '-Dlibrary=shared_library',
gyp info spawn args '-Dvisibility=default',
gyp info spawn args '-Dnode_root_dir=/Users/sam/.node-gyp/0.11.11',
gyp info spawn args '-Dmodule_root_dir=/Users/sam/code/fsp-app/node/node_modules/http-sync',
gyp info spawn args '--depth=.',
gyp info spawn args '--no-parallel',
gyp info spawn args '--generator-output',
gyp info spawn args 'build',
gyp info spawn args '-Goutput_dir=.' ]
gyp info spawn make
gyp info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ]
CXX(target) Release/obj.target/curllib/curllib.o
In file included from ../curllib.cc:11:
In file included from /usr/include/curl/curl.h:56:
/usr/include/time.h:109:1: error: unknown type name 'clock_t'; did you mean 'node::clock_t'?
clock_t clock(void) __DARWIN_ALIAS(clock);
^
/usr/include/sys/_types/_clock_t.h:30:33: note: 'node::clock_t' declared here
typedef __darwin_clock_t clock_t;
^
In file included from ../curllib.cc:11:
In file included from /usr/include/curl/curl.h:56:
/usr/include/time.h:110:19: error: unknown type name 'time_t'; did you mean 'node::time_t'?
char *ctime(const time_t *);
^
/usr/include/sys/_types/_time_t.h:30:26: note: 'node::time_t' declared here
typedef __darwin_time_t time_t;
^
In file included from ../curllib.cc:11:
In file included from /usr/include/curl/curl.h:56:
/usr/include/time.h:111:17: error: unknown type name 'time_t'; did you mean 'node::time_t'?
double difftime(time_t, time_t);
^
/usr/include/sys/_types/_time_t.h:30:26: note: 'node::time_t' declared here
typedef __darwin_time_t time_t;
^
In file included from ../curllib.cc:11:
In file included from /usr/include/curl/curl.h:56:
/usr/include/time.h:111:25: error: unknown type name 'time_t'; did you mean 'node::time_t'?
double difftime(time_t, time_t);
^
/usr/include/sys/_types/_time_t.h:30:26: note: 'node::time_t' declared here
typedef __darwin_time_t time_t;
^
In file included from ../curllib.cc:11:
In file included from /usr/include/curl/curl.h:56:
/usr/include/time.h:113:25: error: unknown type name 'time_t'; did you mean 'node::time_t'?
struct tm *gmtime(const time_t *);
^
/usr/include/sys/_types/_time_t.h:30:26: note: 'node::time_t' declared here
typedef __darwin_time_t time_t;
^
In file included from ../curllib.cc:11:
In file included from /usr/include/curl/curl.h:56:
/usr/include/time.h:114:28: error: unknown type name 'time_t'; did you mean 'node::time_t'?
struct tm *localtime(const time_t *);
^
/usr/include/sys/_types/_time_t.h:30:26: note: 'node::time_t' declared here
typedef __darwin_time_t time_t;
^
In file included from ../curllib.cc:11:
In file included from /usr/include/curl/curl.h:56:
/usr/include/time.h:115:1: error: unknown type name 'time_t'; did you mean 'node::time_t'?
time_t mktime(struct tm *) __DARWIN_ALIAS(mktime);
^
/usr/include/sys/_types/_time_t.h:30:26: note: 'node::time_t' declared here
typedef __darwin_time_t time_t;
^
In file included from ../curllib.cc:11:
In file included from /usr/include/curl/curl.h:56:
/usr/include/time.h:118:1: error: unknown type name 'time_t'; did you mean 'node::time_t'?
time_t time(time_t *);
^
/usr/include/sys/_types/_time_t.h:30:26: note: 'node::time_t' declared here
typedef __darwin_time_t time_t;
^
In file included from ../curllib.cc:11:
In file included from /usr/include/curl/curl.h:56:
/usr/include/time.h:118:13: error: unknown type name 'time_t'; did you mean 'node::time_t'?
time_t time(time_t *);
^
/usr/include/sys/_types/_time_t.h:30:26: note: 'node::time_t' declared here
typedef __darwin_time_t time_t;
^
In file included from ../curllib.cc:11:
In file included from /usr/include/curl/curl.h:56:
/usr/include/time.h:126:21: error: unknown type name 'time_t'; did you mean 'node::time_t'?
char *ctime_r(const time_t *, char *);
^
/usr/include/sys/_types/_time_t.h:30:26: note: 'node::time_t' declared here
typedef __darwin_time_t time_t;
^
In file included from ../curllib.cc:11:
In file included from /usr/include/curl/curl.h:56:
/usr/include/time.h:127:27: error: unknown type name 'time_t'; did you mean 'node::time_t'?
struct tm *gmtime_r(const time_t * __restrict, struct tm * __restrict);
^
/usr/include/sys/_types/_time_t.h:30:26: note: 'node::time_t' declared here
typedef __darwin_time_t time_t;
^
In file included from ../curllib.cc:11:
In file included from /usr/include/curl/curl.h:56:
/usr/include/time.h:128:30: error: unknown type name 'time_t'; did you mean 'node::time_t'?
struct tm *localtime_r(const time_t * __restrict, struct tm * __restrict);
^
/usr/include/sys/_types/_time_t.h:30:26: note: 'node::time_t' declared here
typedef __darwin_time_t time_t;
^
In file included from ../curllib.cc:11:
In file included from /usr/include/curl/curl.h:56:
/usr/include/time.h:131:1: error: unknown type name 'time_t'; did you mean 'node::time_t'?
time_t posix2time(time_t);
^
/usr/include/sys/_types/_time_t.h:30:26: note: 'node::time_t' declared here
typedef __darwin_time_t time_t;
^
In file included from ../curllib.cc:11:
In file included from /usr/include/curl/curl.h:56:
/usr/include/time.h:131:19: error: unknown type name 'time_t'; did you mean 'node::time_t'?
time_t posix2time(time_t);
^
/usr/include/sys/_types/_time_t.h:30:26: note: 'node::time_t' declared here
typedef __darwin_time_t time_t;
^
In file included from ../curllib.cc:11:
In file included from /usr/include/curl/curl.h:56:
/usr/include/time.h:136:1: error: unknown type name 'time_t'; did you mean 'node::time_t'?
time_t time2posix(time_t);
^
/usr/include/sys/_types/_time_t.h:30:26: note: 'node::time_t' declared here
typedef __darwin_time_t time_t;
^
In file included from ../curllib.cc:11:
In file included from /usr/include/curl/curl.h:56:
/usr/include/time.h:136:19: error: unknown type name 'time_t'; did you mean 'node::time_t'?
time_t time2posix(time_t);
^
/usr/include/sys/_types/_time_t.h:30:26: note: 'node::time_t' declared here
typedef __darwin_time_t time_t;
^
In file included from ../curllib.cc:11:
In file included from /usr/include/curl/curl.h:56:
/usr/include/time.h:137:1: error: unknown type name 'time_t'; did you mean 'node::time_t'?
time_t timelocal(struct tm * const);
^
/usr/include/sys/_types/_time_t.h:30:26: note: 'node::time_t' declared here
typedef __darwin_time_t time_t;
^
In file included from ../curllib.cc:11:
In file included from /usr/include/curl/curl.h:56:
/usr/include/time.h:138:1: error: unknown type name 'time_t'; did you mean 'node::time_t'?
time_t timegm(struct tm * const);
^
/usr/include/sys/_types/_time_t.h:30:26: note: 'node::time_t' declared here
typedef __darwin_time_t time_t;
^
In file included from ../curllib.cc:11:
In file included from /usr/include/curl/curl.h:82:
In file included from /usr/include/sys/time.h:193:
/usr/include/sys/_select.h:39:18: error: unknown type name 'fd_set'; did you mean 'node::fd_set'?
int select(int, fd_set * __restrict, fd_set * __restrict,
^
/usr/include/sys/_types/_fd_def.h:48:3: note: 'node::fd_set' declared here
} fd_set;
^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.
make: *** [Release/obj.target/curllib/curllib.o] Error 1
gyp ERR! build error
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack at ChildProcess.onExit (/usr/local/lib/node_modules/node-gyp/lib/build.js:267:23)
gyp ERR! stack at ChildProcess.EventEmitter.emit (events.js:107:17)
gyp ERR! stack at Process.ChildProcess._handle.onexit (child_process.js:879:12)
gyp ERR! System Darwin 13.0.0
gyp ERR! command "node" "/usr/local/bin/node-gyp" "rebuild"
gyp ERR! cwd /Users/sam/code/fsp-app/node/node_modules/http-sync
gyp ERR! node -v v0.11.11
gyp ERR! node-gyp -v v0.13.0
gyp ERR! not ok
Is node-waf still an accepted method to install node js modules? I will write a package.js and binding.gyp unless that really is not desired.
A POST with about 11,000 lines of JSON appears to send, but is never received on the other side. Making the request much smaller solves it.
Can we add some timeout options? I see that this was done in another project, but I'm not sure how to add it here.
https://github.com/fengmk2/node-curl/blob/master/src/request.cc#L83-92
I need to change the content type header but .I don't know how to populate the "headers" field.
var request = httpSync.request({
method: 'GET',
headers: {},
body: '',
protocol: 'http',
host: '127.0.0.1',
port: 80, //443 if protocol = https
path: '/'
});
Sending POST requests produces weird errors. My request looks like this:
var url = format("/data/update?private_token={privateToken}", {
privateToken: params.privateToken
})
var req = httpSync.request({
method: "POST",
host: config.remoteService.bind,
port: config.remoteService.port,
path: url,
body: {q: someString}
})
req.end()
I had expected http-request to send a POST request with {q: "Example Text"}
as body. But the consuming service receives the following request:
POST /data/update?private_token=someSecretToken
Body: {"object Object"=>nil, "private_token"=>"someSecretToken"}
What am I doing wrong?
Do you plan in future to support uploading binary data in body
param?
It would be great if this library could be installed via npm.
There is a comment in the code that implies something is wrong with CURLOPT_SSL_VERIFYPEER
, but not what. https://github.com/dhruvbird/http-sync/blob/master/curllib.cc#L174-176
What is wrong here?
Can we get a new release on npm with all of the recent changes?
Hello and thanks for taking the time to write http-sync. I have been using it for a few months, since before the current version. I recently moved to another machine and recompiled everything, and code that used to work throws this error now:
/home/ale/livesheet/http-sync.js:40
var ret = curllib.run(this._options.method, _ep,
^
TypeError: Bad argument
at Object.CurlRequest.end (/home/ale/livesheet/http-sync.js:40:20)
the line in my code that throws is where i call end().
if i place the old curllib.node over the new one, it still works. What am i doing wrong? I suspect that trying to install the httpsync npm module might have messed up my libraries..
npm WARN package.json [email protected] No README.md file found!
npm http GET https://registry.npmjs.org/httpsync
npm http 304 https://registry.npmjs.org/httpsync
[email protected] install C:\Users\prakasam.dhayalan\Documents\GitHub\stomp\FLMxS
ync\node_modules\httpsync
sh build.sh
'sh' is not recognized as an internal or external command,
operable program or batch file.
npm ERR! [email protected] install: sh build.sh
npm ERR! cmd "/c" "sh build.sh"
failed with 1
npm ERR!
npm ERR! Failed at the [email protected] install script.
npm ERR! This is most likely a problem with the httpsync package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR! sh build.sh
npm ERR! You can get their info via:
npm ERR! npm owner ls httpsync
npm ERR! There is likely additional logging output above.
npm ERR! System Windows_NT 6.1.7601
npm ERR! command "C:\Program Files\nodejs\node.exe" "C:\Program Files\nod
ejs\node_modules\npm\bin\npm-cli.js" "install" "httpsync"
npm ERR! cwd C:\Users\prakasam.dhayalan\Documents\GitHub\stomp\FLMxSync
npm ERR! node -v v0.8.18
npm ERR! npm -v 1.2.2
npm ERR! code ELIFECYCLE
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR! C:\Users\prakasam.dhayalan\Documents\GitHub\stomp\FLMxSync\npm-debu
g.log
npm ERR! not ok code 0
"With Node.js 4.0.0 Nan took the chance to do some refactoring and also bumped its version from 1.x to 2.x, introducing breaking changes." (source)
Useful info for migration:
nodejs/nan#402
nodejs/nan#371 (comment)
https://nodesource.com/blog/cpp-addons-for-nodejs-v4
some non-standard body-length limiting feature to prevent OOM in case of massive responses.
On windows I get the error message:
..\curllib.cc(11): fatal error C1083: Cannot open include file: 'curl/curl.h': No such file or directory [C:\GitHub\int
egrate\node_modules\webdriver-http-sync\node_modules\http-sync\build\curllib.vcxproj]
I have tried my best to get libcurl installed, but it still doesn't seem to detect it. Any thoughts?
Only the last value of a given multi-valued response header is saved. For example:
Set-Cookie: first cookie
Set-Cookie: second cookie
only the second cookie
will be assigned. This is done by the following code:
_m = line.match(_hre);
if (_m) {
_h[_m[1]] = _m[3];
}
it should probably be something like:
_m = line.match(_hre);
if (_m) {
_h[_m[1]] = _h[_m[1]] || [];
_h[_m[1]].push(_m[3]);
}
and headers will be multi-valued
I tried installing from npm and got the following error:
$ npm i http-sync
> [email protected] install /home/ola/workspace/js/new-import-script/node_modules/http-sync
> node-gyp rebuild
gyp WARN download NVM_NODEJS_ORG_MIRROR is deprecated and will be removed in node-gyp v4, please use NODEJS_ORG_MIRROR
gyp WARN download NVM_NODEJS_ORG_MIRROR is deprecated and will be removed in node-gyp v4, please use NODEJS_ORG_MIRROR
gyp WARN download NVM_NODEJS_ORG_MIRROR is deprecated and will be removed in node-gyp v4, please use NODEJS_ORG_MIRROR
make: Entering directory '/home/ola/workspace/js/new-import-script/node_modules/http-sync/build'
CXX(target) Release/obj.target/curllib/curllib.o
In file included from ../curllib.cc:8:0:
../../nan/nan.h:261:25: error: redefinition of ‘template<class T> v8::Local<T> _NanEnsureLocal(v8::Local<T>)’
NAN_INLINE v8::Local<T> _NanEnsureLocal(v8::Local<T> val) {
^
../../nan/nan.h:256:25: note: ‘template<class T> v8::Local<T> _NanEnsureLocal(v8::Handle<T>)’ previously declared here
NAN_INLINE v8::Local<T> _NanEnsureLocal(v8::Handle<T> val) {
^
../../nan/nan.h:473:20: error: variable or field ‘NanAddGCEpilogueCallback’ declared void
v8::Isolate::GCEpilogueCallback callback
^
../../nan/nan.h:473:7: error: ‘GCEpilogueCallback’ is not a member of ‘v8::Isolate’
v8::Isolate::GCEpilogueCallback callback
^
../../nan/nan.h:474:18: error: expected primary-expression before ‘gc_type_filter’
, v8::GCType gc_type_filter = v8::kGCTypeAll) {
^
../../nan/nan.h:479:20: error: variable or field ‘NanRemoveGCEpilogueCallback’ declared void
v8::Isolate::GCEpilogueCallback callback) {
^
../../nan/nan.h:479:7: error: ‘GCEpilogueCallback’ is not a member of ‘v8::Isolate’
v8::Isolate::GCEpilogueCallback callback) {
^
../../nan/nan.h:484:20: error: variable or field ‘NanAddGCPrologueCallback’ declared void
v8::Isolate::GCPrologueCallback callback
^
../../nan/nan.h:484:7: error: ‘GCPrologueCallback’ is not a member of ‘v8::Isolate’
v8::Isolate::GCPrologueCallback callback
^
../../nan/nan.h:485:18: error: expected primary-expression before ‘gc_type_filter’
, v8::GCType gc_type_filter = v8::kGCTypeAll) {
^
../../nan/nan.h:490:20: error: variable or field ‘NanRemoveGCPrologueCallback’ declared void
v8::Isolate::GCPrologueCallback callback) {
^
../../nan/nan.h:490:7: error: ‘GCPrologueCallback’ is not a member of ‘v8::Isolate’
v8::Isolate::GCPrologueCallback callback) {
^
../../nan/nan.h:661:13: error: ‘node::smalloc’ has not been declared
, node::smalloc::FreeCallback callback
^
../../nan/nan.h:661:35: error: expected ‘,’ or ‘...’ before ‘callback’
, node::smalloc::FreeCallback callback
^
../../nan/nan.h: In function ‘v8::Local<v8::Object> NanNewBufferHandle(char*, size_t, int)’:
../../nan/nan.h:665:50: error: ‘callback’ was not declared in this scope
v8::Isolate::GetCurrent(), data, length, callback, hint);
^
../../nan/nan.h:665:60: error: ‘hint’ was not declared in this scope
v8::Isolate::GetCurrent(), data, length, callback, hint);
^
../../nan/nan.h: In function ‘v8::Local<v8::Object> NanNewBufferHandle(const char*, uint32_t)’:
../../nan/nan.h:672:67: error: invalid conversion from ‘const char*’ to ‘char*’ [-fpermissive]
return node::Buffer::New(v8::Isolate::GetCurrent(), data, size);
^
In file included from ../../nan/nan.h:25:0,
from ../curllib.cc:8:
/home/ola/.node-gyp/6.3.1/include/node/node_buffer.h:46:40: note: initializing argument 2 of ‘v8::MaybeLocal<v8::Object> node::Buffer::New(v8::Isolate*, char*, size_t)’
NODE_EXTERN v8::MaybeLocal<v8::Object> New(v8::Isolate* isolate,
^
In file included from ../curllib.cc:8:0:
../../nan/nan.h:672:29: error: could not convert ‘node::Buffer::New(v8::Isolate::GetCurrent(), ((char*)data), ((size_t)size))’ from ‘v8::MaybeLocal<v8::Object>’ to ‘v8::Local<v8::Object>’
return node::Buffer::New(v8::Isolate::GetCurrent(), data, size);
^
../../nan/nan.h: In function ‘v8::Local<v8::Object> NanNewBufferHandle(uint32_t)’:
../../nan/nan.h:676:29: error: could not convert ‘node::Buffer::New(v8::Isolate::GetCurrent(), ((size_t)size))’ from ‘v8::MaybeLocal<v8::Object>’ to ‘v8::Local<v8::Object>’
return node::Buffer::New(v8::Isolate::GetCurrent(), size);
^
../../nan/nan.h: In function ‘v8::Local<v8::Object> NanBufferUse(char*, uint32_t)’:
../../nan/nan.h:683:12: error: ‘Use’ is not a member of ‘node::Buffer’
return node::Buffer::Use(v8::Isolate::GetCurrent(), data, size);
^
curllib.target.mk:88: recipe for target 'Release/obj.target/curllib/curllib.o' failed
make: *** [Release/obj.target/curllib/curllib.o] Error 1
make: Leaving directory '/home/ola/workspace/js/new-import-script/node_modules/http-sync/build'
gyp ERR! build error
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack at ChildProcess.onExit (/home/ola/.nvm/versions/node/v6.3.1/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:276:23)
gyp ERR! stack at emitTwo (events.js:106:13)
gyp ERR! stack at ChildProcess.emit (events.js:191:7)
gyp ERR! stack at Process.ChildProcess._handle.onexit (internal/child_process.js:204:12)
gyp ERR! System Linux 4.4.0-47-generic
gyp ERR! command "/home/ola/.nvm/versions/node/v6.3.1/bin/node" "/home/ola/.nvm/versions/node/v6.3.1/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /home/ola/workspace/js/new-import-script/node_modules/http-sync
gyp ERR! node -v v6.3.1
gyp ERR! node-gyp -v v3.3.1
gyp ERR! not ok
npm WARN [email protected] No description
npm WARN [email protected] No repository field.
npm ERR! Linux 4.4.0-47-generic
npm ERR! argv "/home/ola/.nvm/versions/node/v6.3.1/bin/node" "/home/ola/.nvm/versions/node/v6.3.1/bin/npm" "i" "http-sync"
npm ERR! node v6.3.1
npm ERR! npm v3.10.3
npm ERR! code ELIFECYCLE
npm ERR! [email protected] install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] install script 'node-gyp rebuild'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the http-sync package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR! node-gyp rebuild
npm ERR! You can get information on how to open an issue for this project with:
npm ERR! npm bugs http-sync
npm ERR! Or if that isn't available, you can get their info via:
npm ERR! npm owner ls http-sync
npm ERR! There is likely additional logging output above.
npm ERR! Please include the following file with any support request:
npm ERR! /home/ola/workspace/js/new-import-script/npm-debug.log
Running on Ubuntu 16.04, with libcurl4-openssl-dev installed.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.