Giter Club home page Giter Club logo

ruby_console's Introduction

Downloads

Appium Ruby Console

How to use

  1. Setup Appium
  2. Install appium_console
    gem uninstall appium_lib
    gem uninstall appium_console
    gem install appium_console
  3. Run
    • The arc command starts Appium Ruby Console.
      • arc help prints a description of all available commands
      • arc version prints the current version of appium console and appium lib.
      • arc setup android creates appium.txt for android in the current working dir.
      • arc setup ios creates appium.txt for ios in the current working dir.
      • arc toml FILE starts arc with toml FILE path

Documentation

Changelog

  • 4.0.0
    • Drop Ruby 2.7 support
  • 3.0.0
    • Update ruby_lib version to v12

ruby_console's People

Contributors

bblanco1 avatar bkone avatar bootstraponline avatar claybridges avatar dependabot-preview[bot] avatar dependabot[bot] avatar kazucocoa avatar liangway avatar mlainez avatar montdidier avatar oscartanner avatar scorix avatar tbutiu avatar tommeier avatar trevren11 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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ruby_console's Issues

Warning dependency resolution

$ gem install multi_json ffi
Successfully installed multi_json-1.7.2
Successfully installed ffi-1.5.0
WARN: Unresolved specs during Gem::Specification.reset:
   multi_json (~> 1.0)
   ffi (>= 1.0.6, ~> 1.0)
    selenium-webdriver (2.31.0)
      childprocess (>= 0.2.5)
      multi_json (~> 1.0)
   childprocess (0.3.9)
      ffi (~> 1.0, >= 1.0.11)

ARC - Dependencies

