Logs don't show mutations that weren't covered by tests

Unless I'm completely inept, I can't find anywhere in the logs that shows what mutations were performed that the tests did not catch.
I'm seeing a list of mutations that were killed, as well as those that caused fatal errors, but nowhere can I find the ones that didn't cause a test to fail. Naturally these are the ones I'm most interested in! :)
How can I see what mutations were performed that did not cause a failing test?
Here's the log that was generated, says 6 "notests" but no details about them:
{
    "summary": {
        "total": 35,
        "kills": 24,
        "escapes": 0,
        "errors": 5,
        "timeouts": 0,
        "notests": 6,
        "covered_score": 100,
        "combined_score": 83,
        "mutation_coverage": 83
    },
    "escaped": [],
    "errored": [
        {
            "file": "src\/Relationship\/HasMany.php",
            "mutator": "\\Humbug\\Mutator\\ReturnValue\\This",
            "class": "\\AdamWathan\\Faktory\\Relationship\\HasMany",
            "method": "quantity",
            "line": 26,
            "diff": "--- Original\n+++ New\n@@ @@\n         $this->quantity = $quantity;\n-        return $this;\n+        return null;\n     }\n }\n \n",
            "stdout": "",
            "stderr": "PHP Fatal error:  Call to a member function attributes() on null in \/home\/vagrant\/Code\/Personal\/faktory\/tests\/FaktoryCreateTest.php on line 395",
            "tests": [
                "FaktoryTest",
                "FaktoryCreateTest"
            ]
        },
        {
            "file": "src\/Relationship\/Relationship.php",
            "mutator": "\\Humbug\\Mutator\\ReturnValue\\This",
            "class": "\\AdamWathan\\Faktory\\Relationship\\Relationship",
            "method": "foreignKey",
            "line": 21,
            "diff": "--- Original\n+++ New\n@@ @@\n         $this->foreign_key = $key;\n-        return $this;\n+        return null;\n     }\n \n     public function getForeignKey()\n     {\n         if (! is_null($this->foreign_key)) {\n             return $this->foreign_key;",
            "stdout": "",
            "stderr": "PHP Fatal error:  Call to a member function attributes() on null in \/home\/vagrant\/Code\/Personal\/faktory\/tests\/FaktoryCreateTest.php on line 583",
            "tests": {
                "0": "FaktoryCreateTest",
                "3": "BelongsToTest",
                "4": "RelationshipTest"
            }
        },
        {
            "file": "src\/Relationship\/Relationship.php",
            "mutator": "\\Humbug\\Mutator\\ReturnValue\\This",
            "class": "\\AdamWathan\\Faktory\\Relationship\\Relationship",
            "method": "attributes",
            "line": 61,
            "diff": "--- Original\n+++ New\n@@ @@\n         $this->attributes = array_merge($this->attributes, $attributes);\n-        return $this;\n+        return null;\n     }\n \n     public function __set($key, $value)\n     {\n         $this->attributes[$key] = $value;\n     }",
            "stdout": "",
            "stderr": "PHP Fatal error:  Call to a member function quantity() on null in \/home\/vagrant\/Code\/Personal\/faktory\/tests\/FaktoryCreateTest.php on line 406",
            "tests": {
                "0": "FaktoryTest",
                "2": "FaktoryCreateTest"
            }
        },
        {
            "file": "src\/Strategy\/Build.php",
            "mutator": "\\Humbug\\Mutator\\Boolean\\LogicalNot",
            "class": "\\AdamWathan\\Faktory\\Strategy\\Build",
            "method": "buildRelationships",
            "line": 20,
            "diff": "--- Original\n+++ New\n@@ @@\n         foreach ($this->attributes as $attribute => $value) {\n-            if (! $value instanceof Relationship) {\n+            if ( $value instanceof Relationship) {\n                 continue;\n             }\n             $relationship = $this->buildRelationship($value);\n             $this->setAttribute($attribute, $relationship);\n         }\n     }",
            "stdout": "",
            "stderr": "PHP Fatal error:  Call to a member function build() on string in \/home\/vagrant\/Code\/Personal\/faktory\/src\/Strategy\/Build.php on line 30",
            "tests": [
                "FaktoryTest"
            ]
        },
        {
            "file": "src\/Strategy\/Strategy.php",
            "mutator": "\\Humbug\\Mutator\\ReturnValue\\NewObject",
            "class": "\\AdamWathan\\Faktory\\Strategy\\Strategy",
            "method": "make",
            "line": 17,
            "diff": "--- Original\n+++ New\n@@ @@\n     {\n-        return new static($model, $sequence);\n+        new static($model, $sequence); return null;\n     }\n \n     public function attributes($attributes)\n     {\n         $this->attributes = $attributes;\n     }",
            "stdout": "",
            "stderr": "PHP Fatal error:  Call to a member function attributes() on null in \/home\/vagrant\/Code\/Personal\/faktory\/src\/Factory\/Factory.php on line 74",
            "tests": {
                "0": "FaktoryTest",
                "26": "FaktoryCreateTest"
            }
        }
    ],
    "timeouts": [],
    "killed": [
        {
            "file": "src\/Factory\/Factory.php",
            "mutator": "\\Humbug\\Mutator\\ReturnValue\\NewObject",
            "class": "\\AdamWathan\\Faktory\\Factory\\Factory",
            "method": "make",
            "line": 24,
            "diff": "--- Original\n+++ New\n@@ @@\n     {\n-        return new static($model, $factory_repository);\n+        new static($model, $factory_repository); return null;\n     }\n \n     public function getModel()\n     {\n         return $this->model;\n     }",
            "stdout": "",
            "stderr": "",
            "tests": {
                "0": "FaktoryTest",
                "26": "FaktoryCreateTest"
            }
        },
        {
            "file": "src\/Factory\/Factory.php",
            "mutator": "\\Humbug\\Mutator\\Increment\\Increment",
            "class": "\\AdamWathan\\Faktory\\Factory\\Factory",
            "method": "newInstance",
            "line": 76,
            "diff": "--- Original\n+++ New\n@@ @@\n         $instance = $strategy->newInstance();\n-        $this->sequence++;\n+        $this->sequence--;\n         return $instance;\n     }\n \n     protected function mergeAttributes($override_attributes)\n     {\n         if (is_callable($override_attributes)) {",
            "stdout": "",
            "stderr": "",
            "tests": {
                "0": "FaktoryTest",
                "26": "FaktoryCreateTest"
            }
        },
        {
            "file": "src\/Factory\/Factory.php",
            "mutator": "\\Humbug\\Mutator\\ReturnValue\\FunctionCall",
            "class": "\\AdamWathan\\Faktory\\Factory\\Factory",
            "method": "mergeAttributes",
            "line": 85,
            "diff": "--- Original\n+++ New\n@@ @@\n         }\n-        return array_merge($this->attributes, $override_attributes);\n+        array_merge($this->attributes, $override_attributes); return null;\n     }\n \n     protected function getOverridesFromClosure($closure)\n     {\n         $that = clone $this;\n         $closure($that);",
            "stdout": "",
            "stderr": "",
            "tests": {
                "0": "FaktoryTest",
                "26": "FaktoryCreateTest"
            }
        },
        {
            "file": "src\/Factory\/Factory.php",
            "mutator": "\\Humbug\\Mutator\\Number\\Integer",
            "class": "\\AdamWathan\\Faktory\\Factory\\Factory",
            "method": "buildMany",
            "line": 100,
            "diff": "--- Original\n+++ New\n@@ @@\n             return $this->build($override_attributes[$i]);\n-        }, range(0, $count - 1));\n+        }, range(1, $count - 1));\n     }\n \n     protected function expandAttributesForList($attributes, $count)\n     {\n         return array_map(function ($i) use ($attributes) {\n             return $this->extractAttributesForIndex($i, $attributes);",
            "stdout": "",
            "stderr": "",
            "tests": [
                "FaktoryTest"
            ]
        },
        {
            "file": "src\/Factory\/Factory.php",
            "mutator": "\\Humbug\\Mutator\\Arithmetic\\Subtraction",
            "class": "\\AdamWathan\\Faktory\\Factory\\Factory",
            "method": "buildMany",
            "line": 100,
            "diff": "--- Original\n+++ New\n@@ @@\n             return $this->build($override_attributes[$i]);\n-        }, range(0, $count - 1));\n+        }, range(0, $count + 1));\n     }\n \n     protected function expandAttributesForList($attributes, $count)\n     {\n         return array_map(function ($i) use ($attributes) {\n             return $this->extractAttributesForIndex($i, $attributes);",
            "stdout": "",
            "stderr": "",
            "tests": [
                "FaktoryTest"
            ]
        },
        {
            "file": "src\/Factory\/Factory.php",
            "mutator": "\\Humbug\\Mutator\\Number\\Integer",
            "class": "\\AdamWathan\\Faktory\\Factory\\Factory",
            "method": "buildMany",
            "line": 100,
            "diff": "--- Original\n+++ New\n@@ @@\n             return $this->build($override_attributes[$i]);\n-        }, range(0, $count - 1));\n+        }, range(0, $count - 0));\n     }\n \n     protected function expandAttributesForList($attributes, $count)\n     {\n         return array_map(function ($i) use ($attributes) {\n             return $this->extractAttributesForIndex($i, $attributes);",
            "stdout": "",
            "stderr": "",
            "tests": [
                "FaktoryTest"
            ]
        },
        {
            "file": "src\/Factory\/Factory.php",
            "mutator": "\\Humbug\\Mutator\\Number\\Integer",
            "class": "\\AdamWathan\\Faktory\\Factory\\Factory",
            "method": "expandAttributesForList",
            "line": 107,
            "diff": "--- Original\n+++ New\n@@ @@\n             return $this->extractAttributesForIndex($i, $attributes);\n-        }, range(0, $count - 1));\n+        }, range(1, $count - 1));\n     }\n \n     protected function extractAttributesForIndex($i, $attributes)\n     {\n         return array_map(function ($value) use ($i) {\n             return is_array($value) ? $value[$i] : $value;",
            "stdout": "",
            "stderr": "",
            "tests": {
                "0": "FaktoryTest",
                "6": "FaktoryCreateTest"
            }
        },
        {
            "file": "src\/Factory\/Factory.php",
            "mutator": "\\Humbug\\Mutator\\Arithmetic\\Subtraction",
            "class": "\\AdamWathan\\Faktory\\Factory\\Factory",
            "method": "expandAttributesForList",
            "line": 107,
            "diff": "--- Original\n+++ New\n@@ @@\n             return $this->extractAttributesForIndex($i, $attributes);\n-        }, range(0, $count - 1));\n+        }, range(0, $count + 1));\n     }\n \n     protected function extractAttributesForIndex($i, $attributes)\n     {\n         return array_map(function ($value) use ($i) {\n             return is_array($value) ? $value[$i] : $value;",
            "stdout": "",
            "stderr": "",
            "tests": {
                "0": "FaktoryTest",
                "6": "FaktoryCreateTest"
            }
        },
        {
            "file": "src\/Factory\/Factory.php",
            "mutator": "\\Humbug\\Mutator\\Number\\Integer",
            "class": "\\AdamWathan\\Faktory\\Factory\\Factory",
            "method": "expandAttributesForList",
            "line": 107,
            "diff": "--- Original\n+++ New\n@@ @@\n             return $this->extractAttributesForIndex($i, $attributes);\n-        }, range(0, $count - 1));\n+        }, range(0, $count - 0));\n     }\n \n     protected function extractAttributesForIndex($i, $attributes)\n     {\n         return array_map(function ($value) use ($i) {\n             return is_array($value) ? $value[$i] : $value;",
            "stdout": "",
            "stderr": "",
            "tests": {
                "0": "FaktoryTest",
                "6": "FaktoryCreateTest"
            }
        },
        {
            "file": "src\/Factory\/Factory.php",
            "mutator": "\\Humbug\\Mutator\\ReturnValue\\FunctionCall",
            "class": "\\AdamWathan\\Faktory\\Factory\\Factory",
            "method": "extractAttributesForIndex",
            "line": 113,
            "diff": "--- Original\n+++ New\n@@ @@\n         return array_map(function ($value) use ($i) {\n-            return is_array($value) ? $value[$i] : $value;\n+            is_array($value) ? $value[$i] : $value; return null;\n         }, $attributes);\n     }\n \n     public function createMany($count, $override_attributes)\n     {\n         $override_attributes = $this->expandAttributesForList($override_attributes, $count);",
            "stdout": "",
            "stderr": "",
            "tests": {
                "0": "FaktoryTest",
                "3": "FaktoryCreateTest"
            }
        },
        {
            "file": "src\/Factory\/Factory.php",
            "mutator": "\\Humbug\\Mutator\\Number\\Integer",
            "class": "\\AdamWathan\\Faktory\\Factory\\Factory",
            "method": "createMany",
            "line": 122,
            "diff": "--- Original\n+++ New\n@@ @@\n             return $this->create($override_attributes[$i]);\n-        }, range(0, $count - 1));\n+        }, range(1, $count - 1));\n     }\n \n     public function define($name, $definitionCallback)\n     {\n         $callback = function ($f) use ($definitionCallback) {\n             $f->setAttributes($this->attributes);",
            "stdout": "",
            "stderr": "",
            "tests": [
                "FaktoryCreateTest"
            ]
        },
        {
            "file": "src\/Factory\/Factory.php",
            "mutator": "\\Humbug\\Mutator\\Arithmetic\\Subtraction",
            "class": "\\AdamWathan\\Faktory\\Factory\\Factory",
            "method": "createMany",
            "line": 122,
            "diff": "--- Original\n+++ New\n@@ @@\n             return $this->create($override_attributes[$i]);\n-        }, range(0, $count - 1));\n+        }, range(0, $count + 1));\n     }\n \n     public function define($name, $definitionCallback)\n     {\n         $callback = function ($f) use ($definitionCallback) {\n             $f->setAttributes($this->attributes);",
            "stdout": "",
            "stderr": "",
            "tests": [
                "FaktoryCreateTest"
            ]
        },
        {
            "file": "src\/Factory\/Factory.php",
            "mutator": "\\Humbug\\Mutator\\Number\\Integer",
            "class": "\\AdamWathan\\Faktory\\Factory\\Factory",
            "method": "createMany",
            "line": 122,
            "diff": "--- Original\n+++ New\n@@ @@\n             return $this->create($override_attributes[$i]);\n-        }, range(0, $count - 1));\n+        }, range(0, $count - 0));\n     }\n \n     public function define($name, $definitionCallback)\n     {\n         $callback = function ($f) use ($definitionCallback) {\n             $f->setAttributes($this->attributes);",
            "stdout": "",
            "stderr": "",
            "tests": [
                "FaktoryCreateTest"
            ]
        },
        {
            "file": "src\/Factory\/Factory.php",
            "mutator": "\\Humbug\\Mutator\\ReturnValue\\NewObject",
            "class": "\\AdamWathan\\Faktory\\Factory\\Factory",
            "method": "belongsTo",
            "line": 137,
            "diff": "--- Original\n+++ New\n@@ @@\n         $factory = $this->factory_repository->getFactory($name);\n-        return new BelongsTo($this->model, $factory, $foreign_key, $attributes);\n+        new BelongsTo($this->model, $factory, $foreign_key, $attributes); return null;\n     }\n \n     public function hasMany($name, $count, $foreign_key = null, $attributes = [])\n     {\n         $factory = $this->factory_repository->getFactory($name);\n         return new HasMany($this->model, $factory, $count, $foreign_key, $attributes);",
            "stdout": "",
            "stderr": "",
            "tests": {
                "0": "FaktoryTest",
                "2": "FaktoryCreateTest"
            }
        },
        {
            "file": "src\/Factory\/Factory.php",
            "mutator": "\\Humbug\\Mutator\\ReturnValue\\NewObject",
            "class": "\\AdamWathan\\Faktory\\Factory\\Factory",
            "method": "hasMany",
            "line": 143,
            "diff": "--- Original\n+++ New\n@@ @@\n         $factory = $this->factory_repository->getFactory($name);\n-        return new HasMany($this->model, $factory, $count, $foreign_key, $attributes);\n+        new HasMany($this->model, $factory, $count, $foreign_key, $attributes); return null;\n     }\n \n     public function hasOne($name, $foreign_key = null, $attributes = [])\n     {\n         $factory = $this->factory_repository->getFactory($name);\n         return new HasOne($this->model, $factory, $foreign_key, $attributes);",
            "stdout": "",
            "stderr": "",
            "tests": {
                "0": "FaktoryTest",
                "2": "FaktoryCreateTest"
            }
        },
        {
            "file": "src\/Factory\/Factory.php",
            "mutator": "\\Humbug\\Mutator\\ReturnValue\\NewObject",
            "class": "\\AdamWathan\\Faktory\\Factory\\Factory",
            "method": "hasOne",
            "line": 149,
            "diff": "--- Original\n+++ New\n@@ @@\n         $factory = $this->factory_repository->getFactory($name);\n-        return new HasOne($this->model, $factory, $foreign_key, $attributes);\n+        new HasOne($this->model, $factory, $foreign_key, $attributes); return null;\n     }\n }\n \n",
            "stdout": "",
            "stderr": "",
            "tests": {
                "0": "FaktoryTest",
                "3": "FaktoryCreateTest"
            }
        },
        {
            "file": "src\/Factory\/FactoryProxy.php",
            "mutator": "\\Humbug\\Mutator\\Boolean\\LogicalNot",
            "class": "\\AdamWathan\\Faktory\\Factory\\FactoryProxy",
            "method": "getInstance",
            "line": 15,
            "diff": "--- Original\n+++ New\n@@ @@\n     {\n-        if (! isset($this->instance)) {\n+        if ( isset($this->instance)) {\n             $this->instance = $this->factory_loader->__invoke();\n         }\n         return $this->instance;\n     }\n \n     public function __call($method, $parameters)",
            "stdout": "",
            "stderr": "",
            "tests": {
                "0": "FaktoryTest",
                "27": "FaktoryCreateTest"
            }
        },
        {
            "file": "src\/Factory\/FactoryProxy.php",
            "mutator": "\\Humbug\\Mutator\\ReturnValue\\FunctionCall",
            "class": "\\AdamWathan\\Faktory\\Factory\\FactoryProxy",
            "method": "__call",
            "line": 24,
            "diff": "--- Original\n+++ New\n@@ @@\n         $instance = $this->getInstance();\n-        return call_user_func_array([$instance, $method], $parameters);\n+        call_user_func_array([$instance, $method], $parameters); return null;\n     }\n }\n \n",
            "stdout": "",
            "stderr": "",
            "tests": {
                "0": "FaktoryTest",
                "26": "FaktoryCreateTest"
            }
        },
        {
            "file": "src\/Faktory.php",
            "mutator": "\\Humbug\\Mutator\\Boolean\\LogicalNot",
            "class": "\\AdamWathan\\Faktory\\Faktory",
            "method": "fetchFactory",
            "line": 62,
            "diff": "--- Original\n+++ New\n@@ @@\n     {\n-        if (! isset($this->factories[$name])) {\n+        if ( isset($this->factories[$name])) {\n             throw new FactoryNotRegisteredException(\"'{$name}' is not a registered factory.\");\n         }\n         return $this->factories[$name];\n     }\n }\n ",
            "stdout": "",
            "stderr": "",
            "tests": {
                "0": "FaktoryTest",
                "27": "FaktoryCreateTest"
            }
        },
        {
            "file": "src\/Relationship\/Relationship.php",
            "mutator": "\\Humbug\\Mutator\\Boolean\\LogicalNot",
            "class": "\\AdamWathan\\Faktory\\Relationship\\Relationship",
            "method": "getForeignKey",
            "line": 26,
            "diff": "--- Original\n+++ New\n@@ @@\n     {\n-        if (! is_null($this->foreign_key)) {\n+        if ( is_null($this->foreign_key)) {\n             return $this->foreign_key;\n         }\n         return $this->guessForeignKey();\n     }\n \n     protected function guessForeignKey()",
            "stdout": "",
            "stderr": "",
            "tests": {
                "0": "FaktoryCreateTest",
                "24": "BelongsToTest",
                "28": "RelationshipTest"
            }
        },
        {
            "file": "src\/Relationship\/Relationship.php",
            "mutator": "\\Humbug\\Mutator\\ReturnValue\\FunctionCall",
            "class": "\\AdamWathan\\Faktory\\Relationship\\Relationship",
            "method": "snakeCase",
            "line": 39,
            "diff": "--- Original\n+++ New\n@@ @@\n     {\n-        return ctype_lower($value) ? $value : strtolower(preg_replace('\/(.)([A-Z])\/', '$1_$2', $value));\n+        ctype_lower($value) ? $value : strtolower(preg_replace('\/(.)([A-Z])\/', '$1_$2', $value)); return null;\n     }\n \n     protected function relatedModelBase()\n     {\n         return $this->extractClassBase($this->getRelatedModel());\n     }",
            "stdout": "",
            "stderr": "",
            "tests": {
                "0": "FaktoryCreateTest",
                "4": "BelongsToTest",
                "6": "RelationshipTest"
            }
        },
        {
            "file": "src\/Relationship\/Relationship.php",
            "mutator": "\\Humbug\\Mutator\\ReturnValue\\FunctionCall",
            "class": "\\AdamWathan\\Faktory\\Relationship\\Relationship",
            "method": "extractClassBase",
            "line": 55,
            "diff": "--- Original\n+++ New\n@@ @@\n         $class_pieces = explode('\\\\', $class);\n-        return array_pop($class_pieces);\n+        array_pop($class_pieces); return null;\n     }\n \n     public function attributes($attributes)\n     {\n         $this->attributes = array_merge($this->attributes, $attributes);\n         return $this;",
            "stdout": "",
            "stderr": "",
            "tests": {
                "0": "FaktoryCreateTest",
                "4": "BelongsToTest",
                "6": "RelationshipTest"
            }
        },
        {
            "file": "src\/Strategy\/Create.php",
            "mutator": "\\Humbug\\Mutator\\Boolean\\LogicalNot",
            "class": "\\AdamWathan\\Faktory\\Strategy\\Create",
            "method": "independentAttributes",
            "line": 43,
            "diff": "--- Original\n+++ New\n@@ @@\n         foreach ($this->attributes as $attribute => $value) {\n-            if (! $value instanceof Relationship) {\n+            if ( $value instanceof Relationship) {\n                 $result[$attribute] = $value;\n             }\n         }\n         return $result;\n     }\n ",
            "stdout": "",
            "stderr": "",
            "tests": [
                "FaktoryCreateTest"
            ]
        },
        {
            "file": "src\/Strategy\/Strategy.php",
            "mutator": "\\Humbug\\Mutator\\ReturnValue\\NewObject",
            "class": "\\AdamWathan\\Faktory\\Strategy\\Strategy",
            "method": "newModel",
            "line": 27,
            "diff": "--- Original\n+++ New\n@@ @@\n     {\n-        return new $this->model;\n+        new $this->model; return null;\n     }\n \n     protected function setAttribute($attribute, $value)\n     {\n         $this->attributes[$attribute] = $value;\n     }",
            "stdout": "",
            "stderr": "",
            "tests": {
                "0": "FaktoryTest",
                "26": "FaktoryCreateTest"
            }
        }
    ]
}

