Giter VIP home page Giter VIP logo

conductor's Introduction

Build Status

Conductor: A cross-platform FRC Driver Station

Conductor is a Driver Station for FRC robots for Linux and macOS which supports nearly* every feature of the NI Driver Station.

*Conductor cannot yet auto-launch dashboards, and is not and will never be compatible with the Field Management System.

Building

Before building, ensure that you have the following dependencies installed:

Ubuntu

# Dependencies
sudo apt-get install -y nodejs libudev-dev libx11-dev libxi-dev libpango1.0-dev libatk1.0-dev libsoup2.4-dev libgtk-3-dev libwebkit2gtk-4.0-dev

# Node Version Manager
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion
nvm install 14
nvm use 14

# Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source "$HOME/.cargo/env"
cargo install cargo-bundle

# Conductor
git clone https://github.com/Redrield/Conductor
make setup && make release

Mac

# Homebrew Install
xcode-select --install
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
brew install webkitgtk

# Node Version Manager
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion
nvm install 14
nvm use 14

# Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source "$HOME/.cargo/env"
cargo install cargo-bundle

# Conductor
git clone https://github.com/Redrield/Conductor
make setup && make release

Building a release build of Conductor is simple; after cloning the repository run make setup && make release to install all the dependencies of the react applications, and then compile both the React apps and the Rust backend into a single executable. When this process is completed, you can find the compiled driver station at target/release/conductor.

Prebuilt Artifacts

Some artifacts are built and saved automatically by Github Actions. These artifacts can be found published under the Build Status action for the next branch. The artifacts that can be downloaded here (Click the link, select the top result, and scroll down to the bottom section that says "artifacts") are:

  • A normal x86_64 Linux executable, compiled on Ubuntu
  • An x86_64 .deb file
  • An x86_64 .rpm file
  • An x86_64 macOS .app file (This is compressed in a tarball to preserve permissions)

If desired, these artifacts can be downloaded and installed rather than having to build the project manually.

Contributing

Building debug builds is almost as simple, after initially cloning run make setup && make all to compile both the react apps and the Rust app once. Afterwards, assuming you're only changing the Rust app you can use cargo run to skip the compile time of the react apps. If you're changing the main window as well you can use make to only recompile the main window as well as the Rust app.

Usage

Conductor is designed to emulate the design of the NI Driver Station as closely as possible. The main window is split into three sections, Control, Config, and Joysticks, while the second window serves as a larger viewport to see riolog messages.

Control Tab

Control Tab

The control tab of Conductor when not connected to a robot

Control with Connection

The control tab of Conductor when connected to a robot

The control tab is very similar to the equivalent tab in the NI Driver Station. On the far left are selectors for the mode, and buttons to enable or disable the robot. In the middle there are boxes indicating connection status, voltage, team number, and current operating mode. On the right is the smaller stdout viewport for seeing messages from riolog.

Underneath the stdout window is one final indicator which shows simulator connection. This indicator is normally red, including when connected to a physical robot. It lights up green when Conductor is connected to a simulator instance on the local machine.

Conductor with simulator

The control tab of Conductor with a connection to the WPILib Simulator

Config

Configuration

The second tab in the main window is for configuring functions that only need to be set once, such as team number, and game data.

The first accessible field is the team number field. This will update the number displayed in the control tab, and will also configure the IP to which Conductor will try to connect. The target IP is the familiar 10.TE.AM.2 IP, filled in with the value provided.

The "Connect via USB?" checkbox enables users to override the team number IP and connect to 172.22.11.2 if they have connected to the RIO over USB in a way that allows them to use this interface.

The game data field can be used to update the Game Specific Message given to robot code. This can be used similar to the NI Driver Station to test code that uses this message, such as control panel code in Infinite Recharge.

On the right side are buttons to restart user code, and reboot the roboRIO. These function as they do in the NI Driver Station.

Joysticks

Joysticks Tab

The final tab is the most sparse, and allows users to configure their joystick mappings. The list visible in this tab is drag and drop, and will update the joystick mappings as they are reordered. The first entry in this map is the Virtual Joystick, which can be used to silence WPILib warnings about unplugged joysticks should it be desired. As joysticks are detected by Conductor, they will be added to this list, replacing "Unbound" entries as required.

conductor's People

Contributors

daltz333 avatar dependabot[bot] avatar github-actions[bot] avatar juicestus avatar memtech3 avatar redrield avatar thenetworkgrinch 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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

conductor's Issues

On workstation with two monitors, Conductor consumes both of them

Very cool project!

