Git Product home page Git Product logo

indianopensourcefoundation / dynamic-cli Goto Github PK

View Code? Open in Web Editor NEW
169.0 6.0 120.0 18.41 MB

A Modern, user-friendly command-line HTTP client for the API testing, and if you're stuck - Search and browse StackOverflow without leaving the CLI

Home Page: https://pypi.org/project/dynamic-cli/

License: GNU General Public License v3.0

Python 100.00%
python stackoverflow-api commandline command command-line-tool terminal-based terminal-app pypi-package http http-client

dynamic-cli's Introduction

dynamic-cli

dynamic-cli-cropped

PyPI <Sonarcloud quality gate> Downloads Downloads License: GPL v3 PyPI

A Modern, user-friendly command-line HTTP client for the API testing, and if you're stuck - Search and browse StackOverflow without leaving the CLI

Why Dynamic-cli?

The Command Line Utility

Although the Stackoverflow website is really cool, it can be tough to remember the same question that you faced earlier :

  • Countless answers, you can save it to playbook
  • Toggle between multiple answers is easy
  • Are you a developer ? Integrate your own feature and install it

dynamic-cli - A Supercharged Command Line Utility

dynamic_search

dynamic_saving_to_playbook dynamic_retrieving_from_playbook

dynamic_api

Index

Arguments⚙

Usage: Dynamic [OPTIONS]

A Modern, user-friendly command-line HTTP client for the API testing, and if you're stuck - Search and browse StackOverflow without leaving the CLI.

Options:

-st, --start -> Introduces Dynamic CLI
-v, --version -> Gives the Version of the CLI
-s, --search -> Search a question on Stackoverflow
-no, --notion -> Open browser to login to Notion.so
-d, --debug -> Turn on Debugging mode
-c, --custom -> Setup a custom API key
-p, --playbook -> To access all the answers saved in the playbook
-h, --help -> Shows this message and exit
-GET -> Make a GET request to an API
-POST -> Make a POST request to an API
-DELETE -> Make a DELETE request to an API

Installation

Pip Installation

PyPI version PyPI

dynamic-cli is hosted on PyPI. The following command will install Dynamic-cli:

pip3 install dynamic-cli

You can also install the latest dynamic-cli from GitHub source which can contain changes not yet pushed to PyPI:

pip3 install git+https://github.com/IndianOpenSourceFoundation/dynamic-cli.git

If you are not installing in a virtualenv, you might need to run with sudo:

sudo pip3 install dynamic-cli

pip3

Depending on your setup, you might also want to run pip3 with the -H flag:

sudo -H pip3 install dynamic-cli

For most linux users, pip3 can be installed on your system using the python3-pip package.

For example, Ubuntu users can run:

sudo apt-get install python3-pip

Virtual Environment Installation

You can install Python packages in a virtualenv to avoid potential issues with dependencies or permissions.

If you are a Windows user or if you would like more details on virtualenv, check out this guide.

Install virtualenv and virtualenvwrapper:

pip3 install virtualenv
pip3 install virtualenvwrapper
export WORKON_HOME=~/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh

Create a dynamic-cli virtualenv and install dynamic-cli:

mkvirtualenv dynamic-cli
pip3 install dynamic-cli

If the pip install does not work, you might be running Python 2 by default. Check what version of Python you are running:

python --version

If the call above results in Python 2, find the path for Python 3:

which python3  # Python 3 path for mkvirtualenv's --python option

Install Python 3 if needed. Set the Python version when calling mkvirtualenv:

mkvirtualenv --python [Python 3 path from above] dynamic-cli
pip3 install dynamic-cli

If you want to activate the dynamic-cli virtualenv again later, run:

workon dynamic-cli

To deactivate the dynamic-cli virtualenv, run:

deactivate

Supported Python Versions

  • Python 3.5 - Tested
  • Python 3.6 - Tested
  • Python 3.7 - Tested
  • Python 3.8 - Tested

