Coder Social home page Coder Social logo

Comments (17)

haampie avatar haampie commented on May 28, 2024

You must have some really weird config. Can you share spack config blame config?

from spack.

anselmic avatar anselmic commented on May 28, 2024

spack config blame config

--- config:
/root/.spack/config.yaml:2 build_stage:
/root/.spack/config.yaml:3 - /scratch/spack
/root/.spack/config.yaml:4 - /tmp
/root/.spack/config.yaml:5 - $tempdir/$user/spack-stage
/root/.spack/config.yaml:6 - $user_cache_path/stage
/cm/shared/apps/spack/current/etc/spack/config.yaml:4 install_tree:
/cm/shared/apps/spack/current/etc/spack/config.yaml:5 root: /cm/shared/spack/apps
/cm/shared/apps/spack/current/etc/spack/config.yaml:6 projections:
/cm/shared/apps/spack/current/etc/spack/config.yaml:7 all: ${ARCHITECTURE}/${COMPILER.NAME}-${COMPILER.VERSION}/${PACKAGE}-${VERSION}-${HASH}
/cm/shared/apps/spack/current/etc/spack/config.yaml:11 template_dirs:
/cm/shared/apps/spack/current/etc/spack/config.yaml:12 - $spack/share/spack/templates
/cm/shared/apps/spack/current/etc/spack/config.yaml:50 source_cache: $spack/var/spack/cache
/cm/shared/apps/spack/current/etc/spack/config.yaml:55 misc_cache: ~/.spack/cache
/cm/shared/apps/spack/current/etc/spack/config.yaml:61 connect_timeout: 10
/cm/shared/apps/spack/current/etc/spack/config.yaml:66 verify_ssl: True
/cm/shared/apps/spack/current/etc/spack/config.yaml:74 suppress_gpg_warnings: False
/cm/shared/apps/spack/current/etc/spack/config.yaml:80 install_missing_compilers: False
/cm/shared/apps/spack/current/etc/spack/config.yaml:85 checksum: True
/cm/shared/apps/spack/current/etc/spack/config.yaml:90 dirty: False
/cm/shared/apps/spack/current/etc/spack/config.yaml:98 build_language: C
/cm/shared/apps/spack/current/etc/spack/config.yaml:107 locks: True
/cm/shared/apps/spack/current/etc/spack/config.yaml:117 ccache: False
/cm/shared/apps/spack/current/etc/spack/config.yaml:124 db_lock_timeout: 3
/cm/shared/apps/spack/current/etc/spack/config.yaml:132 package_lock_timeout: null
/cm/shared/apps/spack/current/etc/spack/config.yaml:137 shared_linking:
/cm/shared/apps/spack/current/etc/spack/config.yaml:141 type: rpath
/cm/shared/apps/spack/current/etc/spack/config.yaml:142 bind: False
/cm/shared/apps/spack/current/etc/spack/config.yaml:143 allow_sgid: True
/cm/shared/apps/spack/current/etc/spack/defaults/config.yaml:37 license_dir: $spack/etc/spack/licenses
/cm/shared/apps/spack/current/etc/spack/defaults/config.yaml:77 test_stage: $user_cache_path/test
/cm/shared/apps/spack/current/etc/spack/defaults/config.yaml:125 deprecated: False
/cm/shared/apps/spack/current/etc/spack/defaults/config.yaml:152 url_fetch_method: urllib
/cm/shared/apps/spack/current/etc/spack/defaults/config.yaml:181 concretizer: clingo
/cm/shared/apps/spack/current/etc/spack/defaults/config.yaml:223 install_status: True
/cm/shared/apps/spack/current/etc/spack/defaults/config.yaml:227 binary_index_ttl: 600
/cm/shared/apps/spack/current/etc/spack/defaults/config.yaml:229 flags:
/cm/shared/apps/spack/current/etc/spack/defaults/config.yaml:231 keep_werror: none
/cm/shared/apps/spack/current/etc/spack/defaults/config.yaml:236 aliases:
/cm/shared/apps/spack/current/etc/spack/defaults/config.yaml:237 concretise: concretize
/cm/shared/apps/spack/current/etc/spack/defaults/config.yaml:238 containerise: containerize
/cm/shared/apps/spack/current/etc/spack/defaults/config.yaml:239 rm: remove
_builtin debug: False
_builtin build_jobs: 16

