Code Monkey home page Code Monkey logo

juanmanzanero / fastest-lap Goto Github PK

View Code? Open in Web Editor NEW
544.0 29.0 43.0 143.25 MB

Fastest-lap is a vehicle dynamics simulator. It can be used to understand vehicle dynamics, to learn about driving techniques, to design car prototypes, or just for fun!

License: MIT License

CMake 0.20% C++ 6.50% C 0.03% MATLAB 0.38% Python 0.05% Shell 0.02% CSS 0.06% HTML 0.01% Dockerfile 0.01% Jupyter Notebook 92.76%
formula1 motogp vehicle dynamics racecar simulator racing optimal-control ipopt circuit

fastest-lap's Introduction

Hi there ๐Ÿ‘‹

I am Juan Manzanero, from Talavera de la Reina (Spain). Apparently now its time to put an emoji-bullet list that highlights what I am good at, so here it goes:

๐Ÿ“Œ Based in Madrid, Spain
๐ŸŽ“ PhD. in aerospace engineering
โœˆ๏ธ I currently work at Airbus Defence and Space, as Flight dynamics and control laws engineer
๐Ÿš€ I have worked at European Space Agency, on spacecrafts commands generations for interplanetary science missions like Solar Orbiter and Juice (Jupiter icy moons explorer)
๐ŸŒ€ My previous experience includes research in high order methods applied to fluid dynamics. I have contributed to the development of entropy-stable schemes for multiphase flows, turbulent flows, and shock capturing
๐Ÿ’ป Computer languages: C/C++, Fortran, Matlab and Python
๐ŸŽ๏ธ I am also interested in vehicle dynamics and lap-time optimization

fastest-lap's People

Contributors

andreacovelli avatar jtodevs avatar juanmanzanero avatar kktse avatar kvkpraneeth avatar pierre-trott 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

fastest-lap's Issues

1-simple lap errors

Hello Juan,
I'm struggling with basics, can not even do simple lap per example due to errors.
I have downloaded fastest lap v.05, extracted to new folder. I'm using Windows 10 and IDLE shell 3.11.1 Here is what I get:

import sys,os,inspect
sys.path.append("/Users/Przemek/Desktop/fastest-lap/examples/python")
import fastest_lap
Traceback (most recent call last):
File "<pyshell#2>", line 1, in
import fastest_lap
File "C:\Users/Przemek/Desktop/fastest-lap/examples/python\fastest_lap.py", line 2, in
import matplotlib.pyplot as plt
ModuleNotFoundError: No module named 'matplotlib'

Bad cast

Hi,

I am using v0.5 on Ubuntu 22, built and installed from source. I am running this through matlab and all is well but I am getting a segfault following the quickstart example. The only error I can see is this in terminal, and it seems to happen on calling optimal_laptime function.

[C++ exception] -> std::bad_cast
terminate called after throwing an instance of 'std::exception'
  what():  std::exception
Aborted (core dumped)

The whole program I am running is just this (quickstart code):

import sys,os,inspect
sys.path.append("/home/tyler/fastest-lap/src/main/python/")
import fastest_lap

vehicle_name = "car"
fastest_lap.create_vehicle_from_xml(vehicle_name, "/home/tyler/fastest-lap/database/vehicles/f1/mercedes-2020-catalunya.xml");
track_name = "catalunya"
fastest_lap.create_track_from_xml(track_name, "/home/tyler/fastest-lap/database/tracks/catalunya/catalunya_adapted.xml");
s = fastest_lap.track_download_data(track_name,"arclength");

options  = "<options>"
options += "<output_variables>"
options += "<prefix>run/</prefix>"
options += "</output_variables>"
options += "<print_level> 5 </print_level>"
options += "</options>"

#print(vehicle)
#print(track)
#print(s)
#print(options)

run = fastest_lap.download_variables(*fastest_lap.optimal_laptime(vehicle_name, track_name, s, options));

Should note this terminal output is from simply running this using python (3.10) and not the matlab api.

Have you seen this or know what might cause this?
Thanks

KERS implementation

Provide an energy boost for a given amount of time. This energy boost shall be only ON/OFF, i.e. no modulation possible.

Python bindings for vehicle_get_property

The C version of vehicle_get_property is

double vehicle_get_property(const char* vehicle_name, const double* q, const double* qa, const double* u, const double s, const char* property_name);

Provide a binding in python, with the form:

def vehicle_get_property(vehicle_name, inputs, property_name)

where inputs is a dictionary with all the required inputs (q, qa, u and s), which are written into their C version (const double*) inside the function. To do so, the program shall first inquire C++ the key_name, q_names, qa_names, and u_names (this needs to be implemented first)

The program should stop if a required variable is not present and if there's an unused variable inside the map.

Optimal_laptime outputs

I am using the example code to run an optimal_laptime simulation.
I see how the outputs are defined through the options and then the values are retrieved through:
fastest_lap.download_vector("run/output_value")

Is there a place where I can find all the possible outputs from the simulation? Inside a C++ file perhaps?
I guess this will be available in the documentation in the future.
If they are available, I am particularly interested in:

  • info about what's happening at each tire (speeds, accelerations, energies...)
  • distance and time channels (I thought s might be time channel but max value doesn't make sense for laptime I'm targeting)
  • braking
  • lateral and longitudinal accelerations
  • x, y position of the car in latitude/longitude to export Ideal line as kml to Google Earth. If not available, where can I find the code that does the conversion lat/long -> x/y?

I see you have some of these details in the videos so I'm guessing it is somewhere.

Thanks in advance!

Can't loop simulations

Hi,

I'm trying to run the simulation multiple times and changing the vehicle model parameters between each iteration.

  • I run the simulation on the car model.
  • I modify the car model xml file with code
  • I re-run the simulation...

The first iteration works but stops after with an generic Windows Error.
Could it be that it doesn't like that I am loading a vehicle that is already loaded?
Is there a way to unload_vehicle before load_vehicle again on the same xml?
If not, do I have to rename the car model xml to something different every iteration.

Thanks

libfastestlapc: new functionality: export output names

In the C++ core library, a new function is available as

limebeer2014f1<double>::curvilinear_p car(database);
const auto map = car.get_outputs_map()

this get_outputs_map() returns a std::unordered_map<std::string,scalar> with all the possible outputs that can be requested to a Dynamic_model_t. The map key is the name of the outputs, for example:

front-axle.right-tire.position.z
front-axle.left-tire.lambda
front-axle.right-tire.force.y
front-axle.right-tire.velocity.z
front-axle.left-tire.position.x
front-axle.left-tire.position.y
chassis.position.x
front-axle.right-tire.position.x
rear-axle.left-tire.force.y
front-axle.left-tire.dissipation
rear-axle.right-tire.force.z
front-axle.left-tire.velocity.z
rear-axle.right-tire.dissipation
front-axle.left-tire.position.z
chassis.torque.z
chassis.force.x
front-axle.left-tire.velocity.y
front-axle.left-tire.velocity.x
rear-axle.right-tire.velocity.y
chassis.position.y
front-axle.right-tire.dissipation
front-axle.right-tire.force.x
chassis.acceleration.y
chassis.force.y
front-axle.left-tire.force.x
chassis.torque.x
rear-axle.right-tire.lambda
front-axle.left-tire.force.z
chassis.torque.y
chassis.acceleration.yaw
rear-axle.left-tire.force.z
front-axle.left-tire.force.y
rear-axle.right-tire.position.x
rear-axle.left-tire.dissipation
rear-axle.left-tire.lambda
rear-axle.left-tire.position.z
front-axle.right-tire.position.y
rear-axle.left-tire.position.x
front-axle.right-tire.lambda
rear-axle.left-tire.velocity.x
chassis.acceleration.x
rear-axle.left-tire.velocity.z
rear-axle.left-tire.position.y
rear-axle.right-tire.position.y
front-axle.right-tire.velocity.x
rear-axle.right-tire.velocity.z
chassis.force.z
rear-axle.right-tire.force.x
front-axle.right-tire.force.z
rear-axle.left-tire.velocity.y
front-axle.right-tire.velocity.y
rear-axle.left-tire.force.x
rear-axle.right-tire.position.z
rear-axle.right-tire.velocity.x
rear-axle.right-tire.force.y

The task is to implement two functions in libfastestlapc.cpp with prototype:

int vehicle_get_number_of_output_variables(const char* vehicle_name);

void vehicle_get_output_variable_names(char** output_names, const int n_outputs, const int n_char, const char* vehicle_name);

The first one simply computes the map for the vehicle, and returns the number of output variables in the map (i.e. the map size). The second one, returns all the key names into output_names.