Supported Platforms

  • Mac OS X
    • Tested on OS X 11.16.1
  • Linux, Unix
    • Tested on Ubuntu 20 LTS
  • Windows*
    • Tested on Windows 10/11 with WSL only [Currently, you need WSL for this]

Windows Support

dynamic-cli has been tested on Windows 10/11 with WSL installed. Please read the doc here

Developer Installation📦

1. Installing pip

sudo apt-get install python3-pip

2. Clone this repository to your local drive

git clone https://github.com/IndianOpenSourceFoundation/dynamic-cli.git

3. Go to dynamic directory

cd dynamic-cli/

4. Install dependencies

pip3 install -r requirements.txt

5. Install with pip

pip3 install -e .

If you face some issue running dynamic on mac, follow the below instructions

Note for mac users: Make sure to add these lines in you ~/.bashrc or ~/.zhsrc(depending upon your shell) 👇

export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
export LC_CTYPE=en_US.UTF-8

License

The project is licensed under the GNU General Public License v3. Check out LICENSE

Contributing

PRs Welcome Open Source Love

We're accepting PRs for our open and unassigned issues. Please check CONTRIBUTING.md. We'd love your contributions! Kindly follow the steps below to get started:

1. Fork this repository.

2. Clone the forked repository.

git clone https://github.com/<your-github-username>/project_name.git

3. Navigate to the project directory.

cd dynamic-cli

4. Make changes in source code.
P.S. If you want to add emojis 😁, use unicodes. Emoji unicodes can be found at https://unicode.org/emoji/charts/full-emoji-list.html
To include an emoji in a string, copy the unicode (Eg: U+1F600), replace + with 000 and prefix it with a \.
Eg: \U0001F604

5. Stage your changes and commit

# Add changes to Index
git add .

# Commit to the local repo
git commit -m "<your_commit_message>"

7. Push your local commits to the remote repo.

git push

8. Create a PR !

9. Congratulations! Sit and relax, you've made your contribution to Dynamic-CLI project.

Testing

We also have written unit tests for API features of dynamic-cli, if you have made changes to that section you can run tests as follows:

1. To run every test in dynamic-cli:

pytest

2. To run test related to only one feature for ex. for GET API Feature:

pytest -k test_get_api

Dynamic CLI is a part of these open source programs

Contributors👨🏽‍💻

Credit goes to these people:✨

Dynamic Cli Contributors

dynamic-cli's People

Contributors

aaryanrr avatar adii21-ux avatar akash20x avatar anirudhsai20 avatar ayubisht avatar danbrown47 avatar deeppatel23 avatar gourav-bhnetwork avatar gouravsardana avatar guptaaastha avatar harshakhmk avatar himanshu007-creator avatar honeybhardwaj avatar kushshiv avatar lainq avatar mizoru avatar namamishanker avatar rohan26062001 avatar rrachitgarg avatar saidhanya18 avatar shivankar-p avatar shreya024 avatar shuvo31 avatar siddhant-k-code avatar sinha-toyeesh avatar sloth-panda avatar subham9777 avatar tushar5526 avatar utsabc avatar yasht01 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

dynamic-cli's Issues

Dynamic CLI setup for Windows

💥 Proposal

As per issue #94 discussions, contributors are looking forward to windows support, and the termos package we are using is only implemented for Linux machines.

Till the time we release a proper windows version, the contributors should be able to contribute to the code base. What if I tell you that you can do your development in a Linux environment and still use windows machines? No, I am not talking about dual boot or virtualization. It's WSL!

Windows subsystem for Linux (WSL) is a compatibility layer for running Linux binary executables natively on Windows 10, Windows 11, and Windows Server 2019. I think most of the Windows developers are using Windows 10 and it would be great news for them to use WSL as their development environment.

I am using WSL2 for quite some time and I tried testing dynamic cli. It worked like a charm.

image

