Coder Social home page Coder Social logo

cipster's People

Contributors

archi-tekt avatar azoitl avatar jkorbelra avatar liftoff-sr avatar lijunqiang123 avatar martinmelikmerkumians avatar notofug avatar ralfbrandt avatar tpham3783 avatar tswaehn 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  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  avatar  avatar  avatar  avatar  avatar  avatar

cipster's Issues

How do I implement a scanner with CIPster?

I need to create a C++ client for an Ethernet/IP Adapter that is running on a hardware device.

Does CIPster offer an API for implementing an Ethernet/IP scanner? Are there plans to add that functionality?

Does this stack support Tag Read/Write to PLC ?

I ask you a question before.

I use CIPster to communication with PLC using I/O assembly instance successfully.
Now I want to know if this stack support Tag Read/Write with PLC.
Hope your reply. Thank you!

.EDS File

Is /data/opener_sample_app.eds still representative of the sample application?
(/examples/POSIX/sample_application/sampleapplication.cc)
I am new to Ethernet/IP and I have a client that would like an EDS file that he can use when he sets up his PLC to interact with my device. I am trying to learn by example but I feel like the two might have diverged at some point.

Float/Real

I'm new to CIP/Ethernet IP. I noticed the function "put_float" in byte_bufs.h What is this for? I don't have much Ethernet/IP documentation and I'm curious if this code would support using the float data type instead of short. If not, how much work would it be to implement?

Two adapters in One host (the host has two NIC)

I open two adapters in one host PC, and the PC has two NICs, and When PLC connect with these two adapters with forward open service Cyclic class 1. The problem happens.

we have two IP address 192.168.2.2 and 192.168.2.3 for two adapter.
adapter 1 (192.168.2.2) successfully establish IO connections to PLC,
but adapter 2 (192.168.2.3) not.

adapter 2 send udp data with another IP 192.168.2.2.

I think the two adaptes mix the two IPs.
Once the IO connections established, The adapter 2 create a new producing socket. In this case, we use this new create socket to send UDP data, we cannot determine the send IP address, this will be a issue.

Communication with a device that communicates with Ethernet/ip

Hi,

I am very new to this topic, so I apologise in advance if this question is confusing.

I have a Schunk Gripper that communicates through Ethernet/ip with external devices. I want to be able to receive and send data to this device using this library. Honestly, I am very confused how it works and from where to start.
I did not even understand whether this library is what I am looking for or not.
Can someone of the authors enlighten me or provide me with some documentation where I can understand how to proceed?

Cheers,

Niccolo

Is it possible to build project with mingw under Windows?

I tried to build CIPster sample application under Windows 7 (Windows 10) 64 bit.
I installed mingw64 (release 8.1)0 and cmake (version 3.2) but cmake also prepare project to build with Visual Studio even I tried to define CMAKE_TOOLCHAIN_FILE variable (with -DCMAKE_TOOLCHAIN_FILE=) in cmake call.

I aslo tried to compile with Visual Studio but compilation finished with error - in the file byte_bufs.h is used datatype "ssize_t" whicj is not defined under Windows

show issue when compile it on ubuntu for windows

[ 4%] Building CXX object src/CMakeFiles/eip.dir/cip/ciptcpipinterface.cc.obj
/home/***/CIPster-master/source/src/cip/ciptcpipinterface.cc:18:10: fatal error: arpa/inet.h: No such file or directory
18 | #include <arpa/inet.h>
| ^~~~~~~~~~~~~
compilation terminated.
make[5]: *** [src/CMakeFiles/eip.dir/build.make:260: src/CMakeFiles/eip.dir/cip/ciptcpipinterface.cc.obj] Error 1
make[4]: *** [CMakeFiles/Makefile2:122: src/CMakeFiles/eip.dir/all] Error 2
make[3]: *** [Makefile:130: all] Error 2
make[2]: *** [CMakeFiles/eip.dir/build.make:112: build-CIPster/src/eip-stamp/eip-build] Error 2
make[1]: *** [CMakeFiles/Makefile2:105: CMakeFiles/eip.dir/all] Error 2
make: *** [Makefile:84: all] Error 2


How to solve it?

How can I insert 'raw data' on 'Attribute'?

image

Hello,

It proceeded normally until compiling and executing CIPSter's sample program. However, when I saw raw data in 'attribute' by adding an instance in the scanner program, I confirmed that there was no 128 bytes of data I wanted to create.
When using the C-based OpENER, I confirmed that 'raw data' was created without any problems.

