oneOf / anyOf behaves like allOf in terms of errors reported

Hi,
I need to validate an input that has four possible forms:

null
[]
{}
non-empty object, with allowed key "description" that is a string longer than x

(It's just a simplification of a real life case)
Schema looks like:
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "title": "test",
  "anyOf": [
    {
      "type": "object",
      "minProperties": 1,
      "properties": {
        "description": {
          "type": "string",
          "minLength": 2
        }
      }
    },
    {"type": "object", "maxProperties": 0},
    {"type": "array", "maxItems": 0},
    {"type": "null"}
  ]
}

Input {}, [], null, {"description: "foo"} obviously returns a validation success. When I, however, pass {"description": "f"} (too short) and run against:
$validator = new \JsonSchema\Validator();
$validator->check($input, $schema);
if (!$validator->isValid()) {
  echo json_encode($validator->getErrors(), JSON_PRETTY_PRINT);
}

I get:
[
    {
        "property": "description",
        "message": "Must be at least 2 characters long",
        "constraint": "minLength",
        "minLength": 2
    },
    {
        "property": "",
        "message": "Must contain no more than 0 properties",
        "constraint": "maxProperties",
        "maxProperties": 0
    },
    {
        "property": "",
        "message": "Object value found, but an array is required",
        "constraint": "type"
    },
    {
        "property": "",
        "message": "Object value found, but a null is required",
        "constraint": "type"
    },
    {
        "property": "",
        "message": "Failed to match at least one schema",
        "constraint": "anyOf"
    }
]

As you can see, this looks like an expected output for allOf. anyOf, oneOf should have OR / XOR behaviour in terms of errors reported. Expected output in the mentioned case would be:
[
    {
        "property": "description",
        "message": "Must be at least 2 characters long",
        "constraint": "minLength",
        "minLength": 2
    }
]

This looks somewhat related to #89.

@mirfilip I do not agree. I think the only right error should be:
[
    {
        "property": "",
        "message": "Failed to match at least one schema",
        "constraint": "anyOf"
    }
]

But maybe it's handy to add a context property to the error object and add all failed rules (of the sub schemas) in case validating allOf, anyOf and oneOf.
So for example:
[
    {
        "property": "",
        "message": "Failed to match at least one schema",
        "constraint": "anyOf",
        "context": [
            {
                "property": "description",
                "message": "Must be at least 2 characters long",
                "constraint": "minLength",
                "minLength": 2
            },
            {
                "property": "",
                "message": "Must contain no more than 0 properties",
                "constraint": "maxProperties",
                "maxProperties": 0
            },
            {
                "property": "",
                "message": "Object value found, but an array is required",
                "constraint": "type"
            },
            {
                "property": "",
                "message": "Object value found, but a null is required",
                "constraint": "type"
            }
        ]
    }
]

@jojo1981 actually the truth lies somewhere in between:

I compared the same situation with ajv validator (which I consider the most feature complete json-schema v4 / v5 implementation I encountered to date) - as you can see, it returns exactly the same errors set as this one
I had a quick look through specs and couldn't find the definitive guidance - I will look into it deeper

So my conclusion is kind of a wishful thinking.
Also, I agree with your proposal. Having Failed to match at least one schema as the "top most" error message is ofc very nice. Then, having some kind of a switch to "expose more details" would be fine. Anyhow, if you have anyOf, with the allowed options being:

an empty object
an object with property foo a string
an empty array
a null
and the input is {"foo": 1} - then you're kinda interested about errors related to the object validation, aren't you? (you already met a type condition, property value is wrong though)

Nevertheless, with neither option present, if you have a schema complicated enough you end up with shitload of meaningless errors. I find myself implementing an extra layer to leave a validation errors I want. But it's a major PITA.

@mirfilip What you're suggesting is a kind of closest match error validation. Why only the property foo is not a string should apply? At the validation level there are 4 rules which need to be checked in order to apply if any matches. So when there is no rules matching we know that all defined rules (4 rules in this case) are validated and non of them successfully passes. So how can we determine which rule is the "bad guy"?

@mirfilip how do think this must be resolved?

@jojo1981 I was offline for the most of the previous week. Give me an extra day to make some examples.

@mirfilip No problem!

@jojo1981

At the validation level there are 4 rules which need to be checked in order to apply if any matches. So when there is no rules matching we know that all defined rules (4 rules in this case) are validated and non of them successfully passes. So how can we determine which rule is the "bad guy"?
Continuing the example, there are 4 rules, yes. 2 of them treat about the object. One null, one array. Every of them has a type constraint. In the example I wanted to show how input {"foo": 1} meets the "type": "object" constraint of two rules, but doesn't meet the details of how the object should look inside. This is the hint we could use.

Below is a simplified version of my json schema:
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "title": "test",
  "anyOf": [
    {
      "type": "object",
      "minProperties": 1,
      "additionalProperties": true,
      "properties": {
        "foo": {
          "anyOf": [
            {"type": "null"},
            {"type": "string", "minLength": 2, "maxLength": 65535}
          ]
        },
        "bar": {
          "anyOf": [
            {"type": "null"},
            {"type": "string", "maxLength": 255}
          ]
        },
        "baz": {
          "type": "object",
          "additionalProperties": false,
          "patternProperties": {
            "^[a-z0-9]{1,255}$": {
              "type": "object",
              "properties": {
                "value": {"type": "string", "maxLength": 2048}
              },
              "required": ["value"],
              "additionalProperties": false,
              "maxProperties": 1
            }
          }
        }
      }
    },
    {
      "anyOf": [
        {"type": "object", "maxProperties": 0},
        {"type": "array", "maxItems": 0},
        {"type": "null"}
      ]
    }
  ]
}

With the input like {"foo": "a"}, you get:
[
    {
        "property": "foo",
        "message": "String value found, but a null is required",
        "constraint": "type"
    },
    {
        "property": "foo",
        "message": "Must be at least 2 characters long",
        "constraint": "minLength",
        "minLength": 2
    },
    {
        "property": "foo",
        "message": "Failed to match at least one schema",
        "constraint": "anyOf"
    },
    {
        "property": "",
        "message": "Must contain no more than 0 properties",
        "constraint": "maxProperties",
        "maxProperties": 0
    },
    {
        "property": "",
        "message": "Object value found, but an array is required",
        "constraint": "type"
    },
    {
        "property": "",
        "message": "Object value found, but a null is required",
        "constraint": "type"
    },
    {
        "property": "",
        "message": "Failed to match at least one schema",
        "constraint": "anyOf"
    }
]

I come from the scenario of writing a json based API when throwing such an error at the user is really counter productive. That's where I started to implement a logic for cherry-picking error messages.
Surely, when you try to input true that doesn't match any type, having all the errors thrown at you is understandable. Less so if you already match the type.
Does that make sense?

@mirfilip Thanks for your clear explanation. I know what you mean, but it is still a closest match algorithm.
What if there are 2 rules (subschemas) in the anyOf array both have the same type? For example both schema's are of type object and they both are describing a different object and the validated object doesn't match not one of them. In this case which schema is the closest one who doesn't matched?
Example schema:
{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "title": "test",
    "anyOf": [
        {
            "type": "object",
            "additionalProperties": false,
            "required": [
                "id"
            ],
            "properties": {
                "id": {
                    "type": "string"
                }
            }
        },
        {
            "type": "object",
            "additionalProperties": false,
            "required": [
                "name"
            ],
            "properties": {
                "name": {
                    "type": "string"
                }
            }
        }
    ]
}

Test data set:
{
    "age": 34
}

Do you know which problem I foresee here?

@jojo1981 yes, it's the closest match algorithm. I understand in some cases (your example) there would be no benefit of such an algorithm as the input partially matches both rules. In that case, it'd be valid to return all errors. Then the question is - "should we go further?" Properties matching, number of properties etc.
I see there is no good way approaching this and returning all errors is de facto a standard for validators in other languages. This can be closed then. Thx for bearing with me ;)

@mirfilip Thanks for the discussion. It keeps us focussed!

I'm currently building schema for my API and I'm looking for a good validator. My schema will be heavy based on "oneOf" validation (major use of polymorphism). I think that nested validation message format proposed in this comment is way superior to the current flat one. Actually I may resign from JSON Schema validation if my users will be forced to face with dozens of messages and only the last one will provide an obscure reason of such situation (one must deduct that the reason for this noise is "oneOf" rule). Nested structure allows to group messages and bring the most important one to the top. The complexity of understanding messages goes from linear to logarithmic, as one can apply binary search, assuming that human will even find and understand the last validation message. It is major usability improvement.


Launching a second "Ubuntu" (bash) window results in a window that's not in focus

Repro:

Left-click "Ubuntu" shortcut on the task bar -> a bash opens and the window is in focus, meaning you can start typing right away and the text appears in the bash.
Right-click the "Ubuntu" shortcut, then left-click "Ubuntu", to launch a second bash window. This window is then not in focus. You have to first click it before it's in focus.

Your Windows build number:  Microsoft Windows [Version 10.0.16299.402]

Yeah, this one has been annoying me for a while.  Specifically, it appears the new window is not placed at the top of the z-order (as seen via Alt-Tab).
I can also repro it intermittently by Shift-left-click (when distro running) and left-click (when not running).  It may be shell/console rather than WSL because when trying with Command Prompt - I can repro (intermittently) with Shift-left-click but not at all via right-click menu.  File Explorer, Edge etc don't seem to be affected.
Also repros on build 17650 (skip ahead).

FYI, this appears to be a duplicate of #2597

Yep, that issue looks very similar. @zadjii-msft, could we get an update on this? That would be much appreciated.
Thank you very much!

I'm closing this as a dupe of #2597


PostgreSQL test failure

I noticed that sometimes when I run PostgreSQL's tests (when running MIX_ENV=pg mix test) I get following failure:
  1) test storage up (twice in a row) (Ecto.Integration.StorageTest)
     integration_test/pg/storage_test.exs:33
     Assertion with == failed
     code: Postgres.storage_up(correct_params) == :ok
     lhs:  {:error, :already_up}
     rhs:  :ok
     stacktrace:
       integration_test/pg/storage_test.exs:34

