Code Monkey home page Code Monkey logo

radiance's People

Contributors

empornium avatar hierrastrunger avatar itismadness avatar power2all avatar studiomax 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

Watchers

 avatar  avatar  avatar  avatar

radiance's Issues

Nginx Conf

I have created the nginx conf for luminance inside of /etc/nginx/sites-availabe aptly named luminance. My question is will I also need a second conf file for radiance to connect via SSL on its own separate port? I did check but there doesn't seem to be an SSL Nginx conf example for Radiance. Would you be so kind as to post an example?

Thank you

Nginx Tracker Conf

I really don't want to be running the tracker on the same server as Luminance (looks nice btw) and I'm struggling a little bit in setting up an nginx conf for the tracker. Would you guys be so kind as to post an example for an nginx tracker conf?

Cheers,

Jamie

Compiling issue FreeBSD 11.2

$ make
make  all-recursive
Making all in src
  CXX      logger.o
In file included from logger.cpp:16:
In file included from /usr/local/include/boost/log/support/date_time.hpp:29:
In file included from /usr/local/include/boost/date_time/local_time/local_time_types.hpp:11:
In file included from /usr/local/include/boost/date_time/local_time/local_date_time.hpp:18:
In file included from /usr/local/include/boost/date_time/posix_time/posix_time.hpp:24:
In file included from /usr/local/include/boost/date_time/posix_time/time_formatters.hpp:12:
In file included from /usr/local/include/boost/date_time/gregorian/gregorian.hpp:31:
In file included from /usr/local/include/boost/date_time/gregorian/gregorian_io.hpp:16:
In file included from /usr/local/include/boost/date_time/date_facet.hpp:25:
In file included from /usr/local/include/boost/date_time/date_generator_parser.hpp:20:
In file included from /usr/local/include/boost/date_time/format_date_parser.hpp:17:
/usr/local/include/boost/date_time/special_values_parser.hpp:105:17: fatal error: 
      expected parameter declarator
    static bool likely(const string_type& str)
                ^
./radiance.h:4:42: note: expanded from macro 'likely'
#define likely(x)       __builtin_expect(!!(x), 1)
                                         ^
1 error generated.
*** Error code 1

Stop.
make[2]: stopped in /usr/home/empornium/Radiance/src
*** Error code 1

Stop.
make[1]: stopped in /usr/home/empornium/Radiance
*** Error code 1

Stop.
make: stopped in /usr/home/empornium/Radiance

Gazelle + Radiance

Would you be interested in being hired and making the necessary edits to Radiance for it to work with Gazelle?

"Could not connect to tracker"using Transmission

Greetings Gazelle fork maintainer,
Transmission works superbly well on each trackers, but few days ago, I stumbled on a tracker based on your fork, and hell arose : "Could not connect to tracker" on any Transmission based clients.

For occasional users, it wouldn't be a problem, for people with hundreds of terabytes of data to migrate, this is not acceptable to expect one to migration to more ressources hungry clients.

Maybe you could approach some tracker admins for logs (if it is something that would be logged server side) ? I assume you don't miss contacts of few people using your fork, but if my assumption is wrong I will ask some to contact you directly.

Need help with IPv6 support

Could you please explain how to configure Radiance to support both IPv4 and IPv6?
What I mean: at first it looks like that IPv6 works by default. But then I found some strange issues with the resolution of client's IP address.

As I understand it, to support both IPv4 and IPv6 I need to change listen_host to :: instead of default 0.0.0.0. And after this Radiance will listen for :::2710, which is like 0.0.0.0:2710, but for IPv6.

Then I read a bit of the codebase:

Radiance/src/events.cpp