How can I make "raw data" on "attribute"?

Additionally, I would like to ask you about how to make doxygen documents.

Stack re-entrance issues.

I am having issues with some kind of global state or re-entrance issue if I completely bring the stack down and simply bring it back up again.

The behavior is that the stack comes up and properly binds/listens. It accepts the connection and starts communication, but oddly none of the new ByteBufs ever see updated values from the PLC.

I am not stopping via a signal handler but rather the g_endStack variable, cleaning up by calling NetworkHandlerFinish() and finally ShutdownCipStack();

I then bring it back up again later by repeating the initialization procedure, I have tried using a different connection number or reusing it as a test and both ways result in the same behavior described above. I have also tried registering assemblies at a different CIP address upon restarting it and still the new address assemblies do not show updated values as the PLC communicates.

Just curious if I am missing anything or if this is something the library was coded to do? I simply desire to stop the CIP server, register different assemblies at different addresses, and bring it back up again.

EtherNET/IP resources

Hello,

I am looking at integrating a couple of devices that support EtherNET/IP and I am wondering if you could point me in the right direction.

  1. Do you have any go-to whitepapers for the EtherNET/IP protocol?
  2. If I have the device's EDS file, what is needed from that to communicate with a device? (or is it parsed when you open the connection?)

Thank you for your time,
JoeyR

Segmentation faul HandleReceivedExplicitTcpData

Hi all, I have a problem with the connection. Some month ago, I wrote a program to conenct via Ethernet/Ip with a machine that use the same protocol. I configured the assembly and it worked.
Now I have to connect with another machine where the manufacture need a EDS file. I creted an EDS file and send it but when we go to try to connect, I get this error:

screenshot from 2018-09-04 09 56 54

Error with more info and DEGUB flag activate
screenshot from 2018-09-04 09 58 46

I think that is related with the data but at this moment I dont know. Im searching since 2 week read and read, see the library and the code, but I can not find the error.

I post this message in case any person get the same error or if there is any method to identify or get more info.

Thank you in advance.

Regards,
Fran.

A buffer overflow vulnerability when using TCP to send RegisterSession requests.

Hello, when I use TCP socket on port 44818 to send the RegisterSession request message (IP: 127.0.0.1), a buffer overflow vulnerability occurs. The following is the input message (hexadecimal, only has CIP head and no CIP data) that caused the vulnerability, where 65 represents the RegisterSession message:
1

I use the command ./sample 127.0.0.1 255.255.255.0 192.168.0.1 test.com testdevice 00:15:C5:BF:D0:87 to start OpENer.

I analyzed the cause of this vulnerability: On line 581, the function starts to read CIP data, but the input message has no CIP data, which eventually triggers the overrun function and throws a custom exception, but the outer function does not catch it.

  • encap.cc:

2

3

4

Looking forward to your reply, thank you!

no build instructions. unreal to compile

I think this is invalid snippet: "<path-to-CIPster&gt/examples/WINDOWS"

I've done this


D:\src\CIPster\build>cmake -DCMAKE_TOOLCHAIN_FILE=D:\src\CIPster\source\buildsup
port\Toolchain\toolchain-mingw64.cmake -DCMAKE_BUILD_TYPE=Debug D:\src\CIPster\e
xamples\WINDOWS
-- Building for: Visual Studio 12 2013
-- The C compiler identification is MSVC 18.0.21005.1
-- The CXX compiler identification is MSVC 18.0.21005.1
-- Check for working C compiler using: Visual Studio 12 2013
-- Check for working C compiler using: Visual Studio 12 2013 -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler using: Visual Studio 12 2013
-- Check for working CXX compiler using: Visual Studio 12 2013 -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: D:/src/CIPster/build


I don't know, why is it building for msvc2013
But ok, I open "CIPster on Linux.sln" in msvc2013:


