Code Monkey home page Code Monkey logo

mmtf-cpp's Introduction

Release License Build Status (Travis)

The macromolecular transmission format (MMTF) is a binary encoding of biological structures.

This repository holds the C++-03 compatible API, encoding and decoding libraries. The MMTF specification can be found here.

Prerequisites for using MMTF in C++

You need the headers of the MessagePack C++ library (version 2.1.5 or newer). If you do not have them on your machine already, you can download the "include" directory from the MessagePack GitHub repository.

How to use MMTF

You only need to include the mmtf.hpp header in your code to use MMTF. For instance a minimal example to load an MMTF file looks as follows:

#include <mmtf.hpp>

int main(int argc, char** argv) {
    mmtf::StructureData data;
    mmtf::decodeFromFile(data, "test.mmtf");
    return 0;
}

The C++ MMTF library is header only so you do not need to compile it. If you have a source file named demo.cpp (e.g. including the code above), you can generate an executable demo.exe as follows:

g++ -I<MSGPACK_INCLUDE_PATH> -I<MMTF_INCLUDE_PATH> demo.cpp -o demo.exe

Here, <MSGPACK_INCLUDE_PATH> and <MMTF_INCLUDE_PATH> are the paths to the "include" directories of MessagePack and this library respectively.

For your more complicated projects, a CMakeLists.txt is included for you.

Installation

You can also perform a system wide installation with cmake and ninja (or make).
To do so:

mkdir build
cd build
cmake -G Ninja ..
sudo ninja install

cmake automatically sets the installation directory to /usr/local/include, if you want to install it to another *include/ directory run cmake with the command:

cmake -G Ninja -DCMAKE_INSTALL_PREFIX=/home/me/local ..

Be aware that /include is added to the end of DCMAKE_INSTALL_PREFIX and that is where your files are installed (i.e. the above would install at /home/me/local/include/).

Examples and tests

To build the tests + examples we recommend using the following lines:

# download Catch2 testing framework, msgpack-c, and the mmtf-spec test-dataset
git submodule update --init --recursive
mkdir build
cd build
cmake -G Ninja -DBUILD_TESTS=ON -Dmmtf_build_local=ON -Dmmtf_build_examples=ON ..
ninja
chmod +x ./tests/mmtf_tests
./tests/mmtf_tests

Example codes:

  • mmtf_demo.cpp: Loads an MMTF file and checks internal consistency using mmtf::StructureData::hasConsistentData.
./examples/mmtf_demo ../submodules/mmtf_spec/test-suite/mmtf/173D.mmtf
  • traverse.cpp: Loads an MMTF file and dumps it in human-readable forms.
./examples/traverse ../submodules/mmtf_spec/test-suite/mmtf/173D.mmtf
./examples/traverse ../submodules/mmtf_spec/test-suite/mmtf/173D.mmtf json
./examples/traverse ../submodules/mmtf_spec/test-suite/mmtf/173D.mmtf print
  • print_as_pdb.cpp: Loads an MMTF file and prints it in pdb format.
./examples/print_as_pdb ../submodules/mmtf_spec/test-suite/mmtf/173D.mmtf

Benchmark

Using the following simple code:

#include <mmtf.hpp>


int main(int argc, char** argv)
{
        for (int i=1; i<argc; ++i) {
                mmtf::StructureData sd;
                mmtf::decodeFromFile(sd, argv[i]);
        }
}

compiled via:

g++ -Ofast -Immtf/include  -Imsgpack/include  decode_all_mmtf.cpp

We are able to load 153,987 mmtf files (current size of the pdb) or 14.3GB from an SSD in 211.3 seconds (averaged over 4 runs with minimal differences between the runs).

Code documentation

You can generate a doxygen based documentation of the library by calling doxygen in the docs folder. You will need doxygen 1.8.11 or later for that. Open docs/html/index.html to see the generated documentation.

mmtf-cpp's People

Contributors

danpf avatar gtauriello avatar josemduarte avatar luthaf avatar speleo3 avatar

Stargazers

 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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mmtf-cpp's Issues

