Code Monkey home page Code Monkey logo

xst's Introduction

xst [ĭg-zĭst′]

A modern command line interface for exist-db

version Conventional Commits javascript style guide

Semantic Release CodeQL

Built on top of @existdb/node-exist.

Installation

Prerequisite: nodeJS version 14.18 or later

npm install --global @existdb/xst

This will put the executable xst in your path.

Usage

xst <command>

You can verify your installation is working with

xst --version

Output commands and options

xst --help

You can use --help with any command to get additional information on how to use it.

xst <command> --help

Available Commands

command description aliases
info Gather system information
get [options] <source> <target> Download a collection or resource download fetch
upload [options] <source> <target> Upload files and directories up
remove [options] <paths..> Remove collections or resources rm delete del
edit [options] <resource> Edit a resource in a local editor
execute [<query>] [options] Execute a query string or file run exec
list [options] <collection> List collection contents ls
package list [options] List installed packages pkg ls
package install [options] <packages..> Install XAR packages pkg i
package uninstall [options] <packages..> Remove XAR packages pkg uninstall

Examples

List collections

xst list /db

List the entire contents of the apps collection

This will output extended and colored information of all collections and resources of /db/apps in a tree.

xst list /db/apps --long --tree --color

NOTE: Resources and collections the connecting user does not have access to will be omitted with --long.

Find the largest JavaScript resource

xst list /db/apps --long --recursive --color --glob '*.js' --sizesort

Download a resource

This will download the controller of the dashboard to the current working directory.

xst get /db/apps/dashboard/controller.xql .

Download a collection

If the target is a collection, a folder with the same name will be created at the specified target and all of its contents will be downloaded.

xst get /db/apps/dashboard .

The above downloads the contents of the collection /db/apps/dashboard into the dashboard folder in the current working directory.

Set the permission for a resource

This demonstrates how you can extend the current functionality by running arbitrary scripts. You need to connnect as a database administrator to be able to run the queries.

xst execute 'sm:chmod(xs:anyURI($file), $permissions)' \
  -b '{"file": "/db/apps/dashboard/controller.xql", "permissions": "rwxrwxr-x"}'

Reset the permissions back to their original state.

xst execute 'sm:chmod(xs:anyURI($file), $permissions)' \
  -b '{"file": "/db/apps/dashboard/controller.xql", "permissions": "rwxr-xr-x"}'

Executing a main module

If you find yourself using the same query over and over again or it is a complex one you can save it to a file and use the --file parameter.

xst execute --file my-query.xq

Install a local XAR package into an exist-db.

This will also install all of its declared dependencies from the configured repository.

xst package install path/to/my-package.xar

NOTE: User that connects must be a database administrator.

List all installed application packages with their dependencies

xst package list --applications --dependencies

Configuration

By default xst connects to https://localhost:8443 as user guest.

NOTE: The instance you want to connect to must be running and XML-RPC has to be enabled.

With a Configuration File

xst now supports configuration files. The global --config option expects a path to a readable configuration file. Currently three different formats are recognized.

Example

xst ls /db/apps --config spec/fixtures/.xstrc 

.xstrc

A JSON formatted file where you can set connection options as well as other preferred settings like color or timesort. Have a look at the example .xstrc.

NOTE: The boolean option "secure" is deprecated. To switch between encrypted and unencrypted connections use "protocol" instead. "secure" will continue to work for both XMLRPC and REST until version 2.

.existdb.json

These are present in projects using the sync feature from eXistdb's Visual Studio Code plugin.

dotenv files

EXISTDB_USER=admin
EXISTDB_PASS=my super secret p455w0rd!
EXISTDB_SERVER=http://localhost:8080

NOTE: If the current working directory contains an .env file it will be loaded automatically unless the --config parameter is set.

With Environment Variables

Override any of the default connection parameters by setting environment variables prefixed with EXISTDB. In the following table you see a list of the parameters with their default values and a description.

variable name default description
EXISTDB_USER admin the user used to connect to the database and to execute queries with
EXISTDB_PASS empty the password to authenticate the user against the database
EXISTDB_SERVER https://localhost:8443 the URL of the database instance to connect to (only http and https protocols are allowed)

Example