Request that the Conductor window be resizeable so that it can be constrained to a single monitor (or even a small portion of a single monitor). Ideally, the content would shrink as necessary, down to some minimum required size for each widget, allowing the DS to be as small, or nearly so, as a user desires. As a minimum implementation request, though, it should be allowed to be told to consume only the width of a single monitor.

Twist not working on Thrustmaster Joystick

I tried to use Conductor on macOS this morning to drive a robot. Forward, backwards, and sideways translations worked great, but when I tried to twist to change yaw, it didn't work. It works perfectly on NI DS.

Issues Making on ARM64 machines

Hello, I'm running macOS 12.2.1 M1. I'm getting the following error(s) when making the file.

ERROR:

objc[55735]: Class AMSupportURLConnectionDelegate is implemented in both /usr/lib/libamsupport.dylib (0x21632f678) and /Library/Apple/System/Library/PrivateFrameworks/MobileDevice.framework/Versions/A/MobileDevice (0x1062882c8). One of the two will be used. Which one is undefined.
objc[55735]: Class AMSupportURLSession is implemented in both /usr/lib/libamsupport.dylib (0x21632f6c8) and /Library/Apple/System/Library/PrivateFrameworks/MobileDevice.framework/Versions/A/MobileDevice (0x106288318). One of the two will be used. Which one is undefined.
cd ui/main-window \
        && npm install
npm WARN old lockfile 
npm WARN old lockfile The package-lock.json file was created with an old version of npm,
npm WARN old lockfile so supplemental metadata must be fetched from the registry.
npm WARN old lockfile 
npm WARN old lockfile This is a one-time fix-up, please be patient...
npm WARN old lockfile 
npm WARN deprecated [email protected]: fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.
npm WARN deprecated [email protected]: Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies

up to date, audited 1671 packages in 4s

65 packages are looking for funding
  run `npm fund` for details

87 vulnerabilities (60 moderate, 24 high, 3 critical)

To address issues that do not require attention, run:
  npm audit fix

To address all issues (including breaking changes), run:
  npm audit fix --force

Run `npm audit` for details.
cd ui/stdout \
        && npm install
npm WARN old lockfile 
npm WARN old lockfile The package-lock.json file was created with an old version of npm,
npm WARN old lockfile so supplemental metadata must be fetched from the registry.
npm WARN old lockfile 
npm WARN old lockfile This is a one-time fix-up, please be patient...
npm WARN old lockfile 
npm WARN deprecated [email protected]: fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.
npm WARN deprecated [email protected]: Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies

up to date, audited 1608 packages in 4s

65 packages are looking for funding
  run `npm fund` for details

80 vulnerabilities (56 moderate, 21 high, 3 critical)

To address issues that do not require attention, run:
  npm audit fix

To address all issues (including breaking changes), run:
  npm audit fix --force

Run `npm audit` for details.
cd ui/main-window \
	    && npm run build:react

> [email protected] build:react
> react-scripts build

Creating an optimized production build...
Compiled with warnings.

./src/store.ts
  Line 173:26:  Expected '===' and instead saw '=='  eqeqeq
  Line 184:50:  Expected '===' and instead saw '=='  eqeqeq
  Line 196:32:  Expected '===' and instead saw '=='  eqeqeq
  Line 211:30:  Expected '!==' and instead saw '!='  eqeqeq
  Line 298:28:  Expected '===' and instead saw '=='  eqeqeq

./src/components/control/AllianceStationSelector.tsx
  Line 27:28:  The href attribute requires a valid value to be accessible. Provide a valid, navigable address as the href value. If you cannot provide a valid href, but still need the element to resemble a link, use a button and change it with appropriate styles. Learn more: https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/anchor-is-valid.md  jsx-a11y/anchor-is-valid
  Line 30:28:  The href attribute requires a valid value to be accessible. Provide a valid, navigable address as the href value. If you cannot provide a valid href, but still need the element to resemble a link, use a button and change it with appropriate styles. Learn more: https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/anchor-is-valid.md  jsx-a11y/anchor-is-valid

./src/components/ControlPage.tsx
  Line 2:32:  'RobotState' is defined but never used  @typescript-eslint/no-unused-vars

./src/components/JoysticksPage.tsx
  Line 2:9:  'UPDATE_JOYSTICK_MAPPING' is defined but never used  @typescript-eslint/no-unused-vars

./src/components/control/ModeList.tsx
  Line 33:113:  Expected '===' and instead saw '=='  eqeqeq