I can create a quick demo resource/ text tutorial on setting up dynamic cli on Windows machines.

Let me know your thoughts. CC: @GouravSardana @sakshatl

Greeting.yaml checks fails for every pull request for the first time

We added an action when somebody sends a pull request then one of our action is failing for the first time and when contributors will send one more commit in the same pull then it works.

For example -

  • Gourav sends a pull request - Greeting.yaml check will fail.

  • Add a new commit - Remove extra spaces or anything

  • In the same pull request - Greeting.yaml check will pass.

You can send us a test PR and see it live :)

Add Intro GIF in README.md

📚 Documentation

"Embedding an animated gif in your README quickly demonstrates what your project does and catches the reader's eye"

In the animated GIF, capture the project in action to help beginners get an idea of what the project is all about. For reference, check this.

Sidenote

In the 4th step here, it is specified to type in pip3 install -e dynamic-cli/ I would suggest using pip3 install -e . instead.

Implement dynamic --version or -V

We want an args where we can display our dynamic-cli version.

For example:-

  • dynamic --version / dynamic -V
    It will give the version as 0.1 by default and when we published on PyPI then it will show up the new released version

Mistake in Readme

Install dependencies should come after Clone this repository to your local drive. It's given the other way.

Add Issue templates

I want to add issue templates for proposal, feature and documentation types so that there is proper way to create a new issue in your repo.

Please assign me this task as a part of GSSoC'21
and add necessary labels.

BUG: Identation error

Getting an indentation error after running dynamic -s in arguments/search.py
identation-error
I am on master branch with all latest changes

Implement PUT in dynamic to post the response from an API

This feature will include the following things -

  1. Once a user will enter dynamic -PUT, it will ask for a URL to put and the default URL would be 127.0.0.1:8000 and it will ask for the endpoint or you can put it directly in the URL itself
  2. It will ask for headers then it will ask for payloads
  3. Optional param - User-Agent
  4. It will build on top of CURL.
  5. The output will get in JSON with proper syntax highlighter.

Example -

  • dynamic -PUT
  • Enter the URL with endpoint - [press enter - default would be 127.0.0.1:800]
  • Headers - Enter headers
  • User Agent [Optional]
  • Codes => 200 (OK) or 204 (No Content). 404 (Not Found), if ID not found or invalid.
    Posting (loading emoji)

{
json output
}

Fix issues with windows

As we are using a library that just works on UNIX platforms, it's difficult to run the application on windows computers. But, recently I found out this library called textual which helps us create beautiful terminal user interfaces like in the image below.

The library is only supported for UNIX platforms right now, but they will be rolling out a windows version soon as per their readme 👇🏾
image

Change the layout of search results

🚀 Feature

We want to display the search results in an organized manner. Hence, we need to change to the following format to display the results:

  • For the most upvoted result:

    • Desc:
    • Ans:
    • Snippet:
  • For the rest of the results:

    • Question title - URL

Motivation

Currently, as shown in the screenshot below, the results aren't displayed in an organized manner and it's difficult to get the right results.

image

Pitch

This feature, if implemented, would allow users to get instant access to the most upvoted answer in the same way as on the StackOverflow website.

Facing issue while installing Dynamic on MAC

Hey,

I installed dynamic cli on my local. I'm facing issue -