Lines 98 to 106 in 602c347

} else if(res->ai_family == PF_INET6) {
syslog(info) << "Listening with IPv6 INET socket.";
// Attempt to enable Dual Stack
if (setsockopt(new_listen_socket, IPPROTO_IPV6, IPV6_V6ONLY, &opt, sizeof(opt)) < 0) {
syslog(fatal) << "Insufficient OS support for Dual Stacking.";
} else {
syslog(info) << "Enabled IPv4/IPv6 Dual Stack mode.";
}

So, this will enable a single Dual-Stack IPv6 socket via IPPROTO_IPV6 (and not multiple sockets, like one for IPv4 and one for IPv6).
As I understand this means that:

  • when some client connects via IPv6 we will receive native IPv6 address
  • when the client connects via IPv4 we will receive IPv6-mapped IPv4 (like ::ffff:123.123.123.123), right?

Then Radiance will handle this connection:

Radiance/src/events.cpp

Lines 267 to 278 in 602c347

char ip[INET_ADDRSTRLEN];
sockaddr_storage client_addr;
socklen_t addr_len = sizeof(client_addr);
uint16_t ip_ver = 4;
getpeername(connect_sock, (sockaddr *) &client_addr, &addr_len);
if(client_addr.ss_family == AF_INET) {
ip_ver = 4;
} else {
ip_ver = 6;
}
inet_ntop(client_addr.ss_family, get_in_addr((struct sockaddr *)&client_addr), ip, sizeof ip);
std::string ip_str = ip;

And this part is very strange.

char ip[INET_ADDRSTRLEN];

means that ip will be allocated with 16 bytes, which is enough for IPv4 address (like 123.123.123.123). But this is not enough to store any IPv6 address (< 46 bytes), and this variable must be initialized as

char ip[INET6_ADDRSTRLEN];

I tried that change and tried to connect with IPv4 address to this dual-stack enabled socket and received something like ::ffff:123.123.123.123. Then this address was passed to worker as a plain IPv6 address. But instead it must be somehow converted back to 123.123.123.123.

And finally when the server is listening :::2710, it does not work correctly with IPv4 nor IPv6.

Or am I missing something?

Query error: Field 'active' doesn't have a default value in flush peer queue with a queue size: 4

Hello,

I hhave an issue with peers updates, here is a part from radiance.log. Tried to reinstall, no errors during compile, added database schema from this repo but no success. Any ideas what cand I do? Thanks

[2024-08-13 20:45:00] [trace] MySQL connection release called
[2024-08-13 20:45:00] [trace] MySQL connection released: 2 (1)
[2024-08-13 20:45:00] [trace] MySQL connection release called
[2024-08-13 20:45:00] [trace] MySQL connection released: 2 (0)
[2024-08-13 20:45:00] [trace] Connecting to DB to flush peer queue
[2024-08-13 20:45:00] [trace] MySQL connection grab called
[2024-08-13 20:45:00] [trace] MySQL connection issued: 2 (0)
[2024-08-13 20:45:00] [error] Query error: Field 'active' doesn't have a default value in flush peer queue with a queue size: 4
[2024-08-13 20:45:00] [trace] MySQL connection release called
[2024-08-13 20:45:00] [trace] MySQL connection released: 2 (1)
[2024-08-13 20:45:03] [trace] Peer flush queue size: 4, next query length: 249
[2024-08-13 20:45:05] [trace] MySQL connection release called
[2024-08-13 20:45:05] [trace] MySQL connection released: 2 (0)
[2024-08-13 20:45:05] [trace] Connecting to DB to flush peer queue
[2024-08-13 20:45:05] [trace] MySQL connection grab called
[2024-08-13 20:45:05] [trace] MySQL connection issued: 2 (0)
[2024-08-13 20:45:05] [error] Query error: Field 'active' doesn't have a default value in flush peer queue with a queue size: 4
[2024-08-13 20:45:05] [trace] MySQL connection release called
[2024-08-13 20:45:05] [trace] MySQL connection released: 2 (1)
[2024-08-13 20:45:06] [trace] Peer flush queue size: 4, next query length: 249
[2024-08-13 20:45:09] [trace] Peer flush queue size: 4, next query length: 249

./configure

checking whether pthreads work with -Kthread... no
checking whether pthreads work with -kthread... no
checking for the pthreads library -llthread... no
checking whether pthreads work with -pthread... yes
checking for joinable pthread attribute... PTHREAD_CREATE_JOINABLE
checking if more special flags are required for pthreads... no
checking for PTHREAD_PRIO_INHERIT... yes
checking how to run the C++ preprocessor... g++ -E
checking for libev library location... /usr/lib/x86_64-linux-gnu
checking for libev include path... /usr/include
checking that we can build libev programs... yes
checking for MySQL library directory... /usr/lib/x86_64-linux-gnu
checking for MySQL include directory... /usr/include/mysql
checking if we can link to MySQL C API library directly... yes
checking for MySQL++ library location... no
configure: error: Didn't find the MySQL++ library dir in '/usr/local/mysql++/lib64 /usr/local/mysql++/lib /usr/local/lib64/mysql++ /usr/local/lib/mysql++ /opt/mysql++/lib64 /opt/mysql++/lib /usr/lib64/mysql++ /usr/lib/mysql++ /usr/local/lib64 /usr/local/lib /usr/lib64 /usr/lib'

hogy tudom kideríteni hogy hol van a mysql++ library mappa?

Compiling Issue on Centos 7.4

Hello
I am getting following error when compiling. Pls help me out in resolving same.

make
(CDPATH="${ZSH_VERSION+.}:" && cd . && /bin/sh /root/Radiance/missing autoheader)
rm -f stamp-h1
touch config.h.in
cd . && /bin/sh ./config.status config.h
config.status: creating config.h
config.status: config.h is unchanged
make all-recursive
make[1]: Entering directory /root/Radiance' Making all in src make[2]: Entering directory /root/Radiance/src'
CXX config.o
CXX logger.o
CXX db.o
CXX events.o
CXX misc_functions.o
CXX radiance.o
CXX report.o
CXX response.o
CXX debug.o
CXX domain.o
CXX schedule.o
CXX site_comm.o
CXX user.o
CXX worker.o
CXXLD radiance
response.o: In function response(std::string const&, client_opts_t&, unsigned short)': /usr/local/include/boost/iostreams/filter/zlib.hpp:122: undefined reference to boost::iostreams::zlib::default_compression'
/usr/local/include/boost/iostreams/filter/zlib.hpp:122: undefined reference to boost::iostreams::zlib::deflated' /usr/local/include/boost/iostreams/filter/zlib.hpp:122: undefined reference to boost::iostreams::zlib::default_strategy'
response.o: In function boost::iostreams::detail::zlib_compressor_impl<std::allocator<char> >::~zlib_compressor_impl()': /usr/local/include/boost/iostreams/filter/zlib.hpp:339: undefined reference to boost::iostreams::detail::zlib_base::reset(bool, bool)'
/usr/local/include/boost/iostreams/filter/zlib.hpp:339: undefined reference to boost::iostreams::detail::zlib_base::~zlib_base()' response.o: In function boost::iostreams::basic_gzip_compressor<std::allocator >::basic_gzip_compressor(boost::iostreams::gzip_params const&, long)':
/usr/local/include/boost/iostreams/filter/zlib.hpp:334: undefined reference to boost::iostreams::detail::zlib_base::zlib_base()' /usr/local/include/boost/iostreams/filter/zlib.hpp:185: undefined reference to boost::iostreams::detail::zlib_base::do_init(boost::iostreams::zlib_params const&, bool, void* ()(void, unsigned int, unsigned int), void ()(void, void*), void*)'
response.o: In function boost::iostreams::basic_gzip_compressor<std::allocator<char> >::basic_gzip_compressor(boost::iostreams::gzip_params const&, long)': /usr/local/include/boost/iostreams/filter/gzip.hpp:671: undefined reference to boost::iostreams::zlib::best_compression'
/usr/local/include/boost/iostreams/filter/gzip.hpp:671: undefined reference to boost::iostreams::zlib::best_speed' response.o: In function boost::iostreams::basic_gzip_compressor<std::allocator >::basic_gzip_compressor(boost::iostreams::gzip_params const&, long)':
/usr/local/include/boost/iostreams/filter/zlib.hpp:334: undefined reference to boost::iostreams::detail::zlib_base::~zlib_base()' response.o: In function boost::iostreams::detail::zlib_compressor_impl<std::allocator >::filter(char const*&, char const*, char*&, char*, bool)':
/usr/local/include/boost/iostreams/filter/zlib.hpp:346: undefined reference to boost::iostreams::detail::zlib_base::before(char const*&, char const*, char*&, char*)' /usr/local/include/boost/iostreams/filter/zlib.hpp:347: undefined reference to boost::iostreams::zlib::finish'
/usr/local/include/boost/iostreams/filter/zlib.hpp:347: undefined reference to boost::iostreams::zlib::no_flush' /usr/local/include/boost/iostreams/filter/zlib.hpp:347: undefined reference to boost::iostreams::detail::zlib_base::xdeflate(int)'
/usr/local/include/boost/iostreams/filter/zlib.hpp:348: undefined reference to boost::iostreams::detail::zlib_base::after(char const*&, char*&, bool)' /usr/local/include/boost/iostreams/filter/zlib.hpp:349: undefined reference to boost::iostreams::zlib_error::check(int)'
/usr/local/include/boost/iostreams/filter/zlib.hpp:350: undefined reference to boost::iostreams::zlib::stream_end' response.o: In function boost::iostreams::detail::zlib_compressor_impl<std::allocator >::close()':
/usr/local/include/boost/iostreams/filter/zlib.hpp:354: undefined reference to boost::iostreams::detail::zlib_base::reset(bool, bool)' collect2: error: ld returned 1 exit status make[2]: *** [radiance] Error 1 make[2]: Leaving directory /root/Radiance/src'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/root/Radiance'
make: *** [all] Error 2

Users Table

I'm looking for information for the users table (not users_main) that is used in the file database.cpp. This table is not in the radiance.sql file.

This is a change that was introduced in your last commit, first referenced in commit 03c73f2 and shown here.

Thank you

Synology Download Station (Transmission)

I am having an issue where my client, Download Station, on my Synology NAS won't work with this tracker. I have no issues with other trackers and if I use a different client it works. Download Station is transmission so it's strange that it will not work. The error I get is "Could not connect to tracker".

libboost_iostreams.so.1.68.0: cannot open shared

tetraspace@test:/Radiance$ radiance
radiance: error while loading shared libraries: libboost_iostreams.so.1.68.0: cannot open shared object file: No such file or directory
tetraspace@test:
/Radiance$

i have checked and my file is in /usr/local/lib
so how do i fix this problem
as it see all the boost file and no error on compile

thanks

GCC/G++

GCC/G++ (4.7+ required; 4.8.1+ recommended) if i install this one can I safely ignore the LLVM/clang++ (3.3+ required; 3.4+ recommended) (alternative to GCC/G++) or would you suggest installing them both?

How about Boost (1.55.0+ required) because Centos 7 only supports 1.53.0-27.el7 can that version be used too?

hello make error :(

Radiance spikes to 100% CPU usage during torrent / peer flush queue.

Ubuntu 20.04 LTS, compiling Radiance with jemalloc, currently default Radiance.conf except "syslog_path = off" and "syslog_level" = trace.

Whenever either the torrent or peer flush queue start, Radiance spikes to 100% CPU usage and remains there indefinitely. I'm not sure whether this is correct behavior or not, but the queue size continues to grow. Never shrinks, or never resets.

So far, attempted:

  • Originally installed on bare metal, performed a fresh install on a VM.
  • Tried both MySQL 5.7 and MariaDB 10.1.
  • Various radiance.conf and my.cnf setting changes.

Radiance is not behind NGINX, SQL_mode ="", and Luminance's scheduler is running without errors.

Any recommends on how to further troubleshoot this?

Thank you for your time.

Make error

When running MAKE

In file included from logger.cpp:4:
radiance.h:4:42: error: expected identifier before ‘!’ token
#define likely(x) __builtin_expect(!!(x), 1)
^

Make Error

Debian 9 Stretch
PHP 7.0
define BOOST_LIB_VERSION "1_62"

I have everything working apart from Radiance at the moment. Any idea here, please?

logger.o: In function `void boost::log::v2_mt_posix::sinks::basic_text_ostream_backend<char>::construct<boost::parameter::aux::empty_arg_list>(boost::parameter::aux::empty_arg_list const&)':
/usr/local/include/boost/log/sinks/text_ostream_backend.hpp:145: undefined reference to `boost::log::v2_mt_posix::sinks::basic_text_ostream_backend<char>::construct(boost::log::v2_mt_posix::sinks::auto_newline_mode, bool)'
logger.o: In function `boost::thread_specific_ptr<boost::log::v2_mt_posix::sinks::basic_formatting_sink_frontend<char>::formatting_context>::~thread_specific_ptr()':
/usr/local/include/boost/thread/tss.hpp:61: undefined reference to `boost::detail::set_tss_data(void const*, void (*)(void (*)(void*), void*), void (*)(void*), void*, bool)'
logger.o: In function `void boost::log::v2_mt_posix::sinks::text_file_backend::construct<boost::parameter::aux::flat_like_arg_list<boost::parameter::aux::flat_like_arg_tuple<boost::log::v2_mt_posix::keywords::tag::file_name, boost::parameter::aux::tagged_argument_rref<boost::log::v2_mt_posix::keywords::tag::file_name, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::integral_constant<bool, true> >, boost::parameter::aux::flat_like_arg_tuple<boost::log::v2_mt_posix::keywords::tag::min_free_space, boost::parameter::aux::tagged_argument<boost::log::v2_mt_posix::keywords::tag::min_free_space, int const>, std::integral_constant<bool, true> >, boost::parameter::aux::flat_like_arg_tuple<boost::log::v2_mt_posix::keywords::tag::open_mode, boost::parameter::aux::tagged_argument<boost::log::v2_mt_posix::keywords::tag::open_mode, std::_Ios_Openmode const>, std::integral_constant<bool, true> > > >(boost::parameter::aux::flat_like_arg_list<boost::parameter::aux::flat_like_arg_tuple<boost::log::v2_mt_posix::keywords::tag::file_name, boost::parameter::aux::tagged_argument_rref<boost::log::v2_mt_posix::keywords::tag::file_name, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::integral_constant<bool, true> >, boost::parameter::aux::flat_like_arg_tuple<boost::log::v2_mt_posix::keywords::tag::min_free_space, boost::parameter::aux::tagged_argument<boost::log::v2_mt_posix::keywords::tag::min_free_space, int const>, std::integral_constant<bool, true> >, boost::parameter::aux::flat_like_arg_tuple<boost::log::v2_mt_posix::keywords::tag::open_mode, boost::parameter::aux::tagged_argument<boost::log::v2_mt_posix::keywords::tag::open_mode, std::_Ios_Openmode const>, std::integral_constant<bool, true> > > const&)':
/usr/local/include/boost/log/sinks/text_file_backend.hpp:575: undefined reference to `boost::log::v2_mt_posix::sinks::text_file_backend::construct(boost::filesystem::path const&, boost::filesystem::path const&, std::_Ios_Openmode, unsigned long, boost::log::v2_mt_posix::aux::light_function<bool ()> const&, boost::log::v2_mt_posix::sinks::auto_newline_mode, bool, bool)'
logger.o: In function `std::basic_ostream<char, std::char_traits<char> >& boost::log::v2_mt_posix::trivial::operator<< <char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, boost::log::v2_mt_posix::trivial::severity_level)':
/usr/local/include/boost/log/trivial.hpp:71: undefined reference to `char const* boost::log::v2_mt_posix::trivial::to_string<char>(boost::log::v2_mt_posix::trivial::severity_level)'
logger.o: In function `boost::thread_specific_ptr<boost::log::v2_mt_posix::sinks::basic_formatting_sink_frontend<char>::formatting_context>::reset(boost::log::v2_mt_posix::sinks::basic_formatting_sink_frontend<char>::formatting_context*)':
/usr/local/include/boost/thread/tss.hpp:87: undefined reference to `boost::detail::set_tss_data(void const*, void (*)(void (*)(void*), void*), void (*)(void*), void*, bool)'
/usr/local/include/boost/thread/tss.hpp:87: undefined reference to `boost::detail::set_tss_data(void const*, void (*)(void (*)(void*), void*), void (*)(void*), void*, bool)'
/usr/local/include/boost/thread/tss.hpp:87: undefined reference to `boost::detail::set_tss_data(void const*, void (*)(void (*)(void*), void*), void (*)(void*), void*, bool)'
/usr/local/include/boost/thread/tss.hpp:87: undefined reference to `boost::detail::set_tss_data(void const*, void (*)(void (*)(void*), void*), void (*)(void*), void*, bool)'
collect2: error: ld returned 1 exit status
Makefile:402: recipe for target 'radiance' failed
make[2]: *** [radiance] Error 1
make[2]: Leaving directory '/var/www/Radiance/src'
Makefile:401: recipe for target 'all-recursive' failed
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory '/var/www/Radiance'
Makefile:342: recipe for target 'all' failed
make: *** [all] Error 2

Server goes 100% CPU when lot's of requests incoming

I tried out your version compared to Ocelot.
Sadly, when I opened the flood, your software went up to 100% CPU usage.
When I switch back to Ocelot it's back to normal (6% CPU usage).
Something goes wrong on your software.
When I do a normal request using curl, it loads, but when I open the connectivity from outside, it will be getting like a DDoS and is unreachable.

Site connection issues

When I start radiance I get
"Query error in load_users: Table 'gazelle.users' doesn't exist" and then it attempts to start the event loop and nothing happens. When I go to the get tracker information page it says "Failed to get tracker info" and also when you try running radiance -c with the path to the config nothing happens at all. Any help would be appreciated, thanks!

Also for the radiance config I am using the tracker secret from settings.ini for report / site pass, is this correct? I cannot find anywhere else in the settings config where you would define separate keys?

Got a error when make on Ubuntu 16.04

Hallo i get this error when i try to make on Ubuntu 16.04
PHP: 7.0.32
Mysql: 5.7.23
MySQL++: libmysql++-dev from the ubuntu lib (https://launchpad.net/ubuntu/+source/mysql%2B%2B)

root@:~/Radiance# make
make all-recursive
make[1]: Entering directory '/root/Radiance'
Making all in src
make[2]: Entering directory '/root/Radiance/src'
CXXLD radiance
/usr/bin/x86_64-linux-gnu-ld: cannot find -lprofiler
collect2: error: ld returned 1 exit status
Makefile:402: recipe for target 'radiance' failed
make[2]: *** [radiance] Error 1
make[2]: Leaving directory '/root/Radiance/src'
Makefile:401: recipe for target 'all-recursive' failed
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory '/root/Radiance'
Makefile:342: recipe for target 'all' failed
make: *** [all] Error 2
root@
:~/Radiance#

Hope you can help :)

How similar is Radiance to ocelot?

Hello. I'm with a community that is currently running Ocelot.
From looking at it, it appears like the inner workings are based on ocelot. Is it?
I have intentions to replace ocelot with Radiance (this tracker).

Besides the new tables, is this tracker compatible with ocelots data?

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.