Giter Site home page Giter Site logo

Comments (13)

ugexe avatar ugexe commented on August 20, 2024 2

Pinging @ugexe : looks like some uses of mkdir don't have their result sunk, which causes noise when they failed and the Failure gets DESTROYed unhandled.

That path suggests it is something in CURI -- when its looking for some module it can attempt to create that short directory.

from rakudo-pkg.

nxadm avatar nxadm commented on August 20, 2024 2

@niner I suspect nfpm prunes empty directories (need to look at that code). For now I added the directories to the config linked above.

Tag https://github.com/nxadm/rakudo-pkg/tree/v2021.02.1-03 is building and releasing the packages as we speak.

Thank to everyone that looked into this.

from rakudo-pkg.

lizmat avatar lizmat commented on August 20, 2024 1

Pinging @ugexe : looks like some uses of mkdir don't have their result sunk, which causes noise when they failed and the Failure gets DESTROYed unhandled.

from rakudo-pkg.

nxadm avatar nxadm commented on August 20, 2024

Hi @Altai-man,

I took a fresh Ubuntu image and everything seems to work as intended:

~$ podman run -ti ubuntu
root@a18987facde0:/# apt-get update && apt-get -y install curl git
[...]
root@a18987facde0:/# curl -1sLf 'https://dl.cloudsmith.io/public/nxadm-pkgs/rakudo-pkg/setup.deb.sh' | bash
Executing the  setup script for the 'nxadm-pkgs/rakudo-pkg' repository ...

   OK: Checking for required executable 'curl' ...
   OK: Checking for required executable 'apt-get' ...
   OK: Detecting your OS distribution and release using system methods ...
 ^^^^: ... Detected/provided for your OS/distribution, version and architecture:
 >>>>:
 >>>>: ... distro=ubuntu  version=20.04  codename=focal  arch=x86_64  
 >>>>:
 NOPE: Checking for apt dependency 'apt-transport-https' ...
   OK: Updating apt repository metadata cache ...
   OK: Attempting to install 'apt-transport-https' ...
   OK: Checking for apt dependency 'ca-certificates' ...
 NOPE: Checking for apt dependency 'gnupg' ...
   OK: Attempting to install 'gnupg' ...
   OK: Importing 'nxadm-pkgs/rakudo-pkg' repository GPG key into apt ...
   OK: Checking if upstream install config is OK ...
   OK: Installing 'nxadm-pkgs/rakudo-pkg' repository via apt ...
   OK: Updating apt repository metadata cache ...
   OK: The repository has been installed successfully - You're ready to rock!

root@a18987facde0:/# apt-get update && apt-get -y install rakudo-pkg
[...]
root@a18987facde0:/# /opt/rakudo-pkg/bin/install-zef 
===> Testing: zef:ver<0.11.4>:auth<github:ugexe>:api<0>
===> Testing [OK] for zef:ver<0.11.4>:auth<github:ugexe>:api<0>
===> Installing: zef:ver<0.11.4>:auth<github:ugexe>:api<0>

1 bin/ script [zef] installed to:
/root/.raku/bin
Don't forget to add '~/.raku/bin' to your PATH,
e.g. by adding this to .profile:
export PATH=~/.raku/bin:$PATH
root@a18987facde0:/# source /etc/profile.d/rakudo-pkg.sh 
root@a18987facde0:/# export PATH=~/.raku/bin:$PATH
root@a18987facde0:/# zef install SuperMAIN
===> Searching for: SuperMAIN
===> Testing: SuperMAIN:ver<0.1.4>:auth<github:nxadm>:api<1>
===> Testing [OK] for SuperMAIN:ver<0.1.4>:auth<github:nxadm>:api<1>
===> Installing: SuperMAIN:ver<0.1.4>:auth<github:nxadm>:api<1>

Now running a container as a user (will post below).

from rakudo-pkg.

nxadm avatar nxadm commented on August 20, 2024

For a user it seems we get a lot of output garbage, but zef does work as intended. @lizmat, can you help with this?