@adamwathan Mutations occurring on lines which are not covered by tests are not logged. The reasoning is very simple, the mutations have no value. There is no tests to examine, so they always escape.
The corrective action is to improve code coverage first (ensure tests execute more lines), and then Mutation Testing can throw more mutations at the covering tests. It's a case of Humbug not replacing Code Coverage (which is good at measuring execution where it needs no replacing) and focusing on the complementary role of improving the effectiveness if tests which do actually exist.

@padraic Ah thank you, makes sense! Still learning all this stuff.
If you don't mine, what's the best way to make sense of the clover.xml coverage file? Having a hard time gleaning much useful info from it on it's own.

Figured out how to generate the HTML coverage view from PHPUnit, all good now :) Thanks!

No problem ;)

@padraic: Well, if "Mutations occurring on lines which are not covered ... have no value", why humbug mutate these lines? I have similar problem like @adamwathan : I would like to see which lines in not covered classes were mutate or I want to tell humbug not to mutate these uncovered classes.

I definitely agree with @lulco that it would still be fantastic for Humbug to say "Hey I made these changes and none of your tests broke!", even if the uncovered lines could be discovered through standard coverage tools :+1: Just an opinion though, it's an excellent and useful tool either way!

@lulco Technically we don't mutate uncovered lines, Humbug just notes that they aren't covered by tests and throws a NoCoveringTestsException which is caught afterwards and has that line (or even file) marked as skipped. We do check if mutations are possible for that line, the number of possible mutations adding to the total mutations for use in reporting.
@adamwathan We could do some minimal reporting, but we also can't replicate PHP_CodeCoverage ;). If we limited it to file and line reporting as part of the logs, or even a separate log, I could go with that. It would still be a cruder approach than Code Coverage, but it may well be sufficient and have value. Knowing which uncovered files/lines have the greatest number of possible mutations can allow you to cherry pick where to target new covering tests.