➜  ~ dynamic -s        
Traceback (most recent call last):
  File "/Users/gsard00/.pyenv/versions/cc362/bin/dynamic", line 11, in <module>
    load_entry_point('dynamic', 'console_scripts', 'dynamic')()
  File "/Users/gsard00/.pyenv/versions/3.6.2/envs/cc362/lib/python3.6/site-packages/pkg_resources/__init__.py", line 565, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/Users/gsard00/.pyenv/versions/3.6.2/envs/cc362/lib/python3.6/site-packages/pkg_resources/__init__.py", line 2631, in load_entry_point
    return ep.load()
  File "/Users/gsard00/.pyenv/versions/3.6.2/envs/cc362/lib/python3.6/site-packages/pkg_resources/__init__.py", line 2291, in load
    return self.resolve()
  File "/Users/gsard00/.pyenv/versions/3.6.2/envs/cc362/lib/python3.6/site-packages/pkg_resources/__init__.py", line 2297, in resolve
    module = __import__(self.module_name, fromlist=['__name__'], level=0)
  File "/Users/gsard00/Desktop/dynamic-cli/main.py", line 4, in <module>
    from src.arguments.search import Search
  File "/Users/gsard00/Desktop/dynamic-cli/src/arguments/search.py", line 7, in <module>
    from .utility import Utility
  File "/Users/gsard00/Desktop/dynamic-cli/src/arguments/utility.py", line 12, in <module>
    from simple_term_menu import TerminalMenu
  File "/Users/gsard00/.pyenv/versions/3.6.2/envs/cc362/lib/python3.6/site-packages/simple_term_menu.py", line 118, in <module>
    class BoxDrawingCharacters:
  File "/Users/gsard00/.pyenv/versions/3.6.2/envs/cc362/lib/python3.6/site-packages/simple_term_menu.py", line 119, in BoxDrawingCharacters
    if getlocale()[1] == "UTF-8":
  File "/Users/gsard00/.pyenv/versions/3.6.2/lib/python3.6/locale.py", line 581, in getlocale
    return _parse_localename(localename)
  File "/Users/gsard00/.pyenv/versions/3.6.2/lib/python3.6/locale.py", line 490, in _parse_localename
    raise ValueError('unknown locale: %s' % localename)
ValueError: unknown locale: UTF-8

To solve this, You'll have to follow below instructions in bashrc or zshrc depend upon your mac.

  1. Open bashrc/zshrc and copy paste below line
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
  1. run source ~/.bash_profile

Now issue will be resolved. Link here

Syntax highlighting, Questions(along with the answers) and Proper line breaks

💥 Proposal

This is one of the results from a search in the dynamic-cli:

Screenshot from 2021-03-21 20-16-29

As you can see the syntax highlighting is not very prominent among a few other issues - so I would like to propose the following changes:

  • Better syntax highlighting (preferrably with a contrasting color)
  • If user searches for a query/phrase/keyword, it is better to include the questions along with answers as well - Right now only the answers' source links are provided, which might force the user from quitting the terminal and heading over to the site straightaway - which violates the main objective of this application.
  • Also as a user, I would like to have a proper demarcation(preferrably line breaks) between any 2 answers. Right now we are just providing a series of dashes(---).

Have you read the Contributing Guidelines on Pull Requests?

(Write your answer here.)

Codacy Integration

We can have a Codacy integration in this project. So that before merging it will automatically analyze the quality of the code.

Learn more about Codacy here

Changing HTML entities to String

Description

When we run it, HTML entities are used in place of string

For Ex. ,
&lt; instead of <
&gt; instead of >

I would like to work on it.

Also Please add gssoc labels

Keybindings?

🚀 Feature

My idea:
After displaying the results(from StackExchange), we can open up the stdin to receive keypresses. So that we can perform specific tasks(or functions) with keyboard shortcuts.

Examples:
ctrl+s - > to save results to a file
ctrl+r -> Reload the results.

And many more...

The keyboard module will help us listen for keypresses.

Have you read the Contributing Guidelines on Pull Requests?

Yes

Motivation

I implemented this feature while I was working on a project. I thought we could implement this feature in dynamic-cli because it makes it easier for people to use the cli.

Pitch

explained above

Add Playbook to Notion

In this feature, we need these things -

  1. Create a notion account and generate the token. The flow would be like this -

    • dynamic --notion -> Open up notion login to the browser and ask them to log in.

    • After this -> The terminal will show. 'Notion Logged in' or 'Notion logged in failed'

  2. Now it's time to upload. Use dynamic --notionupload or nu. Then it will automatically fill up the question to the notion. We have to implement a similar thing like this. We have to make this from scratch.