~$ podman run -ti ubuntu
root@a18987facde0:/# apt-get update && apt-get install curl git
[...]
root@a18987facde0:/# curl -1sLf 'https://dl.cloudsmith.io/public/nxadm-pkgs/rakudo-pkg/setup.deb.sh' | bash
Executing the  setup script for the 'nxadm-pkgs/rakudo-pkg' repository ...

   OK: Checking for required executable 'curl' ...
   OK: Checking for required executable 'apt-get' ...
   OK: Detecting your OS distribution and release using system methods ...
 ^^^^: ... Detected/provided for your OS/distribution, version and architecture:
 >>>>:
 >>>>: ... distro=ubuntu  version=20.04  codename=focal  arch=x86_64  
 >>>>:
 NOPE: Checking for apt dependency 'apt-transport-https' ...
   OK: Updating apt repository metadata cache ...
   OK: Attempting to install 'apt-transport-https' ...
   OK: Checking for apt dependency 'ca-certificates' ...
 NOPE: Checking for apt dependency 'gnupg' ...
   OK: Attempting to install 'gnupg' ...
   OK: Importing 'nxadm-pkgs/rakudo-pkg' repository GPG key into apt ...
   OK: Checking if upstream install config is OK ...
   OK: Installing 'nxadm-pkgs/rakudo-pkg' repository via apt ...
   OK: Updating apt repository metadata cache ...
   OK: The repository has been installed successfully - You're ready to rock!

root@a18987facde0:/# apt-get update && apt-get install -y rakudo-pkg
[...]
# useradd -m user
root@0bf7504fa7f2:/# su - user
$ echo $PATH    
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/opt/rakudo-pkg/bin:/opt/rakudo-pkg/share/perl6/bin
$ install-zef 
WARNING: unhandled Failure detected in DESTROY. If you meant to ignore it, you can mark it as handled by calling .Bool, .so, .not, or .defined methods. The Failure was:
Failed to create directory '/opt/rakudo-pkg/share/perl6/vendor/short' with mode '0o777': Failed to mkdir: Permission denied
  in method probe at bin/zef line 71
  in block  at bin/zef line 135
  in code  at bin/zef line 121
  in submethod TWEAK at bin/zef line 70
  in submethod TWEAK at bin/zef line 326
  in sub get-client at bin/zef line 1173
  in sub MAIN at bin/zef line 420
  in sub MAIN at bin/zef line 314
  in block <unit> at bin/zef line 3

WARNING: unhandled Failure detected in DESTROY. If you meant to ignore it, you can mark it as handled by calling .Bool, .so, .not, or .defined methods. The Failure was:
Failed to create directory '/opt/rakudo-pkg/share/perl6/site/short' with mode '0o777': Failed to mkdir: Permission denied
  in method probe at bin/zef line 71
  in block  at bin/zef line 135
  in code  at bin/zef line 121
  in submethod TWEAK at bin/zef line 70
  in submethod TWEAK at bin/zef line 326
  in sub get-client at bin/zef line 1173
  in sub MAIN at bin/zef line 420
  in sub MAIN at bin/zef line 314
  in block <unit> at bin/zef line 3