Yeah coming back to this again, to me the biggest value of a mutation testing tool is "Hey I changed these lines and nothing broke, you better write tests to cover these lines."
If there's any way to report those mutations through humbug it would be really great; it's a really slow feedback loop to generate code coverage, look for random uncovered lines (which may or may not be the ones that humbug could mutate), run humbug again hoping I covered the right things, and finally see now that there are no mutations that weren't covered.
It would be a much better feedback loop to actually see what mutations it could perform that aren't covered, and decide if those mutations are worth covering or not. Otherwise you're completely blind in trying to fix them, at least that's how it feels to me :/
Excellent tool regardless Hopefully doesn't sound like I'm complaining, just excited about the possibilities and would love for it to do a little more :) Thanks again @padraic!

@adamwathan By all means, do complain ;). If nobody complains, then I'll just assume I should stop developing this monster since it's finished :laughing:
Humbug is three months old, and it's not going to be fully fleshed out until all possible utility has been wrung out of it. If this is a feedback loop you think would be useful, then I'm open to making it possible, likely in a separate log but with all the mutation diffs intact.

:+1:

@adamwathan @padraic I just create PR #164 for this issue, please check if it is OK

Closing on basis of #164 which I've merged.


Strutil: HammingDistance func

The Hamming distance is the number of positions at which the corresponding symbols are different

Codecov Report
All modified and coverable lines are covered by tests :white_check_mark:

Project coverage is 79.76%. Comparing base (7a98c43) to head (4e515e9).

:exclamation: Your organization needs to install the Codecov GitHub app to enable full functionality.
Additional details and impacted files
@@            Coverage Diff             @@
##             main     #197      +/-   ##
==========================================
+ Coverage   79.74%   79.76%   +0.02%
==========================================
  Files          65       65
  Lines        7424     7434      +10
==========================================
+ Hits         5920     5930      +10
  Misses       1136     1136
  Partials      368      368

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.

@duke-git Please review. Do you believe we should merge this no breaking change into rc or main?

@duke-git Please review. Do you believe we should merge this no breaking change into rc or main?

@donutloop, yes, please merge this PR to rc branch. main branch is frozen, won't accept PR again.

@duke-git Please review. Do you believe we should merge this no breaking change into rc or main?

@donutloop, yes, please merge this PR to rc branch. main branch is frozen, won't accept PR again.

@duke-git
Updated branch


Create an issue template for joining the Kubeflow GitHub org.

also turn on the stale probot

Related to kubeflow/community#55

This change is

/assign @abhi-g


Add Lace to showcases

👋 Hello there! Welcome. Please follow the steps below to tell us about your contribution.

Please complete a Checklist
Fill in all sections of the template
Click "Create pull request"

Checklist
<-- Please fill the boxes with [x] before submitting a pull request -->

[x] I have read the How to Contribute.
[x] I have read the Showcase Requirements
[x] I have run yarn build after adding my changes without getting any errors.

Showcase addition
<-- Provide information for every bullet in the list below. The tags you select must match the tags in your changes to the showcase.js  -->

Title: Lace
Description: A new light wallet platform from IOG, the creators of Cardano. Manually verified by an independent auditor, Lace lets you quickly, easily, and securely manage your digital assets and enjoy Web3.
Website:   lace
Source: -
Tags:

nftsupport
wallet

This one should be correct! :) Resolves conflicts from #1020


Build Issues

when building using Amber, these errors come up.

Here is the code editor on the file which has the errors.

Thanks!

Thank you for the bug report. I think that this is because you are compiling for iOS and we previously have only compiled for macOS. It seems that Foundation for macOS includes AffineTransform and Foundation for iOS does not. We are now going through and removing all Foundation classes that are only on macOS so that iOS compilation will work. So hopefully we will have a commit soon fixing iOS compilation.


setup-java v2

https://github.com/actions/setup-java/blob/main/README.md

Hey, thank you! I think we rather want to use Adopt OpenJDK than Zulu. Can you please change that before we merge?

Hey, thank you! I think we rather want to use Adopt OpenJDK than Zulu. Can you please change that before we merge?

Done.

Thank you!

As this isn't working, I'm closing it now.


otherDepends configuration does not support glob patterns

We are using the otherDepends configuration entry to work around the fact that changes in imported schema files are not detected by the plugin's Up-To-Date check as described at https://github.com/highsource/maven-jaxb2-plugin/wiki/Up-To-Date-Checks#limitations.
The configuration cheat sheet at https://github.com/highsource/maven-jaxb2-plugin/wiki/Configuration-Cheat-Sheet and tag name <pattern> suggest that glob patterns are supported but they do not work. The following configuration:
<otherDepends>
  <pattern>src/main/resources/xsd/api/v1.0.0/*.xsd</pattern>
</otherDepends>

produces:
[ERROR] File [<PROJECT_DIR>/src/main/resources/xsd/api/v1.0.0/*.xsd] does not exist.

whereas this works:
<otherDepends>
  <pattern>src/main/resources/xsd/api/v1.0.0/api.xsd</pattern>
</otherDepends>

To make sure that even changes in imported schema files are recognized we would like to use a pattern like src/main/resources/xsd/**/*.xsd instead of listing every imported file individually.
Environment:
maven-jaxb2-plugin 0.13.1
Maven 3.0.5
Java 1.8.0_65