As I said it's only sometimes and not always, so it seems there's some race condition somewhere. I tried to investigate but I was unable to find anything that might be causing this issue.

Fix coming soon.


How to install packages with a vcs dependency in their setup.py

I'm working on a project at work for which one of the dependencies cannot be published to pypi, so I have to install it with the git url.  Unfortunately I can't paste the setup.py here.
What I am trying to accomplish is to use the Pipfile/Pipfile.lock as a development environment for the tool and then deploy the tool with pip install.  So I'm trying to specify all my dependencies in the setup.py and then just have the -e . line in my Pipfile.  My package installs perfectly fine with pip install . and pipenv install --skip-lock.  However, pipenv lock fails with the error (obviously redacted):
pipenv.exceptions.ResolutionFailure: ERROR: ERROR: Could not find a version that matches packagename@ git+https://GITHUB_TOKEN<EMAIL_ADDRESS>from git+https://GITHUB_TOKEN<EMAIL_ADDRESS>
No versions found

I know it's going to be difficult to give specific advice without more information, but I'm hoping you can give me the format and conditions that must be true (does the repo need to be tagged, etc) for pipenv to resolve this dependency the way pip does.  Thanks

I have a non-pypi but public github example of this issue, with the same type of setup.py trying to use a git repo as an install_requires dependency.
I attempt to install my python library using:
pipenv install -e git+https://github.com/itsayellow/mlutils.git#egg=mlutils
This has a dependency to another one of my git repo python libraries, tictoc.
pip can install mlutils fine, but pipenv fails:
[pipenv.exceptions.ResolutionFailure]:       pipenv.exceptions.ResolutionFailure: ERROR: ERROR: Could not find a version that matches tictoc@ git+https://github.com/itsayellow/tictoc@master from git+https://github.com/itsayellow/tictoc@master
[pipenv.exceptions.ResolutionFailure]:       No versions found

However, pipenv will succeed if I install tictoc first using:
pipenv install -e git+https://github.com/itsayellow/tictoc.git#egg=tictoc
I can then successfully use pipenv to install mlutils that depends on tictoc:
pipenv install -e git+https://github.com/itsayellow/mlutils.git#egg=mlutils
So this depends on the order.  If I try to install mlutils first with pipenv, it fails.  But if I install its dependency tictoc using pipenv first, then a later install of mlutils will succeed.
https://github.com/itsayellow/mlutils
https://github.com/itsayellow/tictoc

@itsayellow I seem to be having precisely the same issue. Could it be that it is not attempting to perform a -e installation? If I attempt to install the repo using pipenv but without the -e argument it fails for me in the same way as you are reporting. So, is there some way to tell pipenv to install some VCS dependency using the -e flag?

@frostming I'm having the exact same issue outlined here--specifically that when I try to install a package using pipenv install -e git+ssh://git<EMAIL_ADDRESS>if that package contains a VSC reference in it's setup.py in install_requires, e.g., "my_other_package @ git+ssh://git<EMAIL_ADDRESS>then I get the error:
[pipenv.exceptions.ResolutionFailure]:       pipenv.exceptions.ResolutionFailure: ERROR: ERROR: Could not find a version that matches my_other_package@ git+ssh://git<EMAIL_ADDRESS>from git+ssh://git<EMAIL_ADDRESS>I can install the main package using pip just fine. This command will work:
pipenv run pip install -e git+ssh://git<EMAIL_ADDRESS>However this command will fail:
pipenv install -e git+ssh://git<EMAIL_ADDRESS>I can solve the problem by installing the package referenced in the setup.py file of my_package first:
pipenv install -e git+ssh://git<EMAIL_ADDRESS>Then running:
pipenv install -e git+ssh://git<EMAIL_ADDRESS>What's going on here? Seems like some kind of bug.
Here's the full log output using the actual packages I'm trying to install. They are private so you can't view them, but it should give you an idea of what's going on.
Setup.py file:
from setuptools import find_packages, setup

import biovault_etl