Support for Reddit🚀

🚀 Feature

If a question searched on the cli, if that doesn't in StackOverflow then it will automatically call Reddit API to search it on Reddit and provide you the link or the description.

You can create your function here

Pitch

This feature is good because we are using Reddit as a backup. If there is no answer in the StackOverflow.

This is related to GirlScript Summer of Code 2021. Anyone can pick this.

code of conduct file

📚 Documentation

(A clear and concise description of what the issue is.)
There is no code of conduct file explaining all the rules that should be followed while contributing to a project so would like to add one under gssoc

Have you read the Contributing Guidelines on Pull Requests?

Yes
(Write your answer here.)

Add a feature to check the concurrency of an API

We have a feature where you can make a post request from the terminal using dynamic --POST. We need to add a new thing to test the API concurrency.

Suppose, you are testing the performance of an API i.e How many loads it can take at one time. Make an args for this and it will take 1 more parameter i.e value
Example -
Dynamic --POST --perftest [args name can be anything other than perftest but should be meaningful]
->API URL
->Payload [If required] [Optional]
-> How much thread you want to create - [User input] #Let say I gave 100

It'll make 100 requests at the same time to that API with the payload [if required] and return the output in the table format which displays how much time each request takes and download as a pdf or text file. If the request fails or takes time we can return the timeout

Setup your own custom Stackoverflow api key

In our dynamic cli, we are using one default API key. We can have an option where the user can set his own custom API key rather than using our own.

@pranavbaburaj Can talk about it more!

Travis-CI Integration

Integrate Travis CI with our dynamic-cli and add relevant build (pass/fail) icon in the readme as well.

For more information about Travis click here

Add windows guidelines in readme