EXISTDB_SERVER=http://127.0.0.1:8080 xst ls /db/apps

Development

If you want to test or develop this package further follow the steps below

  1. clone this repository

    git clone https://github.com/line-o/xst
  2. change to the working directory

    cd xst
  3. install package dependencies

    npm install
  4. link this package into your global packages directory

    npm link

Note: With this setup --version will always output 0.0.0-development.

Testing

Once you followed the above steps and linked a local clone of this repository run the testsuite with

npm test

NOTE: You will need to have an instance of existdb running (usually a local development instance).

Contributing

We are happy to accept contributions from the community. Contributions can be just a typo in the readme or better documentation, as well as bugfixes and new features. For bugfixes and features it is best to open an issue, so that we can discuss your approach first. That way your PR will be merged quickly.

When committing to this project each commit message must conform to conventional commits as versioning and releases are automated using semantic-release.

commitlint

If you want to check your commits while developing you can add a pre-commit-hook with husky.

Activate husky for this project

npx husky install

This will add to git hooks

  • pre-commit npm run lint ensures any JS is formatted correctly and will prevent you from committing when it encounters problems like unused variables and such.
  • commit-msg will run commitlint to ensure the commit message is following conventional commit message format

These are not activated by default as it prevents you from doing work-in-progress commits. But keep in mind, both checks will run when you open a PR, so it might be easier to have this checked right from the start and not having to edit your history later.

xst's People

Contributors

dependabot[bot] avatar duncdrum avatar line-o avatar open-collective-bot[bot] avatar reinhapa avatar windauer avatar

Stargazers

 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

xst's Issues

Allow certain ouri-definition

Please make sure that the feature you are suggesting is reported in the right place. Documentation, Dashboard etc all have their own repos. Suggestion for new features should be posted there.

Describe the solution you'd like
I would like to configure the ouri if the exist-context was changed from /exist to / similar to -ouri=xmldb:exist://192.168.1.2:80/xmlrpc

Describe alternatives you've considered
n/a

Additional context
Changed context for exist from /exist to /

implement command to list packages

xst packages list [options]

Aliases:

  • ls

Should return tabulated list of package-abbreviations.

Example Output:

package-service
dashboard
monex
html-templating
eXide

Possible options:

  • --versions, -V : list installed version
  • --libraries, -l or -L: list only installed libraries
  • --applicationts, -a or -A: list only installed applications
  • --filter, -f: list only libraries and/or applications that match a given pattern
  • --extended, -e: add more information to the result (date of installation, namespace URI, declared dependencies, ...)
  • --json, -j: return result as json (in order to pipe it to jq for example or store it in a file)
  • --full-name: return namespace URIs instead of abbreviated names

refs eXist-db/node-exist#223

What about permissions?

Please make sure that the feature you are suggesting is reported in the right place. Documentation, Dashboard etc all have their own repos. Suggestion for new features should be posted there.

Is your feature request related to a problem? Please describe.
When uploading, the permissions are set from the uploading users permissions. It would be nice to be able to specify a target for permissions of the uploaded files
Describe the solution you'd like
I would like to see a config option that allows setting permissions for the target
Describe alternatives you've considered
I could also run a xquery on the server to fix this, but getting it in one run would be much nicer :-)
Additional context
Not really, but this is a nifty tool!

allow installation of packages from repository server

Enhancement

At the moment xst only allows installation of packages that are locally available. While this is useful for local build artefacts there are plenty of pre-built packages available at the public package repository.

It would be handy if xst would allow to install any of them without having to download them first.

xst package install --from-repo [--repo-url] <packages..>

The XQuery implementation might end up just being a call to repo:install-and-deploy#2 and some error handling wrapped around it.

related to #13 (to query 3rd party repositories)

Alternatives

No response

Add duration time for the execute command

Enhancement

Some commands, for instance upload, shows the duratoin in the output, for example Created 0 collections and uploaded 1 resources in 292ms.

In the case of execute command, I'm missing this information.

I'm debugging the indexing routine by modifying the indexes and input data. I repeat the same command with different data (collection.xconf, index.xql, input.xml): xst execute "xmldb:reindex('/db/apps/teilex0-publisher/data/playground')" --config admin.xstrc.