===> Testing: zef:ver<0.11.4>:auth<github:ugexe>:api<0>
[zef] WARNING: unhandled Failure detected in DESTROY. If you meant to ignore it, you can mark it as handled by calling .Bool, .so, .not, or .defined methods. The Failure was:
[zef] Failed to create directory '/opt/rakudo-pkg/share/perl6/vendor/short' with mode '0o777': Failed to mkdir: Permission denied
[zef]   in any statement_control at /opt/rakudo-pkg/bin/../share/perl6/lib/Perl6/Grammar.moarvm line 1
[zef] WARNING: unhandled Failure detected in DESTROY. If you meant to ignore it, you can mark it as handled by calling .Bool, .so, .not, or .defined methods. The Failure was:
[zef] Failed to create directory '/opt/rakudo-pkg/share/perl6/site/short' with mode '0o777': Failed to mkdir: Permission denied
[zef]   in any statement_control at /opt/rakudo-pkg/bin/../share/perl6/lib/Perl6/Grammar.moarvm line 1
[zef] WARNING: unhandled Failure detected in DESTROY. If you meant to ignore it, you can mark it as handled by calling .Bool, .so, .not, or .defined methods. The Failure was:
[zef] Failed to create directory '/opt/rakudo-pkg/share/perl6/vendor/short' with mode '0o777': Failed to mkdir: Permission denied
[zef]   in any statement_control at /opt/rakudo-pkg/bin/../share/perl6/lib/Perl6/Grammar.moarvm line 1
[zef] WARNING: unhandled Failure detected in DESTROY. If you meant to ignore it, you can mark it as handled by calling .Bool, .so, .not, or .defined methods. The Failure was:
[zef] Failed to create directory '/opt/rakudo-pkg/share/perl6/site/short' with mode '0o777': Failed to mkdir: Permission denied
[zef]   in any statement_control at /opt/rakudo-pkg/bin/../share/perl6/lib/Perl6/Grammar.moarvm line 1
[zef] WARNING: unhandled Failure detected in DESTROY. If you meant to ignore it, you can mark it as handled by calling .Bool, .so, .not, or .defined methods. The Failure was:
[zef] Failed to create directory '/opt/rakudo-pkg/share/perl6/vendor/short' with mode '0o777': Failed to mkdir: Permission denied
[zef]   in method probe at t/distribution-depends-parsing.t line 71
[zef]   in block  at t/distribution-depends-parsing.t line 135
[zef]   in code  at t/distribution-depends-parsing.t line 121
[zef]   in submethod TWEAK at t/distribution-depends-parsing.t line 70
[zef]   in submethod TWEAK at t/distribution-depends-parsing.t line 326
[zef]   in block  at t/distribution-depends-parsing.t line 241
[zef]   in block <unit> at t/distribution-depends-parsing.t line 217
[zef] WARNING: unhandled Failure detected in DESTROY. If you meant to ignore it, you can mark it as handled by calling .Bool, .so, .not, or .defined methods. The Failure was:
[zef] Failed to create directory '/opt/rakudo-pkg/share/perl6/site/short' with mode '0o777': Failed to mkdir: Permission denied
[zef]   in method probe at t/distribution-depends-parsing.t line 71
[zef]   in block  at t/distribution-depends-parsing.t line 135
[zef]   in code  at t/distribution-depends-parsing.t line 121
[zef]   in submethod TWEAK at t/distribution-depends-parsing.t line 70
[zef]   in submethod TWEAK at t/distribution-depends-parsing.t line 326
[zef]   in block  at t/distribution-depends-parsing.t line 241
[zef]   in block <unit> at t/distribution-depends-parsing.t line 217
[zef] WARNING: unhandled Failure detected in DESTROY. If you meant to ignore it, you can mark it as handled by calling .Bool, .so, .not, or .defined methods. The Failure was:
[zef] Failed to create directory '/opt/rakudo-pkg/share/perl6/vendor/short' with mode '0o777': Failed to mkdir: Permission denied
[zef]   in any statement_control at /opt/rakudo-pkg/bin/../share/perl6/lib/Perl6/Grammar.moarvm line 1
[zef] WARNING: unhandled Failure detected in DESTROY. If you meant to ignore it, you can mark it as handled by calling .Bool, .so, .not, or .defined methods. The Failure was:
[zef] Failed to create directory '/opt/rakudo-pkg/share/perl6/site/short' with mode '0o777': Failed to mkdir: Permission denied
[zef]   in any statement_control at /opt/rakudo-pkg/bin/../share/perl6/lib/Perl6/Grammar.moarvm line 1
[zef] WARNING: unhandled Failure detected in DESTROY. If you meant to ignore it, you can mark it as handled by calling .Bool, .so, .not, or .defined methods. The Failure was:
[zef] Failed to create directory '/opt/rakudo-pkg/share/perl6/vendor/short' with mode '0o777': Failed to mkdir: Permission denied
[zef]   in any statement_control at /opt/rakudo-pkg/bin/../share/perl6/lib/Perl6/Grammar.moarvm line 1
[zef] WARNING: unhandled Failure detected in DESTROY. If you meant to ignore it, you can mark it as handled by calling .Bool, .so, .not, or .defined methods. The Failure was:
[zef] Failed to create directory '/opt/rakudo-pkg/share/perl6/site/short' with mode '0o777': Failed to mkdir: Permission denied
[zef]   in any statement_control at /opt/rakudo-pkg/bin/../share/perl6/lib/Perl6/Grammar.moarvm line 1
[zef] WARNING: unhandled Failure detected in DESTROY. If you meant to ignore it, you can mark it as handled by calling .Bool, .so, .not, or .defined methods. The Failure was:
[zef] Failed to create directory '/opt/rakudo-pkg/share/perl6/vendor/short' with mode '0o777': Failed to mkdir: Permission denied
[zef]   in any statement_control at /opt/rakudo-pkg/bin/../share/perl6/lib/Perl6/Grammar.moarvm line 1
[zef] WARNING: unhandled Failure detected in DESTROY. If you meant to ignore it, you can mark it as handled by calling .Bool, .so, .not, or .defined methods. The Failure was:
[zef] Failed to create directory '/opt/rakudo-pkg/share/perl6/site/short' with mode '0o777': Failed to mkdir: Permission denied
[zef]   in any statement_control at /opt/rakudo-pkg/bin/../share/perl6/lib/Perl6/Grammar.moarvm line 1
===> Testing [OK] for zef:ver<0.11.4>:auth<github:ugexe>:api<0>
===> Installing: zef:ver<0.11.4>:auth<github:ugexe>:api<0>

