leadedge / ofxndi Goto Github PK
View Code? Open in Web Editor NEWAn Openframeworks addon to allow sending and receiving images over a network using the NewTek Network Device Protocol.
License: GNU General Public License v3.0
An Openframeworks addon to allow sending and receiving images over a network using the NewTek Network Device Protocol.
License: GNU General Public License v3.0
Hi if i use the receiver example with the fbo or with image the memory is counting up around 1mb/s. Any hints?
I use osx 10.13, which shouldn be a problem. Thanks
First of all thanks for your work, ofxNDI is great!
I'm experiencing this on macOS, not sure if it is something related to NDI itself or the addon.
I'm running the example receiver, and sending NDI from NDI Test Patterns.
If I close the sender (NDI Test Patterns) , after about 2 to 5 seconds the receiver hangs for about 8 seconds (beach ball cursor)
and then it comes back to normal.
It seems to be related to p_NDILib->recv_destroy
Have you seen something similar?
Hi,
I had to fix gl3 shaders by adding #version 150\n
but when I run example-sender using programmable renderer I only get a blue screen in the receiver (with no rotating cube).
The cube is drawn correctly in the example app.
Any clues about what's causing the issue?
Hi, I'm wondering what the best way to handle having multiple NDI receivers is. Should I create a new object per receiver, or call CreateReceiver?
I've made some changes in a fork to make it work locally
basically I've renamed libs/NDI/export to libs/NDI/lib
updated addon_config.mk
and copied libndi.dylib to libs/NDI/lib/osx
https://github.com/dimitre/ofxNDI
Thanks for making this add-on. NDI sounds like a great thing.
Does your add-on also warp the audio sending/receiving function?
Thanks,Stephan.
im trying to port my linux openframeworks program to windows by following the msys2 instructions.
i managed to get openframeworks examples compiled and running, however when i now try to compile an example in ofxNDI i get a whole bunch of errors surrounding:
C:/msys64/mingw64/include/rpcndr.h:64:11: error: reference to 'byte' is ambiguous
i found this issue which seems similar but couldnt see anywhere in the ofxNDI code where that fix could apply.. or any definition of or use of byte
at all in there... im guessing its conflicting headers or something ?
any ideas for this or do i just need to use visual studio on windows ?
In file included from C:/msys64/mingw64/include/objbase.h:8,
from C:/msys64/mingw64/include/shlwapi.h:14,
from C:/msys64/home/Gabriela/of_v0.12.0_msys2_mingw64_release/addons/ofxNDI/src/ofxNDIdynloader.h:20:
C:/msys64/mingw64/include/rpcndr.h:64:11: error: reference to 'byte' is ambiguous
64 | typedef byte cs_byte;
| ^~~~
In file included from C:/msys64/mingw64/include/c++/13.2.0/bits/memory_resource.h:38,
from C:/msys64/mingw64/include/c++/13.2.0/string:58,
from C:/msys64/home/Gabriela/of_v0.12.0_msys2_mingw64_release/libs/openFrameworks/utils/ofConstants.h:13,
from C:/msys64/home/Gabriela/of_v0.12.0_msys2_mingw64_release/libs/openFrameworks/ofMain.h:6,
from C:/msys64/home/Gabriela/of_v0.12.0_msys2_mingw64_release/addons/ofxNDI/example-receiver/src/main.cpp:1:
C:/msys64/mingw64/include/c++/13.2.0/cstddef:69:14: note: candidates are: 'enum class std::byte'
69 | enum class byte : unsigned char {};
| ^~~~
C:/msys64/mingw64/include/rpcndr.h:63:25: note: 'typedef unsigned char byte'
63 | typedef unsigned char byte;
| ^~~~
C:/msys64/mingw64/include/rpcndr.h:397:170: error: reference to 'byte' is ambiguous
397 | typedef void (__RPC_API *CS_TYPE_TO_NETCS_ROUTINE)(RPC_BINDING_HANDLE hBinding,unsigned __LONG32 ulNetworkCodeSet,void *pLocalData,unsigned __LONG32 ulLocalDataLength,byte *pNetwor
kData,unsigned __LONG32 *pulNetworkDataLength,error_status_t *pStatus);
compiler complain about this lines
auto source = static_cast<const unsigned __int32*>(rgba_source);; // unsigned int = 4 bytes
auto dest = static_cast<unsigned __int32*>(bgra_dest);
I've tried to change to
auto source = static_cast<const uint32_t*>(rgba_source);; // unsigned int = 4 bytes
auto dest = static_cast<uint32_t*>(bgra_dest);
and it compiles ok now. not sure if it is correct.
maybe we can use a typedef or something in macOS
Thanks
Hi! Thanks for the amazing addon.
I ran into problems when trying to build this on Raspberry Pi 4. OS is 32-bit Raspbian (armv7l). Only OpenGL ES 2.0 is supported currently on this hardware.
Any chance of making this compatible with the raspberry?
/home/agentti/of_v0.11.2_linuxarmv7l_release/addons/ofxNDI/src/ofxNDIreceiver.cpp: In member function ‘bool ofxNDIreceiver::GetPixelData(ofTexture&)’:
/home/agentti/of_v0.11.2_linuxarmv7l_release/addons/ofxNDI/src/ofxNDIreceiver.cpp:501:105: error: ‘GL_BGRA’ was not declared in this scope; did you mean ‘GL_RGBA’?
501 | texture.loadData((const unsigned char *)videoData, (int)texture.getWidth(), (int)texture.getHeight(), GL_BGRA);
| ^~~~~~~
| GL_RGBA
/home/agentti/of_v0.11.2_linuxarmv7l_release/addons/ofxNDI/src/ofxNDIsender.cpp: In member function ‘bool ofxNDIsender::CreateSender(const char*, unsigned int, unsigned int)’:
/home/agentti/of_v0.11.2_linuxarmv7l_release/addons/ofxNDI/src/ofxNDIsender.cpp:111:18: error: ‘GL_PIXEL_UNPACK_BUFFER_ARB’ was not declared in this scope; did you mean ‘GL_PIXEL_UNPACK_BUFFER_NV’?
111 | glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, ndiPbo[0]);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
| GL_PIXEL_UNPACK_BUFFER_NV
/home/agentti/of_v0.11.2_linuxarmv7l_release/addons/ofxNDI/src/ofxNDIsender.cpp:111:2: error: ‘glBindBufferARB’ was not declared in this scope; did you mean ‘glBindBuffer’?
111 | glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, ndiPbo[0]);
| ^~~~~~~~~~~~~~~
| glBindBuffer
/home/agentti/of_v0.11.2_linuxarmv7l_release/addons/ofxNDI/src/ofxNDIsender.cpp:112:67: error: ‘GL_STREAM_READ’ was not declared in this scope; did you mean ‘GL_STREAM_DRAW’?
112 | glBufferDataARB(GL_PIXEL_UNPACK_BUFFER_ARB, width*height * 4, 0, GL_STREAM_READ);
| ^~~~~~~~~~~~~~
| GL_STREAM_DRAW
/home/agentti/of_v0.11.2_linuxarmv7l_release/addons/ofxNDI/src/ofxNDIsender.cpp:112:2: error: ‘glBufferDataARB’ was not declared in this scope; did you mean ‘glBufferData’?
112 | glBufferDataARB(GL_PIXEL_UNPACK_BUFFER_ARB, width*height * 4, 0, GL_STREAM_READ);
| ^~~~~~~~~~~~~~~
| glBufferData
/home/agentti/of_v0.11.2_linuxarmv7l_release/addons/ofxNDI/src/ofxNDIsender.cpp: In member function ‘bool ofxNDIsender::UpdateSender(unsigned int, unsigned int)’:
/home/agentti/of_v0.11.2_linuxarmv7l_release/addons/ofxNDI/src/ofxNDIsender.cpp:144:18: error: ‘GL_PIXEL_UNPACK_BUFFER_ARB’ was not declared in this scope; did you mean ‘GL_PIXEL_UNPACK_BUFFER_NV’?
144 | glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, ndiPbo[0]);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
| GL_PIXEL_UNPACK_BUFFER_NV
/home/agentti/of_v0.11.2_linuxarmv7l_release/addons/ofxNDI/src/ofxNDIsender.cpp:144:2: error: ‘glBindBufferARB’ was not declared in this scope; did you mean ‘glBindBuffer’?
144 | glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, ndiPbo[0]);
| ^~~~~~~~~~~~~~~
| glBindBuffer
/home/agentti/of_v0.11.2_linuxarmv7l_release/addons/ofxNDI/src/ofxNDIsender.cpp:145:67: error: ‘GL_STREAM_READ’ was not declared in this scope; did you mean ‘GL_STREAM_DRAW’?
145 | glBufferDataARB(GL_PIXEL_UNPACK_BUFFER_ARB, width*height * 4, 0, GL_STREAM_READ);
| ^~~~~~~~~~~~~~
| GL_STREAM_DRAW
/home/agentti/of_v0.11.2_linuxarmv7l_release/addons/ofxNDI/src/ofxNDIsender.cpp:145:2: error: ‘glBufferDataARB’ was not declared in this scope; did you mean ‘glBufferData’?
145 | glBufferDataARB(GL_PIXEL_UNPACK_BUFFER_ARB, width*height * 4, 0, GL_STREAM_READ);
| ^~~~~~~~~~~~~~~
| glBufferData
/home/agentti/of_v0.11.2_linuxarmv7l_release/addons/ofxNDI/src/ofxNDIsender.cpp: In member function ‘bool ofxNDIsender::ReadFboPixels(ofFbo, unsigned int, unsigned int, unsigned char*)’:
/home/agentti/of_v0.11.2_linuxarmv7l_release/addons/ofxNDI/src/ofxNDIsender.cpp:516:2: error: ‘glReadBuffer’ was not declared in this scope; did you mean ‘glBindBuffer’?
516 | glReadBuffer(GL_FRONT);
| ^~~~~~~~~~~~
| glBindBuffer
/home/agentti/of_v0.11.2_linuxarmv7l_release/addons/ofxNDI/src/ofxNDIsender.cpp:519:15: error: ‘GL_PIXEL_PACK_BUFFER’ was not declared in this scope; did you mean ‘GL_PIXEL_PACK_BUFFER_NV’?
519 | glBindBuffer(GL_PIXEL_PACK_BUFFER, ndiPbo[PboIndex]);
| ^~~~~~~~~~~~~~~~~~~~
| GL_PIXEL_PACK_BUFFER_NV
/home/agentti/of_v0.11.2_linuxarmv7l_release/addons/ofxNDI/src/ofxNDIsender.cpp:528:48: error: ‘GL_READ_ONLY’ was not declared in this scope; did you mean ‘GL_RED_NV’?
528 | pboMemory = glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_ONLY);
| ^~~~~~~~~~~~
| GL_RED_NV
/home/agentti/of_v0.11.2_linuxarmv7l_release/addons/ofxNDI/src/ofxNDIsender.cpp:528:14: error: ‘glMapBuffer’ was not declared in this scope; did you mean ‘glIsBuffer’?
528 | pboMemory = glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_ONLY);
| ^~~~~~~~~~~
| glIsBuffer
/home/agentti/of_v0.11.2_linuxarmv7l_release/addons/ofxNDI/src/ofxNDIsender.cpp:532:3: error: ‘glUnmapBuffer’ was not declared in this scope
532 | glUnmapBuffer(GL_PIXEL_PACK_BUFFER);
| ^~~~~~~~~~~~~
/home/agentti/of_v0.11.2_linuxarmv7l_release/addons/ofxNDI/src/ofxNDIsender.cpp: In member function ‘bool ofxNDIsender::ReadTexturePixels(ofTexture, unsigned int, unsigned int, unsigned char*)’:
/home/agentti/of_v0.11.2_linuxarmv7l_release/addons/ofxNDI/src/ofxNDIsender.cpp:566:2: error: ‘glReadBuffer’ was not declared in this scope; did you mean ‘glBindBuffer’?
566 | glReadBuffer(GL_FRONT);
| ^~~~~~~~~~~~
| glBindBuffer
/home/agentti/of_v0.11.2_linuxarmv7l_release/addons/ofxNDI/src/ofxNDIsender.cpp:569:15: error: ‘GL_PIXEL_PACK_BUFFER’ was not declared in this scope; did you mean ‘GL_PIXEL_PACK_BUFFER_NV’?
569 | glBindBuffer(GL_PIXEL_PACK_BUFFER, ndiPbo[PboIndex]);
| ^~~~~~~~~~~~~~~~~~~~
| GL_PIXEL_PACK_BUFFER_NV
/home/agentti/of_v0.11.2_linuxarmv7l_release/addons/ofxNDI/src/ofxNDIsender.cpp:578:48: error: ‘GL_READ_ONLY’ was not declared in this scope; did you mean ‘GL_RED_NV’?
578 | pboMemory = glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_ONLY);
| ^~~~~~~~~~~~
| GL_RED_NV
/home/agentti/of_v0.11.2_linuxarmv7l_release/addons/ofxNDI/src/ofxNDIsender.cpp:578:14: error: ‘glMapBuffer’ was not declared in this scope; did you mean ‘glIsBuffer’?
578 | pboMemory = glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_ONLY);
| ^~~~~~~~~~~
| glIsBuffer
/home/agentti/of_v0.11.2_linuxarmv7l_release/addons/ofxNDI/src/ofxNDIsender.cpp:582:3: error: ‘glUnmapBuffer’ was not declared in this scope
582 | glUnmapBuffer(GL_PIXEL_PACK_BUFFER);
| ^~~~~~~~~~~~~
Thank you very much for making this addon. I made an error running your examples/example-receiver using the NewTek NDI 3.8 SDK. I found it here in debug.
Bool of xNDIreceive:: Receive Image (unsigned int & width, unsigned int & height)
{
NDIlib_frame_type_e NDI_frame_type;
NDIlib_metadata_frame_t metadata_frame;
M_FrameType = NDIlib_frame_type_none;
If (pNDI_recv){
NDI_frame_type = NDIlib_recv_capture_v2 (pNDI_recv, & video_frame, NULL, & metadata_frame, 0);
NDI_frame_type is always equal to NDIlib_frame_type_none and then the program crashes after several calls to this function. I can't find the reason for this for the moment, because this example-receiver can only work in NewTek NDI 3.5 SDK? Thank you very much
Just writing to let you know macOs complain about the absence of CopyMemory function and __int32 data type in your addon.
Thanks
PS: I could make it run with the following:
#define CopyMemory(Destination,Source,Length) memcpy((Destination),(Source),(Length))
I've heard internally it is the same function.
and changing unsigned __int32 to __int32_t
Any change to run this on Linux,
to be more specific on a Raspberry Pi ?
Would be amazing to build some simple NDI receiving boxes based on openframeworks.
Hi, I'm working on making a proposal for #42 but, pulling latest changes eec7ef99f4fc7cad8d710ac41d4f0761bc616a79 made the addon not able to compile on macos.
Machine: Macbook Pro M2 Max
OS: macOS 13.2.1 (arm)
Openframeworks version: commit cb8c7af
NDI installed version: 5.6.0
io.h
file not found referenced in ofxNDIdynloader.h#L31. As far as I know, this is a function only available in MSVC compiler.
Prior to this last commit it compiled and worked fine in macOS.
i tried sending two NDI streams from my app by creating two ofxNDIsender
objects, however when i run ndiSender.CreateSender
on the second one i get this error:
ofxNDIsend::CreateSender - no pNDI_send
i quickly reproduced this by modifying the example-sender
code to use a second sender and saw same result.
is this expected behavior ? or should i be able to send two streams from same openframeworks app ?
(i am on linux btw - popos)
I've just noticed ofxNDI is not working when compiling with Release instead of Debug on macOS (not tested on ubuntu yet)
Steps to reproduce:
try to compile example-receiver, selecting release in XCode
error
Thread 1: EXC_BAD_ACCESS (code=1, address=0x1)
in ofxNDIreceive.cpp, line 687
pNDI_recv = p_NDILib->recv_create_v3(&NDI_recv_create_desc);
Hello @leadedge ,
just a small thing…
When creating a new oF project with the Project Generator,
the standard workflow,
that file is causing errors:
then must be commented or deleted manually.
https://github.com/leadedge/ofxNDI/blob/master/src/shaders/readme.txt
Maybe you can comment the content or to move the file if you like.
To avoid this manual remove...
Here I am on Windows10 / VS 2022
Hello @leadedge ,
Should the add-on work on macOS?
Should I make some special setup?
I am on Big Sur Xcode 13,
it compiles but crashes when opening on:
// Get NDI dll version number
std::string ofxNDIsender::GetNDIversion()
{
return NDIsender.GetNDIversion();
}
// Get the current NDI SDK version
std::string ofxNDIsend::GetNDIversion()
{
return p_NDILib->version();
}
Hi, I re-open this issue
The dimitre fork work well in my mac os (Ventura 13.5.2) and xcode (14.3.1), but not your ofxNDI :
I try to make the dimitre's modifications in your last commit, but style the same errors :
"basically I've renamed libs/NDI/export to libs/NDI/lib
updated addon_config.mk
and copied libndi.dylib to libs/NDI/lib/osx"
And thx a lot for all !
Where is ofmain.h?
i Believe these 2 steps are incorrect in the readme.
Add "ofxNDI/libs/NDI/Libs/x86" to "Linker > Input > Additional Library Directories"
Add "Processing.NDI.Lib.x86.lib" to "Linker > Additional Dependencies"
I think it should be:
Add "ofxNDI/libs/NDI/Libs/x86" to "Linker > Input > General > Additional Library Directories"
Add "Processing.NDI.Lib.x86.lib" to "Linker > Input > Additional Dependencies"
that said, still not working for me... but I haven't given up.
nothing changed , just compiled after generate project , got this error in ofxNDIutils.h
mac os high sierra
I'm having issues both in linux and macOs, using both master and testing branch.
there is one endl::endl which I think it is a typo.
both systems complains about NULL
NULL was not declared in this scope in different places.
I had to use this line to fix
#include <cstddef>
and trying to solve both brings std::floor issue, and I finished compiling adding
#include <math.h>
and using just floor.
I can submit a PR if some of this 'fixes' are ok.
Cheers
Hello @leadedge , do you now if the ndi libraries support timecode?
Hi
I got the addon to work for Linux and OSX!!, and it works great when the receiver and the sender are running on the same local computer. I will make a push request soon with the new updates.
I made a simple transfer test from Linux to Mac on a local ad-hoc wifi network, the transfer communication seems to be slow between them, and It's probably due to the poor network communication from the ad-hoc network. I know that this is probably out the scope of the issue. But do you have any recommendations to improve the wireless network communication? Such as a setting up a better local network or getting decent router ?. I just want to transfer the source in a local network.
Many thanks for the help.
i am running openframeworks: of_v0.12.0_linuxaarch64_release.tar.gz
on raspi-os: 2024-03-15-raspios-bookworm-armhf-lite.img
on a raspberry pi 4
when i try to compile the example-sender-receiver
example i get the following compile errors:
/usr/bin/ld: /home/tim/openframeworks/addons/obj/linuxaarch64/Release/ofxNDI/src/ofxNDIsend.o: in function `ofxNDIsend::SendImage(unsigned char const*, unsigned int, unsigned int, bool, bool)':
ofxNDIsend.cpp:(.text+0x1004): undefined reference to `ofxNDIutils::CopyImage(unsigned char const*, unsigned char*, unsigned int, unsigned int, unsigned int, bool, bool)'
/usr/bin/ld: /home/tim/openframeworks/addons/obj/linuxaarch64/Release/ofxNDI/src/ofxNDIsend.o: in function `ofxNDIsend::SendImage(unsigned char const*, unsigned int, unsigned int, unsigned int, bool)':
ofxNDIsend.cpp:(.text+0x11c0): undefined reference to `ofxNDIutils::FlipBuffer(unsigned char const*, unsigned char*, unsigned int, unsigned int)'
/usr/bin/ld: /home/tim/openframeworks/addons/obj/linuxaarch64/Release/ofxNDI/src/ofxNDIsender.o: in function `ofxNDIsender::ReadTexturePixels(ofTexture, unsigned int, unsigned int, unsigned char*)':
ofxNDIsender.cpp:(.text+0x604): undefined reference to `ofxNDIutils::CopyImage(unsigned char const*, unsigned char*, unsigned int, unsigned int, unsigned int, bool, bool)'
collect2: error: ld returned 1 exit status
make[1]: *** [/home/tim/openframeworks/libs/openFrameworksCompiled/project/makefileCommon/compile.project.mk:406: bin/example-sender-receiver] Error 1
make[1]: Leaving directory '/home/tim/openframeworks/addons/ofxNDI/example-sender-receiver'
make: *** [/home/tim/openframeworks/libs/openFrameworksCompiled/project/makefileCommon/compile.project.mk:129: Release] Error 2
any ideas what is going wrong here ?
i have had this addon compiling and running on rpi4 before (pretty sure it was of12.0 last time also.. so not sure why this is happening)
hi,
first off all, I have very little experience with c++ and openframeworks, so keep that in mind.
I try to use ofxNDI on mac osx, but I get the following errors:
/Data/of_v0.10.0_osx_release/addons/ofxNDI/src/ofxNDIreceive.cpp:179:33: error: use of undeclared identifier 'timeGetTime'
startTime = lastTime = (double)timeGetTime();
^
/Data/of_v0.10.0_osx_release/addons/ofxNDI/src/ofxNDIreceive.cpp:342:17: error: use of undeclared identifier 'timeGetTime'
dwStartTime = timeGetTime();
^
/Data/of_v0.10.0_osx_release/addons/ofxNDI/src/ofxNDIreceive.cpp:346:20: error: use of undeclared identifier 'timeGetTime'
dwElapsedTime = timeGetTime() - dwStartTime;
^
/Data/of_v0.10.0_osx_release/addons/ofxNDI/src/ofxNDIreceive.cpp:444:4: error: use of undeclared identifier 'strcpy_s'
strcpy_s(sendername, maxsize, senderName.c_str());
^
/Data/of_v0.10.0_osx_release/addons/ofxNDI/src/ofxNDIreceive.cpp:460:3: error: use of undeclared identifier 'strcpy_s'
strcpy_s(sendername, maxsize, NDIsenders.at(index).c_str());
^
/Data/of_v0.10.0_osx_release/addons/ofxNDI/src/ofxNDIreceive.cpp:633:32: error: use of undeclared identifier 'timeGetTime'
dwStartTime = (unsigned int)timeGetTime();
^
/Data/of_v0.10.0_osx_release/addons/ofxNDI/src/ofxNDIreceive.cpp:636:35: error: use of undeclared identifier 'timeGetTime'
dwElapsedTime = (unsigned int)timeGetTime() - dwStartTime;
^
/Data/of_v0.10.0_osx_release/addons/ofxNDI/src/ofxNDIreceive.cpp:940:11: warning: 4 enumeration values not handled in switch: 'NDIlib_frame_type_none', 'NDIlib_frame_type_error',
'NDIlib_frame_type_status_change'... [-Wswitch]
switch (NDI_frame_type) {
^
/Data/of_v0.10.0_osx_release/addons/ofxNDI/src/ofxNDIreceive.cpp:940:11: note: add missing switch cases
switch (NDI_frame_type) {
^
/Data/of_v0.10.0_osx_release/addons/ofxNDI/src/ofxNDIreceive.cpp:911:7: warning: unused variable 'bRet' [-Wunused-variable]
bool bRet = false;
^
/Data/of_v0.10.0_osx_release/addons/ofxNDI/src/ofxNDIreceive.cpp:1090:15: error: use of undeclared identifier 'floor'
frameRate = floor(1.0 / frameTime + 0.5);
^
/Data/of_v0.10.0_osx_release/addons/ofxNDI/src/ofxNDIreceive.cpp:1103:2: error: unknown type name 'LARGE_INTEGER'
LARGE_INTEGER li;
^
/Data/of_v0.10.0_osx_release/addons/ofxNDI/src/ofxNDIreceive.cpp:1119:2: error: unknown type name 'LARGE_INTEGER'
LARGE_INTEGER li;
I am not really sure how to approach from here, so any help is welcome.
best Doeke
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.