no new shall be executed inside the function. In fact, the caller provides the memory associated to the char** through n_outputs (the return from int vehicle_get_number_of_output_variables(const char* vehicle_name);) and n_char (a sufficiently big number).

Hence char** is equivalent to char[n_outputs][n_char]

GPS Part (Kernel crashed while executing code)

Hello, I'm having issues while running the GPS part in the Optimal_laptime.ipynb file. It gave me the error message
(Canceled future for execute_request message before replies were done
The Kernel crashed while executing code in the the current cell or a previous cell. Please review the code in the cell(s) to identify a possible cause of the failure. Click here for more info. View Jupyter log for further details.)

I'm running the code in the Win11 system
please help. Thanks

Windows: thrown exceptions error message is missing.

In windows, the error message is not shown in the python console. It only terminates abruply showing a winError message with gnarly and horrible memory addresses. It seems the error stream does not work properly.

However, the output stream does. So use it to show the error message instead.

The task: add a try-catch block to all the functions of the C library fastestlapc.cpp such as:

void any_function()
{
 try
 {
     // ... all the code ...
 } 
 catch(fastest_lap_exception& ex)
 {
    std::cout << "[Fastest lap exception] -> " << ex.what() << std::endl;
    throw std::runtime_error("Terminate program");
 }
catch(lion_exception& ex)
 {
    std::cout << "[Lion exception] -> " << ex.what() << std::endl;
    throw std::runtime_error("Terminate program");
 } 
 catch(std::exception& ex)
 {
    std::cout << "[C++ exception] -> " << ex.what() << std::endl;
    throw std::runtime_error("Terminate program");
 }
}

All the catch statements must be encapsulated in a #define CATCH macro so that the code is neat

 try
 {
     // ... all the code ...
 } 
CATCH

Unable to run circuit_preprocessor in Windows 10

Hello, Thanks for sharing this great work and making it available on Windows!

I have an issue when trying to run the circuit_preprocessor in Python (Windows 10 - PyCharms).
When I try to run your example script, I get the following error:

2022-06-27_08h47_58

c_lib.circuit_preprocessor(c_options); OSError: [WinError -529697949] Windows Error 0xe06d7363

I am able to run optimal_laptime.py without any problem.

I was thinking it could be the paths could be the issue. What is the source of these relative paths I have to put in?
If not, any ideas what it could be?

Thanks in advance!

Failing to run cmake during installation

Hi, I tried running cmake with the cmake .. command in the command line and it returned this. Any help with getting everything running correctly would be much appreciated!

-- The C compiler identification is AppleClang 12.0.0.12000032
-- The CXX compiler identification is AppleClang 12.0.0.12000032
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /Library/Developer/CommandLineTools/usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /Library/Developer/CommandLineTools/usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done

Configure third party libraries 
=============================== 

-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
-- Found Threads: TRUE
-- Compilation of the required third party libraries
-- The C compiler identification is AppleClang 12.0.0.12000032
-- The CXX compiler identification is AppleClang 12.0.0.12000032
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /Library/Developer/CommandLineTools/usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /Library/Developer/CommandLineTools/usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/saian/Desktop/fastest-lap-main/build/thirdparty
[ 12%] Creating directories for 'lion'
[ 25%] Performing download step (git clone) for 'lion'
Cloning into 'source'...
warning: unable to access '/Users/saian/.config/git/ignore': Permission denied
warning: unable to access '/Users/saian/.config/git/attributes': Permission denied
Already on 'main'
Your branch is up to date with 'origin/main'.
[ 37%] Performing update step for 'lion'
warning: unable to access '/Users/saian/.config/git/attributes': Permission denied
warning: unable to access '/Users/saian/.config/git/ignore': Permission denied
[ 50%] No patch step for 'lion'
[ 62%] Performing configure step for 'lion'
-- The C compiler identification is AppleClang 12.0.0.12000032
-- The CXX compiler identification is AppleClang 12.0.0.12000032
-- The Fortran compiler identification is unknown
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /Library/Developer/CommandLineTools/usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /Library/Developer/CommandLineTools/usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
CMake Error at CMakeLists.txt:4 (project):
No CMAKE_Fortran_COMPILER could be found.

Tell CMake where to find the compiler by setting either the environment
variable "FC" or the CMake cache entry CMAKE_Fortran_COMPILER to the full
path to the compiler, or to the compiler name if it is in the PATH.