Duration of the task is significant for my case.

Alternatives

I run the command using xst and watch the INFO in the eXist-db log.

Add completion for fish shell

Enhancement

As a user of the fish shell I would like xst to provide completions not only for zsh and bash but for fish as well.

This will finally be possible when yargs/yargs#2281 is merged.

Alternatives

In the meantime you can already start with this script (ripped from the PR above)

Create a file ~/.config/fish/completions/xst.fish with following contents:

### xst completion - begin. generated by omelette.js ###
#
# yargs command completion script
#
#
function _xst_yargs_completion
  set cmd (commandline -b)
  for arg in (string split " " $cmd)
      set -a args "'$arg'"
  end
  set completions (eval xst --get-yargs-completions $args)
  for completion in $completions
    echo -e $completion
  end
end
complete -f -c xst -a '(_xst_yargs_completion)'
### xst completion - end ###

create command to edit a resource in `$EDITOR`

originally requested by @chakl

xst edit <resource> [options]

Create a new command edit that will

  1. download the resource
  2. open the application defined in the EDITOR environment variable or given in the --editor option
  3. upload the resource when the file is saved inside the editor
  4. exit the process when the editor is closed

Examples

xst edit /db/temp/resource.xml
xst edit /db/temp/resource.xml --editor vim

create command to update installed packages

Is your feature request related to a problem? Please describe.

As a database admin I want to quickly update all installed packages.

Describe the solution you'd like

xst package update [--repo] [<packages>..]

packages is a space separated list of identifiers. Identifiers can be either the (abbreviated) name or the namespace URI of the package.

update all

  • xst package update

update one

  • xst package update monex
  • xst package update http://line-o/xq/dicey

use non-default repository for lookups

  • xst package update --repo https://localhost:8080/exist/apps/public-repo monex

Describe alternatives you've considered

To avoid having to move xst install to xst package install the command could also just be xst update.

Additional context

This feature request is a result of a slack discussion
A first implementation for the db query

Unable to use HTTP in v1.9.0

What happened?

Setting properties "secure" : false, "protocol": "http:" in config file raises an error:

Parse Error: Expected HTTP/