1>------ Build started: Project: ZERO_CHECK, Configuration: Debug Win32 ------
1> Checking Build System
1> CMake does not need to re-run because D:/src/CIPster/build/CMakeFiles/generate.stamp is up-to-date.
2>------ Build started: Project: eip, Configuration: Debug Win32 ------
2> Building Custom Rule D:/src/CIPster/examples/WINDOWS/CMakeLists.txt
2> CMake does not need to re-run because D:\src\CIPster\build\CMakeFiles\generate.stamp is up-to-date.
2> Creating directories for 'eip'
2> No download step for 'eip'
2> No update step for 'eip'
2> No patch step for 'eip'
2> Performing configure step for 'eip'
2> -- Building for: Visual Studio 12 2013
2> -- The C compiler identification is MSVC 18.0.21005.1
2> -- The CXX compiler identification is MSVC 18.0.21005.1
2> -- Check for working C compiler using: Visual Studio 12 2013
2> -- Check for working C compiler using: Visual Studio 12 2013 -- works
2> -- Detecting C compiler ABI info
2> -- Detecting C compiler ABI info - done
2> -- Check for working CXX compiler using: Visual Studio 12 2013
2> -- Check for working CXX compiler using: Visual Studio 12 2013 -- works
2> -- Detecting CXX compiler ABI info
2> -- Detecting CXX compiler ABI info - done
2> -- Detecting CXX compile features
2> -- Detecting CXX compile features - done
2> -- Looking for srand
2> -- Looking for srand - found
2> -- Looking for rand
2> -- Looking for rand - found
2> OBJECTS_SRC:
2> CMAKE_INSTALL_PREFIX:D:/src/CIPster/build/build-CIPster
2> -- Configuring done
2> -- Generating done
2> -- Build files have been written to: D:/src/CIPster/build/build-CIPster/src/eip-build
2> Performing build step for 'eip'
2> make: *** No targets specified and no makefile found. Stop.
2>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.CppCommon.targets(170,5): error MSB6006: "cmd.exe" exited with code 2.
3>------ Build started: Project: sample, Configuration: Debug Win32 ------
3> Building Custom Rule D:/src/CIPster/examples/WINDOWS/CMakeLists.txt
3> CMake does not need to re-run because D:\src\CIPster\build\CMakeFiles\generate.stamp is up-to-date.
3>cl : Command line warning D9002: ignoring unknown option '-std=c++0x'
3> main.cc
3> networkhandler.cc
3>D:\src\CIPster\examples\WINDOWS\networkhandler.cc(181): warning C4996: 'strerror': This function or variable may be unsafe. Consider using strerror_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
3> D:\soft\msvs2013_x86\VC\include\string.h(168) : see declaration of 'strerror'
3>D:\src\CIPster\examples\WINDOWS\networkhandler.cc(210): warning C4996: 'strerror': This function or variable may be unsafe. Consider using strerror_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
3> D:\soft\msvs2013_x86\VC\include\string.h(168) : see declaration of 'strerror'
3>D:\src\CIPster\examples\WINDOWS\networkhandler.cc(224): warning C4996: 'strerror': This function or variable may be unsafe. Consider using strerror_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
3> D:\soft\msvs2013_x86\VC\include\string.h(168) : see declaration of 'strerror'
3>D:\src\CIPster\examples\WINDOWS\networkhandler.cc(261): warning C4996: 'strerror': This function or variable may be unsafe. Consider using strerror_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
3> D:\soft\msvs2013_x86\VC\include\string.h(168) : see declaration of 'strerror'
3>D:\src\CIPster\examples\WINDOWS\networkhandler.cc(295): warning C4996: 'strerror': This function or variable may be unsafe. Consider using strerror_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
3> D:\soft\msvs2013_x86\VC\include\string.h(168) : see declaration of 'strerror'
3>D:\src\CIPster\examples\WINDOWS\networkhandler.cc(306): warning C4996: 'strerror': This function or variable may be unsafe. Consider using strerror_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
3> D:\soft\msvs2013_x86\VC\include\string.h(168) : see declaration of 'strerror'
3>D:\src\CIPster\examples\WINDOWS\networkhandler.cc(369): warning C4996: 'strerror': This function or variable may be unsafe. Consider using strerror_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
3> D:\soft\msvs2013_x86\VC\include\string.h(168) : see declaration of 'strerror'
3>D:\src\CIPster\examples\WINDOWS\networkhandler.cc(384): warning C4805: '==' : unsafe mix of type 'bool' and type 'EipBool8' in operation
3>D:\src\CIPster\examples\WINDOWS\networkhandler.cc(459): warning C4996: 'strerror': This function or variable may be unsafe. Consider using strerror_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
3> D:\soft\msvs2013_x86\VC\include\string.h(168) : see declaration of 'strerror'
3>D:\src\CIPster\examples\WINDOWS\networkhandler.cc(493): warning C4996: 'strerror': This function or variable may be unsafe. Consider using strerror_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
3> D:\soft\msvs2013_x86\VC\include\string.h(168) : see declaration of 'strerror'
3>D:\src\CIPster\examples\WINDOWS\networkhandler.cc(499): warning C4996: 'strerror': This function or variable may be unsafe. Consider using strerror_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
3> D:\soft\msvs2013_x86\VC\include\string.h(168) : see declaration of 'strerror'
3>D:\src\CIPster\examples\WINDOWS\networkhandler.cc(525): warning C4996: 'strerror': This function or variable may be unsafe. Consider using strerror_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
3> D:\soft\msvs2013_x86\VC\include\string.h(168) : see declaration of 'strerror'
3>D:\src\CIPster\examples\WINDOWS\networkhandler.cc(532): warning C4996: 'strerror': This function or variable may be unsafe. Consider using strerror_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
3> D:\soft\msvs2013_x86\VC\include\string.h(168) : see declaration of 'strerror'
3>D:\src\CIPster\examples\WINDOWS\networkhandler.cc(552): warning C4996: 'strerror': This function or variable may be unsafe. Consider using strerror_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
3> D:\soft\msvs2013_x86\VC\include\string.h(168) : see declaration of 'strerror'
3>D:\src\CIPster\examples\WINDOWS\networkhandler.cc(558): warning C4996: 'strerror': This function or variable may be unsafe. Consider using strerror_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
3> D:\soft\msvs2013_x86\VC\include\string.h(168) : see declaration of 'strerror'
3>D:\src\CIPster\examples\WINDOWS\networkhandler.cc(635): warning C4996: 'strerror': This function or variable may be unsafe. Consider using strerror_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
3> D:\soft\msvs2013_x86\VC\include\string.h(168) : see declaration of 'strerror'
3>D:\src\CIPster\examples\WINDOWS\networkhandler.cc(658): warning C4996: 'strerror': This function or variable may be unsafe. Consider using strerror_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
3> D:\soft\msvs2013_x86\VC\include\string.h(168) : see declaration of 'strerror'
3>D:\src\CIPster\examples\WINDOWS\networkhandler.cc(677): warning C4996: 'strerror': This function or variable may be unsafe. Consider using strerror_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
3> D:\soft\msvs2013_x86\VC\include\string.h(168) : see declaration of 'strerror'
3>D:\src\CIPster\examples\WINDOWS\networkhandler.cc(693): warning C4996: 'strerror': This function or variable may be unsafe. Consider using strerror_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
3> D:\soft\msvs2013_x86\VC\include\string.h(168) : see declaration of 'strerror'
3>D:\src\CIPster\examples\WINDOWS\networkhandler.cc(748): warning C4805: '==' : unsafe mix of type 'bool' and type 'EipBool8' in operation
3>D:\src\CIPster\examples\WINDOWS\networkhandler.cc(757): warning C4996: 'strerror': This function or variable may be unsafe. Consider using strerror_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
3> D:\soft\msvs2013_x86\VC\include\string.h(168) : see declaration of 'strerror'
3>D:\src\CIPster\examples\WINDOWS\networkhandler.cc(782): warning C4805: '==' : unsafe mix of type 'bool' and type 'EipBool8' in operation
3>D:\src\CIPster\examples\WINDOWS\networkhandler.cc(800): warning C4996: 'strerror': This function or variable may be unsafe. Consider using strerror_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
3> D:\soft\msvs2013_x86\VC\include\string.h(168) : see declaration of 'strerror'
3>D:\src\CIPster\examples\WINDOWS\networkhandler.cc(845): warning C4805: '==' : unsafe mix of type 'bool' and type 'EipBool8' in operation
3>D:\src\CIPster\examples\WINDOWS\networkhandler.cc(863): warning C4996: 'strerror': This function or variable may be unsafe. Consider using strerror_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
3> D:\soft\msvs2013_x86\VC\include\string.h(168) : see declaration of 'strerror'
3>D:\src\CIPster\examples\WINDOWS\networkhandler.cc(908): warning C4805: '==' : unsafe mix of type 'bool' and type 'EipBool8' in operation
3>D:\src\CIPster\examples\WINDOWS\networkhandler.cc(926): warning C4996: 'strerror': This function or variable may be unsafe. Consider using strerror_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
3> D:\soft\msvs2013_x86\VC\include\string.h(168) : see declaration of 'strerror'
3>D:\src\CIPster\examples\WINDOWS\networkhandler.cc(984): warning C4805: '==' : unsafe mix of type 'bool' and type 'EipBool8' in operation
3>D:\src\CIPster\examples\WINDOWS\networkhandler.cc(1004): warning C4996: 'strerror': This function or variable may be unsafe. Consider using strerror_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
3> D:\soft\msvs2013_x86\VC\include\string.h(168) : see declaration of 'strerror'
3> sampleapplication.cc
3> Generating Code...
3>LINK : warning LNK4012: invalid value 'X86;-static', must be 'ARM, EBC, X64, or X86'; option ignored
3>LINK : fatal error LNK1181: cannot open input file 'build-CIPster\libeip.a'
4>------ Skipped Build: Project: ALL_BUILD, Configuration: Debug Win32 ------
4>Project not selected to build for this solution configuration
========== Build: 1 succeeded, 2 failed, 0 up-to-date, 1 skipped ==========