It seems the version of Pry is very out of date. Does anyone mind if we upgrade it? I was trying to cd into an object and it failed. :(

So I will see what I can do and have someone else review it.

Tomlrb::ParseError when running `arc`

Hi,

I'm trying to get setup with Appium and have the following set:

rbenv version: 2.3.0 (set by Users/name/.rbenv/version)
arc version
appium_console: v2.0.1
appium_lib: v8.0.2

I can provide a full gem list if desired.

My appium.txt file is as follows

[caps]
platformName = "iOS"
platformVersion = "8.0.2"
app = "~/Users/name/Downloads/ios.ipa"
deviceName = "iPhone"
udid = "ad6d2c2d9dc9f63a7ffae9210c8ac17be4f9402c"
`bundleId = 'com.Company.iPhoneEnterprise'``

When I run arc or bundle exec arc I'm seeing the error:

`bundler: failed to load command: arc (/Users/name/.rbenv/versions/2.3.0/bin/arc)
Tomlrb::ParseError:
parse error on value ":" (error)
  /Users/name/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/tomlrb-1.2.1/lib/tomlrb.rb:25:in `rescue in parse'
  /Users/name/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/tomlrb-1.2.1/lib/tomlrb.rb:22:in `parse'
  /Users/name/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/tomlrb-1.2.1/lib/tomlrb.rb:38:in `load_file'
  /Users/name/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/appium_lib-8.0.2/lib/appium_lib/driver.rb:89:in `load_appium_txt'
  /Users/name/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/appium_console-2.0.1/lib/appium_console.rb:19:in `block in setup'
  /Users/name/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/appium_console-2.0.1/lib/appium_console.rb:41:in `start'
  /Users/name/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/appium_console-2.0.1/lib/cli.rb:71:in `init'
  /Users/name/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/thor-0.19.1/lib/thor/command.rb:27:in `run'
  /Users/name/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/thor-0.19.1/lib/thor/invocation.rb:126:in `invoke_command'
  /Users/name/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/thor-0.19.1/lib/thor.rb:359:in `dispatch'
  /Users/name/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/thor-0.19.1/lib/thor/base.rb:440:in `start'
  /Users/name/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/appium_console-2.0.1/lib/cli.rb:80:in `<top (required)>'
  /Users/name/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/appium_console-2.0.1/bin/arc:3:in `require'
  /Users/name/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/appium_console-2.0.1/bin/arc:3:in `<top (required)>'
  /Users/name/.rbenv/versions/2.3.0/bin/arc:23:in `load'
  /Users/name/.rbenv/versions/2.3.0/bin/arc:23:in `<top (required)>'`

I've updated all my gems and am not sure what the cause of this issue could be. My apologies if this is only an issue on my end. I'd appreciate any help.

install appium_console error

liufdeMac-mini:/ liuf$ gem install --no-rdoc --no-ri appium_console bond
Building native extensions. This could take a while...
/Users/liuf/.rvm/rubies/ruby-2.3.0/lib/ruby/site_ruby/2.3.0/rubygems/ext/builder.rb:76: warning: Insecure world writable dir /Users/Shared/Android in PATH, mode 040777
ERROR: Error installing appium_console:
ERROR: Failed to build gem native extension.

current directory: /Users/liuf/.rvm/gems/ruby-2.3.0/gems/nokogiri-1.7.0.1/ext/nokogiri

/Users/liuf/.rvm/rubies/ruby-2.3.0/bin/ruby -r ./siteconf20170215-8126-54dfkh.rb extconf.rb
checking if the C compiler accepts ... yes
checking if the C compiler accepts -Wno-error=unused-command-line-argument-hard-error-in-future... no
Building nokogiri using packaged libraries.
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers. Check the mkmf.log file for more details. You may
need configuration options.

Provided configuration options:
--with-opt-dir
--with-opt-include
--without-opt-include=${opt-dir}/include
--with-opt-lib
--without-opt-lib=${opt-dir}/lib
--with-make-prog
--without-make-prog
--srcdir=.
--curdir
--ruby=/Users/liuf/.rvm/rubies/ruby-2.3.0/bin/$(RUBY_BASE_NAME)
--help
--clean
--use-system-libraries
/Users/liuf/.rvm/rubies/ruby-2.3.0/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in require': cannot load such file -- openssl (LoadError) from /Users/liuf/.rvm/rubies/ruby-2.3.0/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in require'
from /Users/liuf/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/net/https.rb:23:in <top (required)>' from /Users/liuf/.rvm/rubies/ruby-2.3.0/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in require'
from /Users/liuf/.rvm/rubies/ruby-2.3.0/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in require' from /Users/liuf/.rvm/gems/ruby-2.3.0/gems/mini_portile2-2.1.0/lib/mini_portile2/mini_portile.rb:3:in <top (required)>'
from /Users/liuf/.rvm/rubies/ruby-2.3.0/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in require' from /Users/liuf/.rvm/rubies/ruby-2.3.0/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in require'
from /Users/liuf/.rvm/gems/ruby-2.3.0/gems/mini_portile2-2.1.0/lib/mini_portile2.rb:2:in <top (required)>' from /Users/liuf/.rvm/rubies/ruby-2.3.0/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in require'
from /Users/liuf/.rvm/rubies/ruby-2.3.0/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in require' from extconf.rb:460:in

'

To see why this extension failed to compile, please check the mkmf.log which can be found here:

/Users/liuf/.rvm/gems/ruby-2.3.0/extensions/x86_64-darwin-16/2.3.0/nokogiri-1.7.0.1/mkmf.log

extconf failed, exit code 1

Gem files will remain installed in /Users/liuf/.rvm/gems/ruby-2.3.0/gems/nokogiri-1.7.0.1 for inspection.
Results logged to /Users/liuf/.rvm/gems/ruby-2.3.0/extensions/x86_64-darwin-16/2.3.0/nokogiri-1.7.0.1/gem_make.out
Building native extensions. This could take a while...
Successfully installed bond-0.5.1
1 gem installed

Check adb sanity

adb kill-server; adb devices

ruby-1.9.3-p327/lib/ruby/1.9.1/net/protocol.rb:141:in `read_nonblock': end of file reached (EOFError)
    from /Users/staffhome/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/net/protocol.rb:141:in `rbuf_fill'
    from /Users/staffhome/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/net/protocol.rb:122:in `readuntil'

appium.txt not getting loaded.

I can get a working console by launching the appium server with the app information passed as parameters on the command line and modifying start.rb:8 to

8 new_command_timeout = { caps: { newCommandTimeout: 999_999, platformName: "android" }.merge(opts[:caps] || {}) }

Document annoying gotcha with Pry

 find_element(:uiautomator, 'new UiSelector().textContains("Text")'); # -- no element shown
 find_element(:uiautomator, 'new UiSelector().textContains("Text")') # shows element

If the statement ends in ; then the element will not be shown in Pry. Delete ; for it to be shown.

Fast duration

Include a method to get the fastest duration.

See this code.

steps = 0 = tap
steps = 1 = fast swipe

Duration needs to be a number that gets turned into 1.

arc setup ios fails

arc setup ios
WARN: Unresolved specs during Gem::Specification.reset:
rubyzip (> 1.0)
json (
> 1.8)
WARN: Clearing out unresolved specs.
Please report a bug if this causes problems.
/Users/angeliaw/.rvm/gems/ruby-2.2.4/gems/appium_console-2.0.1/lib/cli.rb:25:in initialize': No such file or directory @ rb_sysopen - templates/appium.txt.erb (Errno::ENOENT) from /Users/angeliaw/.rvm/gems/ruby-2.2.4/gems/appium_console-2.0.1/lib/cli.rb:25:innew'
from /Users/angeliaw/.rvm/gems/ruby-2.2.4/gems/appium_console-2.0.1/lib/cli.rb:25:in ios' from /Users/angeliaw/.rvm/gems/ruby-2.2.4/gems/thor-0.19.1/lib/thor/command.rb:27:inrun'
from /Users/angeliaw/.rvm/gems/ruby-2.2.4/gems/thor-0.19.1/lib/thor/invocation.rb:126:in invoke_command' from /Users/angeliaw/.rvm/gems/ruby-2.2.4/gems/thor-0.19.1/lib/thor.rb:359:indispatch'
from /Users/angeliaw/.rvm/gems/ruby-2.2.4/gems/thor-0.19.1/lib/thor/invocation.rb:115:in invoke' from /Users/angeliaw/.rvm/gems/ruby-2.2.4/gems/thor-0.19.1/lib/thor.rb:235:inblock in subcommand'
from /Users/angeliaw/.rvm/gems/ruby-2.2.4/gems/thor-0.19.1/lib/thor/command.rb:27:in run' from /Users/angeliaw/.rvm/gems/ruby-2.2.4/gems/thor-0.19.1/lib/thor/invocation.rb:126:ininvoke_command'
from /Users/angeliaw/.rvm/gems/ruby-2.2.4/gems/thor-0.19.1/lib/thor.rb:359:in dispatch' from /Users/angeliaw/.rvm/gems/ruby-2.2.4/gems/thor-0.19.1/lib/thor/base.rb:440:instart'
from /Users/angeliaw/.rvm/gems/ruby-2.2.4/gems/appium_console-2.0.1/lib/cli.rb:80:in <top (required)>' from /Users/angeliaw/.rvm/rubies/ruby-2.2.4/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:68:inrequire'
from /Users/angeliaw/.rvm/rubies/ruby-2.2.4/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:68:in require' from /Users/angeliaw/.rvm/gems/ruby-2.2.4/gems/appium_console-2.0.1/bin/arc:3:in<top (required)>'
from /Users/angeliaw/.rvm/gems/ruby-2.2.4/bin/arc:22:in load' from /Users/angeliaw/.rvm/gems/ruby-2.2.4/bin/arc:22:in

'
from /Users/angeliaw/.rvm/gems/ruby-2.2.4/bin/ruby_executable_hooks:15:in eval' from /Users/angeliaw/.rvm/gems/ruby-2.2.4/bin/ruby_executable_hooks:15:in'

Commandline args

It would be killer to pass in a path to the appium.txt file. :)

ARC Wiki

Not sure if anyone else like this or not. But it would be killer to have some doc or Wiki pages on useful commands.

Thoughts?

Predicate support

This is significantly faster than client side search.

@driver.execute_script %( UIATarget.localTarget().frontMostApp().mainWindow().buttons().firstWithPredicate("name contains[c] 'Sign'").tap() )

page command fails with appium-1.6.0beta1

With appium 1.6.0 beta 1, there's preliminary support for XCUITest, since UI Automation is deprecated in Xcode 8.

Unfortunately, I can't seem to use page in arc when using this combination :(

To Reproduce:

  1. sudo npm install -g [email protected]
  2. appium &
  3. cd project/ios
  4. arc
  5. Wait for arc to launch
  6. page

The exception is:

[debug] [XCUITest] Executing command 'execute'
[MJSONWP] Encountered internal error running command: TypeError: Cannot read property 'sendCommand' of undefined
    at XCUITestDriver.callee$0$0$ (lib/commands/execute.js:19:37)
    at tryCatch (/usr/local/lib/node_modules/appium/node_modules/babel-runtime/regenerator/runtime.js:67:40)
    at GeneratorFunctionPrototype.invoke [as _invoke] (/usr/local/lib/node_modules/appium/node_modules/babel-runtime/regenerator/runtime.js:315:22)
    at GeneratorFunctionPrototype.prototype.(anonymous function) [as next] (/usr/local/lib/node_modules/appium/node_modules/babel-runtime/regenerator/runtime.js:100:21)
    at invoke (/usr/local/lib/node_modules/appium/node_modules/babel-runtime/regenerator/runtime.js:136:37)
    at enqueueResult (/usr/local/lib/node_modules/appium/node_modules/babel-runtime/regenerator/runtime.js:185:17)
    at Promise.F (/usr/local/lib/node_modules/appium/node_modules/core-js/library/modules/$.export.js:30:36)
    at AsyncIterator.enqueue (/usr/local/lib/node_modules/appium/node_modules/babel-runtime/regenerator/runtime.js:184:12)
    at AsyncIterator.prototype.(anonymous function) [as next] (/usr/local/lib/node_modules/appium/node_modules/babel-runtime/regenerator/runtime.js:100:21)
    at Object.runtime.async (/usr/local/lib/node_modules/appium/node_modules/babel-runtime/regenerator/runtime.js:209:12)
    at XCUITestDriver.callee$0$0 [as execute] (lib/commands/execute.js:10:48)
    at lib/basedriver/driver.js:174:24
    at tryCatcher (/usr/local/lib/node_modules/appium/node_modules/bluebird/js/main/util.js:26:23)
    at Promise._settlePromiseFromHandler (/usr/local/lib/node_modules/appium/node_modules/bluebird/js/main/promise.js:510:31)
    at Promise._settlePromiseAt (/usr/local/lib/node_modules/appium/node_modules/bluebird/js/main/promise.js:584:18)
    at Promise._settlePromiseAtPostResolution (/usr/local/lib/node_modules/appium/node_modules/bluebird/js/main/promise.js:248:10)
    at Async._drainQueue (/usr/local/lib/node_modules/appium/node_modules/bluebird/js/main/async.js:128:12)
    at Async._drainQueues (/usr/local/lib/node_modules/appium/node_modules/bluebird/js/main/async.js:133:10)
    at Immediate.Async.drainQueues (/usr/local/lib/node_modules/appium/node_modules/bluebird/js/main/async.js:15:14)
    at runCallback (timers.js:574:20)
    at tryOnImmediate (timers.js:554:5)
    at processImmediate [as _immediateCallback] (timers.js:533:5)
appium.txt:
[caps]
platformName = "iOS"
automationName = "XCUITest"
app = "~/appium/myApp.app"
platformVersion = "9.3"
deviceName = "iPad Retina"
fullReset = "true"

Bundle console doesn't work unless we add require => false in Gemfile

Hi

Given Gemfile:

gem 'appium_console'
gem 'appium_lib'
gem 'appium_capybara'

When I run bundle console I get:

RuntimeError: toml doesn't exist /home/kowal/my_project/appium.txt
../gems/appium_lib-7.0.0/lib/appium_lib/driver.rb:85:in `load_appium_txt'
../gems/appium_console-1.0.4/lib/appium_console.rb:14:in `block in <top (required)>'
../gems/appium_console-1.0.4/lib/appium_console.rb:37:in `<module:Console>'
../gems/appium_console-1.0.4/lib/appium_console.rb:31:in `<module:Appium>'
../gems/appium_console-1.0.4/lib/appium_console.rb:30:in `<top (required)>'
../gems/bundler-1.10.6/lib/bundler/runtime.rb:76:in `require'

This is fixed by gem 'appium_console', :require => false but I'm not sure if this is what we want. Maybe it could be fixed that it is not required to change Gemfille entry and make bundle console work.

Any ideas?

Connect to appium server on specific port.

I'd like to have two appium servers running. One for launching my tests and one that ARC connects to for making queries and testing commands. Is there a way to specify the port it uses? I tried adding PORT=3453 to the appium.txt file and guessing command-line parameters when starting ARC.

Version command

There should be an easy way to print the version number of ruby_console.

> require 'ruby_console/version'
=> true
> RubyConsole::VERSION
=> "0.0.13"

support windows application driver ?

with appium1.6, latest appium_console, appium_lib, on windows 10. arc console does not work with windows application driver, arc does not support winappdriver yet ?

#appium.txt file as below
[caps] 
platformName = "Windows"
deviceName = "WindowsPC"
app = "C:/temp/myapp.exe"

start appium server in one windows terminal
then in another terminal, cd the path with the appium.txt file above,
c:\temp\arc
appium could not start the target app, here is the log below, could not recognize app

C:\>appium
[Appium] Welcome to Appium v1.6.0
[Appium] Appium REST http interface listener started on 0.0.0.0:4723
[HTTP] --> POST /wd/hub/session {"desiredCapabilities":{"newCommandTimeout":999999,"platformName":"Windows","deviceName":"WindowsPC","app":"C:/temp/myapp.exe"}}
[MJSONWP] Calling AppiumDriver.createSession() with args: [{"newCommandTimeout":99999...
[Appium] Creating new WindowsDriver session
[Appium] Capabilities:
[Appium]   newCommandTimeout: 999999
[Appium]   platformName: 'Windows'
[Appium]   deviceName: 'WindowsPC'
[Appium]   app: 'C:/temp/myapp.exe'
[BaseDriver] The following capabilities were provided, but are not recognized by appium: app.
[BaseDriver] Session created with session id: 9de37283-27c9-439c-8d4c-eb05d6d3e856
[WinAppDriver] Verifying WinAppDriver is installed with correct checksum
[debug] [WinAppDriver] WinAppDriver changed state to 'starting'
[WinAppDriver] Killing any old WinAppDrivers, running: FOR /F "usebackq tokens=5" %a in (`netstat -nao ^| findstr /R /C:"4823 "`) do (FOR /F "usebackq" %b in (`TASKLIST /FI "PID eq %a" ^| findstr /I winappdriver.exe`) do (IF NOT %b=="" TASKKILL /F /PID %a))
[WinAppDriver] No old WinAppDrivers seemed to exist
[WinAppDriver] Spawning winappdriver with: undefined 4823/wd/hub
[WinAppDriver] [STDOUT] Windows Application Driver Beta listening for requests at: http://127.0.0.1:4823/wd/hub
[debug] [WinAppDriver] WinAppDriver changed state to 'online'
[JSONWP Proxy] Proxying [POST /session] to [POST http://127.0.0.1:4823/wd/hub/session] with body: {"desiredCapabilities":{"ne...
[WinAppDriver] [STDOUT]

Add reload command

load <path to file> will reload changed files.

Add reload command which will load appium.txt and load the contents. This eliminates the need to exit arc and start a new session when a page object changes.

arc doesn't release appium session when exiting

Don't know if it's the same for everyone but arc doesn't release the appium session once you leave the console. It means you have to kill appium and restart it to restart arc or execute test scripts.

set_wait

Add def set_wait seconds=30 as a way to undo no_wait.

Installation on Ubuntu Linux

Is it possible to install appium_console on Ubuntu/Linux? I have tried to do this numerous times but always get the following error:

~$ sudo gem install appium_console
Building native extensions.  This could take a while...
ERROR:  Error installing appium_console:
    ERROR: Failed to build gem native extension.

    current directory: /var/lib/gems/1.9.1/gems/ffi-1.9.10/ext/ffi_c
/usr/bin/ruby1.9.1 -r ./siteconf20160116-575-1udezgu.rb extconf.rb
/usr/local/lib/site_ruby/1.9.1/rubygems/core_ext/kernel_require.rb:54:in `require': cannot load such file -- mkmf (LoadError)
    from /usr/local/lib/site_ruby/1.9.1/rubygems/core_ext/kernel_require.rb:54:in `require'
    from extconf.rb:4:in `<main>'

extconf failed, exit code 1

Gem files will remain installed in /var/lib/gems/1.9.1/gems/ffi-1.9.10 for inspection.
Results logged to /var/lib/gems/1.9.1/extensions/x86_64-linux/1.9.1/ffi-1.9.10/gem_make.out

Is this something I am doing wrong or does appium_console only work in Mac OS X at the moment? If so, are there any plans for a Linux-compatible version?

Upgrade command

There should be an upgrade command that updates the gem. gem update by rubygems is broken.

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.