This should be fixed now. You can use:
							<otherDependsIncludes>
								<pattern>src/main/resources/*.xsd</pattern>
							</otherDependsIncludes>

Also otherDependsExcludes.
The old otherDepends setting will be marked deprecated and kept as is for backwards compatibility.


Update gatsby extension

Change terminology for preview/instance to site and from preview to cloud

@davidfateh I've changed the package names back to preview and changed the font 👍


albert: 0.24.3 -> 0.25.0

Description of changes
https://github.com/albertlauncher/albert/compare/v0.24.3...v0.25.0
This release fixes the issue where users can no longer search for Application queries (possibly others) if they have fuzzy search toggled for it.
Also, changed the substitution for the plugins from sed to substituteInPlace, which means we don't have to manually check this anymore as it would fail if something goes wrong.
Things done

Built on platform(s)

[x] x86_64-linux
[ ] aarch64-linux
[ ] x86_64-darwin
[ ] aarch64-darwin

For non-Linux: Is sandboxing enabled in nix.conf? (See Nix manual)

[ ] sandbox = relaxed
[ ] sandbox = true

[ ] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[ ] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[x] Tested basic functionality of all binary files (usually in ./result/bin/)
24.11 Release Notes (or backporting 23.11 and 24.05 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module

[x] Fits CONTRIBUTING.md.

Add a :+1: reaction to pull requests you find important.

Result of nixpkgs-review pr 331719 run on x86_64-linux 1

1 package built:

albert

Perhaps this should be backported as this update does not seem to break functionality, yet it also fixes the Applications issue.

Result of nixpkgs-review pr 331719 run on aarch64-linux 1

1 package built:

albert


Disassembling switch-case statement implemented via subfunction

Is your feature request related to a problem? Please describe.
When I worked on disassemble of code compiled for ARM Cortex-M0 (thumb mode) with unidentified compiler, I found next function:
00015e6a    30 b4           push  {r4, r5}
00015e6c    74 46           mov   r4, lr
00015e6e    64 1e           subs  r4, r4, #1
00015e70    25 78           ldrb  r5, [r4, #0]
00015e72    64 1c           adds  r4, r4, #1
00015e74    ab 42           cmp   r3, r5
00015e76    00 d2           bcs.n 00015e7a
00015e78    1d 46           mov   r5, r3
00015e7a    63 5d           ldrb  r3, [r4, r5]
00015e7c    5b 00           lsls  r3, r3, #1
00015e7e    e3 18           adds  r3, r4, r3
00015e80    30 bc           pop   {r4, r5}
00015e82    18 47           bx    r3

It's called from lot of different addresses, for example:
0000129e    0b 00           movs  r3,command ;load intex to R3
000012a0    14 f0 e3 fd     bl    00015e6a   ;14 f0 e3 fd
000012a4    1c              db    1Ch        ;limit
000012a5    10              db    10h        ;00 000012c4
000012a6    27              db    27h        ;01 000012f2
000012a7    fc              db    FCh        ;02 0000149c
000012a8    fb              db    FBh        ;03 0000149a
000012a9    fa              db    FAh        ;04 00001498
000012aa    41              db    41h        ;05 00001326
000012ab    43              db    43h        ;06 0000132a
000012ac    52              db    52h        ;07 00001348
000012ad    7a              db    7Ah        ;08 00001398
000012ae    0f              db    Fh         ;09 000012c2
000012af    8e              db    8Eh        ;0a 000013c0
000012b0    0f              db    Fh         ;0b 000012c2
000012b1    6e              db    6Eh        ;0c 00001380
000012b2    0f              db    Fh         ;0d 000012c2
000012b3    9a              db    9Ah        ;0e 000013d8
000012b4    a2              db    A2h        ;0f 000013e8
000012b5    ab              db    ABh        ;10 000013fa
000012b6    b1              db    B1h        ;11 00001406
000012b7    f9              db    F9h        ;12 00001496
000012b8    da              db    DAh        ;13 00001458
000012b9    f8              db    F8h        ;14 00001494
000012ba    f7              db    F7h        ;15 00001492
000012bb    3c              db    3Ch        ;16 0000131c
000012bc    15              db    15h        ;17 000012ce
000012bd    55              db    55h        ;18 0000134e
000012be    61              db    61h        ;19 00001366
000012bf    f6              db    F6h        ;1a 00001490
000012c0    f5              db    F5h        ;1b 0000148e
000012c1    0f              db    Fh         ;1c 000012c2

It's not too obvious implementation of switch-case statement. Next byte after function call instruction - count of items in tables (N), then N bytes - table jump_table. We working in thumb mode, so after call to 00015e6a LR register will point to next instruction+1 (000012a5 in our case), and R3 passed as index_in_table, like using switch(R3). After that, function at 00015e6a reads jump_table size as byte at LR-1 (000012a4), and comares it with index_in_table. If index_in_table larger than table size (N) used for index_in_table instead of R3 value (as an default lablel in switch-case). After deciding whick value should be used, branch to jump_table[index_in_table]*2+lR is performed.
Describe the solution you'd like
Disassembler may detect constructions above and disassemble them as local switch-case code, not like function call.
Describe alternatives you've considered
Patching instruction at 000012a0 from bl 00015e6a to b <addr>, where  is absolute addr for one of available jumps via 00015e6a can help to disassemble local cases, but it's not conveniently and don't allow to see entire switch-case at once.

Ghidria supports this kind of switch pattern, through a series of features:

The Function Start Pre Search analysis pass, using ARM_switch_patterns.xml, recognizes switch helper functions like the one at 00015e6a, and renames them
ARM.cspec defines call fixups to be applied to functions with specific names (which also works if you rename the function manually). These call fixups define the switch semantics that are then understood by the decompiler

Current git master (reaching back to 10.2, as far as I can see) seems to include your switch pattern (as __ARM_common_switch8). @a-sakharov Could you update Ghidra and run the initial auto-analysis on this file again to confirm whether it works now?

Sorry, no changes.
Here are file with this code: rom-QN9020-B3-Chip_00002B01-Flash_0012409D-Bootloader_00000001.zip
Switch function located at offset 0x1617a
It is called from function based at offset 0x2434
File is ARM:LE:32:Cortex format, should be loaded at 0x01000000 (but load address if not important for this case)


fix(inputs): add placeholder style,  focus search on show menu

To Reviewers

[ ] Skipping review is not a problem (style, chore ONLY)
[x] Not that difficult

Type of Change

[ ] New feature
[x] Bug fixes
[ ] Feature improvement

[ ] These changes require a usage change

[ ] Others (performance improvement, refactoring, CI/CD, etc.)

Checklist

[ ] Updated Storybook documents for component
[ ] Wrote test codes for composable, utils and etc.
[x] Tested with console(if usages are changed)

Description
Commit messages say it all
Things to Talk About

:tada: This PR is included in version 2.0.0-beta.20 :tada:
The release is available on:

npm package (@beta dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


principles -> principals

@JohnQuick : Thanks for your contribution! The author(s) have been notified to review your proposed change.

@BrianBlanchard : Thanks for your contribution! The author(s) have been notified to review your proposed change.

#sign-off


fix: create the benchmark folder in the root directory

Fix an issue I mentioned in #8

One problem with the current implementation is that the file in generated in the process working directory. That does not play well with a monorepo setup.

thanks!


remove repeated signal

remove repeated sigterm signal

 Thank you for your submission, we really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.You have signed the CLA already but the status is still pending? Let us recheck it.

LGTM, Thanks @formych

LGTM, Thanks @formych

Can i get a T-Shirt? I like it very much!

Sure, you will get a email later. Thanks again.

Sure, you will get a email later. Thanks again.

谢谢老哥，下次一定提一个有质量的pr, ^_^


tkinter error

In the process of running the surrogate_example, the following error occurs

It doesn't happen every time. Perhaps it is due to the fact that I did not close the visualization for a long time.
win10, python 3.9

@Sash0check Is it possible to reproduce it?

Yes, but it appears randomly. Most often it happens in asynchronous mode. Tkinter is not thread safe as i know.
I found that problem in matplotlib. As solution is a problem is change matplotlib backend to "Agg" on windows (default is "TK").


TypeError: init() got an unexpected keyword argument 'as_loopback'

I built the files and made the commands with cygwin like you told.I made the script using your example this way:
import wave

defaultframes = 512

class textcolors:
    blue = '\033[94m'
    green = '\033[92m'
    warning = '\033[93m'
    fail = '\033[91m'
    end = '\033[0m'

recorded_frames = []
device_info = {}
useloopback = False
recordtime = 5

#Use module
p = pyaudio.PyAudio()

#Set default to first in list or ask Windows
try:
    default_device_index = p.get_default_input_device_info()
except IOError:
    default_device_index = -1

#Select Device
print (textcolors.blue + "Available devices:\n" + textcolors.end)
for i in range(0, p.get_device_count()):
    info = p.get_device_info_by_index(i)
    print (textcolors.green + str(info["index"]) + textcolors.end + ": \t %s \n \t %s \n" % (info["name"], p.get_host_api_info_by_index(info["hostApi"])["name"]))

    if default_device_index == -1:
        default_device_index = info["index"]

#Handle no devices available
if default_device_index == -1:
    print (textcolors.fail + "No device available. Quitting." + textcolors.end)
    exit()

#Get input or default
device_id = int(input("Choose device [" + textcolors.blue + str(default_device_index) + textcolors.end + "]: ") or default_device_index)
print ("")

#Get device info
try:
    device_info = p.get_device_info_by_index(device_id)
except IOError:
    device_info = p.get_device_info_by_index(default_device_index)
    print (textcolors.warning + "Selection not available, using default." + textcolors.end)

#Choose between loopback or standard mode
is_input = device_info["maxInputChannels"] > 0
is_wasapi = (p.get_host_api_info_by_index(device_info["hostApi"])["name"]).find("WASAPI") != -1
if is_input:
    print (textcolors.blue + "Selection is input using standard mode.\n" + textcolors.end)
else:
    if is_wasapi:
        useloopback = True;
        print (textcolors.green + "Selection is output. Using loopback mode.\n" + textcolors.end)
    else:
        print (textcolors.fail + "Selection is output and does not support loopback mode. Quitting.\n" + textcolors.end)
        exit()

recordtime = int(input("Record time in seconds [" + textcolors.blue + str(recordtime) + textcolors.end + "]: ") or recordtime)

#Open stream
channelcount = device_info["maxInputChannels"] if (device_info["maxOutputChannels"] < device_info["maxInputChannels"]) else device_info["maxOutputChannels"]
stream = p.open(format = pyaudio.paInt16,
                channels = channelcount,
                rate = int(device_info["defaultSampleRate"]),
                input = True,
                frames_per_buffer = defaultframes,
                input_device_index = device_info["index"],
                as_loopback = True)

#Start Recording
print (textcolors.blue + "Starting..." + textcolors.end)

for i in range(0, int(int(device_info["defaultSampleRate"]) / defaultframes * recordtime)):
    recorded_frames.append(stream.read(defaultframes))
    print (".")

print (textcolors.blue + "End." + textcolors.end)
#Stop Recording

stream.stop_stream()
stream.close()

#Close module
p.terminate()

filename = raw_input("Save as [" + textcolors.blue + "out.wav" + textcolors.end + "]: ") or "out.wav"

waveFile = wave.open(filename, 'wb')
waveFile.setnchannels(channelcount)
waveFile.setsampwidth(p.get_sample_size(pyaudio.paInt16))
waveFile.setframerate(int(device_info["defaultSampleRate"]))
waveFile.writeframes(b''.join(recorded_frames))
waveFile.close()

However the following error occurs: TypeError: init() got an unexpected keyword argument 'as_loopback'
Anyone here know what could be the issue?
Thanks

I came across the same issue. Were you able to find a fix?

I came across the same issue. Were you able to find a fix?
I think you need to downgrade python in order to work

I came across the same issue. Were you able to find a fix?
I think you need to downgrade python in order to work

Actually found the issue. It was trying to use the non-forked pyaudio. After uninstalling the other one I was able to fix it.
Thanks!


Separate badges from tags RFC and added rfc/

Added rfc to propose creating a new node type for neo4j which would represent Badges that is separate from the Tag node.

will take a look. Also the name of the doc should be 001-badge.md

I believe the instructions said that the name of the document should match the PR number

could you point me to the instruction? I think we need to update that part of the instruction as we need to start the RFC from 001, Let me know if you think differently. cc @Golodhros @ttannis

@Golodhros looking at the readme Copy the appropriate template file to rfcs/000-<rfcName>.md. Don't assign an RFC number yet, as this is going to be the PR number, and we'll rename the file accordingly if the RFC is accepted., any reason we need to rename after it is accepted instead of creating from the beginning?

will take a look. Also the name of the doc should be 001-badge.md

I believe the instructions said that the name of the document should match the PR number

could you point me to the instruction? I think we need to update that part of the instruction as we need to start the RFC from 001, Let me know if you think differently. cc @Golodhros @ttannis

Yes, the idea is that people don't need to look at what number of RFC is, or to handle collisions, as the numbers of the PRs will be unique. The results would mean that we have skipped numbers, but they will always be on the right order.

@Golodhros looking at the readme Copy the appropriate template file to rfcs/000-<rfcName>.md. Don't assign an RFC number yet, as this is going to be the PR number, and we'll rename the file accordingly if the RFC is accepted., any reason we need to rename after it is accepted instead of creating from the beginning?

Now that yo mention it, I can't see any reason why we should wait. I still think is a good idea to use the PR number though, as mentioned on the previous comment.

@Golodhros looking at the readme Copy the appropriate template file to rfcs/000-<rfcName>.md. Don't assign an RFC number yet, as this is going to be the PR number, and we'll rename the file accordingly if the RFC is accepted., any reason we need to rename after it is accepted instead of creating from the beginning?

Now that yo mention it, I can't see any reason why we should wait. I still think is a good idea to use the PR number though, as mentioned on the previous comment.

I am not sure if I like the skip number for rfc though as we could always look at which pr for a given RFC based on git blame ? Other popular projects I know didn't use skip number : https://cwiki.apache.org/confluence/display/AIRFLOW/Airflow+Improvements+Proposals or https://cwiki.apache.org/confluence/display/KAFKA/Kafka+Improvement+Proposals
sorry that I miss this part in the initial review, but I am curious how others think of this. @ttannis or @amundsen-io/amundsen-committers

@allisonsuarez given the feature is almost there, let's finish the rfc doc when you have time and merge it?

After the column badge PR of databuilder, i can't see the hive table badge.
The table_metadata model still use only tags. I think Badge model should be added to table_metadata model.
Is there any plan to fix it?

After the column badge PR of databuilder, i can't see the hive table badge.
The table_metadata model still use only tags. I think Badge model should be added to table_metadata model.
Is there any plan to fix it?

Interesting, I don’t think I made any change to table level tags that would cause this. The reason you would not be able to see it in the UI is because we no longer surface tags with the type badge. Was this badge being extracted on databuilder and being put on the table as a tag of type badge? Can you not see it on neo4j or is it just not visible on front end?

Let's make this into the Final Comment Period (FCP) to merge, so there will be seven days for anyone to comment in this PR before we merge it and make it official.

After the column badge PR of databuilder, i can't see the hive table badge.
The table_metadata model still use only tags. I think Badge model should be added to table_metadata model.
Is there any plan to fix it?

Interesting, I don’t think I made any change to table level tags that would cause this. The reason you would not be able to see it in the UI is because we no longer surface tags with the type badge. Was this badge being extracted on databuilder and being put on the table as a tag of type badge? Can you not see it on neo4j or is it just not visible on front end?

https://github.com/amundsen-io/amundsendatabuilder/blob/af4b51265e11d1ee9e8651cebeb0d00592eec2d5/databuilder/extractor/neo4j_search_data_extractor.py#L36
: According to query, it seems Table has Badge model

https://github.com/amundsen-io/amundsendatabuilder/blob/master/databuilder/models/table_metadata.py#L242
: But still, TableMetadata has only tag parameter and there's no parameter to make relation with Badge model.

https://github.com/amundsen-io/amundsenmetadatalibrary/blob/master/metadata_service/api/tag.py#L60
: Also, there are no api to getting table badge.

After the column badge PR of databuilder, i can't see the hive table badge.
The table_metadata model still use only tags. I think Badge model should be added to table_metadata model.
Is there any plan to fix it?

Interesting, I don’t think I made any change to table level tags that would cause this. The reason you would not be able to see it in the UI is because we no longer surface tags with the type badge. Was this badge being extracted on databuilder and being put on the table as a tag of type badge? Can you not see it on neo4j or is it just not visible on front end?

i can see that table has badge type tag on neo4j, but it is not visible on frontend.
i think we can't use badge type tag because of below codes.

https://github.com/amundsen-io/amundsendatabuilder/blob/af4b51265e11d1ee9e8651cebeb0d00592eec2d5/databuilder/extractor/neo4j_search_data_extractor.py#L36
: According to query, it seems Table has Badge model
https://github.com/amundsen-io/amundsendatabuilder/blob/master/databuilder/models/table_metadata.py#L242
: But still, TableMetadata has only tag parameter and there's no parameter to make relation with Badge model.
https://github.com/amundsen-io/amundsenmetadatalibrary/blob/master/metadata_service/api/tag.py#L60
: Also, there are no api to getting table badge.

That's because we announced to the community that we would be deprecating this type of badge in favor of the new badge model that was implemented. What you can do is delete your old badges using the delete tag API method on the amundsenmetadatalibrary, and then use this tutorial to add the new badges to those tables: https://github.com/amundsen-io/amundsen/blob/79bbfbd0899daed5a0d203fb523ebd6b73842c92/docs/tutorials/badges.md

After the column badge PR of databuilder, i can't see the hive table badge.
The table_metadata model still use only tags. I think Badge model should be added to table_metadata model.
Is there any plan to fix it?

Interesting, I don’t think I made any change to table level tags that would cause this. The reason you would not be able to see it in the UI is because we no longer surface tags with the type badge. Was this badge being extracted on databuilder and being put on the table as a tag of type badge? Can you not see it on neo4j or is it just not visible on front end?

i can see that table has badge type tag on neo4j, but it is not visible on frontend.
i think we can't use badge type tag because of below codes.

https://github.com/amundsen-io/amundsendatabuilder/blob/af4b51265e11d1ee9e8651cebeb0d00592eec2d5/databuilder/extractor/neo4j_search_data_extractor.py#L36
: According to query, it seems Table has Badge model
https://github.com/amundsen-io/amundsendatabuilder/blob/master/databuilder/models/table_metadata.py#L242
: But still, TableMetadata has only tag parameter and there's no parameter to make relation with Badge model.
https://github.com/amundsen-io/amundsenmetadatalibrary/blob/master/metadata_service/api/tag.py#L60
: Also, there are no api to getting table badge.

That's because we announced to the community that we would be deprecating this type of badge in favor of the new badge model that was implemented. What you can do is delete your old badges using the delete tag API method on the amundsenmetadatalibrary, and then use this tutorial to add the new badges to those tables: https://github.com/amundsen-io/amundsen/blob/79bbfbd0899daed5a0d203fb523ebd6b73842c92/docs/tutorials/badges.md

Oh, i'll check tutorial docs. thanks!

@allisonsuarez let's merge it ?

@allisonsuarez let's merge it ?

@allisonsuarez do you want to do the honors?

@allisonsuarez let's merge it ?

@allisonsuarez do you want to do the honors?

I got out of bed for this lol

lol


Changes for functional interoperability with other Promise implementations

One of my goals with the sabre/event package was to create a set of event-related patterns in a very simple way. Removing all the cruft basically.
I'm a little worried that introducing these changes causes this package to no longer live up to that goal. If you want the kitchen sink, why not just use Guzzle's?
If interop is the main goal, is it possible to create interop by creating a separate interop package and subclass the Promise class?

I'm not using Guzzle, for I was creating my own package to learn how async php should work. I hit a wall, it work to an certain point and since it's an combination of everybody JavaScript implementation specs, it should work regardless of the internal implementation routines.
The results of basic same call structure should get the same answers. Your current implementations claiming %100 doesn't, the tests indicate that's the case without modifying.  I discovered the reason why my own package wasn't working by working on what you have here. So you could say the interop idea originated here. I now understand why the few skipped tests here fails, working on solution.
So i am giving it back. I will be introducing the the same to React and Guzzle cause there too, they don't interact without some small changes.
I don't see where simplicity is removed, maybe the terminology used should change.
Also i am following everything async php related, making comments for reference for future use.

Hi @techno-express ,

The results of basic same call structure should get the same answers. Your current implementations claiming %100 doesn't,

I'm not entirely sure where that claim was made, or what this refers to exactly, But if you're trying to fix an implementation problem I'm having a hard time reading through your changes and pinpointing it. Part of the problem is that you're fixing a bunch of different things at the same, while they would probably have been better as separate smaller pull requests.
Anyway, the two major things I see are:

Adding cancel support. I'm not necessarily against this idea, but I would rather see a CancelablePromise than to integrate it into the core object. I don't think it's needed to tack this onto the existing class.
Support for different loop implementations. It's unclear what those are, as everything is done via duck-typing.

I don't think changing the promise and ducktyping on different loop objects was the right extension point. What should have been done instead is (perhaps) subclassing Sabre\Event\Loop with a new implementation that delegates it's functions to another implementation (such as guzzle's or reactphp).
Such 'bridges' for different loop implementations should be done in separate composer packages that have hard dependencies on Sabre\Event and the package you're integrating with.
Are those the main things, or are there other details I've missed? If so, can you share a simple example of what this package currently does incorrectly?

Hi @techno-express
I see you're still working on this. I'm assuming this is now just your private branch and commits just make their way into this PR and my notification list.
I'm closing this PR for now. If you have small, isolated contributions that follow the coding standards, I would suggest you open individual PR's.

How do you figure it's my private branch?
From your first response it seems to me this library is your private repo in the open.
Why would i put in more PR? It's about your users/community, not you.
I am showing the issues, and since nobody has chimed in, you must have no users. I guess it has limited use case as implemented. I normally post no issues anywhere, unless i can't fix myself, and that's rare.
This library might as well be considered unmaintained abandoned.
I guess i will be extracting the promise part under it's own repo library from this commit. Maybe you will see that as not private.
You, the developer, fall into an category that necessitate an flaming like reply, which I been avoiding from the beginning.
I was surprise to see the PR open for so long. I find some project's keep PR open for years, just for there community to inspect.

Hi,
I appreciate the effort but the quality of contributions are just not up to par. And you're right I don't spend a lot of time on this project. I don't have the time to take your changes and extract what you're trying to accomplish and clean it up. Sorry about that. Small islolated changes are just easier to deal with . Your comment didn't sound insulting to me, I understand why you might be frustrated.


Force delete a pod button

What would you like to be added:
Force delete a pod button.
Why is this needed:
When dealing with a problematic cluster like this, some pod may stuck at "Terminating" state forever. The cluster administrator need to force delete the pod with command:
kubectl delete pod <pod name> --grace-period=0 --force
Environment you are Lens application on:

Kubernetes distribution: [on-prem]
Desktop OS: Linux/Ubuntu

If we agree to work on this, I want to try working on this :pray:

Hello, any update on that matter?

@rafzei hi sorry I do not have time to work on this as I'm no longer using Lens anymore for my daily work. Anyone can work on this issue :pray:

Please support this feature! 👍

Hi! Can anyone implement that?

+1

+1

@dropmann and others. After some research, I found that use extension is a easy way to to this.
So base on another extionsion. I forked and publish a lens extension to to this:
Installing this extension
In OpenLens / Lens, navigate to the Extensions list. In the text box, enter the name of this plugin:

@a180285/openlens-node-pod-menu


Nodes of "L2-conforming" Lagrange polynomials on Tetrahedra

Hi everyone,
I tried to implement some DG stuff using a full tetrahedral mesh but run into convergence issues - Hexahedrons work fine. I think I can track this down to a difference between the Gauss-Legendre quadrature rule (which seem to have the expected weights and positions) and the placement of the nodes for the Lagrange basis functions (which seem to be weirdly off). For example when comparing the Gauss-Legendre quadrature of order 2 with linear Lagrange polynomials I get
Point 0
Element Nodes:0.148543 0.148543 0.148543
Gauss-Legendre Nodes: 0.138197 0.138197 0.138197

Point 1
Element Nodes:0.554371 0.148543 0.148543
Gauss-Legendre Nodes: 0.138197 0.138197 0.58541

Point 2
Element Nodes:0.148543 0.554371 0.148543
Gauss-Legendre Nodes: 0.138197 0.58541 0.138197

Point 3
Element Nodes:0.148543 0.148543 0.554371
Gauss-Legendre Nodes: 0.58541 0.138197 0.138197

I also went though the implementation for the node placement of Lagrange polynomials and could not find anything obvious why these should differ - or is it really expected that these nodes are just different ones (I usually never work with Tets)?
If the nodes should match, then my second question on this would be if there exists a general permutation rule on how to permutate the quadrature points such that the index of the quadrature point matches the index of the node?
Thanks in advance!

@v-dobrev, can you help with this?

On tets, there is no relation between the nodes in the L2_TetrahedronElement (with any BasisType) and the quadrature rules on tets defined in IntegrationRules::TetrahedronIntegrationRule.

Thanks for the pointer Veselin. Forgive me my ignorance, but now I am not sure what I am misunderstanding here now. I guess my assumption that (analogical to hypercubes) the "canonical" Gauss-Legendre points on tetrahedra can be reconstructed from the internally used product construction via 1D (Gauss-Legendre) points is wrong? If so, may I also ask if there is there some disadvantage in constructing product bases which coincide with the Gauss-Legendre point, if this is even possible?

I'm not sure I understand your question: can you clarify what you mean by

the "canonical" Gauss-Legendre points on tetrahedra

and also by

the internally used product construction via 1D (Gauss-Legendre) points

With canonical Gauss-Legendre points I refer to the naive construction which are induced by mapping the integral over the reference tetrahedron back to the reference brick (see e.g. the Higher-Order Finite Elements book by Solin, Segeth &Dolezel, proposition 4.2 on page 260):
\int_{tet} f(\xi) d\xi = \int_{brick} \frac{(1-\xi_2)(1-\xi_3)^2}{8} f\left(\frac{(1-\xi_2)(1-\xi_3)}{4}(\xi_1+1)-1 ,\frac{(1+\xi_2)(1-\xi_3)}{2}-1, \xi_3 \right)

now transforming the Gauss-Legendre points on this brick back to the tetrahedron is what I refer to.
Regarding the internal construction I refer to
https://github.com/mfem/mfem/blob/b5491f763085b3cc917fed34a58ee816c1bc0cc9/fem/fe/fe_l2.cpp#L716-L739
with attention to the node placement in line 721: Nodes.IntPoint(o++).Set3(op[i]/w, op[j]/w, op[k]/w);
which I could not find in the book above.

Forgive the drive by, but @termi-official If I am understanding you correctly: No, quadrature rules on simplices are not in general constructed from combination of 1D rules on lines. See https://arxiv.org/pdf/1409.1865.pdf for a very interesting paper about how to construct simplex rules whilst respecting all the relevant symmetries. It's an interesting exercise trying to figure out the relevant symmetries for the first 2 or 3 gauss rules on a triangle (or tet) by hand, it pretty quickly starts to get out of hand but is enlightening. With a change of measure, it's even possible to derive the simplest rules on tri/tet using 1D rules in barycentric coordinates, this breaks down very quickly though.
I believe there are some rules that combine the 1D rules to get general simplex rules, which are general. However, they end up losing a lot of in terms of efficiency as the number of points grows at n^D. I think this approach might be what you're implying by transforming from a hex to a tet, I think this is the Conical Stroud approach, but don't hold me to that.

Thanks for the pointer @hughcars . I knew that polyquad was a thing, but I have never found time to read the paper, yet. I think I see why it is be not so optimal to construct quadrature rules coinciding with the nodes on tets.


[Feature request] Support different fake data generator such as mimesis

Built in support for mimesis would be nice.
Main motivation is that much of the faker methods such as get_faker().latitude() etc aren't typed and result in Any types :(

hmm, i never heard of mimesis before - looks pretty cool. Faker is indeed not typed, its a bummer.
I wouldn't object to this being added - if you would like to take this on, go ahead! But I dont see us having the bandwidth currently to handle this.


SVG overlay mismatch due to missing class

The SVG overlay doesn't line up correctly as the hljs class is missing, and it misses some styling

This was caused by another project - markdown-it-highlightjs. This applies hljs to the first  block encountered, but not the second.

I can make this go away still if I add any class to this code block, even if it's empty


SyntaxError on opening binary when using an old version of Electron

I packaged my app using electron-packager with the command:
electron-packager . Journal --platform=linux --arch=all

on my Debian 8 64-bit machine. It produced the 3 folders, but on running the binary executable, I get the error:
A JavaScript error occurred in the main process
Uncaught Exception:
SyntaxError: Unexpected token {
    at exports.runInThisContext (vm.js:53:16)
    at Module._compile (module.js:413:25)
    at Object.Module._extensions..js (module.js:452:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Object.<anonymous> (/home/rahul/Desktop/Electron/Journal (copy)/Journal-linux-x64/resources/atom.asar/browser/lib/init.js:130:10)
    at Object.<anonymous> (/home/rahul/Desktop/Electron/Journal (copy)/Journal-linux-x64/resources/atom.asar/browser/lib/init.js:132:4)
    at Module._compile (module.js:434:26)
    at Object.Module._extensions..js (module.js:452:10)
    at Module.load (module.js:355:32)

I ran node -c *.js as described in #249, but it gave no output, so I think that's not the issue, even though my code uses ES6. How do I fix this?
I'm running Node 7.10.0

What version of Electron are you using? atom.asar is pretty old.

I'm using version 1.6.10

I'm using version 1.6.10

I'm not sure about that.
In order to help you with your problem, we're going to need more information about it. In particular:

Console output when you run electron-packager with the environment variable DEBUG=electron-packager.

Is there an option to do that? Sorry, I'm new to the tool.

See the debugging section of the CONTRIBUTING document that was linked when you created a new issue.

Okay, I did npm install debug, then DEBUG=electron-packager, and then ran the electron-packager command. The output wasn't different from without this configuration, but here it is:
Packaging app for platform linux ia32 using electron v0.35.6
Packaging app for platform linux x64 using electron v0.35.6
Packaging app for platform linux armv7l using electron v0.35.6
Wrote new apps to:
/home/rahul/Desktop/Electron/Journal (copy)/Journal-linux-ia32
/home/rahul/Desktop/Electron/Journal (copy)/Journal-linux-x64
/home/rahul/Desktop/Electron/Journal (copy)/Journal-linux-armv7l

I'm not sure why it says it's using the older Electron, though, running electron -v gave v1.6.10.

It's because your package.json is using a really old version of Electron, whereas you have a globally installed version of Electron (you should uninstall that).
If you can upgrade your version of Electron, do so by modifying your electron entry in package.json. If you are unable to do that, you should use electron-compile to compile your JavaScript into something that your version of Electron can understand.

I see. Thanks :)


Crank speed calculation is an estimate

The equation from #19 is an estimate from RPMs calculated from crank position samples compared with the corresponding raw value for crank time from the data packet.

Now it's quite measured...with multiple ways of measuring available.


Советский реванш

https://vk,com/sovrev by http://communistvrn.tilda.ws/

https://github.com/SovietHubProject/
https://github.com/SovietHubProject/TmpSomeDesires/issues/1


Problem creating hash indices larger than available RAM

Currently the hash writing requires malloc of the entire index size. If this is larger than available memory, the operation fails.
We have a use case requiring more than 1.65 billion entries, which results in a 32 GB+ hash index. This is larger than the available memory on the machine that builds it.
We could replace the malloc with mmap:ing of the file itself but that would lead to a lot of random reads and writes from disk which would be horribly slow.
I have an idea to reduce this limitation, but no time to do it at the moment.

Write all hash entries to some sort of log file (64 bit hash value, 64 bit data offset).
Calculate hash capacity (num_entries * factor)
Sort the entries in the file by hash value % capacity. (This can be done efficiently without having everything in RAM)
Mmap the large index file
Iterate over the sorted hash entries and write them to the mmapped index. This should be efficient since the mmapped writes will happen with good locality and in sequential order. Except for the last values which may wrap around to the beginning of the file, but that's a small part of the data.

For sorting the large set of entries, split it into reasonably small chunks and sort those in memory. Then run a tree of sequential file merges.

Did this ever get resolved?

No, this has not been implemented yet.

Please note this on Read-Me file that hash index needs to be lower than available memory.

Done!


http/2 support

Hi, are there any plans to support http/2 ? Jetty 9.4 would support it.

What needs to be done to support it? Have you tried creating a jetty-http2-server and passing it to Javalin via app.embeddedServer()?

i did not, i am not familiar yet with http2. i need bidirectional communication so my guess is that http2 could be a good choice. at the moment i just created a little test with websockets. but i would prefer to also test http2.
https://www.eclipse.org/jetty/documentation/9.4.x/http2.html
I did not find a sample on their page with streams (probably what i need).
Is there any kind of sample for http2 with javalin? Or can i use the regular rest api which switches to http2? if so, how are streams handled?

@blahmutz You can check some example of creating embedded http2 jetty server here. The repo also has all the dependencies required in the pom file.
There are some tutorials on the Javalin website for setting up a custom server instance.
Regarding http2 push, this SO answer has some basic example of using PushBuilder. You can try to connect that to the Javalin rest api, it should work, though I haven't tried myself 🙂

the existing examples out there are too old. they have "checkProtocolNegotiationAvailable", which was removed sometime ago
this is what I have so far.
    public static void main(String[] args) {
        Javalin app = Javalin.create()
            .embeddedServer(new EmbeddedJettyFactory(() -> {
                Server server = new Server();

                ServerConnector connector = new ServerConnector(server);
                connector.setPort(8080);
                server.addConnector(connector);

                // HTTP Configuration
                HttpConfiguration httpConfig = new HttpConfiguration();
                httpConfig.setSecureScheme("https");
                httpConfig.setSecurePort(8443);

                // SSL Context Factory for HTTPS and HTTP/2
                SslContextFactory sslContextFactory = new SslContextFactory();
                sslContextFactory.setKeyStorePath("keystore.p12");
                sslContextFactory.setKeyStorePassword("password");
                sslContextFactory.setCipherComparator(HTTP2Cipher.COMPARATOR);

                // HTTPS Configuration
                HttpConfiguration httpsConfig = new HttpConfiguration(httpConfig);
                httpsConfig.addCustomizer(new SecureRequestCustomizer());

                // HTTP/2 Connection Factory
                HTTP2ServerConnectionFactory h2 = new HTTP2ServerConnectionFactory(httpsConfig);
                ALPNServerConnectionFactory alpn = new ALPNServerConnectionFactory();
                alpn.setDefaultProtocol("h2");

                // SSL Connection Factory
                SslConnectionFactory ssl = new SslConnectionFactory(sslContextFactory, alpn.getProtocol());

                // HTTP/2 Connector
                ServerConnector http2Connector = new ServerConnector(server, ssl, alpn, h2, new HttpConnectionFactory(httpsConfig));
                http2Connector.setPort(8443);
                server.addConnector(http2Connector);

                ALPN.debug = false;

                return server;
            })).start();

        app.get("/", ctx -> ctx.result("Hello World"));
    }

I got it to start. the regular connector on port 8080 is working fine.
I also have
Started ServerConnector@ {SSL,[ssl, alpn, h2, http/1.1]}{<IP_ADDRESS>:8443}
so at least jetty isn't hating it
but...
trying to make any request with curl, I keep getting SSL error
in terms of dep, on top of javalin, I had to add
compile "org.eclipse.jetty.http2:http2-server:9.4.8.v20171121"
compile "org.eclipse.jetty:jetty-alpn-conscrypt-server:9.4.8.v20171121"
compile "org.eclipse.jetty.alpn:alpn-api:1.1.3.v20160715"
runtime "org.mortbay.jetty.alpn:alpn-boot:8.1.12.v20180117"

the api version you need to use is specific to the java 8 version as per
https://www.eclipse.org/jetty/documentation/9.4.x/alpn-chapter.html#alpn-versions

also, just to keep it all in one place and you can cut and paste.
I use
keytool -genkey -alias jetty -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 3650

to generate the keystore file for above

@wmacgyver What curl command do you execute and what error do you receive?

@wmacgyver have you tried running this outside of Javalin?
server.setHandler(new HelloHandler());
server.start();
server.join();

import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.handler.AbstractHandler;

public class HelloHandler extends AbstractHandler {
    @Override
    public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException {
        response.getWriter().println("
Hello Jetty
");
        baseRequest.setHandled(true);
    }
}

@wmacgyver maybe looking at what Dropwizard does would be helpful: https://github.com/dropwizard/dropwizard/tree/1bb7142cb241d3218a80c58e2018d5ad7790c90c/dropwizard-http2/src/main/java/io/dropwizard/http2
It was last updated 13 days ago, so hopefully it's not outdated.

@wmacgyver cool. When you feel confident in your implementation it would be great if you could create a PR for https://github.com/tipsy/javalin/issues/69. It would be nice to include some "default" Jetty-servers with Javalin.

@tipsy got it, I guess this means you are moving forward on tie javalin to jetty then :)

understood.

full example https://github.com/wmacgyver/javalin-http2-example as promised

@wmacgyver thanks! I forked the repo and expanded it a bit: https://github.com/tipsy/javalin-http2-example
I added gradle-wrapper, a kotlin version, bumped all dependencies and added a static-file example. I couldn't add this to your repo, as this is now part of the official documentation: https://javalin.io/documentation#sslhttp2

@tipsy no worries, I'm glad you found it useful enough to include it in the official doc. I'm happy to help out. http2 option is so few and far in between on JVM. I'm glad it's possible with javalin.

is there any example with the latest Javaline and Jetty version
Thanks for the help

is there any example with the latest Javaline and Jetty version
Thanks for the help

Yes, check out the SSL plugin on Javalin Website!


fix authentication breaking CORS preflight requests

disable authentication for OPTIONS requests when CORS is enabled
do not forward CORS preflight requests down the filter chain

Note: regular OPTIONS requests without CORS preflight headers will still
be forwarded down the filter chain, so this would break applications
that require authentication for those requests. I don't think we have
any application explicitly handling OPTIONS requests, so the risk should
be low.

@ewencp it only intercepts preflight requests, i.e. OPTIONS requests made by the browser with the sole intent of checking that it is allowed to do cross origin requests on that endpoint, regular requests that only need the right CORS headers added are still passed through.

@xvrl I was referring to this comment

Note: regular OPTIONS requests without CORS preflight headers will still be forwarded down the filter chain, so this would break applications that require authentication for those requests. I don't think we have any application explicitly handling OPTIONS requests, so the risk should be low.

It just seems like there must be some reasonably easy way to do this without breaking auth'd OPTIONS requests, but maybe i'm overestimating jetty? Just seems kinda bad to break this even if it's not currently being used -- it's a security hole just waiting to happen.

@ewencp in jetty authentication is purely based on path and method and happen before any of the filters kick in. That's the reason I am only disabling auth on OPTIONS methods when CORS is enabled.
As an alternative we could extend the security handler and only allow through CORS preflight requests.


[URP] Geometry is generated in a way that causes NaN issues for shaders with normal maps.

Steps to reproduce:

Use a URP project
Enable bloom in a post process volume
Apply a surface shader that has a normal map to a real-time CSG surface.

We've confirmed that realtime CSG was the problem by exporting the mesh to blender-- Merged close verts and cleared split normal data, then reimporting.
This even happens with the built-in shader with a normal map placed in the normal map slot.

There has been a community fix provided with #372, but the developer is still working on it.

I wrote a script for my game to delete the NaN faces (they all have an area of 0) https://github.com/XgarhontX/Delete0AreaFaces. It needs to ProBuilderize the RealtimeCSG mesh first, so someone can improve it by making RealtimeCSG do it itself.


add past and future classes

Thank you

Thx ;)

Well that was quick ! :D
Can you drop a new tag for it ?

Hehe, was doing it ;)
https://github.com/arca-computing/MultipleDatePicker/releases/tag/1.2.1

great ! thank you !

I'm adding it to https://github.com/arca-computing/MultipleDatePickerReact too, thx ;)


Sometimes it takes multiple clicks to open and close dropdown select

I have only testing this on IOS only, latest version.
it can work as normal open/close then suddenly it open and closes on every other click. Has anyone else encountered this?

https://github.com/azeezat/react-native-select/assets/72066389/eec0feea-eb28-413c-a309-756a798846f7

Hello @AyoCodess Thanks for reporting this issue. Kindly add an example code to help us debug this quickly. Thanks.

Hello @AyoCodess Thanks for reporting this issue. Kindly add an example code to help us debug this quickly. Thanks.

This example is nothing special, there is something not working correctly/efficiency  with the firing of the open and close event listeners for the dropdown probably. is there a cleanup function on these event listers?
export function GeneralDropdown({
options,
selectedValue,
onValueChange,
placeholder,
color = theme.raw.colors.waffle.primary,
colorText = theme.raw.colors.waffle.primary,
height = 400
}: {
options: { label: string; value: string }[];
selectedValue: string | number | boolean | string[] | boolean[] | number[] | null | undefined
onValueChange: (value: string) => void;
placeholder: string;
color?: string;
colorText?: string;
height?: number;
}) {
return (

<DropdownSelect
modalControls={{
modalOptionsContainerStyle: {
height: height,
backgroundColor: colorText,
        }
      }}
      listComponentStyles={{
        itemSeparatorStyle: {
          borderStyle: 'solid',
          borderWidth: 1,
          borderColor: 'white',
          marginHorizontal: 10
        }

      }}
      placeholder={placeholder}
      placeholderStyle={{
        fontSize: 18,
        color: colorText,
        fontWeight: 'bold'
      }}
      selectedItemStyle={{
        color: colorText,
        fontSize: 18,
        fontWeight: 'bold'
      }}
      checkboxControls={{
        checkboxSize: 15,
        checkboxStyle: {
          backgroundColor: color,
          borderRadius: 30,
          padding: 5,
          borderColor: 'white'
        },
        checkboxLabelStyle: { color: 'white',fontSize: 20 }
      }}

      dropdownIcon={
        <Feather
          name="chevron-down"
          size={30}
          color={color}
        />
      }
      dropdownIconStyle={{ top: 0,right: 0 }}
      options={options}
      selectedValue={selectedValue}
      onValueChange={onValueChange}
      primaryColor={'green'}
    />
  </View>
</View>)

}`

Closing - the component has been updated significantly since this issue was posted.


Create Interesting Sample App

We want people who are interested in this framework to understand quickly how different and fun this framework intends to be.  CardGame?  ChatRoom?  Best yet - one of each, plus one combining the two.  A card game that has a chat room whose members are those playing the game.

Why just one demo? :rofl:

Card Game
Distributed Shared Calculator
Live/Collaborative Markdown Editor


Setup the Algolia search engine. Closes #4741

Closes #4741
The appId and apiKey are safe to be checked into the codebase.
I've also moved the Mendable Float Button to the Footer component as I needed the search bar for Algolia.

Merged manually, thank you 👏


Microsoft.TypeScript.MSBuild throwing error on VSTS Build

TypeScript Version:  2.1.1-rc
When attempting to use the 2.1.1 RC in VSTS Build, I'm getting the same error as in this issue.
2016-11-27T17:03:24.2870039Z          C:\Program Files (x86)\Microsoft SDKs\TypeScript\1.8\tsc.exe --project "C:\a\1\s\Branches\Development\src\AdvancedREI.Cdn\tsconfig.json"
2016-11-27T17:03:24.2880037Z ##[error]Branches\Development\src\packages\Microsoft.TypeScript.MSBuild.2.1.1-rc\tools\microsoft.TypeScript.targets(231,7): Error MSB4064: The "OutputLogFile" parameter is not supported by the "VsTsc" task. Verify the parameter exists on the task, and it is a settable public instance property.
2016-11-27T17:03:24.2880037Z     27>C:\a\1\s\Branches\Development\src\packages\Microsoft.TypeScript.MSBuild.2.1.1-rc\tools\microsoft.TypeScript.targets(231,7): error MSB4064: The "OutputLogFile" parameter is not supported by the "VsTsc" task. Verify the parameter exists on the task, and it is a settable public instance property. [C:\a\1\s\Branches\Development\src\AdvancedREI.Cdn\AdvancedREI.Cdn.csproj]
2016-11-27T17:03:24.2880037Z ##[error]Branches\Development\src\packages\Microsoft.TypeScript.MSBuild.2.1.1-rc\tools\microsoft.TypeScript.targets(222,5): Error MSB4063: The "VsTsc" task could not be initialized with its input parameters.
2016-11-27T17:03:24.2880037Z     27>C:\a\1\s\Branches\Development\src\packages\Microsoft.TypeScript.MSBuild.2.1.1-rc\tools\microsoft.TypeScript.targets(222,5): error MSB4063: The "VsTsc" task could not be initialized with its input parameters.  [C:\a\1\s\Branches\Development\src\AdvancedREI.Cdn\AdvancedREI.Cdn.csproj]

The build process SHOULD be using the version in "Branches\Development\src\packages\Microsoft.TypeScript.MSBuild.2.1.1-rc\tools\tsc" but it is using the version installed in Program Files instead. I think the package needs to be updated to reference the specific version over the installed version. Probably by calling \tsc\tsc.exe instead of relying on the OS to resolve the executable.

can you share your project file?

I had this same problem with 2.1.4. I expected it to use what was in the nuget package (2.1.4), but instead it used what was installed on the machine on VSTS (1.8). Actually it used an older version, since the VSTS machines have 2.0.6 on them per https://www.visualstudio.com/en-us/docs/build/admin/agents/hosted-pool#software-on-the-hosted-build-server. It could be that I'm doing something wrong, but I'm not sure where to start.

From the project file, it seems that you are including both targets (ones installed on the machine, and ones in the nuget package). is this intentional?
Here is what i mean:
<!-- Coming from the Nuget package -->
<Import Project="..\packages\Microsoft.TypeScript.MSBuild.2.1.4\build\Microsoft.TypeScript.MSBuild.props" Condition="Exists('..\packages\Microsoft.TypeScript.MSBuild.2.1.4\build\Microsoft.TypeScript.MSBuild.props')" />

<!-- Coming from the what is installed on the machine, if they exist -->
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.Default.props" Condition="Exists('$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.Default.props')" />

<!-- Coming from the what is installed on the machine, if they exist -->
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.targets" Condition="Exists('$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.targets')" />

<!-- Coming from the Nuget package -->
<Import Project="..\packages\Microsoft.TypeScript.MSBuild.2.1.4\build\Microsoft.TypeScript.MSBuild.targets" Condition="Exists('..\packages\Microsoft.TypeScript.MSBuild.2.1.4\build\Microsoft.TypeScript.MSBuild.targets')" />

I'm having this same problem with 2.1.4 as well.  Like the others it works locally but fails in VSTS, i'm also assuming it must be using the typescript version that's installed on the VSTS machine.  My csproj file also has both targets but even when commenting out the machine targets I still get the error.
Here's the error on my end:
  C:\a\1\s\packages\Microsoft.TypeScript.MSBuild.2.1.4\tools\microsoft.TypeScript.targets(265,7): error MSB4064: The "OutputLogFile" parameter is not supported by the "VsTsc" task. Verify the parameter exists on the task, and it is a settable public instance property. [C:\a\1\s\Smokey.Web\Smokey.Web.csproj]
  C:\a\1\s\packages\Microsoft.TypeScript.MSBuild.2.1.4\tools\microsoft.TypeScript.targets(251,5): error MSB4063: The "VsTsc" task could not be initialized with its input parameters.  [C:\a\1\s\Smokey.Web\Smokey.Web.csproj]

And the relevant portions of my .csproj file.
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="..\packages\Microsoft.TypeScript.MSBuild.2.1.4\build\Microsoft.TypeScript.MSBuild.props" Condition="Exists('..\packages\Microsoft.TypeScript.MSBuild.2.1.4\build\Microsoft.TypeScript.MSBuild.props')" />
  <!-- <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.Default.props" Condition="Exists('$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.Default.props')" />
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> -->
  ...
  <PropertyGroup>
    ...
    <TypeScriptToolsVersion>2.1</TypeScriptToolsVersion>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
	...
    <TypeScriptTarget>ES5</TypeScriptTarget>
    <TypeScriptJSXEmit>None</TypeScriptJSXEmit>
    <TypeScriptCompileOnSaveEnabled>True</TypeScriptCompileOnSaveEnabled>
    <TypeScriptNoImplicitAny>True</TypeScriptNoImplicitAny>
    <TypeScriptModuleKind>CommonJS</TypeScriptModuleKind>
    <TypeScriptRemoveComments>True</TypeScriptRemoveComments>
    <TypeScriptOutFile />
    <TypeScriptOutDir />
    <TypeScriptGeneratesDeclarations>False</TypeScriptGeneratesDeclarations>
    <TypeScriptNoEmitOnError>True</TypeScriptNoEmitOnError>
    <TypeScriptSourceMap>True</TypeScriptSourceMap>
    <TypeScriptMapRoot />
    <TypeScriptSourceRoot />
    <TypeScriptStrictNullChecks>True</TypeScriptStrictNullChecks>
  </PropertyGroup>
  ...
  <!-- <Import Project="$(VSToolsPath)\TypeScript\Microsoft.TypeScript.targets" Condition="Exists('$(VSToolsPath)\TypeScript\Microsoft.TypeScript.targets')" /> -->
  ...
  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
	<PropertyGroup>
      <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
    </PropertyGroup>
    ...
    <Error Condition="!Exists('..\packages\Microsoft.TypeScript.MSBuild.2.1.4\build\Microsoft.TypeScript.MSBuild.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.TypeScript.MSBuild.2.1.4\build\Microsoft.TypeScript.MSBuild.props'))" />
    <Error Condition="!Exists('..\packages\Microsoft.TypeScript.MSBuild.2.1.4\build\Microsoft.TypeScript.MSBuild.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.TypeScript.MSBuild.2.1.4\build\Microsoft.TypeScript.MSBuild.targets'))" />
  </Target>
  ...
  <Import Project="..\packages\Microsoft.TypeScript.MSBuild.2.1.4\build\Microsoft.TypeScript.MSBuild.targets" Condition="Exists('..\packages\Microsoft.TypeScript.MSBuild.2.1.4\build\Microsoft.TypeScript.MSBuild.targets')" />
</Project>

@mhegazy - That was definitely not intentional. I'm guessing the tools and/or nuget added those at some point. And, somewhere along the line of me upgrading/downgrading both in the last day or so that went away. So now the build process is correctly using the tools that come with the nuget package, so I'm able to build with 2.1.4 on VSTS without any issue now. Thanks!

@tlmii did your csproj file change at all from your comment above?  Also, did you make any changes in VSTS?

I just updated my comment above, the problem was caused by the original targets like @mhegazy suspected.  This didn't work for me initially because I accidentally commented out the wrong  tag.  oops =P

@nickmkk can u share the build log from your server?

@robertmclaws is this the same issue you were running into?

Yes, finding the .props and the .targets references in the offending files solved the problem with VSTS build.
If you guys could figure out how to have the NuGet package update the Project files to remove those targets for us, so that other people don't run into this issue, that would be wicked awesome. Thanks!

the nuget package install script tries to remove the imports. but it is a regexp. some imports will be missed and will not be removed.

It seems like the regex is broken and needs to be expanded or adjusted.

Interestingly it was the scripts that ultimately removed it for me. Not on initial install, but somewhere in upgrading and downgrading the nuget packages it ended up doing it. I'll look back through my version history and see if I can tell which attempt(s) failed at removing and which attempt succeeded.

In Nuget v2 we used to have support for install.ps1 scripts that removes the machine-wide target/prop imports when the package is installed, but that has been deprecated in Nuget v3 (see more at https://github.com/NuGet/Home/issues/1020).
So under Nuget v3, When adding a nuget package to your project,  you need to manually remove the imports to the machine-wide targets and props. having both leads to unknown load order or targets/tasks, which would manifest in such errors.


Hotfix/ios rx upgrade

Update local versions of RxSwift and RxBluetoothKit to 5.1.1 and 6.0.0 .

will wait for compilable version!