1 bin/ script [zef] installed to:
/home/user/.raku/bin
Don't forget to add '~/.raku/bin' to your PATH,
e.g. by adding this to .profile:
export PATH=~/.raku/bin:$PATH
$ export PATH=~/.raku/bin:$PATH
$ zef install SuperMAIN
WARNING: unhandled Failure detected in DESTROY. If you meant to ignore it, you can mark it as handled by calling .Bool, .so, .not, or .defined methods. The Failure was:
Failed to create directory '/opt/rakudo-pkg/share/perl6/site/short' with mode '0o777': Failed to mkdir: Permission denied
  in sub MAIN at /home/user/.raku/bin/zef line 3
  in block <unit> at /home/user/.raku/bin/zef line 1

WARNING: unhandled Failure detected in DESTROY. If you meant to ignore it, you can mark it as handled by calling .Bool, .so, .not, or .defined methods. The Failure was:
Failed to create directory '/opt/rakudo-pkg/share/perl6/site/short' with mode '0o777': Failed to mkdir: Permission denied
  in method probe at /home/user/.raku/sources/11BDDC453B285D4130CAFD9207D29683DB0F17B4 (Zef::Service::TAP) line 71
  in block  at /home/user/.raku/sources/090A6251445589FF701C6B3A7BDA6A65220083E5 (Zef) line 135
  in code  at /home/user/.raku/sources/090A6251445589FF701C6B3A7BDA6A65220083E5 (Zef) line 121
  in submethod TWEAK at /home/user/.raku/sources/45485E6476D6844C9AE3ADC6822C3B049847EADB (Zef::Test) line 70
  in submethod TWEAK at /home/user/.raku/sources/F5DFB923A650F411954049650243A4522BD8EB91 (Zef::Client) line 326
  in sub get-client at /home/user/.raku/sources/264923860923B00F9CAE7601D27C4577C65C9E7F (Zef::CLI) line 1173
  in sub MAIN at /home/user/.raku/sources/264923860923B00F9CAE7601D27C4577C65C9E7F (Zef::CLI) line 420
  in sub MAIN at /home/user/.raku/sources/264923860923B00F9CAE7601D27C4577C65C9E7F (Zef::CLI) line 314
  in block <unit> at /home/user/.raku/resources/E769B9DC6B48B49532B47D034A56EA3C2FCA153B line 3
  in sub MAIN at /home/user/.raku/bin/zef line 3
  in block <unit> at /home/user/.raku/bin/zef line 1