issues with bind UDP socket in sample application compiled under Windows (with MinGw)

Sample application compiled successfully with MinGw-64 under Windows.
Now identified 2 issue when I tried to run sample application (in both cases raised error "OSError: [WinError 10049] The requested address is not valid in its context"):

  1. bind UDP socket for "global broadcast listener", file networkhandler.cc (at line about 680 - attempt to bind to address INADDR_BROADCAST, i.e. 255.255.255.255):
    if( bind( s_sockets.udp_global_broadcast_listener, address, SADDRZ ) )
  2. bind UDP socket for "local broadcast listener", file networkhandler.cc (at line about 710 - attempt to bind to address x.x.x.255, in my case it was 192.168.2.255):
    if( bind( s_sockets.udp_local_broadcast_listener, address, SADDRZ ) )

I don't know but maybe it is Windows specific issue.

I tried to change address to bind (but I am not sure that it is correct modification, at least sample application starts)

  1. for "global broadcast listener" address to bind from INET_BROADCAST to INET_ANY
  2. for "local broadcast listener" - removed "~c.network_mask" from expression, now address definition looks like
    SockAddr address( kEIP_Reserved_Port, ntohl( c.ip_address ) );

Another new buffer overflow vulnerability when using TCP to send SendRRData/SendUnitData requests.