./src/components/config/Configurations.tsx
  Line 45:14:  Expected '===' and instead saw '=='  eqeqeq
  Line 47:24:  Expected '===' and instead saw '=='  eqeqeq
  Line 55:24:  Expected '===' and instead saw '=='  eqeqeq

./src/DriverStation.tsx
  Line 45:19:   Expected '===' and instead saw '=='                                                                                                                                                                                                                                                                                                                               eqeqeq
  Line 49:19:   Expected '===' and instead saw '=='                                                                                                                                                                                                                                                                                                                               eqeqeq
  Line 81:37:   The href attribute requires a valid value to be accessible. Provide a valid, navigable address as the href value. If you cannot provide a valid href, but still need the element to resemble a link, use a button and change it with appropriate styles. Learn more: https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/anchor-is-valid.md  jsx-a11y/anchor-is-valid
  Line 108:29:  The href attribute requires a valid value to be accessible. Provide a valid, navigable address as the href value. If you cannot provide a valid href, but still need the element to resemble a link, use a button and change it with appropriate styles. Learn more: https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/anchor-is-valid.md  jsx-a11y/anchor-is-valid
  Line 109:77:  Expected '===' and instead saw '=='                                                                                                                                                                                                                                                                                                                               eqeqeq
  Line 113:29:  The href attribute requires a valid value to be accessible. Provide a valid, navigable address as the href value. If you cannot provide a valid href, but still need the element to resemble a link, use a button and change it with appropriate styles. Learn more: https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/anchor-is-valid.md  jsx-a11y/anchor-is-valid
  Line 114:77:  Expected '===' and instead saw '=='                                                                                                                                                                                                                                                                                                                               eqeqeq
  Line 118:29:  The href attribute requires a valid value to be accessible. Provide a valid, navigable address as the href value. If you cannot provide a valid href, but still need the element to resemble a link, use a button and change it with appropriate styles. Learn more: https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/anchor-is-valid.md  jsx-a11y/anchor-is-valid
  Line 119:77:  Expected '===' and instead saw '=='                                                                                                                                                                                                                                                                                                                               eqeqeq

./src/index.tsx
  Line 4:9:   'Message' is defined but never used    @typescript-eslint/no-unused-vars
  Line 4:18:  'UpdateGSM' is defined but never used  @typescript-eslint/no-unused-vars

Search for the keywords to learn more about each warning.
To ignore, add // eslint-disable-next-line to the line before.

File sizes after gzip:

  72.77 KB  build/static/js/2.ada8dbcb.chunk.js
  5.29 KB   build/static/js/main.fd2a6325.chunk.js
  772 B     build/static/js/runtime-main.f707e66f.js

The project was built assuming it is hosted at /.
You can control this with the homepage field in your package.json.

The build folder is ready to be deployed.
You may serve it with a static server:

  yarn global add serve
  serve -s build

Find out more about deployment here:

  bit.ly/CRA-deploy

cd ui/stdout \
	    && npm run build

> [email protected] build
> react-scripts build

Creating an optimized production build...
Compiled successfully.

File sizes after gzip:

  47.46 KB  build/static/js/2.75709a85.chunk.js
  1.16 KB   build/static/js/main.146a03be.chunk.js
  774 B     build/static/js/runtime-main.5c9103f9.js

The project was built assuming it is hosted at /.
You can control this with the homepage field in your package.json.

The build folder is ready to be deployed.
You may serve it with a static server:

  yarn global add serve
  serve -s build

Find out more about deployment here:

  bit.ly/CRA-deploy

cargo build --release
   Compiling webview-sys v0.5.0
   Compiling rust-embed-utils v5.0.0
   Compiling quote v1.0.3
   Compiling num_cpus v1.12.0
   Compiling net2 v0.2.33
   Compiling iovec v0.1.4
   Compiling signal-hook-registry v1.2.0
   Compiling getrandom v0.1.14
   Compiling parking_lot_core v0.7.0
   Compiling num-traits v0.2.11
   Compiling backtrace-sys v0.1.35
   Compiling aho-corasick v0.7.10
   Compiling socket2 v0.3.12
The following warnings were emitted during compilation:

warning: webview_cocoa.c:83:23: error: too many arguments to function call, expected 0, have 3
warning:   return objc_msgSend((id)objc_getClass("NSString"),
warning:          ~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
warning: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/objc/message.h:63:1: note: 'objc_msgSend' declared here
warning: objc_msgSend(void /* id self, SEL op, ... */ )
warning: ^
warning: webview_cocoa.c:89:20: error: too many arguments to function call, expected 0, have 2
warning:       objc_msgSend((id)objc_getClass("NSMenuItem"), sel_registerName("alloc"));
warning:       ~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
warning: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/objc/message.h:63:1: note: 'objc_msgSend' declared here
warning: objc_msgSend(void /* id self, SEL op, ... */ )
warning: ^
warning: webview_cocoa.c:90:16: error: too many arguments to function call, expected 0, have 5
warning:   objc_msgSend(item, sel_registerName("initWithTitle:action:keyEquivalent:"),
warning:   ~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
warning: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/objc/message.h:63:1: note: 'objc_msgSend' declared here
warning: objc_msgSend(void /* id self, SEL op, ... */ )
warning: ^
warning: webview_cocoa.c:92:16: error: too many arguments to function call, expected 0, have 2
warning:   objc_msgSend(item, sel_registerName("autorelease"));
warning:   ~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
warning: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/objc/message.h:63:1: note: 'objc_msgSend' declared here
warning: objc_msgSend(void /* id self, SEL op, ... */ )
warning: ^
warning: webview_cocoa.c:113:27: error: too many arguments to function call, expected 0, have 11
warning:   id event = objc_msgSend((id)objc_getClass("NSEvent"),
warning:              ~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
warning: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/objc/message.h:63:1: note: 'objc_msgSend' declared here
warning: objc_msgSend(void /* id self, SEL op, ... */ )
warning: ^
warning: webview_cocoa.c:118:25: error: too many arguments to function call, expected 0, have 2
warning:   id app = objc_msgSend((id)objc_getClass("NSApplication"),
warning:            ~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
warning: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/objc/message.h:63:1: note: 'objc_msgSend' declared here
warning: objc_msgSend(void /* id self, SEL op, ... */ )
warning: ^
warning: webview_cocoa.c:129:34: error: too many arguments to function call, expected 0, have 2
warning:                     objc_msgSend((id)objc_getClass("NSDate"),
warning:                     ~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
warning: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/objc/message.h:63:1: note: 'objc_msgSend' declared here
warning: objc_msgSend(void /* id self, SEL op, ... */ )
warning: ^
warning: webview_cocoa.c:142:45: error: too many arguments to function call, expected 0, have 2
warning:                                objc_msgSend(message, sel_registerName("body")),
warning:                                ~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
warning: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/objc/message.h:63:1: note: 'objc_msgSend' declared here
warning: objc_msgSend(void /* id self, SEL op, ... */ )
warning: ^
warning: webview_cocoa.c:149:31: error: too many arguments to function call, expected 0, have 2
warning:   id openPanel = objc_msgSend((id)objc_getClass("NSOpenPanel"),
warning:                  ~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
warning: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/objc/message.h:63:1: note: 'objc_msgSend' declared here
warning: objc_msgSend(void /* id self, SEL op, ... */ )
warning: ^
warning: webview_cocoa.c:154:20: error: too many arguments to function call, expected 0, have 2
warning:       objc_msgSend(parameters, sel_registerName("allowsMultipleSelection")));
warning:       ~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
warning: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/objc/message.h:63:1: note: 'objc_msgSend' declared here
warning: objc_msgSend(void /* id self, SEL op, ... */ )
warning: ^
warning: webview_cocoa.c:156:16: error: too many arguments to function call, expected 0, have 3
warning:   objc_msgSend(openPanel, sel_registerName("setCanChooseFiles:"), 1);
warning:   ~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
warning: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/objc/message.h:63:1: note: 'objc_msgSend' declared here
warning: objc_msgSend(void /* id self, SEL op, ... */ )
warning: ^
warning: webview_cocoa.c:160:42: error: too many arguments to function call, expected 0, have 2
warning:           completionHandler(objc_msgSend(openPanel, sel_registerName("URLs")));
warning:                             ~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
warning: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/objc/message.h:63:1: note: 'objc_msgSend' declared here
warning: objc_msgSend(void /* id self, SEL op, ... */ )
warning: ^
warning: webview_cocoa.c:158:7: error: too many arguments to function call, expected 0, have 3
warning:       openPanel, sel_registerName("beginWithCompletionHandler:"), ^(id result) {
warning:       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
warning: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/objc/message.h:63:1: note: 'objc_msgSend' declared here
warning: objc_msgSend(void /* id self, SEL op, ... */ )
warning: ^
warning: webview_cocoa.c:170:31: error: too many arguments to function call, expected 0, have 2
warning:   id savePanel = objc_msgSend((id)objc_getClass("NSSavePanel"),
warning:                  ~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
warning: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/objc/message.h:63:1: note: 'objc_msgSend' declared here
warning: objc_msgSend(void /* id self, SEL op, ... */ )
warning: ^
warning: webview_cocoa.c:172:16: error: too many arguments to function call, expected 0, have 3
warning:   objc_msgSend(savePanel, sel_registerName("setCanCreateDirectories:"), 1);
warning:   ~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
warning: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/objc/message.h:63:1: note: 'objc_msgSend' declared here
warning: objc_msgSend(void /* id self, SEL op, ... */ )
warning: ^
warning: webview_cocoa.c:173:16: error: too many arguments to function call, expected 0, have 3
warning:   objc_msgSend(savePanel, sel_registerName("setNameFieldStringValue:"),
warning:   ~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
warning: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/objc/message.h:63:1: note: 'objc_msgSend' declared here
warning: objc_msgSend(void /* id self, SEL op, ... */ )
warning: ^
warning: webview_cocoa.c:178:42: error: too many arguments to function call, expected 0, have 2
warning:                    id url = objc_msgSend(savePanel, sel_registerName("URL"));
warning:                             ~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
warning: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/objc/message.h:63:1: note: 'objc_msgSend' declared here
warning: objc_msgSend(void /* id self, SEL op, ... */ )
warning: ^
warning: webview_cocoa.c:179:43: error: too many arguments to function call, expected 0, have 2
warning:                    id path = objc_msgSend(url, sel_registerName("path"));
warning:                              ~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
warning: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/objc/message.h:63:1: note: 'objc_msgSend' declared here
warning: objc_msgSend(void /* id self, SEL op, ... */ )
warning: ^
warning: webview_cocoa.c:175:16: error: too many arguments to function call, expected 0, have 3
warning:   objc_msgSend(savePanel, sel_registerName("beginWithCompletionHandler:"),
warning:   ~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
warning: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/objc/message.h:63:1: note: 'objc_msgSend' declared here
warning: objc_msgSend(void /* id self, SEL op, ... */ )
warning: ^
warning: fatal error: too many errors emitted, stopping now [-ferror-limit=]
warning: 20 errors generated.

error: failed to run custom build command for `webview-sys v0.5.0`

Caused by:
  process didn't exit successfully: `/Users/srimanachanta/Documents/FRC Conductor/Conductor/target/release/build/webview-sys-db5fa3fe45b449eb/build-script-build` (exit status: 1)
  --- stdout
  cargo:rustc-link-lib=framework=Cocoa
  cargo:rustc-link-lib=framework=WebKit
  TARGET = Some("aarch64-apple-darwin")
  OPT_LEVEL = Some("3")
  HOST = Some("aarch64-apple-darwin")
  CC_aarch64-apple-darwin = None
  CC_aarch64_apple_darwin = None
  HOST_CC = None
  CC = None
  CFLAGS_aarch64-apple-darwin = None
  CFLAGS_aarch64_apple_darwin = None
  HOST_CFLAGS = None
  CFLAGS = None
  CRATE_CC_NO_DEFAULTS = None
  DEBUG = Some("false")
  CARGO_CFG_TARGET_FEATURE = None
  CC_aarch64-apple-darwin = None
  CC_aarch64_apple_darwin = None
  HOST_CC = None
  CC = None
  CFLAGS_aarch64-apple-darwin = None
  CFLAGS_aarch64_apple_darwin = None
  HOST_CFLAGS = None
  CFLAGS = None
  CRATE_CC_NO_DEFAULTS = None
  CARGO_CFG_TARGET_FEATURE = None
  CC_aarch64-apple-darwin = None
  CC_aarch64_apple_darwin = None
  HOST_CC = None
  CC = None
  CFLAGS_aarch64-apple-darwin = None
  CFLAGS_aarch64_apple_darwin = None
  HOST_CFLAGS = None
  CFLAGS = None
  CRATE_CC_NO_DEFAULTS = None
  CARGO_CFG_TARGET_FEATURE = None
  running: "cc" "-O3" "-ffunction-sections" "-fdata-sections" "-fPIC" "-I" "webview.h" "-Wall" "-Wextra" "-x" "objective-c" "-std=c11" "-w" "-DDEBUG" "-DOBJC_OLD_DISPATCH_PROTOTYPES=1" "-o" "/Users/srimanachanta/Documents/FRC Conductor/Conductor/target/release/build/webview-sys-6ddce1f3624e0432/out/webview_cocoa.o" "-c" "webview_cocoa.c"
  cargo:warning=webview_cocoa.c:83:23: error: too many arguments to function call, expected 0, have 3
  cargo:warning=  return objc_msgSend((id)objc_getClass("NSString"),
  cargo:warning=         ~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  cargo:warning=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/objc/message.h:63:1: note: 'objc_msgSend' declared here
  cargo:warning=objc_msgSend(void /* id self, SEL op, ... */ )
  cargo:warning=^
  cargo:warning=webview_cocoa.c:89:20: error: too many arguments to function call, expected 0, have 2
  cargo:warning=      objc_msgSend((id)objc_getClass("NSMenuItem"), sel_registerName("alloc"));
  cargo:warning=      ~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  cargo:warning=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/objc/message.h:63:1: note: 'objc_msgSend' declared here
  cargo:warning=objc_msgSend(void /* id self, SEL op, ... */ )
  cargo:warning=^
  cargo:warning=webview_cocoa.c:90:16: error: too many arguments to function call, expected 0, have 5
  cargo:warning=  objc_msgSend(item, sel_registerName("initWithTitle:action:keyEquivalent:"),
  cargo:warning=  ~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  cargo:warning=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/objc/message.h:63:1: note: 'objc_msgSend' declared here
  cargo:warning=objc_msgSend(void /* id self, SEL op, ... */ )
  cargo:warning=^
  cargo:warning=webview_cocoa.c:92:16: error: too many arguments to function call, expected 0, have 2
  cargo:warning=  objc_msgSend(item, sel_registerName("autorelease"));
  cargo:warning=  ~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  cargo:warning=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/objc/message.h:63:1: note: 'objc_msgSend' declared here
  cargo:warning=objc_msgSend(void /* id self, SEL op, ... */ )
  cargo:warning=^
  cargo:warning=webview_cocoa.c:113:27: error: too many arguments to function call, expected 0, have 11
  cargo:warning=  id event = objc_msgSend((id)objc_getClass("NSEvent"),
  cargo:warning=             ~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  cargo:warning=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/objc/message.h:63:1: note: 'objc_msgSend' declared here
  cargo:warning=objc_msgSend(void /* id self, SEL op, ... */ )
  cargo:warning=^
  cargo:warning=webview_cocoa.c:118:25: error: too many arguments to function call, expected 0, have 2
  cargo:warning=  id app = objc_msgSend((id)objc_getClass("NSApplication"),
  cargo:warning=           ~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  cargo:warning=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/objc/message.h:63:1: note: 'objc_msgSend' declared here
  cargo:warning=objc_msgSend(void /* id self, SEL op, ... */ )
  cargo:warning=^
  cargo:warning=webview_cocoa.c:129:34: error: too many arguments to function call, expected 0, have 2
  cargo:warning=                    objc_msgSend((id)objc_getClass("NSDate"),
  cargo:warning=                    ~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
  cargo:warning=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/objc/message.h:63:1: note: 'objc_msgSend' declared here
  cargo:warning=objc_msgSend(void /* id self, SEL op, ... */ )
  cargo:warning=^
  cargo:warning=webview_cocoa.c:142:45: error: too many arguments to function call, expected 0, have 2
  cargo:warning=                               objc_msgSend(message, sel_registerName("body")),
  cargo:warning=                               ~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  cargo:warning=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/objc/message.h:63:1: note: 'objc_msgSend' declared here
  cargo:warning=objc_msgSend(void /* id self, SEL op, ... */ )
  cargo:warning=^
  cargo:warning=webview_cocoa.c:149:31: error: too many arguments to function call, expected 0, have 2
  cargo:warning=  id openPanel = objc_msgSend((id)objc_getClass("NSOpenPanel"),
  cargo:warning=                 ~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  cargo:warning=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/objc/message.h:63:1: note: 'objc_msgSend' declared here
  cargo:warning=objc_msgSend(void /* id self, SEL op, ... */ )
  cargo:warning=^
  cargo:warning=webview_cocoa.c:154:20: error: too many arguments to function call, expected 0, have 2
  cargo:warning=      objc_msgSend(parameters, sel_registerName("allowsMultipleSelection")));
  cargo:warning=      ~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  cargo:warning=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/objc/message.h:63:1: note: 'objc_msgSend' declared here
  cargo:warning=objc_msgSend(void /* id self, SEL op, ... */ )
  cargo:warning=^
  cargo:warning=webview_cocoa.c:156:16: error: too many arguments to function call, expected 0, have 3
  cargo:warning=  objc_msgSend(openPanel, sel_registerName("setCanChooseFiles:"), 1);
  cargo:warning=  ~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  cargo:warning=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/objc/message.h:63:1: note: 'objc_msgSend' declared here
  cargo:warning=objc_msgSend(void /* id self, SEL op, ... */ )
  cargo:warning=^
  cargo:warning=webview_cocoa.c:160:42: error: too many arguments to function call, expected 0, have 2
  cargo:warning=          completionHandler(objc_msgSend(openPanel, sel_registerName("URLs")));
  cargo:warning=                            ~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  cargo:warning=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/objc/message.h:63:1: note: 'objc_msgSend' declared here
  cargo:warning=objc_msgSend(void /* id self, SEL op, ... */ )
  cargo:warning=^
  cargo:warning=webview_cocoa.c:158:7: error: too many arguments to function call, expected 0, have 3
  cargo:warning=      openPanel, sel_registerName("beginWithCompletionHandler:"), ^(id result) {
  cargo:warning=      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  cargo:warning=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/objc/message.h:63:1: note: 'objc_msgSend' declared here
  cargo:warning=objc_msgSend(void /* id self, SEL op, ... */ )
  cargo:warning=^
  cargo:warning=webview_cocoa.c:170:31: error: too many arguments to function call, expected 0, have 2
  cargo:warning=  id savePanel = objc_msgSend((id)objc_getClass("NSSavePanel"),
  cargo:warning=                 ~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  cargo:warning=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/objc/message.h:63:1: note: 'objc_msgSend' declared here
  cargo:warning=objc_msgSend(void /* id self, SEL op, ... */ )
  cargo:warning=^
  cargo:warning=webview_cocoa.c:172:16: error: too many arguments to function call, expected 0, have 3
  cargo:warning=  objc_msgSend(savePanel, sel_registerName("setCanCreateDirectories:"), 1);
  cargo:warning=  ~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  cargo:warning=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/objc/message.h:63:1: note: 'objc_msgSend' declared here
  cargo:warning=objc_msgSend(void /* id self, SEL op, ... */ )
  cargo:warning=^
  cargo:warning=webview_cocoa.c:173:16: error: too many arguments to function call, expected 0, have 3
  cargo:warning=  objc_msgSend(savePanel, sel_registerName("setNameFieldStringValue:"),
  cargo:warning=  ~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  cargo:warning=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/objc/message.h:63:1: note: 'objc_msgSend' declared here
  cargo:warning=objc_msgSend(void /* id self, SEL op, ... */ )
  cargo:warning=^
  cargo:warning=webview_cocoa.c:178:42: error: too many arguments to function call, expected 0, have 2
  cargo:warning=                   id url = objc_msgSend(savePanel, sel_registerName("URL"));
  cargo:warning=                            ~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  cargo:warning=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/objc/message.h:63:1: note: 'objc_msgSend' declared here
  cargo:warning=objc_msgSend(void /* id self, SEL op, ... */ )
  cargo:warning=^
  cargo:warning=webview_cocoa.c:179:43: error: too many arguments to function call, expected 0, have 2
  cargo:warning=                   id path = objc_msgSend(url, sel_registerName("path"));
  cargo:warning=                             ~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  cargo:warning=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/objc/message.h:63:1: note: 'objc_msgSend' declared here
  cargo:warning=objc_msgSend(void /* id self, SEL op, ... */ )
  cargo:warning=^
  cargo:warning=webview_cocoa.c:175:16: error: too many arguments to function call, expected 0, have 3
  cargo:warning=  objc_msgSend(savePanel, sel_registerName("beginWithCompletionHandler:"),
  cargo:warning=  ~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  cargo:warning=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/objc/message.h:63:1: note: 'objc_msgSend' declared here
  cargo:warning=objc_msgSend(void /* id self, SEL op, ... */ )
  cargo:warning=^
  cargo:warning=fatal error: too many errors emitted, stopping now [-ferror-limit=]
  cargo:warning=20 errors generated.
  exit status: 1

  --- stderr


  error occurred: Command "cc" "-O3" "-ffunction-sections" "-fdata-sections" "-fPIC" "-I" "webview.h" "-Wall" "-Wextra" "-x" "objective-c" "-std=c11" "-w" "-DDEBUG" "-DOBJC_OLD_DISPATCH_PROTOTYPES=1" "-o" "/Users/srimanachanta/Documents/FRC Conductor/Conductor/target/release/build/webview-sys-6ddce1f3624e0432/out/webview_cocoa.o" "-c" "webview_cocoa.c" with args "cc" did not execute successfully (status code exit status: 1).


warning: build failed, waiting for other jobs to finish...
error: build failed
make: *** [release] Error 101

Any plan to update for 2023?

I'm curious, if you guys had any plan to do that. The kickoff already started, I might need help to work on FRC on this beautiful software. (I'm using MacOS, it works good for FRC 2022 though)

Not connecting to robot

Conductor doesn't seem to be connecting to my robot via wifi on my Pop Os 20.10 (Ubuntu) laptop. I have set my team number and am connected to my robot's wifi radio.

zsh: segmentation fault

Cloned the repository and built it with make setup && make release. Ran it by through /Users/justin/Conductor/target/release/conductor
Is also tried running it through cargo run
(MacOS, Big Sur, intel)

justin@JustinJiang ~ % /Users/justin/Conductor/target/release/conductor ; exit; Webserver launched on port 50999 zsh: segmentation fault /Users/justin/Conductor/target/release/conductor

Fails to connect with proxy set

image
Running either unset http_proxy HTTP_PROXY && ./elm-ds (or http_proxy= HTTP_PROXY= ./elm-ds) fixes the problem and allows it to boot normally.

However, even when proxy is enabled I can connect to the interface in the chrome by going to the localhost:PORT url.

The console shows a stream of:

http://localhost:46575/:1:7: CONSOLE ERROR ReferenceError: Can't find variable: update
http://localhost:46575/:1:7: CONSOLE ERROR ReferenceError: Can't find variable: update
http://localhost:46575/:1:7: CONSOLE ERROR ReferenceError: Can't find variable: update
http://localhost:46575/:1:7: CONSOLE ERROR ReferenceError: Can't find variable: update

I have http_proxy set to http://localhost:3128 and a squid proxy set up to that address.

Twist not working on Thrustmaster Joystick

I tried to use Conductor on macOS this morning to drive a robot. Forward, backwards, and sideways translations worked great, but when I tried to twist to change yaw, it didn't work. It works perfectly on NI DS.

Syntax error: Expected “,” but found identifier. (-2741)

When running the latest MacOS artifact or compiling from source, I get the error: 282:289: syntax error: Expected “,” but found identifier. (-2741).

➜ ./conductor
Webserver launched on port 56191
Detected Resolution 1680 1050
Resized 1328 441
282:289: syntax error: Expected “,” but found identifier. (-2741)

image

Bug in installtion instructions

the installation instructions are missing a cd after the git clone of this repo (should be e.g

# Dependencies
sudo apt-get install -y nodejs libudev-dev libx11-dev libxi-dev libpango1.0-dev libatk1.0-dev libsoup2.4-dev libgtk-3-dev libwebkit2gtk-4.0-dev

# Node Version Manager
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion
nvm install 14
nvm use 14

# Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source "$HOME/.cargo/env"
cargo install cargo-bundle

# Conductor
git clone https://github.com/Redrield/Conductor
cd Conductor # Added this line
make setup && make release

)

Add a note that webkit2gtk is a required build dependency

In the readme, it says that nodejs, npm, and rust are required, but nowhere was it mentioned that webkit2gtk was also required to build this project. I got the following error when I ran make all:

error: failed to run custom build command for `webkit2gtk-sys v0.10.0`

Caused by:
  process didn't exit successfully: `Conductor/target/debug/build/webkit2gtk-sys-1a9f6d840f48b567/build-script-build` (exit code: 1)
  --- stderr
  `"pkg-config" "--libs" "--cflags" "webkit2gtk-4.0" "webkit2gtk-4.0 >= 2.8"` did not exit successfully: exit code: 1
  --- stderr
  Package webkit2gtk-4.0 was not found in the pkg-config search path.
  Perhaps you should add the directory containing `webkit2gtk-4.0.pc'
  to the PKG_CONFIG_PATH environment variable
  Package 'webkit2gtk-4.0', required by 'virtual:world', not found
  Package 'webkit2gtk-4.0', required by 'virtual:world', not found

warning: build failed, waiting for other jobs to finish...
error: build failed
make: *** [Makefile:12: all] Error 101

I confirmed I had up to date dependencies with:

$ sudo pacman -Sy --needed nodejs npm rust webkit2gtk

Then, after running make all again, everything worked. Do you want me to open a pull request to explicitly list webkit2gtk as a required dependency, since it apparently wasn't automatically installed with make setup?

Joysticks not working

Been using conductor for the last month with no issues until suddenly it started reporting 0 for joystick values. What could be going on?

Prebuilt Artifacts

Where might I find copies of the prebuilt artifacts (particularly the .deb one)?

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.