Add the guidelines to install dynamic on the window OS because the user needs to set up WSL in the window OS to make it work [It doesn't take much time]. We are working on it to make it independent but some of the binaries are different in window and termios is causing the issue. For more detail refer #94

Add emojis in CLI

💥 Proposal: Emoji in CLI

We can add relevant emojis in the CLI like minikube (Kubernetes). Check the screenshot below for reference:

screenshot

Update README.md

📚 Documentation

The starting of the readme file has the project name and the description which looks very simple i want to update that so that it look nice.

Have you read the Contributing Guidelines on Pull Requests?

yes i have read it.

i would love to work on it
Regards
Honey Bhardwaj

Implement GET in dynamic to get the response from an API

This feature will include the following things -

  1. Once a user will enter dynamic -GET, it will ask for a URL to put and the default URL would be 127.0.0.1:8000 and it will ask for the end point or you can put directly in the URL itself
  2. It will build on top of CURL.
  3. Output will get in JSON with proper syntax highlighter.

Example -
dynamic -GET
Enter the URL - [press enter - default would be 127.0.0.1:800]

Trying (loading emoji)

{
json result;
}

Fixed Greeting.yaml

Greeting.yaml build is failing while someone sends a pull request. Anybody can pick this up and fix this.

You can find the greeting.yaml here

IOSF Virtual Meet Up

Discussed in #114

Originally posted by GouravSardana June 28, 2021
Hey Everyone,

I hope everything is good. Can we have a virtual meet up next this Saturday (July 3) where we will discuss about what's going on and what need to be done in Dynamic CLI ?

Also need your suggestions to start a new project under IOSF for all of you. It would be mosty on Frontend or might be on other technologies (depends on suggestions).

@sakshatl and ME would be there for you. Sakshat is handling our Product end.

Are you guys available on Saturday ?

cc @kaustubhgupta @pranavbaburaj @anshsrtv @guptaaastha @harshakhmk @haider000 @Ak-Shaw @lakshyajit165 @NamamiShanker @honeybhardwaj

Add all the args to Readme Usage

Add all the args which we have in our dynamic-CLI to the Readme. So that If new users/contributors will come, It will easily find out all the information from the readme itself.
For Example: -

Usage

Usage: Dynamic [OPTIONS]

A Modern, user-friendly command-line HTTP client for the API testing, and if you're stuck - Search and browse StackOverflow without leaving the CLI.

Options:
  -v, --version                 gives the version of our CLI
  -s, --search                  Search a question on StackOverflow
 -d,  --debug                   Turn on debugging mode
  --help                        Show this message and exit.

Save data to a Playbook

As you all know our Dynamic CLI is used to find out answers from Stackoverflow. What if users want to save that question to their playbook.

Idea is to maintain a playbook in their local storage where all the package data will store and we can add an option after giving the answers to the StackOverflow question - Do you want to save this in your playbook? Y/N

If users replied yes then save it to their local storage and if users want to get those data back use - dynamic --playbook or dynamic --p. It will display the data in table form.

Making one answer visible at a time.

🚀 Feature

This feature will view one answer at a time & the user can navigate through the answers with the help of arrow keys. This will make it easier for the user to see an answer.

Have you read the Contributing Guidelines on Pull Requests?

Yes

Motivation

It was very frustrating for me to scroll through every time to find an answer among so many.

Pitch

It increases the ease of use of this project.

Please assign me this Issue and Add gssoc label. @GouravSardana

Readme file enhancement

The Readme file can be enhanced by adding a list of all the Open Source programs in which this project was listed in.

Implement DELETE in dynamic to post the response from an API

This feature will include the following things -

  1. Once a user will enter dynamic -DELETE, it will ask for a URL to put and the default URL would be 127.0.0.1:8000 and it will ask for the endpoint or you can put it directly in the URL itself
  2. It will ask for headers then it will ask for payloads
  3. Optional param - User-Agent
  4. It will build on top of CURL or Request
  5. The output will get in JSON with proper syntax highlighter.

Example -

  • dynamic -DELETE
  • Enter the URL with endpoint - [press enter - default would be 127.0.0.1:800]
  • Headers - Enter headers
  • User Agent [Optional]
  • Codes => 200 (OK). 404 (Not Found), if ID not found or invalid.
    Posting (loading emoji)

{
json output
}

Mention relevant comments in the Utility.py file

📚 Documentation

The utility.py file contains functionalities which are used in fetching answers from APIs. It would be better to mention concise comments(before each function) mentioning the functionality of the methods and if the function is relatively long - a little bit of description about the flow as to what exactly that function does

Have you read the Contributing Guidelines on Pull Requests?

Update Readme

📚 Documentation

I would like on work on this under GSSoC, I would like to update the Readme, to make it easier for the students to see how they can contribute, from forking the project to creating a pull request. If this is okay, kindly assign it to me, otherwise would you create other issues?

Have you read the Contributing Guidelines on Pull Requests?

Yes

Add a new args called --new to create a question on StackOverFlow

We don't have any feature where we can add a new question on Stackoverflow using our Dynamic-cli.

Here are some details: -
Example -

  1. dynamic --new
    It will open up the default web browser and open StackOverflow in it with this link

  2. dynamic --new [title] [desc]
    It will open up the default browser but with all the relevant fields filled already like title and description.

Implement POST in dynamic to post the response from an API

This feature will include the following things -

  1. Once a user will enter dynamic -POST, it will ask for a URL to put and the default URL would be 127.0.0.1:8000 and it will ask for the endpoint or you can put it directly in the URL itself
  2. It will ask for headers then it will ask for payloads
  3. Optional param - User-Agent
  4. It will build on top of CURL.
  5. The output will get in JSON with proper syntax highlighter.

Example -

  • dynamic -POST
  • Enter the URL with endpoint - [press enter - default would be 127.0.0.1:800]
  • Headers - Enter headers
  • User Agent [Optional]

Posting (loading emoji)


{
json output
}

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.