-- Configuring incomplete, errors occurred!
See also "/Users/saian/Desktop/fastest-lap-main/build/lion/build/CMakeFiles/CMakeOutput.log".
See also "/Users/saian/Desktop/fastest-lap-main/build/lion/build/CMakeFiles/CMakeError.log".
make[2]: *** [/Users/saian/Desktop/fastest-lap-main/build/lion/src/lion-stamp/lion-configure] Error 1
make[1]: *** [CMakeFiles/lion.dir/all] Error 2
make: *** [all] Error 2

-- Configuration of fastest-lap
CMake Error at cmake/get-third-party.cmake:34 (find_package):
Could not find a package configuration file provided by "lion" with any of
the following names:

lionConfig.cmake
lion-config.cmake

Add the installation prefix of "lion" to CMAKE_PREFIX_PATH or set
"lion_DIR" to a directory containing one of the above files. If "lion"
provides a separate development package or SDK, be sure it has been
installed.
Call Stack (most recent call first):
CMakeLists.txt:18 (include)

-- Configuring incomplete, errors occurred!
See also "/Users/saian/Desktop/fastest-lap-main/build/CMakeFiles/CMakeOutput.log".

Error during 1-simple lap

Hi Juan,
i'm trying to run the 1 simple lap, but at the end when i write the last row
run = fastest_lap.download_variables(*fastest_lap.optimal_laptime(vehicle_name, track_name, s, options))

this error shows up

[C++ exception] -> std::bad_cast
terminate called after throwing an instance of 'std::exception'
what(): std::exception
Aborted

how can i fix it??
Thank you and congratulations for this software

libfastestlapc: get track data

Implement the possibility to get all the variables that define a track from create_track(). Until now, only the arclength s is implemented.

Also, implement track_get_variable(track_name, data, n, variable_name) and track_set_variable(track_name, data, n, variable_name)

Variables to get/set:

  • s
  • theta
  • kappa
  • nl
  • nr
  • x_centerline
  • y_centerline
  • x_left
  • y_left
  • x_right
  • y_right

Create vehicle from XML database: check that there are not unused parameters

When a vehicle is loaded from XML, a nice feature to have would be that the program checks that all the inputs present in the XML file have been used, and to throw an exception instead.

Having this feature could help to identify typos in the parameters that might lead to catastrophic events. For example, if one writes <front-tyre/> instead of <front-tire/> , the whole data would just be ignored and the tire parameters wouldn't be loaded.

A way of doing this, would be that every time an XML element is read, make the software add an XML attribute _parameter_used="true". Then, after the car has been loaded, check that all the elements have this attribute set to true.

Problem Compilation Project

Hello,

I am using a Kali-linux VM.
I am currently trying to compile the project and follow the different steps of the README.md. On the Linux part

sudo sh ./src/scripts/linux/docker_compile.sh

I'm having this following error, what am I doing wrong ?

[100%] Linking CXX shared library libcppad_lib.so
CMake Error: failed to create symbolic link 'libcppad_lib.so': operation not permitted
CMake Error: cmake_symlink_library: System Error: Operation not permitted
make[8]: *** [cppad_lib/CMakeFiles/cppad_lib.dir/build.make:146: cppad_lib/libcppad_lib.so.1227] Error 1
make[8]: *** Deleting file 'cppad_lib/libcppad_lib.so.1227'
make[8]: Leaving directory '/src/build/lion/build/cppad/build'
make[7]: Leaving directory '/src/build/lion/build/cppad/build'
make[7]: *** [CMakeFiles/Makefile2:953: cppad_lib/CMakeFiles/cppad_lib.dir/all] Error 2
make[6]: Leaving directory '/src/build/lion/build/cppad/build'
make[6]: *** [Makefile:130: all] Error 2
make[5]: *** [CMakeFiles/cppad.dir/build.make:112: /src/build/lion/build/cppad/src/cppad-stamp/cppad-build] Error 2
make[5]: Leaving directory '/src/build/lion/build/thirdparty'
make[4]: *** [CMakeFiles/Makefile2:80: CMakeFiles/cppad.dir/all] Error 2
make[4]: Leaving directory '/src/build/lion/build/thirdparty'
make[3]: Leaving directory '/src/build/lion/build/thirdparty'
make[3]: *** [Makefile:84: all] Error 2
-- Configuration of fastest-lap