A different combination of properteis ("secure" : false, protocol": "https:") will raise a diffeent error:

Protocol "https:" not supported. Expected "http:"

If use only "protocol": "http:" (withou secure property) following error occurs:

Protocol "http:" not supported. Expected "https:"

System Information

Running xst info --config redaktor.xstrc raises the same errors. Without configuration:

Build: eXist-6.2.0 (c8fa4958b6d4a50bd0cba7f3e76a150226414187)
Java: 11.0.16.1 (Microsoft)
OS: Windows 10 10.0 (amd64)

Relevant shell output

No response

False positive message when command failed

What happened?

If I use xst to upload files to the colletion on eXist-db and the main collection don't exist, the upload fails and the failed steps are described in the verbose log.

But the last line of the output claims that everything went fine: created 1 collections and uploaded 1 resources in 144ms

System Information

Build: eXist-6.0.1 (51506fc97a9e5bb55fdea71fc76def2c9d402886)
Java: 1.8.0_292 (Azul Systems, Inc.)
OS: Windows 10 10.0 (amd64)

Relevant shell output

SET project=mordigital
xst upload -i "*.xml" -v ../local/data/ /db/apps/%project%-data/data/dictionaries --config %project%.xstrc

target exists: false
Uploading: ../local/data/ to /db/apps/mordigital-data/data/dictionaries
Server: https://localhost:8443
User: mordigital
Include:
 *.xml

Uploading directory tree
✘ /db/apps/mordigital-data/data/dictionaries/ could not be created! Reason: Failed to invoke method createCollection in class org.exist.xmlrpc.RpcConnection: No write permissions for /db/apps
✘ morais1_pages 157_159.xml could not be created! Reason: Failed to invoke method parseLocal in class org.exist.xmlrpc.RpcConnection: collection /db/apps/mordigital-data/data/dictionaries not found!
created 1 collections and uploaded 1 resources in 144ms

[BUG] XST download not possible

To be able to better understand you problem, please add as much information as possible to this ticket. Always test your bugs against the latest stable release of exist. We cannot provide support for older versions here on GitHub. If the version of eXist that is experiencing the issue is more than 1 major version behind the most recent release, please consider posting a question on our mailing list.

Describe the bug
I try to download a resource/collection via xst. Unfortunately, I just get the xst splash screen.

Expected behavior
Download of the resource

To Reproduce

The best way is to provide an SSCCE (Short, Self Contained, Correct (Compilable), Example). One type of SSCCE could be a small test which reproduces the issue and can be run without dependencies. Please locate the existing test-suite and follow the examples provided there:

xst get /db/apps/stephan/ZZUXMPUX.xml . --config dockerhost

where "dockerhost" is the name of my config file. ls of collections works well... so I can confirm that my config file is working

Screenshots
If applicable, add screenshots to help explain your problem.
Bildschirm­foto 2022-12-20 um 15 49 25

Context (please always complete the following information):

  • OS: Ventura 13.0.1 MacOs
  • eXist-db Version: 5.2.0
  • App Version: XST build via npm install

Additional context

  • How is eXist-db installed? started via bin/startup.sh
  • Any custom changes in e.g. conf.xml? Nope

Cannot find package 'execa'

What happened?

After installing xst globally, setting the path to the npm repository (C:\Users\<User>\AppData\Roaming\npm) and running xst from Windows Powershell Command, or a Command Prompt the error Cannot find package 'execa' is thrown.

Xst program will not run.

System Information

Microsoft Windows [Version 10.0.19045.2604]

Relevant shell output

PS C:\Users\<User>> xst --version

node:internal/errors:464
    ErrorCaptureStackTrace(err);
    ^

Error [ERR_MODULE_NOT_FOUND]: Cannot find package 'execa' imported from C:\Users\<User>\AppData\Roaming\npm\node_modules\@existdb\xst\commands\edit.js
    at new NodeError (node:internal/errors:371:5)
    at packageResolve (node:internal/modules/esm/resolve:884:9)
    at moduleResolve (node:internal/modules/esm/resolve:929:18)
    at defaultResolve (node:internal/modules/esm/resolve:1044:11)
    at ESMLoader.resolve (node:internal/modules/esm/loader:422:30)
    at ESMLoader.getModuleJob (node:internal/modules/esm/loader:222:40)
    at ModuleWrap.<anonymous> (node:internal/modules/esm/module_job:76:40)
    at link (node:internal/modules/esm/module_job:75:36) {
  code: 'ERR_MODULE_NOT_FOUND'
}

keep on getting "Package installation failed. User "guest" is not a member of the "dba" group."

What happened?

I have an existing .existdb.json which is configured with user 'admin' and empty pass (for local development) but xst keeps on complaining : "Package installation failed. User "guest" is not a member of the "dba" group."

System Information

Build: eXist-6.2.0 (c8fa4958b6d4a50bd0cba7f3e76a150226414187)
Java: 1.8.0_382 (Azul Systems, Inc.)
OS: Mac OS X 14.2.1 (aarch64)

(should output xst version too). It is:
1.6.1

Relevant shell output

Package installation failed. User "guest" is not a member of the "dba" group.

Single and double quotes not interchangeable after xst execute

What happened?

When calling execute command with parameter that expect string, only combination of single quotes inside double quoted text ("... '..' ... " ) works.

The opposit case ('... ".." ... ') doesn't work: double quotes are ommited.

Combination of single quotes inside double quotes is used in the readme help.

System Information

Build: eXist-6.0.1 (51506fc97a9e5bb55fdea71fc76def2c9d402886)
Java: 1.8.0_292 (Azul Systems, Inc.)
OS: Windows 10 10.0 (amd64)

Relevant shell output

xst execute 'xmldb:reindex("/db/apps/%project%-data")' --config admin.xstrc
xmldb:reindex(/db/apps/mordigital-data)

xst execute "xmldb:reindex('/db/apps/%project%-data')" --config admin.xstrc
true

add option `--watch` to xst upload

this would be my most-wanted additional feature to give up on gulp-exist which never really flew for me due to always necessary patches to gulpfile.

create command to synchronise a folder with a collection

xst sync <source> <target>

Synchronise the contents of target with source.

  • Resources and collections not found in source will be removed in target.
  • Resources and collections not found in target will be copied from source.
  • Resources that were modified in source will be copied to target.

Options

  • --watch: do not close the process after initial sync but watch for changes and re-sync

refs eXist-db/node-exist#207

allow installation of multiple XAR packages

Currently xst install allows only one package to be installed per call

xst install <package>

This should be enhanced to allow more than one

xst install <package> [packages..]

add command to uninstall packages

xst package uninstall [options] <packages..>

Uninstall packages

Options:
      --version  Show version number                                                       [boolean]
      --config   configuration to use
      --help     Show help                                                                 [boolean]
  -G, --color    Color the output                                         [boolean] [default: false]
  -f, --force    Force uninstall without dependency check                 [boolean] [default: false]
      --raw      Return raw JSON returned from server                     [boolean] [default: false]

alignment of owner and group in `xst list --long`

Which of the below variants of aligning owner and group do you prefer?

Variant A (right-aligned, status quo)

crwxr-xr-x         SYSTEM            dba    0 B  Jan  4 17:05 apps
crwxr-xr-x          admin            dba    0 B  Jan  4 17:09 ├── atom-editor
crwxr-xr-x         SYSTEM            dba    0 B  Jan  4 17:05 ├── dashboard
crwxr-xr-x         SYSTEM            dba    0 B  Jan  4 17:05 ├── doc
crwxrwxr-x          eXide          eXide    0 B  Jan  6 22:35 ├── eXide
crwxr-xr-x         SYSTEM            dba    0 B  Jan  4 17:05 ├── fundocs
crwxrwxr-x          monex          monex    0 B  Jan  6 22:40 ├── monex
crwxrwxr-x packageservice packageservice    0 B  Jan  4 17:05 ├── packageservice
crwxr-xr-x          admin            dba    0 B  Jan  4 18:01 └── test

Variant B (center)

crwxr-xr-x         SYSTEM dba               0 B  Jan  4 17:05 apps
crwxr-xr-x          admin dba               0 B  Jan  4 17:09 ├── atom-editor
crwxr-xr-x         SYSTEM dba               0 B  Jan  4 17:05 ├── dashboard
crwxr-xr-x         SYSTEM dba               0 B  Jan  4 17:05 ├── doc
crwxrwxr-x          eXide eXide             0 B  Jan  6 22:35 ├── eXide
crwxr-xr-x         SYSTEM dba               0 B  Jan  4 17:05 ├── fundocs
crwxrwxr-x          monex monex             0 B  Jan  6 22:40 ├── monex
crwxrwxr-x packageservice packageservice    0 B  Jan  4 17:05 ├── packageservice
crwxr-xr-x          admin dba               0 B  Jan  4 18:01 └── test

Variant C (left-aligned)

crwxr-xr-x SYSTEM         dba               0 B  Jan  4 17:05 apps
crwxr-xr-x admin          dba               0 B  Jan  4 17:09 ├── atom-editor
crwxr-xr-x SYSTEM         dba               0 B  Jan  4 17:05 ├── dashboard
crwxr-xr-x SYSTEM         dba               0 B  Jan  4 17:05 ├── doc
crwxrwxr-x eXide          eXide             0 B  Jan  6 22:35 ├── eXide
crwxr-xr-x SYSTEM         dba               0 B  Jan  4 17:05 ├── fundocs
crwxrwxr-x packageservice packageservice    0 B  Jan  4 17:05 ├── packageservice
crwxr-xr-x admin          dba               0 B  Jan  4 18:01 └── test

xst upload with globs, expanded by the shell, must fail with an actionable error

What happened?

xst up data/* /db/apps/my-app/data/ --config .xstrc only uploads the first file in the local data directory and not like expected all files.

System Information

Build: eXist-6.2.0 (c8fa4958b6d4a50bd0cba7f3e76a150226414187)
Java: 11.0.18 (Eclipse Adoptium)
OS: Linux 5.15.0-69-generic (amd64)

Relevant shell output

xst up data/* /db/apps/eebo-data/data --config .xstrc

require node >= 16

The execa package, needs node >= 16 at runtime

This means we will bump the minimum node version to node 16 in the near future triggering a major version release.

  • update readme
  • drop node 14 from test matrix
  • add node 20 to test matrix

incorrect exit code on failure (branch package-update)

What happened?

When using "xst package install registry", I mistakenly specified an invalid package name/version combination (there is no version 6.0.1 of "tuttle"). xst reported the failure, but returns exit code 0 which means "success". When using xst from Ansible, a failed package installation would be reported as "success".

$ /usr/local/bin/xst package install registry http://e-editiones.org/tuttle 6.0.1 --registry http://A_VALID_REGISTRY/exist/apps/public-repo/
Connecting to remote DB using an unencrypted channel.
✘ http://e-editiones.org/tuttle > could not be installed 
$ echo $?
0

xst should return non-zero on failed package installation.

System Information

No response

Relevant shell output

No response

Removing files from the collection using patterns

Enhancement

I didn't find an example for deleting a list of files using wildcards in the Readme, and maybe it's not implemented yet.

I tried wildcards in the path: xst remove /db/apps/%project%-data/data/dictionaries/*.xml

I also tried -i parameter of the upload command: xst remove -i "*.xml" /db/apps/%project%-data/data/dictionaries/

Both commands failed.

Alternatives

Only the full name of the document being removed worked: xst remove /db/apps/%project%-data/data/dictionaries/pages_157_159.xml

Package installation fails when REST API is disabled

What happened?

When trying to install a package with xst (starting with version 1.9.0) on an instance of exist-db that has

      <init-param>
         <param-name>hidden</param-name>
         <param-value>true</param-value>
      </init-param>

set in etc/webapp/WEB-INF/web.xml, effectively disabling the REST API, package installation fails with

; xst package install spec/fixtures/test-app.xar
Install test-app.xar on https://localhost:8443
Response code 403 (Forbidden)

As it fails to fall back to XMLRPC API. As a workaround one can still force XMLRPC use by providing --rpc to the installation command.

; xst package install spec/fixtures/test-app.xar --rpc

or by setting it in the configuration (only possible in .xstrc):

{ "rpc": true }

System Information

Build: eXist-7.0.0-SNAPSHOT (b032a424e9e92582938080d90b057a14c079df04)
Java: 17.0.6 (Azul Systems, Inc.)
OS: Mac OS X 13.6 (aarch64)

Relevant shell output

; xst package install spec/fixtures/test-app.xar
Install test-app.xar on https://localhost:8443
Response code 403 (Forbidden)

Periodically check for updates

As for all packages that are globally installed command line utilities, it is easy for users to miss out on updates.
This is why many of them, like npm for example, incorporate periodic update checks and display a message on the command line starting that a new version is available and how to update the package.
I found three packages doing this

Conveniently, the check-kit readme contains a comparison table including all three of them.

update-notifier is by far the most used one with several thousand dependents. The real downside is that it will create and display the notification by itself whereas check-kit and update-check both allow to craft the message to your own liking. On the other hand the notification from update-notifier is well-known and understood and safely be considered production ready.

create command to remove collections and resources

Remove files in an existdb instance, mimicking the unix rm program.

xst rm <resource> [options]

Options

  • --force, -f: force removal of collections that are not empty
  • --recursive, -r: traverse the entire collection tree when removing
  • --glob, -g: only remove items that match the given glob pattern
  • --dry-run, -d: show which items would be removed

refs eXist-db/node-exist#208

implement xst get

xst get <source> [<target>]

followup of eXist-db/node-exist#209

Use Cases

  • Download an entire collection from exist to current working directory
    xst get /db/temp
  • Download an entire collection from exist to target directory
    xst get /db/temp /tmp
  • Download specific resource to target folder with the same name (defaults to current working directory if not set)
    xst get /db/temp/resource.xml
    xst get /db/temp/resource.xml ~/test
    xst get /db/temp/resource.xml ./subfolder
  • Download specific resource to local file
    xst get /db/temp/resource.xml test.xml
    xst get /db/temp/resource.xml ./test.xml
    xst get /db/temp/resource.xml ~/test.xml

Possible options

  • include - globbing pattern, only files matching the pattern are downloaded
  • exclude - globbing pattern, files matching the pattern are excluded
  • allow to set serialisation options for XML and JSON resources
  • parallel downloads with X-threads

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.