Giter Site home page Giter Site logo

php-parallel-lint's Introduction

PHP Parallel Lint

This repository is abandoned.

Suggested alternative: https://github.com/php-parallel-lint/PHP-Parallel-Lint


This tool checks syntax of PHP files faster than serial check with a fancier output.

Running parallel jobs in PHP is inspired by Nette framework tests.

Installation

Just run the following command to install it:

composer require --dev jakub-onderka/php-parallel-lint

For colored output also install the suggested package jakub-onderka/php-console-highlighter:

composer require --dev jakub-onderka/php-console-highlighter

Example output

Example use of tool with error

Options for run

  • -p <php> Specify PHP-CGI executable to run (default: 'php').
  • -s, --short Set short_open_tag to On (default: Off).
  • -a, --asp Set asp_tags to On (default: Off).
  • -e <ext> Check only files with selected extensions separated by comma. (default: php,php3,php4,php5,phtml,phpt)
  • --exclude Exclude a file or directory. If you want exclude multiple items, use multiple exclude parameters.
  • -j <num> Run jobs in parallel (default: 10).
  • --colors Force enable colors in console output.
  • --no-colors Disable colors in console output.
  • --no-progress Disable progress in console output.
  • --checkstyle Output results as Checkstyle XML.
  • --json Output results as JSON string (require PHP 5.4).
  • --blame Try to show git blame for row with error.
  • --git <git> Path to Git executable to show blame message (default: 'git').
  • --stdin Load files and folder to test from standard input.
  • --ignore-fails Ignore failed tests.
  • -h, --help Print this help.
  • -V, --version Display this application version.

Recommended setting for usage with Symfony framework

For run from command line:

vendor/bin/parallel-lint --exclude app --exclude vendor .

Create Phar package

PHP Parallel Lint supports Box app for creating Phar package. First, install box app:

curl -LSs https://box-project.github.io/box2/installer.php | php

and then run this command in parallel lint folder, which creates parallel-lint.phar file.

box build

Downloads this Month Build Status Build status License

php-parallel-lint's People

Contributors

cjhaas avatar donatj avatar edhgoose avatar elkangaroo avatar exussum12 avatar fprochazka avatar glensc avatar grahamcampbell avatar grogy avatar jakubonderka avatar janvernieuwe avatar jeroendedauw avatar kamazee avatar krinkle avatar kukulich avatar mbrodala avatar mdio avatar msound avatar mzk avatar o5 avatar paranoiq avatar reedy avatar smugryan avatar thiemowmde avatar vasekpurchart avatar

Stargazers

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

Watchers

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

php-parallel-lint's Issues

Flag to ignore 'No file found' error

Hi!

Currently lint fails if it hasn't found any file. This makes hard to setup CI before writing any code, it would be great to add special flag to ignore such behavior.

Release new stable version

Hey, since there are quite a few important changes since the last stable version (0.5), i think a new stable version, probably 0.6 should be released.

As proposed in #21 this should not be achieved via the composer.json, but just creating new tag, or a Github release.

Wildcard exclude

For my project i have multiple modules/libs that i want to test, but not the vendor folders in them.
I have tried: parallel-lint --exclude "vendor" --exclude "components/*/vendor" . but thats not working.

Is there a way to do it? Because i cant find it :/

Add options --no-progress and --quiet

As mentioned in #73, it would be handy to have an option to disable the progress output.

--no-progress to disable the output of the progress bar
--quiet to disable all output that are not errors

So using only --no-progress could perhaps return some success message, while --quiet only outputs errors if there are any.

WDYT?

Ignored warnings

Warnings are ignored in linter output, but if fatal error occur after warning, message shows only warning and not fatal error.