CMake Error at CMakeLists.txt:90 (install):
  install TARGETS given target "tinyxml2" which does not exist.


-- Configuring incomplete, errors occurred!
See also "/src/build/lion/build/CMakeFiles/CMakeOutput.log".
See also "/src/build/lion/build/CMakeFiles/CMakeError.log".
make[2]: *** [CMakeFiles/lion.dir/build.make:107: /src/build/lion/src/lion-stamp/lion-configure] Error 1
make[1]: *** [CMakeFiles/Makefile2:78: CMakeFiles/lion.dir/all] Error 2
make: *** [Makefile:84: all] Error 2
-- Configuration of fastest-lap

CMake Error at cmake/get-third-party.cmake:35 (find_package):
  Could not find a package configuration file provided by "GTest" with any of
  the following names:

    GTestConfig.cmake
    gtest-config.cmake

  Add the installation prefix of "GTest" to CMAKE_PREFIX_PATH or set
  "GTest_DIR" to a directory containing one of the above files.  If "GTest"
  provides a separate development package or SDK, be sure it has been
  installed.
Call Stack (most recent call first):
  CMakeLists.txt:18 (include)


-- Configuring incomplete, errors occurred!
See also "/src/build/CMakeFiles/CMakeOutput.log".
make: *** No targets specified and no makefile found.  Stop.

Thanks for you time

Project Compilation on Windows

Hi Juan,

First of all I want to congratulate you on such a project, your fastest-lap looks really cool!

I've found it very interesting and I would like to deepen it. Because of this, I would like to build the project on my Windows machine, not just use the binaries you've provided.

I've seen that one of the third-party packages used by fastest-lap -lion- requires a Fortran compiler. Do you have any suggestions for any specific Fortran compiler on Windows as you have for Linux and Mac?

Thanks for you time!

Energy limits

Allowing the user to set a maximum energy limit for a lap (i.e. fuel limit per lap) could make this simulation tool very useful for racing series such as Indycar and Formula E.

Setting energy limits and power limits to each individual tire could also produce lap simulations that could tell us more about how drivers change their driving style in order to make the tires last.

Thank you for building this simulation tool!

Compiling and executing problem

-Hello! I have compiled with cmake the project, but at the time I try to run it, I get this message:

make[2]: *** No hay ninguna regla para construir el objetivo 'thirdparty/lib/liblapack.so', necesario para 'lib/libfastestlapc.so/. Alto.
make[1]: *** [CMakeFiles/Makefile2:273: src/main/c/CMakeFiles/fastestlapc.dir/all] Error 2
make: *** [Makefile:141: all] Error 2

Any idea how to solve it?

ModuleNotFound

Can you please explain and help me solve this?

import sys,os,inspect
sys.path.append("/C:/Users/Przemek/Desktop/fastest-lap/examples/python")
import fastest_lap
Traceback (most recent call last):
File "<pyshell#2>", line 1, in
import fastest_lap
ModuleNotFoundError: No module named 'fastest_lap'

Problem loading the car and circuit

I have problems starting the examples after changing the car or circuit. I am running it from windows 10 and python 3.11.2, I have also tried version 3.9 and it results in the same error.


OSError Traceback (most recent call last)
Cell In[7], line 3
1 # Load vehicle
2 vehicle_xml="car-via-xml"
----> 3 fastest_lap.create_vehicle_from_xml(vehicle_xml,"../../../../database/vehicles/f1/ferrar-2022-australia.xml");

File C:\v0.5\include\fastest_lap.py:45, in create_vehicle_from_xml(name, database_file)
42 name = c.c_char_p((name).encode('utf-8'))
43 database_file = c.c_char_p((database_file).encode('utf-8'))
---> 45 c_lib.create_vehicle_from_xml(name,database_file)
47 return

OSError: [WinError -529697949] Windows Error 0xe06d7363

fastest-lap v0.5 for windows runtime issue

Hello,
congrats on your work.
I've been testing latest version binaries on windows through the python interface and it appears there may be a an issue with some missing dependencies related to coinmumps-3.dll.

image

The machine used for the test does not have any fortran compiler installed. Repeating the test on another pc with Intel Fortran does not show the problem, so I would guess there may be need of any runtime to be installed.
Tried a few of the ones in https://www.intel.com/content/www/us/en/developer/articles/tool/compilers-redistributable-libraries-by-version.html with no success.

Any help would be appreciated.
Francesco

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.