===> Searching for: SuperMAIN
===> Updating fez mirror: http://360.zef.pm/
===> Updating cpan mirror: https://raw.githubusercontent.com/ugexe/Perl6-ecosystems/master/cpan1.json
===> Updating p6c mirror: https://raw.githubusercontent.com/ugexe/Perl6-ecosystems/master/p6c1.json
===> Updated fez mirror: http://360.zef.pm/
===> Updated p6c mirror: https://raw.githubusercontent.com/ugexe/Perl6-ecosystems/master/p6c1.json
===> Updated cpan mirror: https://raw.githubusercontent.com/ugexe/Perl6-ecosystems/master/cpan1.json
===> Testing: SuperMAIN:ver<0.1.4>:auth<github:nxadm>:api<1>
[SuperMAIN] WARNING: unhandled Failure detected in DESTROY. If you meant to ignore it, you can mark it as handled by calling .Bool, .so, .not, or .defined methods. The Failure was:
[SuperMAIN] Failed to create directory '/opt/rakudo-pkg/share/perl6/site/short' with mode '0o777': Failed to mkdir: Permission denied
[SuperMAIN]   in any statement_control at /opt/rakudo-pkg/bin/../share/perl6/lib/Perl6/Grammar.moarvm line 1
[SuperMAIN] WARNING: unhandled Failure detected in DESTROY. If you meant to ignore it, you can mark it as handled by calling .Bool, .so, .not, or .defined methods. The Failure was:
[SuperMAIN] Failed to create directory '/opt/rakudo-pkg/share/perl6/site/short' with mode '0o777': Failed to mkdir: Permission denied
[SuperMAIN]   in any statement_control at /opt/rakudo-pkg/bin/../share/perl6/lib/Perl6/Grammar.moarvm line 1
[SuperMAIN] WARNING: unhandled Failure detected in DESTROY. If you meant to ignore it, you can mark it as handled by calling .Bool, .so, .not, or .defined methods. The Failure was:
[SuperMAIN] Failed to create directory '/opt/rakudo-pkg/share/perl6/site/short' with mode '0o777': Failed to mkdir: Permission denied
[SuperMAIN]   in any statement_control at /opt/rakudo-pkg/bin/../share/perl6/lib/Perl6/Grammar.moarvm line 1
[SuperMAIN] WARNING: unhandled Failure detected in DESTROY. If you meant to ignore it, you can mark it as handled by calling .Bool, .so, .not, or .defined methods. The Failure was:
[SuperMAIN] Failed to create directory '/opt/rakudo-pkg/share/perl6/site/short' with mode '0o777': Failed to mkdir: Permission denied
[SuperMAIN]   in any statement_control at /opt/rakudo-pkg/bin/../share/perl6/lib/Perl6/Grammar.moarvm line 1
===> Testing [OK] for SuperMAIN:ver<0.1.4>:auth<github:nxadm>:api<1>
===> Installing: SuperMAIN:ver<0.1.4>:auth<github:nxadm>:api<1>
$ raku -MSuperMAIN -e 'say "foo"'
foo
$ raku -MSuperMAIN2 -e 'say "foo"'
===SORRY!=== Error while compiling -e
Could not find SuperMAIN2 in:
    inst#/home/user/.raku
    inst#/opt/rakudo-pkg/share/perl6/site
    inst#/opt/rakudo-pkg/share/perl6/vendor
    inst#/opt/rakudo-pkg/share/perl6/core
    ap#
    nqp#
    perl5#
at -e:1

from rakudo-pkg.

nxadm avatar nxadm commented on August 20, 2024

To be complete, zef is installed like this:
/opt/rakudo-pkg/bin/raku -I. bin/zef --install-to=home --force-install install .

from rakudo-pkg.

lizmat avatar lizmat commented on August 20, 2024

Ok, then maybe we need to escalate this into a rakudo issue.

from rakudo-pkg.

niner avatar niner commented on August 20, 2024

While it's indeed a rakudo issue, there also seems to be an issue with those packages. Why do /opt/rakudo-pkg/share/perl6/vendor/short and /opt/rakudo-pkg/share/perl6/site/short not exist in the first place?

The proper openSUSE package for example contains among others, these directories:

/usr/share/perl6/site
/usr/share/perl6/site/bin
/usr/share/perl6/site/dist
/usr/share/perl6/site/precomp
/usr/share/perl6/site/resources
/usr/share/perl6/site/short
/usr/share/perl6/site/sources
/usr/share/perl6/site/version
/usr/share/perl6/vendor
/usr/share/perl6/vendor/bin
/usr/share/perl6/vendor/dist
/usr/share/perl6/vendor/precomp
/usr/share/perl6/vendor/resources
/usr/share/perl6/vendor/short
/usr/share/perl6/vendor/sources
/usr/share/perl6/vendor/version

from rakudo-pkg.

nxadm avatar nxadm commented on August 20, 2024