setup(
    name="biovault_etl",
    version=biovault_etl.__version__,
    description="Biovault ETL Code",
    author="BioVault",
<EMAIL_ADDRESS>    packages=find_packages(exclude=["tests*", "lambda*"]),
    install_requires=[
        "boto3>=1.12.37",
        "click>=7.1.1",
        "hl7>=0.3.4",
        "pdftotext>=2.1.4",
        "psycopg2-binary>=2.8.5",
        "pydantic>=1.4",
        "sqlalchemy>=1.3.16",
        "ids @ git+ssh://git<EMAIL_ADDRESS>    ],
    dependency_links=[
        "git+ssh://git<EMAIL_ADDRESS>        "git+ssh://git<EMAIL_ADDRESS>    ],
    entry_points="""
        [console_scripts]
        etl=biovault_etl.cli.cli:cli
    """,
)

Failed Installation:
❯ pipenv install -e git+ssh://git<EMAIL_ADDRESS>--verbose                                                                                ─╯
Creating a virtualenv for this project…
Pipfile: /Users/cbh/dev/hacking/bvetl/Pipfile
Using /usr/local/Cellar/pipenv/2018.11.26_4/libexec/bin/python3.8 (3.8.2) to create virtualenv…
⠇ Creating virtual environment...created virtual environment CPython3.8.2.final.0-64 in 488ms
  creator CPython3Posix(dest=/Users/cbh/.local/share/virtualenvs/bvetl-i-Jw8lEd, clear=False, global=False)
  seeder FromAppData(download=False, pip=latest, setuptools=latest, wheel=latest, via=copy, app_data_dir=/Users/cbh/Library/Application Support/virtualenv/seed-app-data/v1)
  activators BashActivator,CShellActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator

✔ Successfully created virtual environment!
Virtualenv location: /Users/cbh/.local/share/virtualenvs/bvetl-i-Jw8lEd
Creating a Pipfile for this project…
Installing -e git+ssh://git<EMAIL_ADDRESS>⠋ Installing...Installing 'biovault_etl'
$ ['/Users/cbh/.local/share/virtualenvs/bvetl-i-Jw8lEd/bin/pip', 'install', '--src', '/Users/cbh/.local/share/virtualenvs/bvetl-i-Jw8lEd/src', '--verbose', '--upgrade', '-e', 'git+ssh://git<EMAIL_ADDRESS>'-i', 'https://pypi.org/simple']
Adding biovault_etl to Pipfile's [packages]…
✔ Installation Succeeded
Pipfile.lock not found, creating…
Locking [dev-packages] dependencies…
Locking [packages] dependencies…
⠋ Pinning VCS Packages...INFO:pipenv.patched.notpip._internal.vcs.git:Cloning<EMAIL_ADDRESS>(to revision release/0.3.3) to /var/folders/w2/rkn1bm3d3ndclys0f81clbfw0000gn/T/requirementslibd0yxmo_5/biovault-etl
⠹ Pinning VCS Packages...Branch 'release/0.3.3' set up to track remote branch 'release/0.3.3' from 'origin'.
Switched to a new branch 'release/0.3.3'
✘ Locking Failed!
Using pip: -i https://pypi.org/simple
Using pip: -i https://pypi.org/simple
Using pip: -i https://pypi.org/simple

                          ROUND 1
Current constraints:
  biovault-etl from git+ssh://git<EMAIL_ADDRESS>(from -r /var/folders/w2/rkn1bm3d3ndclys0f81clbfw0000gn/T/pipenvvwwqha7lrequirements/pipenv-xtt7hh1q-constraints.txt (line 2))

Finding the best candidates:
  found candidate -e git+ssh://git<EMAIL_ADDRESS>(constraint was <any>)

Finding secondary dependencies:
Switched to a new branch 'release/0.3.3'
Branch 'release/0.3.3' set up to track remote branch 'release/0.3.3' from 'origin'.

New dependencies found in this round:
  adding ['boto3', '>=1.12.37', '[]']
  adding ['click', '>=7.1.1', '[]']
  adding ['hl7', '>=0.3.4', '[]']
  adding ['ids', '', '[]']
  adding ['pdftotext', '>=2.1.4', '[]']
  adding ['psycopg2-binary', '>=2.8.5', '[]']
  adding ['pydantic', '>=1.4', '[]']
  adding ['sqlalchemy', '>=1.3.16', '[]']
Removed dependencies in this round:
Unsafe dependencies in this round:
------------------------------------------------------------
Result of round 1: not stable

                          ROUND 2
Current constraints:
  biovault-etl from git+ssh://git<EMAIL_ADDRESS>(from -r /var/folders/w2/rkn1bm3d3ndclys0f81clbfw0000gn/T/pipenvvwwqha7lrequirements/pipenv-xtt7hh1q-constraints.txt (line 2))
  boto3>=1.12.37
  click>=7.1.1
  hl7>=0.3.4
  ids@ git+ssh://git<EMAIL_ADDRESS>from git+ssh://git<EMAIL_ADDRESS>  pdftotext>=2.1.4
  psycopg2-binary>=2.8.5
  pydantic>=1.4
  sqlalchemy>=1.3.16

Finding the best candidates:
  found candidate -e git+ssh://git<EMAIL_ADDRESS>(constraint was <any>)
  found candidate boto3==1.12.42 (constraint was >=1.12.37)
  found candidate click==7.1.1 (constraint was >=7.1.1)
  found candidate hl7==0.3.4 (constraint was >=0.3.4)
Traceback (most recent call last):
  File "/usr/local/Cellar/pipenv/2018.11.26_4/libexec/lib/python3.8/site-packages/pipenv/utils.py", line 385, in resolve
    results = self.resolver.resolve(max_rounds=environments.PIPENV_MAX_ROUNDS)
  File "/usr/local/Cellar/pipenv/2018.11.26_4/libexec/lib/python3.8/site-packages/pipenv/patched/piptools/resolver.py", line 102, in resolve
    has_changed, best_matches = self._resolve_one_round()
  File "/usr/local/Cellar/pipenv/2018.11.26_4/libexec/lib/python3.8/site-packages/pipenv/patched/piptools/resolver.py", line 198, in _resolve_one_round
    best_matches = {self.get_best_match(ireq) for ireq in constraints}
  File "/usr/local/Cellar/pipenv/2018.11.26_4/libexec/lib/python3.8/site-packages/pipenv/patched/piptools/resolver.py", line 198, in <setcomp>
    best_matches = {self.get_best_match(ireq) for ireq in constraints}
  File "/usr/local/Cellar/pipenv/2018.11.26_4/libexec/lib/python3.8/site-packages/pipenv/patched/piptools/resolver.py", line 263, in get_best_match
    best_match = self.repository.find_best_match(ireq, prereleases=self.prereleases)
  File "/usr/local/Cellar/pipenv/2018.11.26_4/libexec/lib/python3.8/site-packages/pipenv/patched/piptools/repositories/pypi.py", line 175, in find_best_match
    raise NoCandidateFound(ireq, all_candidates, self.finder)
pipenv.patched.piptools.exceptions.NoCandidateFound: Could not find a version that matches ids@ git+ssh://git<EMAIL_ADDRESS>from git+ssh://git<EMAIL_ADDRESS>No versions found
Was https://pypi.org/simple reachable?

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/Cellar/pipenv/2018.11.26_4/libexec/lib/python3.8/site-packages/pipenv/resolver.py", line 126, in <module>
    main()
  File "/usr/local/Cellar/pipenv/2018.11.26_4/libexec/lib/python3.8/site-packages/pipenv/resolver.py", line 118, in main
    _main(parsed.pre, parsed.clear, parsed.verbose, parsed.system,
  File "/usr/local/Cellar/pipenv/2018.11.26_4/libexec/lib/python3.8/site-packages/pipenv/resolver.py", line 78, in _main
    results = resolve(
  File "/usr/local/Cellar/pipenv/2018.11.26_4/libexec/lib/python3.8/site-packages/pipenv/resolver.py", line 61, in resolve
    return resolve_deps(
  File "/usr/local/Cellar/pipenv/2018.11.26_4/libexec/lib/python3.8/site-packages/pipenv/utils.py", line 718, in resolve_deps
    resolved_tree, hashes, markers_lookup, resolver = actually_resolve_deps(
  File "/usr/local/Cellar/pipenv/2018.11.26_4/libexec/lib/python3.8/site-packages/pipenv/utils.py", line 480, in actually_resolve_deps
    resolved_tree = resolver.resolve()
  File "/usr/local/Cellar/pipenv/2018.11.26_4/libexec/lib/python3.8/site-packages/pipenv/utils.py", line 395, in resolve
    raise ResolutionFailure(message=str(e))
pipenv.exceptions.ResolutionFailure: ERROR: ERROR: Could not find a version that matches ids@ git+ssh://git<EMAIL_ADDRESS>from git+ssh://git<EMAIL_ADDRESS>No versions found
Was https://pypi.org/simple reachable?
Using pip: -i https://pypi.org/simple
Using pip: -i https://pypi.org/simple

                          ROUND 1
Current constraints:
  biovault-etl from git+ssh://git<EMAIL_ADDRESS>(from -r /var/folders/w2/rkn1bm3d3ndclys0f81clbfw0000gn/T/pipenvvwwqha7lrequirements/pipenv-xtt7hh1q-constraints.txt (line 2))

Finding the best candidates:
  found candidate -e git+ssh://git<EMAIL_ADDRESS>(constraint was <any>)

Finding secondary dependencies:
Switched to a new branch 'release/0.3.3'
Branch 'release/0.3.3' set up to track remote branch 'release/0.3.3' from 'origin'.

New dependencies found in this round:
  adding ['boto3', '>=1.12.37', '[]']
  adding ['click', '>=7.1.1', '[]']
  adding ['hl7', '>=0.3.4', '[]']
  adding ['ids', '', '[]']
  adding ['pdftotext', '>=2.1.4', '[]']
  adding ['psycopg2-binary', '>=2.8.5', '[]']
  adding ['pydantic', '>=1.4', '[]']
  adding ['sqlalchemy', '>=1.3.16', '[]']
Removed dependencies in this round:
Unsafe dependencies in this round:
------------------------------------------------------------
Result of round 1: not stable

                          ROUND 2
Current constraints:
  biovault-etl from git+ssh://git<EMAIL_ADDRESS>(from -r /var/folders/w2/rkn1bm3d3ndclys0f81clbfw0000gn/T/pipenvvwwqha7lrequirements/pipenv-xtt7hh1q-constraints.txt (line 2))
  boto3>=1.12.37
  click>=7.1.1
  hl7>=0.3.4
  ids@ git+ssh://git<EMAIL_ADDRESS>from git+ssh://git<EMAIL_ADDRESS>  pdftotext>=2.1.4
  psycopg2-binary>=2.8.5
  pydantic>=1.4
  sqlalchemy>=1.3.16

Finding the best candidates:
  found candidate -e git+ssh://git<EMAIL_ADDRESS>(constraint was <any>)
  found candidate boto3==1.12.42 (constraint was >=1.12.37)
  found candidate click==7.1.1 (constraint was >=7.1.1)
  found candidate hl7==0.3.4 (constraint was >=0.3.4)
Traceback (most recent call last):
  File "/usr/local/Cellar/pipenv/2018.11.26_4/libexec/lib/python3.8/site-packages/pipenv/utils.py", line 385, in resolve
    results = self.resolver.resolve(max_rounds=environments.PIPENV_MAX_ROUNDS)
  File "/usr/local/Cellar/pipenv/2018.11.26_4/libexec/lib/python3.8/site-packages/pipenv/patched/piptools/resolver.py", line 102, in resolve
    has_changed, best_matches = self._resolve_one_round()
  File "/usr/local/Cellar/pipenv/2018.11.26_4/libexec/lib/python3.8/site-packages/pipenv/patched/piptools/resolver.py", line 198, in _resolve_one_round
    best_matches = {self.get_best_match(ireq) for ireq in constraints}
  File "/usr/local/Cellar/pipenv/2018.11.26_4/libexec/lib/python3.8/site-packages/pipenv/patched/piptools/resolver.py", line 198, in <setcomp>
    best_matches = {self.get_best_match(ireq) for ireq in constraints}
  File "/usr/local/Cellar/pipenv/2018.11.26_4/libexec/lib/python3.8/site-packages/pipenv/patched/piptools/resolver.py", line 263, in get_best_match
    best_match = self.repository.find_best_match(ireq, prereleases=self.prereleases)
  File "/usr/local/Cellar/pipenv/2018.11.26_4/libexec/lib/python3.8/site-packages/pipenv/patched/piptools/repositories/pypi.py", line 175, in find_best_match
    raise NoCandidateFound(ireq, all_candidates, self.finder)
pipenv.patched.piptools.exceptions.NoCandidateFound: Could not find a version that matches ids@ git+ssh://git<EMAIL_ADDRESS>from git+ssh://git<EMAIL_ADDRESS>No versions found
Was https://pypi.org/simple reachable?

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/Cellar/pipenv/2018.11.26_4/libexec/lib/python3.8/site-packages/pipenv/resolver.py", line 126, in <module>
    main()
  File "/usr/local/Cellar/pipenv/2018.11.26_4/libexec/lib/python3.8/site-packages/pipenv/resolver.py", line 118, in main
    _main(parsed.pre, parsed.clear, parsed.verbose, parsed.system,
  File "/usr/local/Cellar/pipenv/2018.11.26_4/libexec/lib/python3.8/site-packages/pipenv/resolver.py", line 78, in _main
    results = resolve(
  File "/usr/local/Cellar/pipenv/2018.11.26_4/libexec/lib/python3.8/site-packages/pipenv/resolver.py", line 61, in resolve
    return resolve_deps(
  File "/usr/local/Cellar/pipenv/2018.11.26_4/libexec/lib/python3.8/site-packages/pipenv/utils.py", line 718, in resolve_deps
    resolved_tree, hashes, markers_lookup, resolver = actually_resolve_deps(
  File "/usr/local/Cellar/pipenv/2018.11.26_4/libexec/lib/python3.8/site-packages/pipenv/utils.py", line 480, in actually_resolve_deps
    resolved_tree = resolver.resolve()
  File "/usr/local/Cellar/pipenv/2018.11.26_4/libexec/lib/python3.8/site-packages/pipenv/utils.py", line 395, in resolve
    raise ResolutionFailure(message=str(e))
pipenv.exceptions.ResolutionFailure: ERROR: ERROR: Could not find a version that matches ids@ git+ssh://git<EMAIL_ADDRESS>from git+ssh://git<EMAIL_ADDRESS>No versions found
Was https://pypi.org/simple reachable?

But if I run:
pipenv install -e git+ssh://git<EMAIL_ADDRESS>then:
 pipenv install -e git+ssh://git<EMAIL_ADDRESS>the installation succeeds. Here is the successful log:
Any insights?

Sorry for the issues everyone -- dependency links are deprecated, you will need to use the direct url syntax in the format of install_requires=["name@ git+ssh://github.com/org/repo.git@ref"] to include dependencies from version control.  This should work as of the current prerelease of pipenv which is available via pip install --upgrade --pre pipenv.
For example, using this take on the setup.py posted above:
from setuptools import find_packages, setup

setup(
    name="biovault_etl",
    version="0.0.1",
    description="Biovault ETL Code",
    author="BioVault",
<EMAIL_ADDRESS>    packages=find_packages(exclude=["tests*", "lambda*"]),
    install_requires=["vistir@ git+https://github.com/sarugaku/vistir.git@master"],
)

I was able to install:
 /t/test  pipenv install -e .
Installing -e .…
Adding biovault_etl to Pipfile's [packages]…
✔ Installation Succeeded
Pipfile.lock not found, creating…
Locking [dev-packages] dependencies…
Locking [packages] dependencies…
Building requirements...
Resolving dependencies...
✔ Success!
Updated Pipfile.lock (c081cf)!
Installing dependencies from Pipfile.lock (c081cf)…
  🐍   ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 4/4 — 00:00:06
To activate this project's virtualenv, run pipenv shell.
Alternatively, run a command inside the virtualenv with pipenv run.

I believe this should be resolved with the prerelease so I will close this issue for now, the release should be live in about a week. Please feel free to open a new issue if you encounter any problems.
Thanks for your patience!

Thanks, @techalchemy for the response, and for all the work on the new release! The scenario you demonstrated above also worked on the v2018.11.26 version of pipenv too :) The problem arises when vistir package ALSO has a direct url link it its setup.py install_requires section. This is when pipenv creates the error I noted above. Is this a separate issue I should open? Or perhaps maintain the thread here?
Thanks again for all the work on the new release--I know pipenv has gone through a lot of transitions over the past few years and it's great to see you carrying the project forward :)

@coltonbh so it's an issue of nesting? to put it visually:
(A): package w/ direct dependency in setup.py
(B): Random normal package
(C): Standard package
(D): another package w/ direct dependency in setup.py

This scenario would install ok:
(A)
| - (B)<-(A)

But this scenario would not:
(A)
| - (D)<-(A)

What about this one?
(C)
| - (D)<-C

i.e. A normal package as the root dependency, which depends on (D) which has a direct URL in its setup.py?

Are you saying that the last case is also broken?

Correct! The last two scenarios would fail. It appears to me, based on my understanding of the exception message, is that pipenv is literally trying to find version @ git+ssh://... of the package, which it can't find. (I think...)
Assuming we want to install D from other packages (reference D in install_requires of other packages), you'd need to place my_direct_dependency>=0.3.4 in the install_requires of D instead of the direct url. Then, since I could no longer install package D directly because my_direct_dependency doesn't exist on PyPi and installation would fail I'd need to install my_direct_dependency>=v0.3.4 "manually" so my Pipfile lists my_direct_dependency as being installed from the GitHub. Then I'd install the package I am working on that includes a reference to D>=vWhatever with pipenv install -e .. Pipenv would then correctly install my package that includes a reference to D and notice that locally my_direct_dependency, which D depends on, is already satisfied and installed from Github.
While this is somewhat annoying that we can't install packages that refer to other packages with direct dependencies, there's a case to be made that this is correct behavior based on the notion of abstract/concrete dependences. Pipenv documentation. Good blog post.
After research all this, I think the absolute purist would maintain that there should never be direct URLs in setup.py. However, if the python community feels this should be a supported feature, getting pipenv to make this work would be nice :)

Yeah the pre-release should work with this use case.  Does it work if you set PIPENV_RESOLVE_VCS=1?


getting-started.md improvements

First off, my apologies this isn't in a pull request

"ALLOWED_HOSTS"

I had to add <IP_ADDRESS> as nginx is calling it for the proxy

gunicorn Configuration

You may want to elude to the command path needing to be checked, my path was sans local:
command = '/usr/bin/gunicorn'

I had to add <IP_ADDRESS> as nginx is calling it for the proxy

This shouldn't be necessary. Do you have the following under location / in your nginx config?
proxy_set_header X-Forwarded-Host $server_name;

You may want to elude to the command path needing to be checked, my path was sans local

Looks like the default install location for Ubuntu changed recently. I'll update the doc to remove local from the path. Thanks for the heads up.

@jeremystretch it looks like adding localhost isn't required - i had changed that and then removed local at the same time
removing <IP_ADDRESS> now and restarting supervisor leaves me with a working instance so I jumped the gun on that one
So far so good... I really like the work you've done here =)

Looks like this was already addressed in 1cd2086 so I'll close this.
Thanks =)


[BEAM-6908] Refactor Python performance test groovy file for easy configuration

Combine Python performance test groovy files into one with structured configuration block. Adding a new python performance test job can be simply as adding a PerformanceTestConfigurations into testConfigurations list.

Thank you for your contribution! Follow this checklist to help us incorporate your contribution quickly and easily:

[ ] Choose reviewer(s) and mention them in a comment (R: @username).
[ ] Format the pull request title like [BEAM-XXX] Fixes bug in ApproximateQuantiles, where you replace BEAM-XXX with the appropriate JIRA issue, if applicable. This will automatically link the pull request to the issue.
[ ] If this contribution is large, please file an Apache Individual Contributor License Agreement.

Run Seed Job

Run Python Performance Test

Run Python35 Performance Test

+R: @tvalentyn

Run Seed Job

Run Python35 Performance Test

PTAL @yifanzou

Thanks, @markflyhigh !

PTAL @tvalentyn

Run Seed Job

Run Python35 Performance Test

Run Seed Job

Run Python35 Performance Test

PTAL @tvalentyn

PTAL @tvalentyn

CC: manisha252@ who is working on performance test infrastructure and may have additional input here.

Thank you @tvalentyn.
To your question, results are stored in Bigquery table which should be accessible from UI or gcloud commandline. Different job is likely to use own table and configured in testConfigurations so it's not possible to provide a static link in groovy file.

I meant that we should have some pointers in Beam documentation that can point to existence of these benchmarks and dashboards they produce.

Run Seed Job

Run Python35 WordCountIT Performance Test

@tvalentyn I can add link of Bigquery table and dashboard in Beam doc. Also fixed the comment for beam_prebuilt.
Synced with @manisha252 offline and got approved for this change.


Support Kubernetes Gateway APIs for Ingress

The network SIG has been hard at work developing the new Gateway API, aka Ingress V2. A Gateway is responsible for routing a request to a service. There's already an HTTPRoute implementation. The API has several integration points and I think the current Interceptor could be integrated or evolved to integrate with the existing HTTP implementation. Alternatively, a new GatewayClass can be designed to work specifically with KEDA and still make use of the standardized API.
Might relate to #10 and possibly #6. /cc folks from Services API who know way more than I do :) @hbagdi @jpeach @robscott
Edit @tomkerkhove: Updated link given it was renamed to Gateway API.

@beriberikix sounds like it'd be useful to have the operate create service API resources instead of (in addition to?) plain old Ingress resources that #10 calls for.
Another aspect is metrics. We can do routing with this, but is there a standard metrics API that this comes with? SMI is certainly one solution but something designed explicitly for north-south traffic, as you said in today's meeting, could be more beneficial.
Looking forward to hearing your thoughts!

I think the same here @arschles - Folks should be able to choose if we manage it or they bring their own imo

💯! It's also entirely possible someone has a very custom Ingress solution and this shouldn't prevent them as well. Services API should be in addition to Ingress (and user choice which to instantiate), especially since Ingress V1 is currently the only GA supported way and Service API is still in Beta.
@arschles great questions on Metrics. I've asked in #sig-network-service-apis channel for input!

Service API is still in Beta.

nit: Service APIs (or Gateway API in future) is in alpha.

It's also entirely possible someone has a very custom Ingress solution and this shouldn't prevent them as well. Services API should be in addition to Ingress

That's correct. Based on the community interest, it seems like most ingress controllers will add support for Service APIs in future. Ingress isn't going anywhere.

RE: metrics @robscott:

There’s interest in this but it’s not a core priority. We’re trying to focus on getting all the core parts of the API right first but could eventually expand the scope to include this. This could be a good opportunity for an implementation to experiment with a potential spec for metrics and then work on upstreaming it if it works well.

Is there anything left?

I just need to find some time to finish https://github.com/kedacore/http-add-on/pull/1052, but after that imho not much left with the currently considered scope for both Ingress and HTTPRoute. Both are documented equally and will be covered by similar e2e tests.


fix: ldap sync domain may remove local usrs

这个 PR 实现什么功能/修复什么问题:
修正：keystone同步ldap时，会将domain下sql用户删除
是否需要 backport 到之前的 release 分支:

release/2.10.0
release/2.11.0

/area keystone

Codecov Report

Merging #1721 into master will decrease coverage by <.01%.
The diff coverage is 0%.

@@            Coverage Diff            @@
##           master   #1721      +/-   ##
=========================================
- Coverage    7.64%   7.64%   -0.01%
=========================================
  Files         412     412
  Lines       63115   63125      +10
=========================================
  Hits         4823    4823
- Misses      57883   57893      +10
  Partials      409     409

Flag
Coverage Δ

#aFlag
7.64% <0%> (-0.01%)
:arrow_down:

Impacted Files
Coverage Δ

pkg/keystone/models/groups.go
6.29% <0%> (-0.23%)
:arrow_down:

pkg/keystone/models/users.go
2.35% <0%> (-0.04%)
:arrow_down:

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 7b1a4f2...ffae2ad. Read the comment docs.

/approve
/lgtm


add [openjdk11] to Travis build matrix

What changes were proposed in this pull request?
add [openjdk11] to Travis build matrix
How was this patch tested?
Travis build.
Please review http://spark.apache.org/contributing.html before opening a pull request.

Can one of the admins verify this patch?

Can one of the admins verify this patch?

Can one of the admins verify this patch?

@sullis, this file will be obsolete per https://github.com/apache/spark/pull/22667. This shall be closed.


The search window is missing an X to close it

There is no way to close the search window when editing a file, because there is no X there.

Tap on search icon to toggle search box or trigger back button. I'm closing this issue because there is already multiple ways to close the search box.


update index.html

A follow up on my previous PR. Correct visible text corresponding to number of collumns

Tests passed. Automated cross-browser testing via Sauce Labs and Travis CI shows that the JavaScript changes in this pull request are: CONFIRMED
Commit: a3c907794569dcb63079b072724f7f800086b07d
Build details: https://travis-ci.org/twbs-savage/bootstrap/builds/148356528
Docs preview: http://preview.twbsapps.com/c/${commitSha.sha}
(Please note that this is a fully automated comment.)

cool thanks. for future reference: you can push further commits to the same branch once you started a PR, without the need to file a new PR :)

@patrickhlauke Friendly note: Please improve the commit message when necessary when squash-merging in the future. "update index.html" is painfully vague...


add a button to duplicate an entity

It would be convenient to have a duplicate/clone button, especially for complicated entities like services, but useful for all types of entities.
It could be a one-step or two-step operation. I like this one-step concept.

click the duplicate button
(a new entity named like "{original} Copy" is immediately created and available for editing)

In contrast, here's a two-step concept to consider, too.

click the duplicate button
the new entity is immediately opened in draft mode, as if I had begun creating the thing and filled in all the blanks with the info from the reference entity. I modify the name, etc., then click CREATE

This would be supremely useful even if availability of the feature were limited to so-called "simple services."


Just :lipstick: Typo

:)

Coverage remained the same at 93.846% when pulling babed00c03a17de47efb209f9d8449b1451cb679 on JulienBreux:patch-2 into 38d12d9d3f048f42e8c5b61603e6d96c6c2d29e1 on phly:master.

Thanks, @JulienBreux !


x86_64-linux: lower glibc version requirement to 2.17 (compatible with centos 7)

This PR lowers the glibc version requirement of the x86_64-linux-gnu binaries produced by cross to v2.17 (from v2.23). With this change x86_64-linux applications build with cross can run on LTS distributions like centos 7.
The implementation consists of changing the base image of the x86_64-gnu image from ubuntu:16.04 to centos:7
The existing scripts were adapted as follows:

package management has been refactored into install_packages and purge_packages functions that work under ubuntu and centos
added if_centos and if_ubuntu helper functions to handle steps specific to either distribution
qemu.sh: centos doesn't provide libattr, libcap and libpixman as static libraries so those libraries have to be compiled when the script runs on centos
linux-image.sh: this script is very ubuntu/debian specific as it relies on apt-get to build a minimal debian sysroot. Instead of modifying the script to make it work on centos, I opted for running the script in a fresh ubuntu:16.04 docker container and copying the output debian sysroot (/qemu) into the centos based image

note that due #499 the qemu-system runner is not being tested in CI. To ensure this PR is not breaking qemu-system on x86_64, PR #500 should land first.

https://dev.azure.com/rust-embedded/cross/_build/results?buildId=791&view=logs&j=14306e81-fbe4-59fd-bc5f-032f2af5fc08&t=883603b3-149d-599e-2f7b-6080333ed52c&l=49
$ cargo install --path . --force
(..)
$ cross build --target x86_64-unknown-linux-gnu --release
(..)
/target/release/build/cross-dbf0d01025c300c1/build-script-build: /lib64/libc.so.6: version `GLIBC_2.18' not found (required by /target/release/build/cross-dbf0d01025c300c1/build-script-build)

interesting the first cargo install command, which runs outside docker, creates artifacts that depend on glibc 2.18+ (CI env is ubuntu 20.04), then the second cross command reuses and runs those artifacts (the build scripts) which fails because there's only a glibc 2.17 inside the docker. a cargo clean should fix the issue (you should not mix cargo build --target $T and cross build --target $T commands; that's a known issue/limitation)
(I was under the impression that cargo install was the same as cargo build, which confusingly is not the same as cargo build --target x86_64-unknown-linux-gnu (where target = host) because they use different output target directories (target/debug vs target/x86_64-unknown-linux-gnu/debug. maybe some subtle semantic changed in one of those commands at some point -- or I may be misremembering things)

https://dev.azure.com/rust-embedded/cross/_build/results?buildId=792&view=logs&j=8f8c9133-e1c4-5d42-4562-da6ba7afb96e&t=3c0ce6f7-5e36-5685-3cbb-bc4b1fce52ae&l=16436

curl --retry 3 -sSfL https://pkg.freebsd.org/FreeBSD:12:i386/quarterly/All/openssl-1.1.1h,1.txz -O
curl: (22) The requested URL returned error: 404 Not Found

that has failed twice in a row so the URL is probably gone; let's figure out which new URL to use ...

PR #502 should fix the freebsd failure

Now that #502 has landed, CI for this PR should be green. Could I get some feedback on this PR? (@reitermarkus maybe?)

bors try

(the "try" build failed due to a network error but the 'multi-stage' commit is green on CI)

bors r+

bors retry

it's always the musl.sh script that's failing due to "curl: (22) The requested URL returned error: 502 Bad Gateway". I cannot repro locally but the CI fails with a different target each time. Let's try one more time?
bors retry


Handling kebab and snake caseing as intercepts in pedestal

Status
READY
JIRA Ticket
SPACON-425
Description
Instead of the Components handling HTTP keyword casing transformations, the Pedestal interceptors now do that.
Todos

[x] Tests
[x] Documentation
[x] License

Steps to Test or Reproduce
Outline the steps to test or reproduce the PR here.
git fetch --all
git checkout SPACON-425
lein test

@boundlessgeo/spatial-connect

👍


How to convert ONNX model to work with ESP-DL (AIV-550)

Hello,
I'm very new to machine learning. I have a working object detection model for the onnx and I tried it on the PC. May I have some instructions on how to use this to detect objects from esp32-s3. I do the optimization successfully, but when I call the check_model function it has a large list of operators which is not supported on esp-dl yet.

If someone can help me with this error much appreciate with it.
Thank you

Hi, can you provide your python script?

Hi, can you provide your python script?

Hi, can you provide your python script?

I modified https://github.com/espressif/esp-dl/blob/master/tools/quantization_tool/examples/example.py file as this to test
import numpy as np
import onnx
import pickle
import torch
import onnxruntime as rt

import os
import sys
import platform
system_type = platform.system()
path = f'../{system_type.lower()}'
if system_type == 'Windows':
    path = path.replace('/', '\\')
sys.path.append(path)
sys.path.append("..")

from optimizer import *
from calibrator import *
from evaluator import *

if __name__ == "__main__":

    # Optimize the onnx model
    # model_path = 'mnist_model_example.onnx'
    model_path = 'resnet50_192.onnx'
    optimized_model_path = optimize_fp_model(model_path)
    print("Optimized model path - ",optimized_model_path)

    model_proto = onnx.load(optimized_model_path)

    print('Generating the quantization table:')
    calib = Calibrator('int16', 'per-tensor', 'minmax')
    calib.check_model(model_proto)
    # calib.set_providers(['CPUExecutionProvider'])
    # calib.generate_quantization_table(model_proto, calib_dataset, pickle_file_path)

and https://github.com/espressif/esp-dl/blob/master/tools/quantization_tool/optimizer.py file as this
import numpy as np
import os
import collections

import onnx
from onnx import helper, numpy_helper, version_converter
from onnx import TensorProto
from onnxruntime.transformers.onnx_model import OnnxModel
from onnxsim import simplify

import onnxoptimizer

# check model format
def check_model_extension(model_path):
    # Split the extension from the path and normalise it to lowercase.
    ext = os.path.splitext(model_path)[-1].lower()

    # Now we can simply use != to check for inequality, no need for wildcards.
    if (ext != ".onnx"):
        raise Exception(model_path, "is an unknown file format. Use the model ending with .onnx format")

    if not os.path.exists(model_path):
        raise Exception("[ ERROR ] Path of the onnx model file is Invalid")

# Fuse batch normalization into Conv and Gemm node
def fuse_bn(model_proto):
    onnx_model = OnnxModel(model_proto)
    nodes = model_proto.graph.node

    for node in nodes:
        if node.op_type == 'BatchNormalization':
            node1 = onnx_model.get_parent(node, 0)
            if node1.op_type in ['Conv', 'Gemm']: # fuse bn with conv or gemm
                children = onnx_model.get_children(node1)
                if len(children) != 1: # cannot fuse if used by other nodes
                    continue

                weights = numpy_helper.to_array(onnx_model.get_initializer(node1.input[1]))
                if len(node1.input) > 2:
                    bias = numpy_helper.to_array(onnx_model.get_initializer(node1.input[2]))
                else:
                    bias = np.array(0, dtype=weights.dtype)

                scale = numpy_helper.to_array(onnx_model.get_initializer(node.input[1]))
                offset = numpy_helper.to_array(onnx_model.get_initializer(node.input[2]))
                mean = numpy_helper.to_array(onnx_model.get_initializer(node.input[3]))
                var = numpy_helper.to_array(onnx_model.get_initializer(node.input[4]))

                epsilon = 1e-5
                for att in node.attribute:
                    if att.name == 'epsilon':
                        epsilon = att.f

                scale_new = scale / np.sqrt(var + epsilon)
                if len(weights.shape) == 4:
                    weights = weights.transpose(2, 3, 1, 0)
                    weights_new = weights * scale_new
                    weights_new = weights_new.transpose(3, 2, 0, 1)
                if len(weights.shape) == 2:
                    weights = weights.transpose(1, 0)
                    weights_new = weights * scale_new
                    weights_new = weights_new.transpose(1, 0)

                bias_new = (bias - mean) * scale_new + offset

                initializer = onnx_model.get_initializer(node1.input[1])
                initializer.CopyFrom(
                    numpy_helper.from_array(weights_new.astype(np.float32), node1.input[1]))

                if len(node1.input) > 2:
                    initializer = onnx_model.get_initializer(node1.input[2])
                    initializer.CopyFrom(
                        numpy_helper.from_array(bias_new.astype(np.float32), node1.input[2]))
                else:
                    ini = onnx.helper.make_tensor(node1.name + '_bias', TensorProto.FLOAT, bias_new.shape,
                                                  bias_new.astype(bias.dtype))
                    model_proto.graph.initializer.append(ini)
                    node1.input.extend([node1.name + '_bias'])

                node1.output[0] = node.output[0]
                model_proto.graph.node.remove(node)

    onnx_model.update_graph()

# For 'Attempting to broadcast an axis by a dimension other than 1'
def handle_prelu(model_proto):
    onnx_model = OnnxModel(model_proto)
    for node in model_proto.graph.node:
        if node.op_type == 'PRelu':
            initializer = onnx_model.get_initializer(node.input[1])
            new_array = numpy_helper.to_array(initializer)[:, np.newaxis, np.newaxis]
            new_initializer = onnx.helper.make_tensor(initializer.name, TensorProto.FLOAT, new_array.shape, new_array)
            model_proto.graph.initializer.remove(initializer)
            model_proto.graph.initializer.append(new_initializer)
    onnx_model.update_graph()

# name of GEMM node missing if 'fuse_matmul_add_bias_into_gemm' happens
def add_fused_gemm_name(model_proto):
    nodes = [n for n in model_proto.graph.node if n.op_type == 'Gemm']
    node_name_counter = 0
    for node in nodes:
        if node.name == '':
            node.name = 'fused_gemm_' + str(node_name_counter)
            node_name_counter += 1

def rename_node(model_proto):
    node_name_counter = collections.Counter()
    for node in model_proto.graph.node:
        node_name_counter[node.op_type] += 1
        # rename node name
        node.name = str(node.op_type) + '_' + str(node_name_counter[node.op_type])

# Set input batch size to dynamic and run shape inference
def convert_model_batch_to_dynamic(model):
    initializers =  [node.name for node in model.graph.initializer]
    inputs = []

    for node in model.graph.input:
        inputs.append(node)

    for node in inputs:
        if node.name in initializers:
            # remove initializer from inputs
            model.graph.input.remove(node)

    shape = inputs[0].type.tensor_type.shape
    inputs[0].type.tensor_type.elem_type = TensorProto.FLOAT
    model.graph.output[0].type.tensor_type.elem_type = TensorProto.FLOAT
    dim = shape.dim

    # if model.opset_import[0].version < 13:
    #     model = version_converter.convert_version(model, 13)
    if not dim[0].dim_param:
        dim[0].dim_param = 'N'
        if dim[0].dim_value:
            dim[0].dim_value = ''
    model = onnx.shape_inference.infer_shapes(model)

    return model

def optimize_fp_model(model_path):
    check_model_extension(model_path)
    model_proto = onnx.load(model_path)

    model_simp, check = simplify(model_proto)
    # Save simplified model
    model_name = model_path.split(".onnx")
    model_path1 = model_name[0] + "_simplified.onnx"
    onnx.save(model_simp, model_path1)

    model_proto = model_simp

    # Convert static batch to dynamic batch
    model_proto = convert_model_batch_to_dynamic(model_proto)

    # Optimizer
    model_proto = onnxoptimizer.optimize(model_proto,
                                       ['fuse_bn_into_conv', 'fuse_add_bias_into_conv', 'fuse_pad_into_conv',
                                        'fuse_matmul_add_bias_into_gemm', 'fuse_transpose_into_gemm',
                                        'eliminate_nop_flatten', 'eliminate_nop_pad', 'eliminate_nop_transpose',
                                        'eliminate_unused_initializer', 'eliminate_duplicate_initializer'])
    # Add Gemm name
    add_fused_gemm_name(model_proto)

    # Fuse bn into conv or gemm
    fuse_bn(model_proto)

    # Save optimized model
    model_name = model_path.split(".onnx")
    model_path = model_name[0] + "_simplified_optimized.onnx"
    onnx.save(model_proto, model_path)

    return model_path

I modified this https://github.com/espressif/esp-dl/blob/master/tools/quantization_tool/examples/example.py file to  test my code as in the zip file
example_optimizer.zip
and https://github.com/espressif/esp-dl/blob/master/tools/quantization_tool/optimizer.py also modified make the onnx model simplified
optimizer.zip

you mentioned that you do the quantization successfully, did you mean running generate_quantization_table successfully or this resnet50_192.onnx model is already quantized?

Actually, I got one of the pre-trained models from PyTorch, and it was not quantized. then I convert to ONNX and do the quantization there. Is there any way that I can double check the model is quantized or not.

generate_quantization_table

"generate_quantization_table" failed because of the missing operators.

ok, then unfortunately this model cannot be deployed using esp-dl since these operations are not implemented, please check https://github.com/espressif/esp-dl/tree/master/include/layer for the supported operations.

oh.. thank you for your help. I was trying to create customer layers but didn't work well for me. Is there any model architecture that I need to follow if I want to detect objects for the library? like rrcnn or etc.

better use a model architecture that all layers in the model are supported.

okay I will close the issue then. thank you


ci: Add --allowerasing flag to avoid ci failure

The ci seems to be failing with package installation
failures. Validating if adding '--allowerasing' flag
resolves the issue.
Signed-off-by: Yug<EMAIL_ADDRESS>

closing it's not required anymore


openapi version 3.0

Is it possible to output other versions of the OpenAPI spec (3.0.0 for instance)? I'm running into issues generating off of the v3.1 spec and wondering if this was on the roadmap (or supported already).

Yes, support for OpenAPI 3.0.0 is in progress! Could you share the specific issues you’re encountering with the 3.1 spec?


Add talairach atlas

As discussed in https://github.com/miykael/atlasreader/issues/57, this PR adds FSL's Talairach atlas in MNI space.

Codecov Report

Merging #60 into master will increase coverage by 1.28%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##           master      #60      +/-   ##
==========================================
+ Coverage   90.57%   91.86%   +1.28%
==========================================
  Files           6        6
  Lines         329      381      +52
==========================================
+ Hits          298      350      +52
  Misses         31       31

Impacted Files
Coverage Δ

atlasreader/atlasreader.py
97.81% <ø> (+0.5%)
:arrow_up:

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 67667a1...6d6b0b1. Read the comment docs.

Did you take the atlas directly from FSL? If I remember correctly their license is rather prohibitive in some instances, and doesn't align with the BSD-3 on the current repo. We may want to find an alternative source or add a statement about their license somewhere.
Now that I mention it, this is potentially a concern for all the atlases...  Yes, other atlases would have the same issue. I also haven't checked yet FreeSurfer's license. Is the license thing still an issue even if we clearly cite the papers from which the atlases are coming from?

The license thing should be fine as long as we (1) clearly cite the original sources and (2) specify that the specific atlases included are under a different license than the code/rest of the repository and include a reproduction of that license...somewhere. Maybe we can include a README and LICENSE files in the atlasreader/data folder specifying all that info?

Heya! Yeah - I hear you both on the annoying-different-licenses front. I agree with @rmarkello that citing and making clear that the atlases are licensed differently is the right way to go.
I think a README file in atlasreader/data is great, and I think you could just link to the license files from that README (if those licenses are online?) Otherwise a copy sounds good too.
Do we have any Freesurfer atlases? The licenses for those require a registration (whereas FSL just limits a bunch of commercial usage). I think @chrisfilo has a few different apps that go and check for the user's Freesurfer license before the code is run if we want to be really careful??
I did think that you could link to the user's installation of FSL and/or Freesurfer and therefore don't need to ship the atlases at all, but I've also realised that that would be a pain in the a** for me (and people like me) using a windows computer to make pretty plots!
So the alternate plan I've come up with is that when you install atlasreader you don't get the data automatically, but rather you're asked to reply to a commandline argument that acknowledges that you a) have a freesurfer license and b) know that the FSL atlases are distributed under a different license.
What do you think? I may have spun off the deep end and be overcomplicating everything here. But I kinda like the idea of someone having to actively acknowledge the different licences rather than assuming they'll go to the README file??

I was actually just playing around with running custom code during installation, so adding a little function to print something to the screen and request user response should be doable! I think you're right and that's the best thing to do :slightly_smiling_face:
As for where the atlases come from: that's a question for @miykael! I believe some do come from Freesurfer, but he'll know for sure. We could try and find alternative sources where they're licensed more freely, since these atlases tend to exist in many places... I'll work on the installation prompt, nonetheless.

Yes, having a README file in the atlasreader/data folder is the best approach. As @KirstieJane discussed, like this we could also directly link to the corresponding licenses.
Hmm... yes, at the moment we have mostly FSL and FreeSurfer atlases. As @KirstieJane mentioned, the advantage of providing the atlases as NIfTI files with the software makes those atlases also available to Windows users or people who don't want to install FreeSurfer or FSL. But I didn't consider the license issue at all and especially not the one with FreeSurfer's registration process. In this regard having a "pop-up" or something similar saying "be aware of the license of those atlases..." is probably the quickest approach.
We could also try to contact the corresponding authors or software developers and ask them if they approve our way (i.e. once we've established a good README file). What do you think?

As to the question of "where are the atlases coming from"? Good question! I know from where I've got most of them, but I didn't keep a nice track because at the beginning I was only using them for myself. I also know that I transformed some of them myself into NIfTI format etc.
I will go through the process again and comment everything in a step by step guide that we can then incorporate in a README file.

The nilearn.datasets.fetch_ functions didn't return suitably standardized information about the labels of the images, if I remember correctly. Some were called 'id', others 'label', etc etc. Writing code to handle all the cases would have perhaps been more frustrating than just including the atlases ourselves. Though, now that the licensing has come up, that tradeoff might be a toss up :sweat_smile:
As for nilearn's licensing: I think they manage to get around the issue by requiring the users to call the functions and pulling directly from the source, not shipping with the atlases as we need to do.
I can work on adding the installation message later tonight, but it would be great if @miykael could come up with the README file noting the origins and licenses of the atlas (and template) data!

I'm happy to create this README file. Now I'm just wondering if it's not the quickest to just get the atlases via nilearn. I will investigate it and come back to this.

This all sounds great. I just wanted to add a little :+1: to pinging the FSL and Freesurfer developers and asking what they think. They may be totally fine with just linking to the atlas licences and then we don't have to engineer around it too much?
Alternatively, what about putting in a PR to nilearn to standardise their datasets?? Is that too big a task?

I think I will wait till PR https://github.com/miykael/atlasreader/pull/67 is merged before I contact the developers. We should also include a "License Please check the readme in the atlas folder to know how to cite the atlases you are using" section into the main README.md.
@KirstieJane and @rmarkello - the nilearn approach is possible. They actually provide the output in a coherent/structured way. But there are some issues with using nilearn:

Not all atlases can be downloaded with nilearn. For example, the Juelich or AICHA atlas. Also, nilearn uses AAL and not AAL2. We could of course "just" add them to the nilearn repo ourselves.
Using nilearn's fetch_ function will download more than we just need. For example, getting the 1mm cortical harvard_oxford atlas downloads a total of 30MB (as it also downloads all the other versions). All the atlases combined in atlasreader are only 12MB.
You need an internet connection, and it will download the files into a nilearn_data folder in your home directory. I see some permission issues on certain systems.
Do we really solve the license issue by just using nilearn? They are also only linking to the corresponding sources. So the same thing that we intend to do.


It's not possible to cancel joining a room

From the top right + -button, select "join room". Now, you are faced with a text field for entering the id of the room you want to join. And there is no way to return without entering one. Even giving a non-existent room id doesn't help, the only way to get rid of the dialog is to enter an actually working room id. A "Cancel" button would be nice.

Created an issue for it:
https://github.com/vector-im/hydrogen-web/issues/936

and a pr https://github.com/vector-im/hydrogen-web/pull/937

Thanks for the report. I'll close this, report back if you hit problems


Explore TBATS model.

Use forecast::tbats as explained here: http://robjhyndman.com/hyndsight/seasonal-periods/
For multi-seasonality, use msts(x, seasonal.periods=c(1440,365) or an ets() model

Done. It doesn't seem to perform as well as other models.


How-to Video does not play

Expected Behavior
The How-to video (from the launch screen or the help screen) should play when you tap the play button on iOS.
Actual Behavior
The video doesn't play.
Steps to Reproduce
Note: this only seems to happen in the PBS KIDS edition, so it might be specific to that video somehow.

Tap the help button (light-bulb), and then the play button under "Quick Intro" to open the video
or
Tap the "How-to" button on the launch screen ('?' in official ScratchJr)
Tap the play button on the video

Device and Operating System

iPad mini4 iOS 13.5.1
iPad Air

I tried, but the video plays well on both my iPad mini 2(iOS 12.5.2) and the simulator(iOS 14.1):

Hi @chrisgarrity , I tried playing the video on iPad mini 4 simulator with iOS version 13.0, 13.1, 13.2.2, 13.3, 13.4, 13.5, 13.6 and 13.7, but couldn't reproduce this issue.
By the way, I suggest that we integrate some third party libraries like sentry or bugsnag to track JavaScript issues although this may be not a JavaScript issue.

@yueyuzhao I'll take this one to try to reproduce.

This one is also working for me. I'm not sure what else changed, but I'm closing until we can reproduce it.


improve specification Publisher 1.3

As discussed in #431.

Thanks @davidmoten! What do you think about the idea that we should take this even further and add serially in the list of definitions, and rephrase the rules which refers to External synchronization?

Thanks @davidmoten! What do you think about the idea that we should take this even further and add serially in the list of definitions, and rephrase the rules which refers to External synchronization?

@viktorklang Okey doke, will build on this PR

@davidmoten Awesome, thank you!

@viktorklang how about this:
For the glossary:
Serial(ly) - In the context of a signal, signals (for example calls to methods on an object) are non-overlapping (non-concurrent). In the context of the JVM, calls to methods on an object are serial if and only if there is a happens-before relationship between those calls.
As mentioned in #431 we also need to:

remove External Synchronization entry from glossary
reword Thread-Safety in Glossary
reword Subscriber 2.7

@davidmoten
Thanks David!
I think we can possibly delete the External Synchronization entry in the glossary if we lift bits of it into the Serial(ly) definition, perhaps something along the lines of this:

Serial(ly) - In the context of a Signal[ref glossary], are non-overlapping. In the context of the JVM, calls to methods on an object are serial if and only if there is a happens-before relationship between those calls. This is the case if they are called Synchronously[ref glossary], but when performed asynchronously coordination for Thread Safety[ref glossary] purposes is to be implemented using techniques such as, but not limited to, atomics, monitors, or locks.

As for 2.7, instead of

A Subscriber MUST ensure that all calls on its Subscription take place from the same thread or provide for respective external synchronization.

perhaps we can reword it to be:

A Subscriber MUST ensure that all calls on its Subscription's request and cancel methods are performed serially[ref to glossary].

and for 1.3 instead of:

onSubscribe, onNext, onError and onComplete signaled to a Subscriber MUST be signaled in a thread-safe manner—and if performed by multiple threads—use external synchronization.

it could be reworded to be:

onSubscribe, onNext, onError and onComplete signaled to a Subscriber MUST be signaled serially[ref glossary]

For the other readers: the intent of these changes is not to change anything semantically in the spec.
@reactive-streams/contributors Wdyt?

but when performed asynchronously coordination for Thread Safety[ref glossary] purposes is to be implemented using techniques such as, but not limited to, atomics, monitors, or locks.

I'm not keen on this bit, everything that needs to be said is said with more precision with the happens-before statement.
The 2.7 change looks good to me.
The 1.3 change is already in the PR but I'll add the glossary link.
Might be able to remove the use of term Thread Safe from the specs. 2.11 intent is only mention currently:

A Subscriber MUST make sure that all calls on its signal methods happen-before the processing of the respective signals. I.e. the Subscriber must take care of properly publishing the signal to its processing logic.
The intent of this rule is to establish that it is the responsibility of the Subscriber implementation to make sure that asynchronous processing of its signals are thread safe. See JMM definition of Happens-Before in section 17.4.5.

@davidmoten Since it is about a glossary entry, I think it is nice to have an explanation that mentions thread satefy. Although happens-before is a good term, I think the added sentence provides more clarity. Or?
@reactive-streams/contributors Thoughts?

@viktorklang Perhaps this:

but when performed asynchronously coordination to establish the happens-before relationship is to be implemented using techniques such as, but not limited to, atomics, monitors, or locks.

@davidmoten
That might be enough. I took the liberty to insert an extra comma for an in my opinion easier read:

but when performed asynchronously, coordination to establish the happens-before relationship is to be implemented using techniques such as, but not limited to, atomics, monitors, or locks.

To be pedantic, the happens-before characterization: "calls to methods on an object are serial if and only if there is a happens-before relationship between those calls." should add: "and they are not overlapping"

@DougLea That's a great point, I always assume non-overlapping so it is good to spell it out!

Thanks @DougLea, I am after precision. The JVM specification talks about happens-before relationships between actions rather than calls. I had assumed that a call (a synchronous method invocation) was equivalent to the action of the method so I'm not sure why to add the extra phrase "and they are not overlapping". Can you clarify?

@davidmoten The phrase is just intended to validate your assumption, in case there is any doubt.

@douglea beaut, let's include it

@davidmoten Let me know when this is ready for review! thank you ^^

@reactive-streams/contributors Any comments on this before I merge?

Thanks @davidmoten!


apiRoot

There is a bug in the generator creating new rest projects.
After the creation apiRoot in the config will be set as: '/api' which is already set under app.js
so express cannot find the right routes as /src/api/api doesn't exist...
reply for any further explanation...

(dunno how to label... ;/ )


capture stack trace after customizing prepareStackTrace

I have upgraded my application to node 7.8.0 and all of the sudden most of my tests run with mocha which use super-request started to fail with this stack trace:
     TypeError: stack[0].getFileName is not a function
      at defineConstructor.expect (node_modules/super-request/index.js:102:43)
      at Context.<anonymous> (api/multiplier/routes_tests.js:87:10)

I tried a few 7.x versions including the first 7.0.0 and they all gave same error. Once I switched to 6.10.2 (also tried with 6.5.0 and the app was running fine prior on some 5.x version) the error disappeared and the tests started to pass with no errors thrown.
By debugging the super-request node_module I found out that on node versions 7.x the customized Error.prepareStackTrace method is not called at all. This means that instead of having an array of CallSite objects assigned to dummyObject.stack it contains a string (with a stack).
I have narrowed down the scope of the problem and created a little stack.js node script:
var dummyObject = {};
Error.captureStackTrace(dummyObject);
var v8Handler = Error.prepareStackTrace;
Error.prepareStackTrace = function (dummyObject, v8StackTrace) {
  console.log('returning v8stacktrace');
  return v8StackTrace;
};
var stack = dummyObject.stack;
console.log(stack);
Error.prepareStackTrace = v8Handler;

Console loging dummyObject.stack will give us
in node 6.x:
[ CallSite {},
  CallSite {},
  CallSite {},
  CallSite {},
  CallSite {},
  CallSite {},
  CallSite {},
  CallSite {},
  CallSite {},
  CallSite {} ]

in node 7.x
Error
    at Object.<anonymous> (/Users/jedrek/stack.js:2:7)
    at Module._compile (module.js:573:32)
    at Object.Module._extensions..js (module.js:582:10)
    at Module.load (module.js:490:32)
    at tryModuleLoad (module.js:449:12)
    at Function.Module._load (module.js:441:3)
    at Module.runMain (module.js:607:10)
    at run (bootstrap_node.js:382:7)
    at startup (bootstrap_node.js:137:9)
    at bootstrap_node.js:497:3

Moving Error.captureStackTrace(dummyObject); after Error.prepareStackTrace = function(...  in a simillar fashion as in this PR fixes the problem for node 7.x  and we get an array of CallSite objects again since our prepareStackTrace custom method is invoked again.
I did not do much research on why is that - if I understood correctly the prepareStackTrace method was called when the stack property was accessed and now it is simply called  when we invoke captureStackTrace. I might be wrong here though so feel free to correct me. This way or the other please have a look at the solution proposed for the 7.x node version.

published under v1.2.0


Latest version of the dependencies not added here yet

Hi @czosel,
Currently in ember-validated-form we do not have the facility to use nested models, as ember-changeset didn't have. But few days back, ember-changeset has updated their package with this one merged to their code. Can you please update your ember-changeset version so that I will be able to utilize this in my application? Also, please update README with the how-tos as well. Thank you :)

Hi @g8anusha,
wow, that's awesome! I definitely agree that we should update to the new version.
I probably won't find time in the next couple of days to do this - if you do, i'd be happy to look at your PR 😉

see #74

Hi @g8anusha, we just updated to the latest versions of ember-changeset, and ember-changeset-validations. I didn't manage to get nested validations to work yet though, as this still seems to be an open issue in ember-changeset-validations. Let's leave your issue open until this is fixed and we have documentation for nested keys support.

@czosel heads up https://github.com/poteto/ember-changeset/issues/256

@nmccready thanks for letting me know - i'll make a release containing #76 tomorrow.


once_cell Build Error

In updating my bot to the latest versions of dependencies, I encountered a build error with Poise:
error[E0433]: failed to resolve: could not find `sync` in `once_cell`
  --> C:\Users\Zacc\.cargo\git\checkouts\poise-2ca7e75d46548da7\e94eb68\src\framework\mod.rs:14:27
   |
14 |     user_data: once_cell::sync::OnceCell<U>,
   |                           ^^^^ could not find `sync` in `once_cell`

error[E0433]: failed to resolve: could not find `sync` in `once_cell`
  --> C:\Users\Zacc\.cargo\git\checkouts\poise-2ca7e75d46548da7\e94eb68\src\framework\mod.rs:76:41
   |
76 |             user_data: once_cell::sync::OnceCell::new(),
   |                                         ^^^^^^^^ not found in `once_cell::sync`
   |
help: consider importing one of these items
   |
6  | use core::lazy::OnceCell;
   |
6  | use once_cell::unsync::OnceCell;
   |
6  | use std::lazy::OnceCell;
   |
6  | use tokio::sync::OnceCell;
   |

I'm almost certain it's because of commit 9243918b8523a9ff5c126f4ff6d33903c6d30c9e, which removed the default features for dependencies and therefore removed the std feature in once_cell.
I've tested this in a blank new project and the sync module is not available without the std feature.
Thank you for your work on this framework.

Oh man, thanks for catching this
I thought the Cargo.toml change was fine because CI passed and my bots compiled, but it seems like it only worked because rustls has a transitive dependency on once_cell with std feature enabled. So only with a non-rustls backend does this occur

No problem, thanks for fixing it quickly.
I was wondering why the CI checks passed - it had me concerned it was a problem on my end somewhere.

Yeah I'm currently working on testing native TLS in CI, so that this doesn't happen again. I'd like to wait with the fix until that is done to make sure the new CI can actually catch this build error.
It will take a way because yaml is awful and GHA is finnicky (you have to wait out the entire compilation process every time you make a change, including Rust toolchain + crates.io index + crates download...), I hope this is not too big of an issue for you

Yeah, I know how painful CI config changes are; I went through a similar thing with Travis CI, so I think it's just a general problem.
It's not a huge issue by any means. I didn't update for a particular reason - it was just to keep things up to date - so I'll just hold off on updating until things get resolved.
Worst case, I'll fork the repo temporarily and use the fix there until it's implemented upstream, so there's no rush.

I do wonder how the build managed to break for you
The openssl crate, which is used with native TLS, unconditionally depends on once_cell with default features, i.e. including the std feature (link). That's probably why I cannot reproduce the build error in CI.
I think I will just fix the Cargo.toml and hope that your issue doesn't occur again, whatever it was caused by

I don't see any mention of the openssl crate in my cargo tree output: radium-cargo-tree.txt
If you want to see the issue for yourself, my repo is public and you just have to run a cargo update in it to see the problem: https://github.com/zedseven/radium
(if you push a fix to the master branch of Poise, you might need to set the commit manually in the Cargo.lock to reproduce the problem)

Ohh, I was mistaken and your project does actually use rustls. But rustls's transitive dependency on once_cell is only active on Unix-like systems, so I assume you're building on Windows.
Case closed then, thanks for debugging with me :smile:
Issue should be fixed in 8194e079e2189c5970943908b48728a974c0b9d8 btw

Ah, that makes sense. Yes, unfortunately for now my dev environment is still Windows.
No problem! Thank you for being so quick to fix it and thank you again for making such a great bot framework.


VS Code don't save large CSS file

VSCode Version: Code 1.6.1 (9e4e44c19e393803e2b05fe2323cf4ed7e36880e, 2016-10-13T16:21:53.542Z)
OS Version: Windows_NT ia32 10.0.10586
Extensions: alefragnani.project-manager-0.10.0, HookyQR.minify-0.2.5, ms-vscode.Theme-1337-0.1.2

Steps to Reproduce:

Create a CSS file that have more than 4000 lines of code uncompressed
try to save the file.

Error

I wonder if this issue is being caused by an installed extension. Can you try to run VS Code without extensions? From the command line, execute: code --disable-extensions and try your steps again to see if it reproduces. If you see it is an issue with the extension, please file it against the extension repository itself.

@zeeshanmulani ping

It's same

@zeeshanmulani are you able to attach the file for me to reproduce?

@zeeshanmulani and it still reproduces? can you share the file with me?

A number of days has past without answer on the questions asked. I am thereby going to close this issue to clean up our backlog of issues. Once you can answer on the questions, the issue can be reopened again. Thanks for understanding this process!


merge package from arlac77/npm-package-template

package.json

chore(package): add publishConfig from template

.travis.yml

chore(travis): remove node versions 10.2.1
chore(travis): add node versions 10.3

:tada: This PR is included in version 2.19.17 :tada:
The release is available on:

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


Update header design and navigation

What are the relevant tickets?
Partially completes https://github.com/mitodl/hq/issues/2559
Description (What does it do?)

Change the anonymous header to use hamburger menu
Add Catalog link to the anonymous desktop header
Adds Catalog link to the dropdown navigation

How can this be tested?
Checkout the header in desktop, mobile, anonymous, authenticated views. Make sure the navigation works.
Screenshots (if appropriate):
Mobile View:

Desktop:

@annagav Two things only

Mobile links should be "white" not red - See Attachment 1
The catalog link should be outside of the profile menu, as you already did in one of the screenshots above - See attachment 2

After addressing Bilal's feedback:


Corrected invalid links causing build warnings

PR Summary
Corrected invalid links that were causing build warnings.
PR Checklist

[x] Descriptive Title: This PR's title is a synopsis of the changes it proposes.
[x] Summary: This PR's summary describes the scope and intent of the change.
[x] Contributor's Guide: I have read the contributors guide.
[x] Style: This PR adheres to the style guide.

Learn Build status updates of commit adb2b28:
:warning: Validation status: warnings

File
Status
Preview URL
Details

azps-9.0.0/Az.Advisor/Get-AzAdvisorRecommendation.md
:warning:Warning
View (azps-9.0.0)
Details

azps-9.0.1/Az.Advisor/Get-AzAdvisorRecommendation.md
:warning:Warning
View (azps-9.0.1)
Details

azps-9.0.0/Az.Monitor/Add-AzMetricAlertRule.md
:white_check_mark:Succeeded
View (azps-9.0.0)

azps-9.0.0/Az.Monitor/Add-AzWebtestAlertRule.md
:white_check_mark:Succeeded
View (azps-9.0.0)

azps-9.0.0/Az.Monitor/Get-AzAutoscaleHistory.md
:white_check_mark:Succeeded
View (azps-9.0.0)

azps-9.0.0/Az.Monitor/New-AzAlertRuleWebhook.md
:white_check_mark:Succeeded
View (azps-9.0.0)

azps-9.0.1/Az.Monitor/Add-AzMetricAlertRule.md
:white_check_mark:Succeeded
View (azps-9.0.1)

azps-9.0.1/Az.Monitor/Add-AzWebtestAlertRule.md
:white_check_mark:Succeeded
View (azps-9.0.1)

azps-9.0.1/Az.Monitor/Get-AzAutoscaleHistory.md
:white_check_mark:Succeeded
View (azps-9.0.1)

azps-9.0.1/Az.Monitor/New-AzAlertRuleWebhook.md
:white_check_mark:Succeeded
View (azps-9.0.1)

azps-9.0.0/Az.Advisor/Get-AzAdvisorRecommendation.md

Line 0, Column 0: [Warning: bookmark-not-found] Cannot find bookmark '#-category' in 'azps-9.0.0/Az.Advisor/Get-AzAdvisorRecommendation.yml'.

azps-9.0.1/Az.Advisor/Get-AzAdvisorRecommendation.md

Line 0, Column 0: [Warning: bookmark-not-found] Cannot find bookmark '#-category' in 'azps-9.0.1/Az.Advisor/Get-AzAdvisorRecommendation.yml'.

For more details, please refer to the build report.
If you see build warnings/errors with permission issues, it might be due to single sign-on (SSO) enabled on Microsoft's GitHub organizations. Please follow instructions here to re-authorize your GitHub account to Learn Build.
Note: Broken links written as relative paths are included in the above build report. For broken links written as absolute paths or external URLs, see the broken link report.
Note: Your PR may contain errors or warnings or suggestions unrelated to the files you changed. This happens when external dependencies like GitHub alias, Microsoft alias, cross repo links are updated. Please use these instructions to resolve them.
For any questions, please:Try searching the learn.microsoft.com contributor guidesPost your question in the Learn support channel


optimize dashboard UI and remove mui

Description

optimize edit UI
replace Mui with Antd
fix sql highlight and sql Syntax prompt
fix bug dashboard first chat not show content
Layout switching
Data table sidebar shrinks

How Has This Been Tested?
View dashboard sql Edit and UI
dashboard preview to chat
Snapshots:

Light

Dark

Checklist:

[x] My code follows the style guidelines of this project
[x] I have already rebased the commits and make the commit message conform to the project standard.
[x] I have performed a self-review of my own code
[x] I have commented my code, particularly in hard-to-understand areas
[x] I have made corresponding changes to the documentation
[x] Any dependent changes have been merged and published in downstream modules

No Data shows.

Test Success


Joint state publisher and tf bridging demo

🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸
🎉 New feature
Summary
This PR adds a demo showing how to bridge ignition::msgs::Pose_V from ignition to tf2_msgs/msg/TFMessage and use that to visualize a robot in rviz.
Test it
Execute : ros2 launch ros_ign_gazebo_demos tf_bridge.launch.py

Checklist

[x] Signed all commits for DCO
[ ] Added tests
[x] Added example and/or tutorial
[ ] Updated documentation (as needed)
[ ] Updated migration guide (as needed)
[ ] codecheck passed (See contributing)
[ ] All tests passed (See test coverage)
[ ] While waiting for a review on your PR, please help review another open pull request to support the maintainers

Note to maintainers: Remember to use Squash-Merge and edit the commit message to match the pull request summary while retaining Signed-off-by messages.
🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸

The failure in test_ros_subscriber is unrelated to this PR


fix: dynamic reload cni default config

Signed-off-by: zhuangqh<EMAIL_ADDRESS>
Ⅰ. Describe what this PR did
related to https://github.com/alibaba/ocicni/pull/2
Ⅱ. Does this pull request fix one issue?

Ⅲ. Why don't you add test cases (unit test/integration test)? (你真的觉得不需要加测试吗？)
Ⅳ. Describe how to verify it
Ⅴ. Special notes for reviews

LGTM


LUN-209: No internet connection

This pull request belongs to an issue on our bugtracker.
You can find it there by looking for an issue with the key which is mentioned in the title of this pull request.
It starts with the keyword LUN.

As we do not have designs for other errors, it is completely fine to use this also for other errors yes.