from spack.

anselmic avatar anselmic commented on May 28, 2024

FYI, it is not a general issue. I have been able to install [email protected] without problems.

from spack.

haampie avatar haampie commented on May 28, 2024

The projections bit in /cm/shared/apps/spack/current/etc/spack/config.yaml is very outdated, maybe easiest to just remove that file (I didn't check carefully but I think it's mostly shadowing the etc/defaults/config.yaml config.

from spack.

becker33 avatar becker33 commented on May 28, 2024

It is shadowing the defaults, just in the previous format (deprecated in 2018, removed this year).

from spack.

anselmic avatar anselmic commented on May 28, 2024

How do you suggest editing the file? I can even remove the whole config.yaml as suggested, but I need to provide the root path for back compatibility, I suppose.

install_tree:
root: /cm/shared/spack/apps

from spack.

haampie avatar haampie commented on May 28, 2024

You can leave just the necessary in etc/config.yaml

config:
  install_tree:
    root: /cm/shared/spack/apps

which overrides defaults

from spack.

anselmic avatar anselmic commented on May 28, 2024

I have changed the config.yaml to the bare minimum, but I still have the same problem. I have also tried with spack clean -a but without luck

Error message
# spack install [email protected]%[email protected]~guile build_system=generic arch=linux-rhel8-x86_64
==> Installing gmake-4.4.1-ryyw4gdcpr72wiif74hp4jqmgnh25hgl [1/1]
==> No binary for gmake-4.4.1-ryyw4gdcpr72wiif74hp4jqmgnh25hgl found: installing from source
==> Using cached archive: /cm/shared/apps/spack/current/var/spack/cache/_source-cache/archive/dd/dd16fb1d67bfab79a72f5e8390735c49e3e8e70b4945a15ab1f81ddb78658fb3.tar.gz
==> No patches needed for gmake
==> gmake: Executing phase: 'install'
==> Warning: Module file /cm/shared/spack/modulefiles/linux-rhel8-x86_64/gcc/8.5.0/gmake/4.4.1-ryyw4gd.lua exists and will not be overwritten
==> gmake: Successfully installed gmake-4.4.1-ryyw4gdcpr72wiif74hp4jqmgnh25hgl
  Stage: 10.05s.  Install: 27.23s.  Post-install: 0.58s.  Total: 38.44s
[+] /cm/shared/spack/apps/_linux-rhel8-x86_64/_gcc-_8.5.0/__spack.pkg.builtin.gmake.Gmake_object_at_0x14b6dc20c860_-_4.4.1-_ryyw4gdcpr72wiif74hp4jqmgnh25hgl
==> Warning: [email protected]%[email protected]~guile build_system=generic arch=linux-rhel8-x86_64/ryyw4gd is being updated in the database with prefix /cm/shared/spack/apps/linux-rhel8-x86_64/gcc-8.5.0/gmake-4.4.1-ryyw4gdcpr72wiif74hp4jqmgnh25hgl, but this directory does not contain an installation of the spec, due to: Install prefix /cm/shared/spack/apps/linux-rhel8-x86_64/gcc-8.5.0/gmake-4.4.1-ryyw4gdcpr72wiif74hp4jqmgnh25hgl does not exist.
[root@pphpcmgmt01 spack]# spack find [email protected]
==> No package matches the query: [email protected]

FYI:

# spack config blame config
---                                                               config:
/root/.spack/config.yaml:2                                          build_stage:
/root/.spack/config.yaml:3                                          - /scratch/spack
/root/.spack/config.yaml:4                                          - /tmp
/root/.spack/config.yaml:5                                          - $tempdir/$user/spack-stage
/root/.spack/config.yaml:6                                          - $user_cache_path/stage
/cm/shared/apps/spack/current/etc/spack/config.yaml:4               install_tree:
/cm/shared/apps/spack/current/etc/spack/config.yaml:5                 root: /cm/shared/spack/apps
/cm/shared/apps/spack/current/etc/spack/defaults/config.yaml:21       projections:
/cm/shared/apps/spack/current/etc/spack/defaults/config.yaml:22         all: '{architecture}/{compiler.name}-{compiler.version}/{name}-{version}-{hash}'
/cm/shared/apps/spack/current/etc/spack/defaults/config.yaml:33     template_dirs:
/cm/shared/apps/spack/current/etc/spack/defaults/config.yaml:34     - $spack/share/spack/templates
/cm/shared/apps/spack/current/etc/spack/defaults/config.yaml:37     license_dir: $spack/etc/spack/licenses
/cm/shared/apps/spack/current/etc/spack/defaults/config.yaml:77     test_stage: $user_cache_path/test
/cm/shared/apps/spack/current/etc/spack/defaults/config.yaml:81     source_cache: $spack/var/spack/cache
/cm/shared/apps/spack/current/etc/spack/defaults/config.yaml:90     misc_cache: $user_cache_path/cache
/cm/shared/apps/spack/current/etc/spack/defaults/config.yaml:96     connect_timeout: 10
/cm/shared/apps/spack/current/etc/spack/defaults/config.yaml:101    verify_ssl: True
/cm/shared/apps/spack/current/etc/spack/defaults/config.yaml:109    suppress_gpg_warnings: False
/cm/shared/apps/spack/current/etc/spack/defaults/config.yaml:115    install_missing_compilers: False
/cm/shared/apps/spack/current/etc/spack/defaults/config.yaml:120    checksum: True
/cm/shared/apps/spack/current/etc/spack/defaults/config.yaml:125    deprecated: False
/cm/shared/apps/spack/current/etc/spack/defaults/config.yaml:130    dirty: False
/cm/shared/apps/spack/current/etc/spack/defaults/config.yaml:138    build_language: C
/cm/shared/apps/spack/current/etc/spack/defaults/config.yaml:147    locks: True
/cm/shared/apps/spack/current/etc/spack/defaults/config.yaml:152    url_fetch_method: urllib
/cm/shared/apps/spack/current/etc/spack/defaults/config.yaml:165    ccache: False
/cm/shared/apps/spack/current/etc/spack/defaults/config.yaml:181    concretizer: clingo
/cm/shared/apps/spack/current/etc/spack/defaults/config.yaml:188    db_lock_timeout: 60
/cm/shared/apps/spack/current/etc/spack/defaults/config.yaml:196    package_lock_timeout: null
/cm/shared/apps/spack/current/etc/spack/defaults/config.yaml:201    shared_linking:
/cm/shared/apps/spack/current/etc/spack/defaults/config.yaml:206      type: rpath
/cm/shared/apps/spack/current/etc/spack/defaults/config.yaml:212      bind: False
/cm/shared/apps/spack/current/etc/spack/defaults/config.yaml:217    allow_sgid: True
/cm/shared/apps/spack/current/etc/spack/defaults/config.yaml:223    install_status: True
/cm/shared/apps/spack/current/etc/spack/defaults/config.yaml:227    binary_index_ttl: 600
/cm/shared/apps/spack/current/etc/spack/defaults/config.yaml:229    flags:
/cm/shared/apps/spack/current/etc/spack/defaults/config.yaml:231      keep_werror: none
/cm/shared/apps/spack/current/etc/spack/defaults/config.yaml:236    aliases:
/cm/shared/apps/spack/current/etc/spack/defaults/config.yaml:237      concretise: concretize
/cm/shared/apps/spack/current/etc/spack/defaults/config.yaml:238      containerise: containerize
/cm/shared/apps/spack/current/etc/spack/defaults/config.yaml:239      rm: remove
_builtin                                                            debug: False
_builtin                                                            build_jobs: 16



from spack.

haampie avatar haampie commented on May 28, 2024

this is the weirdest issue.

can you try a fresh clone of spack and spack install gmake?

from spack.

anselmic avatar anselmic commented on May 28, 2024

Hello,

I have cloned a fresh version of spack, copied the old config.yaml, module.yaml and packages.yaml into etc/spack, but still I have the same problem when installing gmake.
Actually, after changing the config.yaml, I have experienced the same issue with several other packages, so I believe the problem is more general than gmake.

It seems to be the disconnect between folders naming at different stages, e.g.:

/cm/shared/spack/apps/_linux-rhel8-x86_64/_gcc-_8.5.0/__spack.pkg.builtin.gmake.Gmake_object_at_0x14b6dc20c860_-_4.4.1-_ryyw4gdcpr72wiif74hp4jqmgnh25hgl

vs

/cm/shared/spack/apps/linux-rhel8-x86_64/gcc-8.5.0/gmake-4.4.1-ryyw4gdcpr72wiif74hp4jqmgnh25hgl

I am adding my other config files for information

config.yaml.txt
modules.yaml.txt
packages.yaml.txt

Thanks

from spack.

anselmic avatar anselmic commented on May 28, 2024

I made some tests and this seems to work. Not sure it makes sense:

# git diff var/spack/repos/builtin/packages/gmake/package.py
diff --git a/var/spack/repos/builtin/packages/gmake/package.py b/var/spack/repos/builtin/packages/gmake/package.py
index 0cfbccb8..fe3a5911 100644
--- a/var/spack/repos/builtin/packages/gmake/package.py
+++ b/var/spack/repos/builtin/packages/gmake/package.py
@@ -73,7 +73,7 @@ def install(self, spec, prefix):
         configure = Executable(join_path(self.stage.source_path, "configure"))
         build_sh = Executable(join_path(self.stage.source_path, "build.sh"))
         with working_dir(self.build_directory, create=True):
-            configure(f"--prefix={prefix}", *self.configure_args())
+            configure("--prefix={0}".format(prefix), *self.configure_args())
             build_sh()
             os.mkdir(prefix.bin)
             install("make", prefix.bin)

Now it installs gmake without errors, even if the hash is different

# spack install gmake
==> Installing gmake-4.4.1-aly4tzkyhzenadqw52pvgz6irpstp6zi [1/1]
==> No binary for gmake-4.4.1-aly4tzkyhzenadqw52pvgz6irpstp6zi found: installing from source
==> Using cached archive: /cm/shared/apps/spack/spack/var/spack/cache/_source-cache/archive/dd/dd16fb1d67bfab79a72f5e8390735c49e3e8e70b4945a15ab1f81ddb78658fb3.tar.gz
==> No patches needed for gmake
==> gmake: Executing phase: 'install'
==> gmake: Successfully installed gmake-4.4.1-aly4tzkyhzenadqw52pvgz6irpstp6zi
  Stage: 0.61s.  Install: 15.88s.  Post-install: 1.08s.  Total: 19.05s
[+] /cm/shared/spack/apps/linux-rhel8-x86_64/gcc-8.5.0/gmake-4.4.1-aly4tzkyhzenadqw52pvgz6irpstp6zi


What I do not understand is why before I was able to install [email protected]. I can still install [email protected] even if the hash is again different from before

# spack install [email protected]
==> Installing gmake-4.3-jltufnnn6rs4zcxfft4z2pbyw5efwxry [1/1]
==> No binary for gmake-4.3-jltufnnn6rs4zcxfft4z2pbyw5efwxry found: installing from source
==> Fetching https://mirror.spack.io/_source-cache/archive/e0/e05fdde47c5f7ca45cb697e973894ff4f5d79e13b750ed57d7b66d8defc78e19.tar.gz
==> Applied patch /cm/shared/apps/spack/spack/var/spack/repos/builtin/packages/gmake/findprog-in-ignore-directories.patch
==> gmake: Executing phase: 'install'
==> gmake: Successfully installed gmake-4.3-jltufnnn6rs4zcxfft4z2pbyw5efwxry
  Stage: 1.89s.  Install: 20.85s.  Post-install: 0.96s.  Total: 25.49s
[+] /cm/shared/spack/apps/linux-rhel8-x86_64/gcc-8.5.0/gmake-4.3-jltufnnn6rs4zcxfft4z2pbyw5efwxry

However I do not feel that satisfactory because it seems to me that the original prefix

/cm/shared/spack/apps/_linux-rhel8-x86_64/_gcc-_8.5.0/__spack.pkg.builtin.gmake.Gmake_object_at_0x14b6dc20c860_-_4.4.1-_ryyw4gdcpr72wiif74hp4jqmgnh25hgl

was correct, and the error is when it updates the database.

from spack.

anselmic avatar anselmic commented on May 28, 2024

Update. I have found that my issue is very similar to this. In my case I have "_" instead of "$"

#37593

Also in my case, I believe the problem is more general than gmake, given that several packages experience the same issue, but not everyone.

from spack.

haampie avatar haampie commented on May 28, 2024

This was with system python? I can't reproduce it with docker run -it --rm rockylinux:8. The referenced issue seems to use a newer possibly non-system python.

In my case I have "_" instead of "$"

We started converting "unsafe" characters to _, so probably you're getting $ too but mapped to _.

from spack.

haampie avatar haampie commented on May 28, 2024

I can reproduce this output with something along the lines of

>>> spack.spec.Spec("gmake").concretized().format_path("${PACKAGE}-${VERSION}-${HASH}")
'__spack.pkg.builtin.gmake.Gmake_object_at_0x7fcca58f5dd0_-_4.4.1-_zswwpt4oddmlxpjnqqhbjdbkqmwh6jgt'

So then it definitely comes from this old style of projections:

/cm/shared/apps/spack/current/etc/spack/config.yaml:7 all: ${ARCHITECTURE}/${COMPILER.NAME}-${COMPILER.VERSION}/${PACKAGE}-${VERSION}-${HASH}

and potentially the reason it persists is that spec.prefix looks in the db which may find a prefix under old config:

    @property
    def prefix(self):
        ...
        if self._prefix is None:
            upstream, record = spack.store.STORE.db.query_by_spec_hash(self.dag_hash())
            if record and record.path:
                self.prefix = record.path  # maye this branch is followed?
            else:
                self.prefix = spack.store.STORE.layout.path_for_spec(self)
        return self._prefix

while adding to the DB re-computes the projection under new config:

        if not spec.external and directory_layout:
            path = directory_layout.path_for_spec(spec)

from spack.

haampie avatar haampie commented on May 28, 2024

I'll submit a patch that throws an error when using old style ${UPPERCASE}, cause this was a giant pain to figure out.

from spack.

anselmic avatar anselmic commented on May 28, 2024

Hello,

Thank you for your help.
I have implemented the changes but still having the same problem. This issue is very annoying...

# spack install gmake
==> Installing gmake-4.4.1-ryyw4gdcpr72wiif74hp4jqmgnh25hgl [1/1]
==> No binary for gmake-4.4.1-ryyw4gdcpr72wiif74hp4jqmgnh25hgl found: installing from source
==> Using cached archive: /cm/shared/apps/spack/spack/var/spack/cache/_source-cache/archive/dd/dd16fb1d67bfab79a72f5e8390735c49e3e8e70b4945a15ab1f81ddb78658fb3.tar.gz
==> No patches needed for gmake
==> gmake: Executing phase: 'install'
==> gmake: Successfully installed gmake-4.4.1-ryyw4gdcpr72wiif74hp4jqmgnh25hgl
  Stage: 0.66s.  Install: 15.63s.  Post-install: 1.14s.  Total: 19.23s
[+] /cm/shared/spack/apps/_linux-rhel8-x86_64/_gcc-_8.5.0/__spack.pkg.builtin.gmake.Gmake_object_at_0x14b6dc20c860_-_4.4.1-_ryyw4gdcpr72wiif74hp4jqmgnh25hgl
==> Warning: [email protected]%[email protected]~guile build_system=generic arch=linux-rhel8-x86_64/ryyw4gd is being updated in the database with prefix /cm/shared/spack/apps/linux-rhel8-x86_64/gcc-8.5.0/gmake-4.4.1-ryyw4gdcpr72wiif74hp4jqmgnh25hgl, but this directory does not contain an installation of the spec, due to: Install prefix /cm/shared/spack/apps/linux-rhel8-x86_64/gcc-8.5.0/gmake-4.4.1-ryyw4gdcpr72wiif74hp4jqmgnh25hgl does not exist.
diff --git a/lib/spack/spack/spec.py b/lib/spack/spack/spec.py
index 20e5c3ff..8c15a873 100644
--- a/lib/spack/spack/spec.py
+++ b/lib/spack/spack/spec.py
@@ -213,6 +213,19 @@ def __call__(self, match):
     return clr.colorize(re.sub(_SEPARATORS, insert_color(), str(spec)) + "@.")
 
 
+OLD_STYLE_FMT_RE = re.compile(r"\${[A-Z]+}")
+
+
+def ensure_modern_format_string(fmt: str) -> None:
+    """Ensure that the format string does not contain old ${...} syntax."""
+    result = OLD_STYLE_FMT_RE.search(fmt)
+    if result:
+        raise SpecFormatStringError(
+            f"Format string `{fmt}` contains old syntax `{result.group(0)}`. "
+            "This is no longer supported."
+        )
+
+
 @lang.lazy_lexicographic_ordering
 class ArchSpec:
     """Aggregate the target platform, the operating system and the target microarchitecture."""
@@ -4360,6 +4373,7 @@ def format(self, format_string=DEFAULT_FORMAT, **kwargs):
                 that accepts a string and returns another one
 
         """
+        ensure_modern_format_string(format_string)
         color = kwargs.get("color", False)
         transform = kwargs.get("transform", {})
 
diff --git a/lib/spack/spack/test/spec_semantics.py b/lib/spack/spack/test/spec_semantics.py
index 87ed1e4b..08caba15 100644
--- a/lib/spack/spack/test/spec_semantics.py
+++ b/lib/spack/spack/test/spec_semantics.py
@@ -1517,3 +1517,9 @@ def test_edge_equality_does_not_depend_on_virtual_order():
     assert edge1 == edge2
     assert tuple(sorted(edge1.virtuals)) == edge1.virtuals
     assert tuple(sorted(edge2.virtuals)) == edge1.virtuals
+
+
+def test_old_format_strings_trigger_error(default_mock_concretization):
+    s = Spec("a").concretized()
+    with pytest.raises(SpecFormatStringError):
+        s.format("${PACKAGE}-${VERSION}-${HASH}")
[root@pphpcmgmt01 spack]# spack config blame  config
---                                                             config:
/cm/shared/apps/spack/spack/etc/spack/config.yaml:4               install_tree:
/cm/shared/apps/spack/spack/etc/spack/config.yaml:5                 root: /cm/shared/spack/apps
/cm/shared/apps/spack/spack/etc/spack/defaults/config.yaml:21       projections:
/cm/shared/apps/spack/spack/etc/spack/defaults/config.yaml:22         all: '{architecture}/{compiler.name}-{compiler.version}/{name}-{version}-{hash}'
...

from spack.

anselmic avatar anselmic commented on May 28, 2024

Update:
I have manually edited the db under /cm/shared/spack/apps/.spack-db/index.json and changed the path there. Now it compiles without problems.
The question is why the db has the wrong path in the first place and how to regenerate it with the right paths:

{
    "database": {
        "version": "7",
        "installs": {
            "ryyw4gdcpr72wiif74hp4jqmgnh25hgl": {
                "spec": {
                    "name": "gmake",
                    "version": "4.4.1",
                    "arch": {
                        "platform": "linux",
                        "platform_os": "rhel8",
                        "target": "x86_64"
                    },
                    "compiler": {
                        "name": "gcc",
                        "version": "8.5.0"
                    },
                    "namespace": "builtin",
                    "parameters": {
                        "build_system": "generic",
                        "guile": false,
                        "cflags": [],
                        "cppflags": [],
                        "cxxflags": [],
                        "fflags": [],
                        "ldflags": [],
                        "ldlibs": []
                    },
                    "package_hash": "rqbjphrjxtwxymzynomtxmtox6tsd35pbp4722ep46u56drkz5tq====",
                    "hash": "ryyw4gdcpr72wiif74hp4jqmgnh25hgl"
                },
                "ref_count": 202,
                "path": "/cm/shared/spack/apps/linux-rhel8-x86_64/gcc-8.5.0/gmake-4.4.1-ryyw4gdcpr72wiif74hp4jqmgnh25hgl",
                "installed": true,
                "explicit": true,
                "installation_time": 1704297914.2720087,
                "deprecated_for": null
            },

from spack.

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.