Typically in php file with declare(strict_types=1);
If i check with php 5.6 , file is without errors, but if i add return type declaration eg. ...): void {... then fatal error occurs in php lint, but in output is displayed only warning from strict_types.

Solution can be displaying all errors from output.
Nice to have will by option to enable detection of warnings and display them.

Directory separators

Using --exclude ../../whatever works for unix, but fails on windows (but ....\whatever works)

Time for a new release?

Hi! Today we had a user on Windows who experienced a bug that had been fixed a while back (#40), but isn't included in a release yet. Could you do a new release that includes that patch?

Thanks!

Significantly slower under HHVM

Hi!
First off, your tool is fantastic, we've started switching over our CI jobs to use it.

I've noticed that running it under HHVM is significantly slower than using PHP5. For example, when checking the "includes" directory of MediaWiki:

$ vendor/bin/parallel-lint includes -p hhvm
PHP 5.6.99 | HHVM 3.3.1 | 10 parallel jobs
............................................................  60/829 (7 %)
............................................................ 120/829 (14 %)
............................................................ 180/829 (21 %)
............................................................ 240/829 (28 %)
............................................................ 300/829 (36 %)
............................................................ 360/829 (43 %)
............................................................ 420/829 (50 %)
............................................................ 480/829 (57 %)
............................................................ 540/829 (65 %)
............................................................ 600/829 (72 %)
............................................................ 660/829 (79 %)
............................................................ 720/829 (86 %)
............................................................ 780/829 (94 %)
.................................................            829/829 (100 %)


Checked 829 files in 55.7 seconds, no syntax error found

versus

$ vendor/bin/parallel-lint includes -p php5
PHP 5.5.9 | 10 parallel jobs
............................................................  60/829 (7 %)
............................................................ 120/829 (14 %)
............................................................ 180/829 (21 %)
............................................................ 240/829 (28 %)
............................................................ 300/829 (36 %)
............................................................ 360/829 (43 %)
............................................................ 420/829 (50 %)
............................................................ 480/829 (57 %)
............................................................ 540/829 (65 %)
............................................................ 600/829 (72 %)
............................................................ 660/829 (79 %)
............................................................ 720/829 (86 %)
............................................................ 780/829 (94 %)
.................................................            829/829 (100 %)


Checked 829 files in 8.2 seconds, no syntax error found

Extension filter does not work for combined extension

When I want to check files with extension .php.dist (Distribution configs) I currently need to specify -e php,dist, which would for example also try to lint *.xml.dist files.

I'd like the -e option to be able to handle these combined extensions, so I can pass -e php,php.dist, filtering only php files and "distrubution" php files. (This also works in tools like phpcs, ...

I could help implementing it.
PS: The title might not be that nice. Just update it if something else fits better.

Light background terminal.

Instead of forcing the color to (almost) white in the case of a white terminal you should be using the reset color "\e[0m". Then this will look better on both light and dark terminals.

Incorrect paths shown when run from root file system directory

The Error::getShortFilePath method is currently implemented this way:

return str_replace(getcwd(), '', $this->filePath);

If you're currently cded into the root of the file system (/), this causes all the paths to have their slashes removed. For example, if I try linting /var/www/foo and there's an error inside /var/www/foo/bar.php, I'll get the following error:

Parse error: varwwwfoobar.php:123

This happens because getcwd() returns / and therefore it replaces every single slash in the path.

Exclude folder from lint

Idea - in run paralell-lint src/ can set exclude folder / folders.

Example paralell-lint --exclude vendor/ src/

File files instead of syntax error (on Windows)

See the output:

parallel-lint  --exclude vendor .\www
.-...................

Checked 20 files in 0.3 second, no syntax error found

I added syntax error to one of the files. But it does not find syntax errors there, but the file "fails" (src\Manager.php:139). I don't know what's wrong.
php -l on the file prints the error properly.

Parse error: syntax error, unexpected 'if' (T_IF) in ApiController.php on line 11
Errors parsing ApiController.php

Windows 8.1 64bit, PHP-Parallel-Lint dev-master, PHP 5.4.7

Clarify that exclude option actually supports files

Would it be possible to add an exclude-file option, in the same way that there is an exclude(-dir) option already?

And/or could the exclude option be improved to ignore specific files if passed as a parameter?

how to set php version checking

Hi, thx for the interesting tool, but I have a project running on php 5.3, how I can check php syntax with rules for 5.3 version, I mean if somebody by chance commit code with "trait", "yield" must be an a errors, but if I set version 5.5 - must be ok.
How I can configure such cases?

proc_open returns NULL

Hello.

This is line 47 in https://github.com/JakubOnderka/PHP-Parallel-Lint/blob/master/src/Process/Process.php:

$this->process = proc_open($cmdLine, $descriptors, $pipes, null, null, array('bypass_shell' => true));

It was modified:

    echo 'cmd=';var_dump($cmdLine);echo PHP_EOL;
    echo 'descriptors=';var_dump($descriptors);echo PHP_EOL;
    echo 'pipes=';var_dump($pipes);echo PHP_EOL;
    $this->process = proc_open($cmdLine, $descriptors, $pipes, null, null, array('bypass_shell' => true));
    echo 'is_resource=';var_dump(is_resource($this->process));echo PHP_EOL;
    echo 'process=';var_dump($this->process);echo PHP_EOL;

And execution returned:
------8<------
$ ./vendor/bin/parallel-lint local/
cmd=string(112) "'php' -n -r 'echo '''PHP;''', PHP_VERSION_ID, ''';''', defined('''HPHP_VERSION''') ? HPHP_VERSION : null;'"

descriptors=array(3) {
[0] =>
array(2) {
[0] =>
string(4) "pipe"
[1] =>
string(1) "r"
}
[1] =>
array(2) {
[0] =>
string(4) "pipe"
[1] =>
string(1) "w"
}
[2] =>
array(2) {
[0] =>
string(4) "pipe"
[1] =>
string(1) "w"
}
}

pipes=NULL

is_resource=bool(false)

process=NULL

cmd=string(115) "'php' --php -r 'echo '''PHP;''', PHP_VERSION_ID, ''';''', defined('''HPHP_VERSION''') ? HPHP_VERSION : null;'"

descriptors=array(3) {
[0] =>
array(2) {
[0] =>
string(4) "pipe"
[1] =>
string(1) "r"
}
[1] =>
array(2) {
[0] =>
string(4) "pipe"
[1] =>
string(1) "w"
}
[2] =>
array(2) {
[0] =>
string(4) "pipe"
[1] =>
string(1) "w"
}
}

pipes=NULL

is_resource=bool(false)

process=NULL

'php' is not valid PHP binary.
------8<------

Maybe condition «$this->process === false» needs «or» statement:

$this->process === false || !is_resource($this->process)

Require vendor/autoload in bin

When running parallel lint in a build step, symlinks are not always kepth between build steps.

PHP Warning:  require(/data/home/bamboo/bamboo-agent-home/xml-data/build-dir/RVFR-NTB233-GET/bin/parallel-lint.php): failed to open stream: No such file or directory in /data/home/bamboo/bamboo-agent-home/xml-data/build-dir/RVFR-NTB233-GET/bin/parallel-lint on line 4
15-Nov-2017 12:13:58    PHP Fatal error:  require(): Failed opening required '/data/home/bamboo/bamboo-agent-home/xml-data/build-dir/RVFR-NTB233-GET/bin/parallel-lint.php' (include_path='.:/usr/local/zend/share/pear') in /data/home/bamboo/bamboo-agent-home/xml-data/build-dir/RVFR-NTB233-GET/bin/parallel-lint on line 4
15-Nov-2017 12:13:58    To skip commit checks, add -n or --no-verify flag to commit command

Other tasks attempt to load the vendor/autoload.php and do not seem to have this issue.
Have not been able to test yet if require-ing the autoloader does indeed fixes the issue above.

Forgetting last argument exits with 0 exit code

PHP Parallel Lint version 1.0.0
-------------------------------
Usage:
    parallel-lint [sa] [-p php] [-e ext] [-j num] [--exclude dir] [files or directories]
Options:
    -p <php>        Specify PHP-CGI executable to run (default: 'php').
    -s, --short     Set short_open_tag to On (default: Off).
    -a, -asp        Set asp_tags to On (default: Off).
    -e <ext>        Check only files with selected extensions separated by comma.
                    (default: php,php3,php4,php5,phtml)
    --exclude       Exclude a file or directory. If you want exclude multiple items,
                    use multiple exclude parameters.
    -j <num>        Run <num> jobs in parallel (default: 10).
    --colors        Enable colors in console output. (disables auto detection of color support)
    --no-colors     Disable colors in console output.
    --no-progress   Disable progress in console output.
    --json          Output results as JSON string (require PHP 5.4).
    --blame         Try to show git blame for row with error.
    --git <git>     Path to Git executable to show blame message (default: 'git').
    --stdin         Load files and folder to test from standard input.
    --ignore-fails  Ignore failed tests.
    -h, --help      Print this help.
    -V, --version   Display this application version

$ echo $?
0

So any configuration mistakes are not discovered by automated tooling.

Rename run for Composer vendor/bin

The run script is inserted into the global ./vendor/bin as run, which has the potential to conflict with any other dependencies, and also provides no way to identify what the run script is actually for without running it.

Maybe rename it to something like parallel-lint?

tag new release

would be cool to get a new release, as I would love to use the "--no-progress" switch in our CI

phar file?

Hello

is there a .phar option of this package?

.inc Files

How do I make parallel-lint parse .php and .inc files ? Currently it seems to be ignoring my .inc files

$ find . -name "*.php" | wc -l
25
$ find . -name "*.inc" | wc -l
16
$ ./vendor/bin/parallel-lint .
PHP 5.5.9 | 10 parallel jobs
.........................                                    25/25 (100 %)


Checked 25 files in 0.1 seconds
No syntax error found

As seen above, it only checks the 25 .php files I have.

Add option --quiet

For suppress output, but throw error if found.

..............................................  60/839 (7 %)
............................................................ 120/839 (14 %)
............................................................ 180/839 (21 %)
............................................................ 240/839 (28 %)
............................................................ 300/839 (35 %)
............................................................ 360/839 (42 %)
............................................................ 420/839 (50 %)
............................................................ 480/839 (57 %)
............................................................ 540/839 (64 %)
............................................................ 600/839 (71 %)
............................................................ 660/839 (78 %)
............................................................ 720/839 (85 %)
............................................................ 780/839 (92 %)
...........................................................  839/839 (100 %)

PHP 5.3 support

Hi,

interface JsonSerializable is used in project. But interface was defined until in PHP 5.4 [1]. PHP 5.3 is dead actually [2]. However PHP 5.3 will used in elderly project and hostings.

What we do with it? I have two solution.

A/ Change support to PHP 5.4 and newest.
B/ Remove used interface and replace custom interface. (not ok, I think it is bad solution)
C/ Other solution?


[1] http://php.net/manual/en/class.jsonserializable.php
[2] http://php.net/archive/2014.php#id2014-08-14-1

Check only changed files

Hello,

I think we could add the option --only-git-changed. This option will force an analysis only on the changed files.

This is just an idea. I don't know if this feature is possible for PHP-Parallel-Lint.
Library https://github.com/M6Web/Coke does this feature.

Thanks,
Best regards,

Vincent Chataignier

Symbolic links should be ignored, or have an option to do turn this on or off

Symbolic links are not real PHP files and may, for whatever reason, not resolve to an actual file in a development or CI environment. Symbolic links should be ignored, or be able to be ignored with a command line switch.

Currently, PHP-Parallel-Lint will report Checked nnnn files in xx seconds, no syntax error found, but then report Could not open input file: ... with an exit status of 1, causing CI tools to fail even though there were no actual lint errors.

I understand that unreadable files, bad permissions, etc. are a good cause to fail QA tests, but symbolic links (along with pipes, directories, etc.) are not regular PHP files and should always be ignored, or least have the option of being ignored.

Exclude parameter ignored for files listed on command line

Hello,

i don't know if this behavior is intended, but i found it to be wrong:

./vendor/bin/parallel-lint --exclude core core/test.php
PHP 7.1.7 | 10 parallel jobs
X                                                            1/1 (100 %)


Checked 1 files in 0 seconds
Syntax error found in 1 file

------------------------------------------------------------
Parse error: core/test.php:3
    1| <?php
    2| foo
Unexpected end of file

If i just call it with . instead of the file name, the core directory is not checked as expected.

Kind regards
Florian

PHP Output is not parsed well

Create file called test.php with very simple contents

<?php
    break; 

Run paralllel-lint.php with PHP 7.0.4 (tested on windows version)

php parallel-lint.php --no-color parallel-lint.php test.php

Output is:

PHP 7.0.4 | 10 parallel jobs
X                                                            1/1 (100 %)


Checked 1 files in 0.1 seconds
Syntax error found in 1 file

------------------------------------------------------------
Parse error: test\Extension.php:2
    1| <?php
  > 2|     break;
    3|
    4|
Fatal error: 'break' not

When running php -l test.php:

Fatal error: 'break' not in the 'loop' or 'switch' context in test.php on line 2
Errors parsing test.php

So output of parallel-lint is truncated a bit.
Expected result is:

PHP 7.0.4 | 10 parallel jobs
X                                                            1/1 (100 %)


Checked 1 files in 0.1 seconds
Syntax error found in 1 file

------------------------------------------------------------
Parse error: test\Extension.php:2
    1| <?php
  > 2|     break;
    3|
    4|
'break' not in the 'loop' or 'switch' context

bogus syntax error

i do not know what is special with this file that phplint fails. what is more weirder that the error is not triggered with -s flag even the file does not use short tags.

➔ ./parallel-lint --help
PHP Parallel Lint version 0.9.2
-------------------------------
Usage:
    parallel-lint [sa] [-p php] [-e ext] [-j num] [--exclude dir] [files or directories]

Options:
    -p <php>        Specify PHP-CGI executable to run (default: 'php').
    -s, --short     Set short_open_tag to On (default: Off).

➔ ./parallel-lint preview.phtml
PHP 5.6.27 | 10 parallel jobs
X                                                            1/1 (100 %)


Checked 1 files in 0.6 seconds
Syntax error found in 1 file

------------------------------------------------------------
Parse error: preview.phtml:13
    11|         </div>
    12|         <?php $i++; ?>
  > 13| <?php endforeach; ?>
    14| </div>
Unexpected 'endforeach' (T_ENDFOREACH)

➔ ./parallel-lint preview.phtml -s
PHP 5.6.27 | 10 parallel jobs
.                                                            1/1 (100 %)


Checked 1 files in 0.6 seconds
No syntax error found

➔

the input file in question:

<div class="customblock-preview-galleries customblock-preview-layout-<?= $this->layout ?>">
<?php $i = 0; ?>
<?php foreach($this->galleries as $gallery): ?>
        <div class="customblock-preview-gallery customblock-preview-gallery-<?= $i + 1 ?>">
                <div class="customblock-preview-gallery-cover">
                        <?php if(!empty($gallery->extra->cover)): ?>
                        <img src="<?= $this->imageUrl($gallery->extra->cover->assetId, 520, 250) ?>">
                        <? endif; ?>
                </div>
                <div class="customblock-preview-gallery-title"><?= $gallery->title ?></div>
        </div>
        <?php $i++; ?>
<?php endforeach; ?>
</div>

Add option --version

I'm implementing this tool into our Continuous Integration and I would like to print version of parallel-lint for potentially troubleshooting.

There is a workaround with sed, but new option will be nicer.

[~]$ parallel-lint | sed -n 1p
PHP Parallel Lint version 0.9.1

Version should be also constant instead of hardcoded string.

Please let me know, if you are open for PR :)
Thanks

Regresion in v0.7

Warning: proc_open(): CreateProcess failed, error code - 206 in ...vendor\jakub-ond
erka\php-parallel-lint\src\Process.php on line 72
Cannot create new process "php" -n "C:\Users\tomas\AppData\Roaming\Composer\vendor\jakub-onderka\php-parallel-lint\src/.
./bin/skip-linting.php" ".\data\www\bin\check.php" "..." // many more files

exec fails for many files because of error 206 (Filename or extension too long). Works fine for v0.5

tag 1.0

Is there any blocker to tag a v1 ?

add option --color

there exists --no-color option, but no opposite option --color.

the colorfulness seems to be auto detected, and the detection algorithm is unknown and it's apparently failing in ci environments where no real tty exists. would be nice to to force colors there.

Optional Git blame

I stumbled upon the new Git blame functionality introduced in 9930d12 when updating all my projects to the 0.8 version finally and I noticed (correct me if I am wrong) that there is no straightforward way, to disable this functionality - if it will run is based only on the fact if there is a Git executable.

Using git blame is not really helpful in a lot of situations (depends on the workflow of the project) blame might not be a good tool for the job at all. And what's more - there are situations, when the file is not even committed to Git yet, so it is outright misleading.

The only way to disable the functionality is to set the --git cmd parameter to an non-existent executable. But I consider this approach really hacky and prone to error (no way to ensure there wont be such an executable on different systems, it's relying on current implementation detail, etc.),

I would prefer if there was a way to disable this by a cmd parameter (or be disabled by default and only optionally enabled?).

# disable blame functionality
./parallel-lint --no-blame . 

# or if it would be disabled by default
./parallel-lint --blame . 

Please let me know, that do you think, I can try to prepare a PR, when/if we agree on one of the variants.

Change of 'property' in errors - Regression ?

Hi,
was there a reason to change the properties-entry in errors to be the same "name" which is already included in the message ?

For me the change was a big regression in terms of failing tests and losing valueable data which allowed us to pinpoint where errors in the json are, which we now cant do anymore.

Before:

$error = ['property' => 'element[0].anotherelement[0].settings', 'message' => 'The property id is required'];

After:

$error = ['property' => 'id', 'message' => 'The property id is required'];

While the property-entry on the first thing helps me quickly find what is really wrong (in a complex schema there might be multiple elements on different levels with the same property-name), the second gives me absolutely nothing, only redundant information which i already have in the message.

Would it be possible to get this "path" back in a way for example as an additional 'path' in the error ?

phpcs support

Might be nice to be able to leverage this code to be able to run phpcs against a large codebase in parrellel and aggregate the results similar to the lint command.

Host .phar version

Hi there,

parallel-lint is awesome! It's just a tiny bit painful to integrate it into my CI flow. I'd be happy to help you set up a small gh-pages site to host it. Would you be able to keep it updated?

Cheers,
Rouven

Support for Laravel Blade template

How can I make parallel-lint show this Laravel blade template snippet as error?

<html>
    <head>
        <title>App Name - @yield('title')</title>
    </head>
    <body>
        @section('sidebar')
            This is the master sidebar.
        @show

        <div class="container">
            @yield('content')
        </div>
    </body>
</html>

weird error when ran under docker

i get such error:

bash-4.3# ./parallel-lint bin/
PHP 5.3.29 | 10 parallel jobs
PHP Notice:  Undefined offset: 1 in /src/src/Process/SkipLintProcess.php on line 84
PHP Notice:  Undefined offset: 1 in /src/src/Process/SkipLintProcess.php on line 84
File bin/skip-linting.php has empty skip status. Please contact PHP Parallel Lint author.
bash-4.3#

however i tried to reproduce this using public debian image and can not reproduce there

this is how i prepared env, and it works here:

# docker run --rm -it debian
root@d8c5d8d45d2b:/# apt-get update
root@d8c5d8d45d2b:/# apt-get install -y php5-cli git curl
root@d8c5d8d45d2b:/# git clone https://github.com/JakubOnderka/PHP-Parallel-Lint -b v0.9.2 /src
root@d8c5d8d45d2b:/src# curl -SsfL https://raw.githubusercontent.com/composer/getcomposer.org/1b137f8bf6db3e79a38a5bc45324414a6b1f9df2/web/installer | php -- --quiet
root@d8c5d8d45d2b:/src# ./composer.phar install --no-dev

the actual container where problem occours is not public.

any ideas what can be wrong here, or what commands to run as test to figure out the problem?

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.