Make path to Catch2 configurable.

From what I understand, the catch2 path is set here:

set(CATCH_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/Catch2/single_include)

However, this make building mmtf with tests enable failed when trying to make it a linux package, because it could not find catch2 dependency that was added to the linux package build recipe.

I build the package using openSUSE's build service.

https://build.opensuse.org/package/live_build_log/home:andythe_great/mmtf-cpp/openSUSE_Tumbleweed/x86_64

[   85s] ../tests/mmtf_tests.cpp:8:10: fatal error: catch.hpp: No such file or directory
[   85s]     8 | #include "catch.hpp"
[   85s]       |          ^~~~~~~~~~~
[   85s] compilation terminated. 

Type guessing in MapDecoder?

I was thinking of ways to help generic parsing of custom properties (e.g. imagine being able to visualize whatever anyone adds as custom atom or residue properties in an MMTF file in PyMOL ;-)). This is complementary #13 and related to possible extensions of the MMTF spec, where we know what per-atom/per-residue/... properties are (see rcsb/mmtf#32).

My idea is to extend the MapDecoder class with a guessType function which returns an enum for all possible types. Currently that would be something like:

enum DecodableType {
  NOT_SUPPORTED,
  NO_KEY,
  FLOAT,
  INT32,
  CHAR,
  STRING,
  FLOAT_VECTOR,
  INT8_VECTOR,
  INT16_VECTOR,
  INT32_VECTOR,
  STRING_VECTOR,
  CHAR_VECTOR
}

The first two are if key is not found or type is not supported. A user could then use that output and decide to call decode with an appropriately typed object. I think it should be possible to implement something like this with rather minimal changes.

What do you guys think?

msgpack-c/include not detected, despite directory being present

Hi,

I have written a spec file for building this in the openSUSE Build Service (OBS). Here it is in full. In it I'm essentially downloading a tar.gz archive of:

  1. Commit 63e58a9 of this repository.
  2. Commit 7a98138f27f27290e680bf8fbf1f8d1b089bf138 of the msgpack-c repository.
  3. Commit 8c8883457e54fb460908a57d801212c56a603aec of the mmtf_spec repo.
  4. Commit cf4b7eead92773932f32c7efd2612e9d27b07557 of the Catch2 repo.

Then:

  • Extracting (1), changing into the resulting directory
  • Removing the empty mmtf_spec, msgpack-c and Catch2 directories
  • Extracting (2), renaming the resulting directory as msgpack-c
  • Extracting (3), renaming the resulting directory as mmtf_spec
  • Extracting (4), renaming the resulting directory as Catch2

Then running (most of this is inherited from the %cmake macro):

    find . -name CMakeLists.txt \
        -exec sed -i -re '/^[[:blank:]]*[sS][eE][tT][[:blank:]]*\([[:blank:]]*(CMAKE_BUILD_TYPE|CMAKE_COLOR_MAKEFILE|CMAKE_INSTALL_PREFIX|CMAKE_VERBOSE_MAKEFILE).*\)/{s/^/#IGNORE /}' {} + 
    mkdir -p build 
    cd build 
    /usr/bin/cmake $OLDPWD/. \
        -G"Unix Makefiles" \
        -DCMAKE_INSTALL_PREFIX:PATH=/usr \
        -DINCLUDE_INSTALL_DIR:PATH=/usr/include \
        -DLIB_INSTALL_DIR:PATH=/usr/lib64 \
        -DSYSCONF_INSTALL_DIR:PATH=/etc \
        -DSHARE_INSTALL_PREFIX:PATH=/usr/share \
        -DCMAKE_INSTALL_LIBDIR:PATH=/usr/lib64 \
        -DCMAKE_BUILD_TYPE=RelWithDebInfo \
        -DCMAKE_C_FLAGS="${CFLAGS:--O2 -g -m64 -fmessage-length=0 -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables} -DNDEBUG" \
        -DCMAKE_CXX_FLAGS="${CXXFLAGS:--O2 -g -m64 -fmessage-length=0 -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables} -DNDEBUG" \
        -DCMAKE_Fortran_FLAGS="${FFLAGS:--O2 -g -m64 -fmessage-length=0 -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables} -DNDEBUG" \
        -DCMAKE_EXE_LINKER_FLAGS="-Wl,--as-needed -Wl,--no-undefined -Wl,-z,now" \
        -DCMAKE_MODULE_LINKER_FLAGS="-Wl,--as-needed" \
        -DCMAKE_SHARED_LINKER_FLAGS="-Wl,--as-needed -Wl,--no-undefined -Wl,-z,now" \