While it's indeed a rakudo issue, there also seems to be an issue with those packages. Why do
/opt/rakudo-pkg/share/perl6/vendor/short and /opt/rakudo-pkg/share/perl6/site/short not exist in the first place?

I am debugging, but probably because the rakudo build does not create them.

from rakudo-pkg.

Altai-man avatar Altai-man commented on August 20, 2024

Is it a regression?

from rakudo-pkg.

nxadm avatar nxadm commented on August 20, 2024

I added the empty directories on the packages because they are not built by the Rakudo config/make/make install process:
https://github.com/nxadm/rakudo-pkg/blob/master/config/nfpm.yaml#L147

I will release a package update with the 2 empty directories added:

~$ podman run -ti -v $(pwd)/Downloads:/mnt ubuntu
root@7e7e389a51d0:/# apt-get update && apt-get -y install curl git
[...]
root@7e7e389a51d0:/# dpkg -i /mnt/rakudo-pkg-Ubuntu20.04_2021.02.1-02_amd64.deb 
Selecting previously unselected package rakudo-pkg.
(Reading database ... 4121 files and directories currently installed.)
Preparing to unpack .../rakudo-pkg-Ubuntu20.04_2021.02.1-02_amd64.deb ...
Unpacking rakudo-pkg (2021.2.1-02) ...
Setting up rakudo-pkg (2021.2.1-02) ...
root@7e7e389a51d0:/# su - user^C
root@7e7e389a51d0:/# useradd -m user
root@7e7e389a51d0:/# su - user
$ install-zef 
===> Testing: zef:ver<0.11.4>:auth<github:ugexe>:api<0>
===> Testing [OK] for zef:ver<0.11.4>:auth<github:ugexe>:api<0>
===> Installing: zef:ver<0.11.4>:auth<github:ugexe>:api<0>

1 bin/ script [zef] installed to:
/home/user/.raku/bin
Don't forget to add '~/.raku/bin' to your PATH,
e.g. by adding this to .profile:
export PATH=~/.raku/bin:$PATH
$ .raku/bin/zef install SuperMAIN
===> Searching for: SuperMAIN
===> Updating fez mirror: http://360.zef.pm/
===> Updating cpan mirror: https://raw.githubusercontent.com/ugexe/Perl6-ecosystems/master/cpan1.json
===> Updating p6c mirror: https://raw.githubusercontent.com/ugexe/Perl6-ecosystems/master/p6c1.json
===> Updated fez mirror: http://360.zef.pm/
===> Updated p6c mirror: https://raw.githubusercontent.com/ugexe/Perl6-ecosystems/master/p6c1.json
===> Updated cpan mirror: https://raw.githubusercontent.com/ugexe/Perl6-ecosystems/master/cpan1.json
===> Testing: SuperMAIN:ver<0.1.4>:auth<github:nxadm>:api<1>
===> Testing [OK] for SuperMAIN:ver<0.1.4>:auth<github:nxadm>:api<1>
===> Installing: SuperMAIN:ver<0.1.4>:auth<github:nxadm>:api<1>

from rakudo-pkg.

niner avatar niner commented on August 20, 2024

I added the empty directories on the packages because they are not built by
the Rakudo config/make/make install process:

But they are?

make install is depending on m-install:
https://github.com/rakudo/rakudo/blob/master/tools/templates/Makefile.in#L9
which is depending on m-install-post:
https://github.com/rakudo/rakudo/blob/master/tools/templates/Makefile-backend-common.in#L238
which calls upgrade-repository.raku for core, vendor and site:
https://github.com/rakudo/rakudo/blob/master/tools/templates/Makefile-backend-common.in#L231
which is calling CompUnit::Repository::Installation::upgrade-repository:
https://github.com/rakudo/rakudo/blob/master/tools/build/upgrade-repository.raku
which creates those directories:
https://github.com/rakudo/rakudo/blob/master/src/core.c/CompUnit/Repository/Installation.pm6#L113

This works on installation from source as well on the openSUSE packages, so it safe to assume that something goes wrong on your end.

from rakudo-pkg.

Altai-man avatar Altai-man commented on August 20, 2024

Thank you very much for the investigation and fixing!

from rakudo-pkg.

Related Issues (20)

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.