Code Monkey home page Code Monkey logo

ngs's Introduction

ngs

ANNOUNCEMENTS:

This repository is now frozen. The NGS project has moved to https://github.com/ncbi/sra-tools/ngs. See the full announcement below.

February 10, 2022

NCBI's SRA changed the source build system to use CMake in toolkit release 3.0.0. This change is an important step to improve developers' productivity as it provides unified cross platform access to support multiple build systems. This change affects developers building NCBI SRA tools from source. Old makefiles and build systems are no longer supported.

This change also includes the structure of GitHub repositories, which underwent consolidation to provide an easier environment for building tools and libraries (NGS libs and dependencies are consolidated). Consolidation of NGS libraries and dependencies provides better usage scope isolation and makes building more straightforward.

Affected repositories

  1. ncbi/ngs (This repository)

    This repository is frozen. All future development will take place in GitHub repository ncbi/sra-tools (this repository), under subdirectory ngs/.

  2. ncbi/ncbi-vdb

    This project's build system is based on CMake. The libraries providing access to SRA data in VDB format via the NGS API have moved to GitHub repository ncbi/sra-tools.

    Old (base URL: https://github.com/ncbi/ncbi-vdb) New (base URL: https://github.com/ncbi/sra-tools)
    libs/ngs ngs/ncbi/ngs
    libs/ngs-c++ ngs/ncbi/ngs-c++
    libs/ngs-jni ngs/ncbi/ngs-jni
    libs/ngs-py ngs/ncbi/ngs-py
    libs/vdb-sqlite libs/vdb-sqlite
    test/ngs-java test/ngs-java
    test/ngs-python test/ngs-python
  3. ncbi/sra-tools

    This project's build system is based on CMake. The project acquired some new components, as listed in the table above.


NGS Language Bindings

NGS is a new, domain-specific API for accessing reads, alignments and pileups produced from Next Generation Sequencing. The API itself is independent from any particular back-end implementation, and supports use of multiple back-ends simultaneously. It also provides a library for building new back-end "engines". The engine for accessing SRA data is contained within the sister repository ncbi-vdb.

The API is currently expressed in C++, Java and Python languages. The design makes it possible to maintain a high degree of similarity between the code in one language and code in another - especially between C++ and Java.

Distribution of NGS APIs and Examples

You can find information about building and running examples in README file located in tar archives.

Documentation

Further documentation is available on the wiki.

ngs's People

Contributors

a-nikitiuk avatar aboshkin avatar aiskhakov avatar alexukr avatar boshkins avatar durbrow avatar kdurbrow avatar klymenko avatar ksrodarmer avatar kwrodarmer avatar mdshw5 avatar rekado avatar seandavi avatar wraetz avatar yaschenk 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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ngs's Issues

configure script needs to be run in subdirectories

When using the top-level ./configure script, it appears that at least some of the subdirectory configure scripts are not being run. So, I have to do:

./configure
make -C ngs-sdk
make -C ngs-sdk install
make -C ngs-java
make -C ngs-java install
cd ngs-bam
./configure
cd ..
make -C ngs-bam
make -C ngs-bam install

Is this expected with a fresh git checkout from today?

Deploy to PyPi?

We would find it very useful if this software could be installed using existing software channels.

Configure fails if ngs-sdk is not made previously

Doing a clean ./configure from the source, the part configuring ngs-bam fails because it complains it cannot find ngs-sdk, which isn't made yet. So after ./configure bails, doing make -C ngs-sdk and then reconfigure and make works. It would probably be better to handle this cleanly.

CONFIGURING ngs-bam
Configuring NGS-BAM package
checking system type... Linux
checking machine architecture... x86_64
checking NGS-BAM version... 1.1.0
checking for supported architecture... x86_64 (64 bits) is supported
checking for supported OS... Linux (linux) is supported
checking for supported tool chain... gcc tool chain is supported
checking for g++... yes
checking whether gcc accepts -Wno-array-bounds... yes
checking for ngs-sdk package...
        includes... ../ngs-sdk
configure: error: required ngs-sdk package not found.

Remove silent updater

This feature makes the API SDK not appropriate for production environments. Silently updating the libraries causes long wait times with no explanation.

setup/konfigure.perl accidentally substitutes version string in directory

The konfigure.perl script generates a rule for installing library symlinks like this:

$(INST_LIBDIR)$(BITS)/%.$(VERSION_SHLX): $(LIBDIR)/%.$(VERSION_SHLX)
    @ echo -n "installing '$(@F)'... "
    @ if cp $^ $@ && chmod 755 $@;                         \
      then                                                 \
          rm -f $(subst $(VERSION),$(MAJVERS),$@) $(subst $(VERSION_SHLX),$(SHLX),$@);    \
          ln -s $(@F) $(subst $(VERSION),$(MAJVERS),$@);   \
          ln -s $(subst $(VERSION),$(MAJVERS),$(@F)) $(subst $(VERSION_SHLX),$(SHLX),$@); \
          echo success;                                    \
      else                                                 \
          echo failure;                                    \
          false;                                           \
      fi

The subst macro calls are dangerous because they replace all occurrences of the pattern with the replacement string, not just the suffix. This is a problem when INST_LIBDIR includes the version string as is the case in the package outputs of GNU Guix.

This could be mitigated by replacing $(subst before,after,target) with $(target:.before,.after), which should only touch the last occurrence of before.

make -C ngs-java fails.

make: Entering directory '/mnt/storage/ncbi/ngs/ngs-java'
*** File 'Makefile.config.linux.x86_64' is missing. Please run ./configure
/mnt/storage/ncbi/ngs/ngs-java/Makefile.rules:71: recipe for target 'Makefile.config.linux.x86_64' failed
make: *** [Makefile.config.linux.x86_64] Error 1
make: Leaving directory '/mnt/storage/ncbi/ngs/ngs-java'

I'm running this after ./configure But I just can't seem to get past this step. Am I doing something wrong? Did anyone else face this issue?

'.' in @INC no longer present

I was trying to setup NGS on my system and I was running into the error:

Can't locate package.prl in @inc

I found that apparently as of v5.26, (2017-05-30) the '.' in @inc is gone by default on new compilations.

Adding '.' to PERL5LIB fixes the problem for me but I'm assuming others will run into this issue.

Concurrent access to a ReadCollection object

Is the ReadCollection Java API thread safe? I would like to use the getReadRange method on the same collection object in different threads in order to parallelise the reads download process.

Builds static libs instead of shared libs, for example libngs-c++.a.2.11.0

It builds:

libngs-adapt-c++-static.a libngs-adapt-c++.a.2      libngs-c++-static.a       libngs-c++.a.2            libngs-sdk.so             libngs-sdk.so.2.11.0
libngs-adapt-c++.a        libngs-adapt-c++.a.2.11.0 libngs-c++.a              libngs-c++.a.2.11.0       libngs-sdk.so.2

Some shared libraries aren't built, instead it created static libs like libngs-c++.a.2.11.0 with symbolic links libngs-c++.a.2, libngs-c++.a

Version: 2.11.0
OS: FreeBSD 12.2

compilation fails on Mac OS X

$ ./configure
...

$ make
make[3]: *** No rule to make target `/Users/ashish/Desktop/tmp/ngs-1.1.0/ngs-sdk/ngs/ReadCollection.hpp', needed by `/Users/ashish/ncbi-outdir/ngs-sdk/mac/clang/x86_64/rel/obj/language/c++/ReadCollection.pic.o'.  Stop.
make[2]: *** [c++] Error 2
make[1]: *** [language] Error 2
make: *** [ngs-sdk] Error 2

'install' target breaks

gmake[2]: Entering directory '/disk-samsung/freebsd-ports/biology/ngs/work/ngs-2.11.0'
Checking make status of ngs-sdk/language...
Checking make status of ngs-sdk/dispatch...
Checking make status of ngs-sdk/adapter...
Checking make status of object libraries...
Installing libraries to /disk-samsung/freebsd-ports/biology/ngs/work/stage/usr/local/lib
gmake[5]: *** No rule to make target '/disk-samsung/freebsd-ports/biology/ngs/work/stage/usr/local/lib/libngs-sdk.so.2.11.0'.  Stop.

Version: 2.11.0
OS: FreeBSD 12.2

Used this FreeBSD patch:


patch-ngs-sdk_Makefile.install      patch-ngs-sdk_setup_konfigure.perl  
[yuri@yv /disk-samsung/freebsd-ports/biology/ngs]$ cat files/patch-ngs-sdk_setup_konfigure.perl 
--- ngs-sdk/setup/konfigure.perl.orig	2021-03-15 18:08:20 UTC
+++ ngs-sdk/setup/konfigure.perl
@@ -204,7 +204,7 @@ print "checking system type... " unless ($AUTORUN);
 my ($OS, $ARCH, $OSTYPE, $MARCH, @ARCHITECTURES) = OsArch();
 println $OSTYPE unless ($AUTORUN);
 
-unless ($OSTYPE =~ /linux/i || $OSTYPE =~ /darwin/i || $OSTYPE eq 'win') {
+unless ($OSTYPE =~ /linux/i || $OSTYPE =~ /freebsd/i || $OSTYPE =~ /darwin/i || $OSTYPE eq 'win') {
     println "configure: error: unsupported system '$OSTYPE'";
     exit 1;
 }
@@ -225,7 +225,7 @@ if ($OS eq 'linux') {
 
 print "checking machine architecture... " unless ($AUTORUN);
 println $MARCH unless ($AUTORUN);
-unless ($MARCH =~ /x86_64/i || $MARCH =~ /i?86/i || $MARCH =~ /aarch64/) {
+unless ($MARCH =~ /x86_64/i || $MARCH =~ /amd64/i || $MARCH =~ /i?86/i || $MARCH =~ /aarch64/) {
     println "configure: error: unsupported architecture '$OSTYPE':'$MARCH'";
     exit 1;
 }
@@ -312,6 +312,8 @@ my $BITS;
 
 if ($MARCH =~ /x86_64/i) {
     $BITS = 64;
+} elsif ($MARCH =~ /amd64/i) {
+    $BITS = 64;
 } elsif ($MARCH eq 'fat86') {
     $BITS = '32_64';
 } elsif ($MARCH =~ /i?86/i) {
@@ -337,6 +339,25 @@ if ($OSTYPE =~ /linux/i) {
     $OSINC = 'unix';
     $TOOLS = 'gcc' unless ($TOOLS);
     $PYTHON = 'python';
+} elsif ($OSTYPE =~ /freebsd/i) {
+    $LPFX = 'lib';
+    $OBJX = 'o';
+    $LOBX = 'pic.o';
+    $LIBX = 'a';
+    $SHLX = 'so';
+    $EXEX = '';
+    $OSINC = 'unix';
+    $TOOLS = 'clang' unless ($TOOLS);
+    $PYTHON = $ENV{FREEBSD_PYTHON_CMD};
+} elsif ($OSTYPE =~ /darwin/i) {
+    $LPFX = 'lib';
+    $OBJX = 'o';
+    $LOBX = 'pic.o';
+    $LIBX = 'a';
+    $SHLX = 'dylib';
+    $EXEX = '';
+    $OSINC = 'unix';
+    $TOOLS = 'clang' unless ($TOOLS);
 } elsif ($OSTYPE =~ /darwin/i) {
     $LPFX = 'lib';
     $OBJX = 'o';

Threading model used for ReadIterator?

I am currently using the ngs::ReadIterator to extract sequence data from SRA files. I notice that when I am reading sequence data from an SRA file, there is an extra thread that appears to be part of the SRA toolkit (i.e. under linux, top reports 200% CPU activity for my application). Where is this extra thread coming from, and it there a way to control the number of threads (e.g. environment variable, API call, etc.)?

Thanks!

Any document or tutorial ?

This is the official site , i look the examples dir. But it don't have any input string.
I really just want to know, how to use it ,any example data or tutorial ?

API Documentation

Hello there,
Please excuse me if this question is answered somewhere else.

I am unsure what the API documentation looks like or whereabouts I might find it. Is there some place I can go to better understand what this package does?

I had a look through the examples but didn't find a good answer there.

Am I supposed to manually update $LD_LIBRARY_PATH and $CLASSPATH

Hi,

Sorry for the silly question but after installation when I restart my terminal in Bionic, and I type echo $LD_LIBRARY_PATH and echo $CLASSPATH, these are not updated automatically. For ncbi-vdb I just added this manually to my ~/.bashrc file:
export LD_LIBRARY_PATH=/usr/local/ncbi/ncbi-vdb/lib64:$LD_LIBRARY_PATH
export NCBI_VDB_LIBDIR=/usr/local/ncbi/ncbi-vdb/lib64

I am also confused about whether we need to do this for ngs, ncbi-vdb, and sra-tools builds. As for also for sra-tools when I type echo $PATH, the path for sra-tools was also not added automatically. Should updating your path be part of the wiki build instructions for these?

Also what does the below mean after call make install? As they do not work for me.
Use $NCBI_VDB_LIBDIR in your link commands, e.g.:
ld -L$NCBI_VDB_LIBDIR -lncbi-vdb ...

After I update my bashrc file I still get the error:
ld: cannot open output file a.out: Permission denied

Sorry these are all beginner questions, but should be easy to answer.

Brian

'install' target fails

Checking make status of ngs-sdk/language...
/usr/ports/biology/ngs-sdk/work/ngs-2.9.2/ngs-sdk/./Makefile.config.FreeBSD.amd64:115: target '/usr/local/lib' given more than once in the same rule
/usr/ports/biology/ngs-sdk/work/ngs-2.9.2/ngs-sdk/./Makefile.config.FreeBSD.amd64:115: target '/usr/local/lib' given more than once in the same rule
/usr/ports/biology/ngs-sdk/work/ngs-2.9.2/ngs-sdk/./Makefile.config.FreeBSD.amd64:115: target '/usr/local/lib' given more than once in the same rule
Checking make status of ngs-sdk/dispatch...
/usr/ports/biology/ngs-sdk/work/ngs-2.9.2/ngs-sdk/./Makefile.config.FreeBSD.amd64:115: target '/usr/local/lib' given more than once in the same rule
Checking make status of ngs-sdk/adapter...
/usr/ports/biology/ngs-sdk/work/ngs-2.9.2/ngs-sdk/./Makefile.config.FreeBSD.amd64:115: target '/usr/local/lib' given more than once in the same rule
Checking make status of object libraries...
/usr/ports/biology/ngs-sdk/work/ngs-2.9.2/ngs-sdk/./Makefile.config.FreeBSD.amd64:115: target '/usr/local/lib' given more than once in the same rule
/usr/ports/biology/ngs-sdk/work/ngs-2.9.2/ngs-sdk/./Makefile.config.FreeBSD.amd64:115: target '/usr/local/lib' given more than once in the same rule
/usr/ports/biology/ngs-sdk/work/ngs-2.9.2/ngs-sdk/./Makefile.config.FreeBSD.amd64:115: target '/usr/local/lib' given more than once in the same rule
/usr/ports/biology/ngs-sdk/work/ngs-2.9.2/ngs-sdk/./Makefile.config.FreeBSD.amd64:115: target '/usr/local/lib' given more than once in the same rule
/usr/ports/biology/ngs-sdk/work/ngs-2.9.2/ngs-sdk/./Makefile.config.FreeBSD.amd64:115: target '/usr/local/lib' given more than once in the same rule
/usr/ports/biology/ngs-sdk/work/ngs-2.9.2/ngs-sdk/./Makefile.config.FreeBSD.amd64:115: target '/usr/local/lib' given more than once in the same rule
/usr/ports/biology/ngs-sdk/work/ngs-2.9.2/ngs-sdk/./Makefile.config.FreeBSD.amd64:115: target '/usr/local/lib' given more than once in the same rule
Installing libraries to /usr/local/lib
/usr/ports/biology/ngs-sdk/work/ngs-2.9.2/ngs-sdk/./Makefile.config.FreeBSD.amd64:115: target '/usr/local/lib' given more than once in the same rule
gmake[4]: *** No rule to make target '/usr/local/lib/libngs-sdk.so.2.9.2'.  Stop.

OS: FreeBSD 11.2 amd64

Unable to build examples

(base) ubuntu@ip-172-31-72-183:~/tmp/ngs-sdk.2.10.8-linux/share$ export LD_LIBRARY_PATH=$HOME/tmp/ngs-sdk.2.10.8-linux/lib64
(base) ubuntu@ip-172-31-72-183:~/tmp/ngs-sdk.2.10.8-linux/share$ make
c++  -I/home/ubuntu/tmp/ngs-sdk.2.10.8-linux/lib64//../include -I/home/ubuntu/tmp/ngs-sdk.2.10.8-linux/lib64//../include -g -o AlignSliceTest AlignSliceTest.cpp -L/home\
/ubuntu/tmp/ngs-sdk.2.10.8-linux/lib64/ -L/home/ubuntu/tmp/ngs-sdk.2.10.8-linux/lib64/ -lncbi-ngs-c++ -lngs-c++ -lngs-bam-c++ -lncbi-ngs-c++ -lncbi-vdb-static -lngs-ada\
pt-c++ -lpthread -ldl -lm
/tmp/ccE6sCHo.o: In function `main':
/home/ubuntu/tmp/ngs-sdk.2.10.8-linux/share/AlignSliceTest.cpp:112: undefined reference to `ncbi::NGS::setAppVersionString(std::__cxx11::basic_string<char, std::char_tr\
aits<char>, std::allocator<char> > const&)'
/home/ubuntu/tmp/ngs-sdk.2.10.8-linux/share/AlignSliceTest.cpp:118: undefined reference to `ngs::ErrorMsg::toString[abi:cxx11]() const'
/tmp/ccE6sCHo.o: In function `ngs::Alignment::getReferenceSpec[abi:cxx11]() const':
/home/ubuntu/tmp/ngs-sdk.2.10.8-linux/lib64//../include/ngs/inl/Alignment.hpp:58: undefined reference to `ngs::StringRef::toString[abi:cxx11]() const'
/tmp/ccE6sCHo.o: In function `ngs::ReadCollection::getName[abi:cxx11]() const':
/home/ubuntu/tmp/ngs-sdk.2.10.8-linux/lib64//../include/ngs/inl/ReadCollection.hpp:48: undefined reference to `ngs::StringRef::toString[abi:cxx11]() const'
/tmp/ccE6sCHo.o: In function `AlignSliceTest::run_csra(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char,\
 std::char_traits<char>, std::allocator<char> >, int, int)':
/home/ubuntu/tmp/ngs-sdk.2.10.8-linux/share/AlignSliceTest.cpp:74: undefined reference to `ncbi::NGS::openReadCollection(std::__cxx11::basic_string<char, std::char_trai\
ts<char>, std::allocator<char> > const&)'
/tmp/ccE6sCHo.o: In function `AlignSliceTest::run_bam(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, \
std::char_traits<char>, std::allocator<char> >, int, int)':
/home/ubuntu/tmp/ngs-sdk.2.10.8-linux/share/AlignSliceTest.cpp:81: undefined reference to `NGS_BAM::openReadCollection(std::__cxx11::basic_string<char, std::char_traits\
<char>, std::allocator<char> > const&)'
collect2: error: ld returned 1 exit status
Makefile:85: recipe for target 'AlignSliceTest' failed
make: *** [AlignSliceTest] Error 1

Cannot build and install

When making ncbi-vdb as per instructions, get his error:

/stornext/HPCScratch/home/allnutt.t/bin/ncbi/ncbi-vdb/libs/klib/json-grammar.y:86.1-6: error: invalid directive: ‘%param’
/stornext/HPCScratch/home/allnutt.t/bin/ncbi/ncbi-vdb/libs/klib/json-grammar.y:86.8-35: error: syntax error, unexpected {...}
make[3]: *** [/stornext/HPCScratch/home/allnutt.t/bin/ncbi/ncbi-vdb/libs/klib/json-grammar.c] Error 1
make[3]: Leaving directory /stornext/HPCScratch/home/allnutt.t/ncbi-outdir/ncbi-vdb/linux/gcc/x86_64/rel/obj/libs/klib' make[2]: *** [compile] Error 2 make[2]: Leaving directory /stornext/HPCScratch/home/allnutt.t/bin/ncbi/ncbi-vdb/libs/klib'
make[1]: *** [klib] Error 2
make[1]: Leaving directory `/stornext/HPCScratch/home/allnutt.t/bin/ncbi/ncbi-vdb/libs'
make: *** [libs] Error 2

configure with a --prefix still tries to update system-level directories

Here is what I see after configure --prefix=/tmp:

make -C ngs-sdk install
make: Entering directory '/tmp/ncbi/ngs/ngs-sdk'
Checking make status of ngs-sdk/language...
Checking make status of ngs-sdk/dispatch...
Checking make status of ngs-sdk/adapter...
Checking make status of object libraries...
Installing libraries to /tmp/lib64
installing 'libngs-sdk.so.1.2.5'... success
installing 'libngs-c++.a.1.2.5'... success
installing 'libngs-adapt-c++.a.1.2.5'... success
Installing includes to /tmp/include
Installing examples to /tmp/share
Updating /usr/include/ngs                   ## NOTICE HERE
Updating /etc/profile.d/ngs-sdk.[c]sh       ## AND HERE
Use $NGS_LIBDIR in your link commands, e.g.:
      ld -L$NGS_LIBDIR -lngs-sdk ...
make: Leaving directory '/tmp/ncbi/ngs/ngs-sdk'

For users without admin or root credentials, this is likely to be problematic.

please add LICENSE file

I'm guessing it is the same as that of sra-tools, but it would be good to state it clearly in this repo. Thank you.

libngs-sdk.so.2.11.0 doesn't have a SONAME

Ports framework complains that the shared library doesn't have SONAME:

Warning: /disk-samsung/freebsd-ports/biology/ngs/work/stage/usr/local/lib/libngs-sdk.so.2.11.0 doesn't have a SONAME.

Questions on build practices

If I wanted to build a version of the NGS API in a single directory (like the binary releases), how would I go about doing that? The default for building from source is to install into system locations and to use a home directory subdirectory for building. Is a build in-place possible?

NGS toolkit should provide an API to set cache configuration options

Currently when accessing read collections by using the NGS API download reads are cached in the path $HOME/ncbi/public for open-access data, and the path $HOME/ncbi/dbGaP-xxxx for other.

There's no way to change these paths in the current API. It would be useful to have the ability to set a custom path for cached reads, including the possibility to disable the caching feature at all.

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.