%if "lib64" == "lib64" 
        -DLIB_SUFFIX=64 \
%endif 
        -DCMAKE_SKIP_RPATH:BOOL=ON \
        -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON \
        -DBUILD_SHARED_LIBS:BOOL=ON \
        -DBUILD_STATIC_LIBS:BOOL=OFF \
        -DCMAKE_COLOR_MAKEFILE:BOOL=OFF \
        -DCMAKE_INSTALL_DO_STRIP:BOOL=OFF \
        -DCMAKE_MODULES_INSTALL_DIR=/usr/share/cmake/Modules \
        -DCMAKE_BUILD_TYPE:STRING=Release \
        -DMSGPACKC_INCLUDE_DIR=msgpack-c/include

(and yes I have tried omitting the final line and it returned the same error as it doesn't seem to be recognized by cmake) and I received the output:

[    2s] + /usr/bin/cmake /home/abuild/rpmbuild/BUILD/mmtf-cpp-63e58a9057ee684b5a0a409932e7fc2126894fc0/. '-GUnix Makefiles' -DCM                                                                                                                                      AKE_INSTALL_PREFIX:PATH=/usr -DINCLUDE_INSTALL_DIR:PATH=/usr/include -DLIB_INSTALL_DIR:PATH=/usr/lib64 -DSYSCONF_INSTALL_DIR:PATH                                                                                                                                      =/etc -DSHARE_INSTALL_PREFIX:PATH=/usr/share -DCMAKE_INSTALL_LIBDIR:PATH=/usr/lib64 -DCMAKE_BUILD_TYPE=RelWithDebInfo '-DCMAKE_C_                                                                                                                                      FLAGS=-O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector-strong -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protectio                                                                                                                                      n -DNDEBUG' '-DCMAKE_CXX_FLAGS=-O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector-strong -funwind-tables -fasynchronous-unwind-table                                                                                                                                      s -fstack-clash-protection -DNDEBUG' '-DCMAKE_Fortran_FLAGS=-O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector-strong -funwind-table                                                                                                                                      s -fasynchronous-unwind-tables -fstack-clash-protection -DNDEBUG' '-DCMAKE_EXE_LINKER_FLAGS=-Wl,--as-needed -Wl,--no-undefined -W                                                                                                                                      l,-z,now' -DCMAKE_MODULE_LINKER_FLAGS=-Wl,--as-needed '-DCMAKE_SHARED_LINKER_FLAGS=-Wl,--as-needed -Wl,--no-undefined -Wl,-z,now'                                                                                                                                       -DLIB_SUFFIX=64 -DCMAKE_SKIP_RPATH:BOOL=ON -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON -DBUILD_SHARED_LIBS:BOOL=ON -DBUILD_STATIC_LIBS:BOOL                                                                                                                                      =OFF -DCMAKE_COLOR_MAKEFILE:BOOL=OFF -DCMAKE_INSTALL_DO_STRIP:BOOL=OFF -DCMAKE_MODULES_INSTALL_DIR=/usr/share/cmake/Modules -DCMA                                                                                                                                      KE_BUILD_TYPE:STRING=Release -DMSGPACKC_INCLUDE_DIR=msgpack-c/include                                                                                                                                                                                                  
[    3s] -- The CXX compiler identification is GNU 8.2.1                                                                                                                                                                                                               
[    3s] -- Check for working CXX compiler: /usr/bin/c++                                                                                                                                                                                                               
[    3s] -- Check for working CXX compiler: /usr/bin/c++ -- works                                                                                                                                                                                                      
[    3s] -- Detecting CXX compiler ABI info                                                                                                                                                                                                                            
[    3s] -- Detecting CXX compiler ABI info - done                                                                                                                                                                                                                     
[    3s] -- Detecting CXX compile features                                                                                                                                                                                                                             
[    4s] -- Detecting CXX compile features - done                                                                                                                                                                                                                      
[    4s] CMake Warning at CMakeLists.txt:29 (find_package):                                                                                                                                                                                                            
[    4s]   By not providing "Findmsgpack.cmake" in CMAKE_MODULE_PATH this project has                                                                                                                                                                                  
[    4s]   asked CMake to find a package configuration file provided by "msgpack", but                                                                                                                                                                                 
[    4s]   CMake did not find one.                                                                                                                                                                                                                                     
[    4s]                                                                                                                                                                
[    4s]   Could not find a package configuration file provided by "msgpack" with any                                                                                                                                                                                  
[    4s]   of the following names:                                                                                                                                                                                                                                     
[    4s]                                                                                                                                                                
[    4s]     msgpackConfig.cmake                                                                                                                                                                                                                                    
[    4s]     msgpack-config.cmake                                                                                                                                                                                                                                      
[    4s]                                                                                                                                                                
[    4s]   Add the installation prefix of "msgpack" to CMAKE_PREFIX_PATH or set                                                                                                                                                                                        
[    4s]   "msgpack_DIR" to a directory containing one of the above files.  If                                                                                                                                                                                         
[    4s]   "msgpack" provides a separate development package or SDK, be sure it has                                                                                                                                                                                    
[    4s]   been installed.                                                                                                                                                                                                                  
[    4s]                                                                                                                                                                
[    4s]                                                                                                                                                                
[    4s] -- Configuring done                                                                                                                                                                                                                        
[    4s] -- Generating done                                                                                                                                                                                                                     
[    4s] CMake Warning:                                                                                                                                                                                                         
[    4s]   Manually-specified variables were not used by the project:                                                                                                                                                                                                  
[    4s]                                                                                                                                                                
[    4s]     BUILD_STATIC_LIBS                                                                                                                                                                                                                              
[    4s]     CMAKE_C_FLAGS
[    4s]     CMAKE_Fortran_FLAGS
[    4s]     CMAKE_INSTALL_DO_STRIP
[    4s]     CMAKE_INSTALL_LIBDIR
[    4s]     CMAKE_MODULES_INSTALL_DIR
[    4s]     CMAKE_SKIP_RPATH
[    4s]     INCLUDE_INSTALL_DIR
[    4s]     LIB_INSTALL_DIR
[    4s]     LIB_SUFFIX
[    4s]     MSGPACKC_INCLUDE_DIR
[    4s]     SHARE_INSTALL_PREFIX
[    4s]     SYSCONF_INSTALL_DIR
[    4s] 
[    4s] 

(ignore the [ ns] at the start that's related to the OBS). I've checked out your CMakeLists.txt file and it seems like cmake should run fine without any need to manually specify the MSGPACKC_INCLUDE_DIR variable, so long as the msgpack-c source directory is in the top level of this project's source directory. So since this is the case, this would seem to qualify as a bug in this project's cmake set up.

Thanks for your time,
Brenton

Branch, or release without submodules

If any program wants to include mmtf-cpp as a submodule they probably don't want to include all of our submodules too, as they're large, and take a long time to download.
(Basically you cant use: git submodule update --init --recursive)

we should think of a way to make a branch or release without the submodules. I think it should be possible with some travis-ci voodoo, but I don't know travis at all.

Add support for >=msgpack-5.0.0

Since version 5.0.0 the CMake package installed by msgpack-c C++ library has been called "msgpackc-cxx". Seeing as mmtf-cpp build scripts look for that package it would be good for them to account for this change, even though as far as I can see all that it actually results in is a warning produced by cmake.

Tag a release

It would be nice to have a commit tagged as a release (i.e. "v1.0.0" or even "v0.01" if you want to indicate some level of instability). This would be useful because I'd like to make a conda-forge recipe for this project.

Additionally, it would be even better if a release archive was prepared and uploaded to the GitHub releases page without the submodules etc. I think this relates to #21. It could probably be automated with a CI job, but this would be more work and a simple tagged commit would still be very useful in the meantime.

Trajectory file storage and transmission

I am trying to write out MD trajectory in a format which will make it easy to visualize via nglviewer. Does mmtf-cpp write out trajectory data as well? If so, is there an example script showing the intended usage?

Thanks

Segmentation fault with -march=native

OS: Ubuntu 18.04 LTS
Compiler: GCC 7.4.0 (7.4.0-1ubuntu1~18.04.1)
CPU: Intel(R) Core(TM) i5-4460S CPU @ 2.90GHz

Compiling the code with -march=native segfaults in the functions dealing with endianness. To reproduce:

cd mmtf-cpp
mkdir build && cd build
cmake -DBUILD_TEST=ON -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS='-march=native' ..
make && ctest

Here is the corresponding LLDB session

(lldb) target create "./tests/mmtf_tests"
Current executable set to './tests/mmtf_tests' (x86_64).
(lldb) r
Process 29356 launched: './tests/mmtf_tests' (x86_64)
Process 29356 stopped
* thread #1, name = 'mmtf_tests', stop reason = signal SIGSEGV: invalid address (fault address: 0x0)
    frame #0: 0x00005555555bd210 mmtf_tests`mmtf::BinaryDecoder::decodeFromBytes_(std::vector<int, std::allocator<int> >&) [inlined] __bswap_32(__bsx=<unavailable>) at byteswap.h:47
   44  	static __inline unsigned int
   45  	__bswap_32 (unsigned int __bsx)
   46  	{
-> 47  	  return __builtin_bswap32 (__bsx);
   48  	}
   49  	# elif __GNUC__ >= 2
   50  	#  if __WORDSIZE == 64 || (defined __i486__ || defined __pentium__	      \
(lldb) bt
* thread #1, name = 'mmtf_tests', stop reason = signal SIGSEGV: invalid address (fault address: 0x0)
  * frame #0: 0x00005555555bd210 mmtf_tests`mmtf::BinaryDecoder::decodeFromBytes_(std::vector<int, std::allocator<int> >&) [inlined] __bswap_32(__bsx=<unavailable>) at byteswap.h:47
    frame #1: 0x00005555555bd210 mmtf_tests`mmtf::BinaryDecoder::decodeFromBytes_(std::vector<int, std::allocator<int> >&) [inlined] assignBigendian4(src=<unavailable>, dst=<unavailable>) at binary_decoder.hpp:124
    frame #2: 0x00005555555bd210 mmtf_tests`mmtf::BinaryDecoder::decodeFromBytes_(std::vector<int, std::allocator<int> >&) at binary_decoder.hpp:151
    frame #3: 0x00005555555bd10d mmtf_tests`mmtf::BinaryDecoder::decodeFromBytes_(this=0x0000555555858601, output=size=52) at binary_decoder.hpp:440
    frame #4: 0x00005555555bfde5 mmtf_tests`void mmtf::BinaryDecoder::decode<std::vector<int, std::allocator<int> > >(this=0x00007fffffffc520, output=size=52) at binary_decoder.hpp:304
    frame #5: 0x00005555555c0109 mmtf_tests`void mmtf::MapDecoder::decode<std::vector<int, std::allocator<int> > >(this=0x00007fffffffc880, key="bondAtomList", required=<unavailable>, target=size=52) const at map_decoder.hpp:196
    frame #6: 0x00005555555e77e3 mmtf_tests`mmtf::impl::decodeFromMapDecoder(data=0x00007fffffffccc0, md=0x00007fffffffc880) at msgpack_decoders.hpp:55
    frame #7: 0x00005555555e8315 mmtf_tests`mmtf::decodeFromFile(mmtf::StructureData&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) [inlined] mmtf::decodeFromMapDecoder(md=<unavailable>, data=<unavailable>) at decoder.hpp:103
    frame #8: 0x00005555555e830a mmtf_tests`mmtf::decodeFromFile(data=0x00007fffffffccc0, filename=<unavailable>) at decoder.hpp:123
    frame #9: 0x00005555555a0c3e mmtf_tests`::____C_A_T_C_H____T_E_S_T____0() at mmtf_tests.cpp:47
    frame #10: 0x000055555556bd5e mmtf_tests`Catch::RunContext::invokeActiveTestCase() [inlined] Catch::TestInvokerAsFunction::invoke(this=<unavailable>) const at catch.hpp:9918
    frame #11: 0x000055555556bd5b mmtf_tests`Catch::RunContext::invokeActiveTestCase() [inlined] Catch::TestCase::invoke(this=<unavailable>) const at catch.hpp:9819
    frame #12: 0x000055555556bd3e mmtf_tests`Catch::RunContext::invokeActiveTestCase(this=0x00007fffffffdd60) at catch.hpp:8701
    frame #13: 0x0000555555578b50 mmtf_tests`Catch::RunContext::runCurrentTest(this=0x00007fffffffdd60, redirectedCout="\x90����, redirectedCerr="\xb0����) at catch.hpp:8675
    frame #14: 0x0000555555593641 mmtf_tests`Catch::RunContext::runTest(this=0x00007fffffffdd60, testCase=<unavailable>) at catch.hpp:8464
    frame #15: 0x0000555555593dc6 mmtf_tests`Catch::(anonymous namespace)::runTests(config=std::__shared_ptr<Catch::Config, 4>::element_type @ 0x00005555558426a0) at catch.hpp:9006
    frame #16: 0x00005555555954e1 mmtf_tests`Catch::Session::runInternal(this=0x00007fffffffe0b0) at catch.hpp:9193
    frame #17: 0x00005555555955ca mmtf_tests`Catch::Session::run(this=0x00007fffffffe0b0) at catch.hpp:9147
    frame #18: 0x0000555555564823 mmtf_tests`main at catch.hpp:9115
    frame #19: 0x000055555556481b mmtf_tests`main
    frame #20: 0x0000555555564814 mmtf_tests`main(argc=<unavailable>, argv=0x00007fffffffe308) at catch.hpp:12496
    frame #21: 0x00007ffff706fb97 libc.so.6`__libc_start_main(main=(mmtf_tests`main at catch.hpp:12493), argc=1, argv=0x00007fffffffe308, init=<unavailable>, fini=<unavailable>, rtld_fini=<unavailable>, stack_end=0x00007fffffffe2f8) at libc-start.c:310
    frame #22: 0x0000555555565caa mmtf_tests`_start + 42

I have no idea what is going on here =/

Support bondResonanceList for v1.1dev specs

Make sure the encoder and decoder here are ready for the new bondResonanceList in MMTF's v1.1dev specs of MMTF, while still being able to read v1.0 files properly.

Changes in MMTF specs are here: rcsb/mmtf@913a092

Expected changes needed in code (needs double-checking):

  • Support Type 16 binary encoding (run-length for 8-bit array)
  • Add bondResonanceList field and decode/encode it if given
  • Make bond*List fields within groupList entries optional (i.e. ok even for key to be missing)
  • Update version string in StructureData

In all changes, we need to make sure that any v1.0 compatible decoder can still read our files and that any v1.0 MMTF file can still be read properly...

No targets to build

In the FreeBSD port that I am trying to create ninja doesn't find anything to do:

===>  Building for mmtf-g20180730
ninja: no work to do.

access to custom fields

This is a feature request to complement pull request #12. The API should make custom fields accessible.

Example how this could look like (better API proposals welcome):

mmtf::StructureData data;
std::vector<int32_t> colorList;  // custom field

mmtf::MapDecoder md = mmtf::mapDecoderFromFile("test.mmtf");  // proposed API

md.decode(data);  // proposed API
md.decode("pymolColorList", false, colorList);

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.