Hello, when I use TCP socket on port 44818 to send the SendRRData request message (IP: 127.0.0.1), a new buffer overflow vulnerability occurs. The following are the input messages (hexadecimal) that caused the vulnerability (Similar SendUnitData packets can also cause this vulnerability):

The first packet is RegisterSession:
image

The second packet is SendRRData or SendUnitData:
image

I use the command ./sample 127.0.0.1 255.255.255.0 192.168.0.1 test.com testdevice 00:15:C5:BF:D0:87 to start OpENer.

I analyzed the cause of this vulnerability: Line 212 starts to read the data in the item_count field, which I set to 0x0100 (that is, 256); the following line 214 starts to use a for loop to traverse the subsequent fields, but the subsequent fields do not have so much data, which eventually triggers the overrun function and throws a custom exception, but the outer function does not catch it.

  • cpf.cc:

1
2
3

Looking forward to your reply, thank you!

A buffer overflow vulnerability when using TCP to send SendRRData/SendUnitData requests or using UDP to send SendRRData/SendUnitData requests

Hello, when I use TCP or UDP socket on port 44818 to send the SendRRData request message (IP: 127.0.0.1), a buffer overflow vulnerability occurs. The following is the input message (hexadecimal, only has CIP head and no CIP data) that caused the vulnerability, where 6f represents the SendRRData message (Similar SendUnitData packets can also cause this vulnerability):

1

I use the command ./sample 127.0.0.1 255.255.255.0 192.168.0.1 test.com testdevice 00:15:C5:BF:D0:87 to start OpENer.

I analyzed the cause of this vulnerability: For SendRRData and SendUnitData, CIP data needs two more fields, interface_handle and timeout. Lines 1048 and 1049 start to read these two fields in data, but the input message has no data, which eventually triggers the overrun function and throws a custom exception, but the outer function does not catch it.

  • encap.cc:

1

2

3

Looking forward to your reply, thank you!

Compiling on Windows

Linux works great out of the box but I require an ENIP target stack on windows. Did you port the windows related bits or just the POSIX code?

If it is possible what cmake file should I use to build with?

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.