User defined accelerator architecture not working

Hi,
I've been experimenting with ZigZag for a class project and I wanted to see if I could generate memory hierarchies using a genetic algorithm, then evaluate its performance with ZigZag. To test my class that converts genomes to ZigZag architecture descriptions, I tried to recreate TPU_like and run get_hardware_performance_zigzag() on it. However, I get the following error:
Traceback (most recent call last):
  File "/Users/rderi/Programming/.venv/lib/python3.12/site-packages/zigzag/classes/stages/SpatialMappingConversionStage.py", line 55, in run
    spatial_mapping, spatial_mapping_int = self.convert_user_spatial_mapping(
                                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/rderi/Programming/.venv/lib/python3.12/site-packages/zigzag/classes/stages/SpatialMappingConversionStage.py", line 144, in convert_user_spatial_mapping
    self.generate_limited_user_spatial_mapping(
  File "/Users/rderi/Programming/.venv/lib/python3.12/site-packages/zigzag/classes/stages/SpatialMappingConversionStage.py", line 227, in generate_limited_user_spatial_mapping
    oa_dim_size = next(
                  ^^^^^
StopIteration

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File<EMAIL_ADDRESS>line 198, in _run_module_as_main
    return _run_code(code, main_globals, None,
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File<EMAIL_ADDRESS>line 88, in _run_code
    exec(code, run_globals)
  File "/Users/rderi/.vscode/extensions/ms-python.debugpy-2024.0.0-darwin-arm64/bundled/libs/debugpy/adapter/../../debugpy/launcher/../../debugpy/__main__.py", line 39, in <module>
    cli.main()
  File "/Users/rderi/.vscode/extensions/ms-python.debugpy-2024.0.0-darwin-arm64/bundled/libs/debugpy/adapter/../../debugpy/launcher/../../debugpy/../debugpy/server/cli.py", line 430, in main
    run()
  File "/Users/rderi/.vscode/extensions/ms-python.debugpy-2024.0.0-darwin-arm64/bundled/libs/debugpy/adapter/../../debugpy/launcher/../../debugpy/../debugpy/server/cli.py", line 284, in run_file
    runpy.run_path(target, run_name="__main__")
  File "/Users/rderi/.vscode/extensions/ms-python.debugpy-2024.0.0-darwin-arm64/bundled/libs/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_runpy.py", line 321, in run_path
    return _run_module_code(code, init_globals, run_name,
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/rderi/.vscode/extensions/ms-python.debugpy-2024.0.0-darwin-arm64/bundled/libs/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_runpy.py", line 135, in _run_module_code
    _run_code(code, mod_globals, init_globals,
  File "/Users/rderi/.vscode/extensions/ms-python.debugpy-2024.0.0-darwin-arm64/bundled/libs/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_runpy.py", line 124, in _run_code
    exec(code, run_globals)
  File "/Users/rderi/Programming/Class/COSC461-S24/final/test/hierarchy_test.py", line 208, in <module>
    main()
  File "/Users/rderi/Programming/Class/COSC461-S24/final/test/hierarchy_test.py", line 195, in main
    energy, latency, cme = get_hardware_performance_zigzag(workload=workload,
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/rderi/Programming/.venv/lib/python3.12/site-packages/zigzag/api.py", line 78, in get_hardware_performance_zigzag
    answers = mainstage.run()
              ^^^^^^^^^^^^^^^
  File "/Users/rderi/Programming/.venv/lib/python3.12/site-packages/zigzag/classes/stages/Stage.py", line 49, in run
    for cme, extra_info in self.list_of_callables[0](
  File "/Users/rderi/Programming/.venv/lib/python3.12/site-packages/zigzag/classes/stages/ONNXModelParserStage.py", line 28, in run
    for cme, extra_info in sub_stage.run():
  File "/Users/rderi/Programming/.venv/lib/python3.12/site-packages/zigzag/classes/stages/MainInputParserStages.py", line 21, in run
    for cme, extra_info in sub_stage.run():
  File "/Users/rderi/Programming/.venv/lib/python3.12/site-packages/zigzag/classes/stages/SaveStage.py", line 99, in run
    for id, (cme, extra_info) in enumerate(substage.run()):
  File "/Users/rderi/Programming/.venv/lib/python3.12/site-packages/zigzag/classes/stages/SaveStage.py", line 148, in run
    for id, (cme, extra_info) in enumerate(substage.run()):
  File "/Users/rderi/Programming/.venv/lib/python3.12/site-packages/zigzag/classes/stages/ReduceStages.py", line 122, in run
    for cme, extra_info in substage.run():
  File "/Users/rderi/Programming/.venv/lib/python3.12/site-packages/zigzag/classes/stages/WorkloadStage.py", line 47, in run
    for cme, extra_info in sub_stage.run():
  File "/Users/rderi/Programming/.venv/lib/python3.12/site-packages/zigzag/classes/stages/SaveStage.py", line 34, in run
    for id, (cme, extra_info) in enumerate(substage.run()):
  File "/Users/rderi/Programming/.venv/lib/python3.12/site-packages/zigzag/classes/stages/ReduceStages.py", line 30, in run
    for cme, extra_info in substage.run():
  File "/Users/rderi/Programming/.venv/lib/python3.12/site-packages/zigzag/classes/stages/SpatialMappingGeneratorStage.py", line 156, in run
    for cme, extra_info in spatial_mapping_conversion_stage.run():
RuntimeError: generator raised StopIteration

This makes me wonder, does ZigZag support user-defined architectures as well? And if yes, what might've went wrong here? I know this might be a lot to read, but I'd appreciate any help.
My code, for reference
hierarchy.py
import numpy as np
from zigzag.classes.hardware.architecture.memory_instance import MemoryInstance
from zigzag.classes.hardware.architecture.memory_hierarchy import MemoryHierarchy
from zigzag.classes.hardware.architecture.core import Core
from zigzag.classes.hardware.architecture.accelerator import Accelerator

class Hierarchy:
    gene_dtype = np.int8
    def __init__(self, memory_instances, operational_array, genome):
        self.memory_instances = memory_instances
        self.n_memory_instances = len(memory_instances)
        self.operational_array = operational_array
        self.n_dims = len(operational_array.dimensions)
        self.genome = genome
        self._build_hierarchy_from_genome(genome)

    def _calculate_memory_instance_genome_length(self):
        return (
            1                   # memory_instance
            + 3                 # operands
            + 3 * 8             # port_alloc
            + self.n_dims       # served_dimensions
        )

    def _split_genome_into_memory_nodes(self, genome):
        memory_instance_length = self._calculate_memory_instance_genome_length()
        memory_nodes = np.zeros((self.n_memory_instances, memory_instance_length), dtype=self.gene_dtype)

        if len(genome) % memory_instance_length != 0:
            raise ValueError("Invalid genome length.")

        for i in range(self.n_memory_instances):
            memory_nodes[i] = np.array(genome[i * memory_instance_length : (i + 1) * memory_instance_length], dtype=self.gene_dtype)

        return memory_nodes

    def _generate_dimension_tuple(self, dim = None):
        tup = np.zeros(self.n_dims, dtype=self.gene_dtype)
        if dim is not None:
            tup[dim] = 1
        return tuple(tup)

    def _build_hierarchy_from_genome(self, genome):
        self.memory_hierarchy_graph = MemoryHierarchy(operational_array=self.operational_array)
        memory_nodes = self._split_genome_into_memory_nodes(genome)

        for memory_node in memory_nodes:

            #Step 1. Select memory instance based on idx stored in first gene
            memory_instance = self.memory_instances[int(memory_node[0])]

            #Step 2. Set memory operands based on the next 3 genes
            operands = ()

            #Values are 1 or 0 / truish or falsish
            I1_operand = memory_node[1]
            I2_operand = memory_node[2]
            O_operand = memory_node[3]

            if I1_operand:
                operands += ("I1",)
            if I2_operand:
                operands += ("I2",)
            if O_operand:
                operands += ("O",)

            #TODO: break if no operands are being used

            #Step 3. Set port_alloc based on the next 24 genes
            port_alloc = ()

            port_genes = []
            if I1_operand:
                port_genes += [memory_node[4:12]]
            if I2_operand:
                port_genes += [memory_node[12:20]]
            if O_operand:
                port_genes += [memory_node[20:28]]

            for port_gene in port_genes:
                operand_port_alloc = {}
                ports = ['fh', 'fl', 'th', 'tl']
                for i in range(len(ports)):
                    curr_port = ports[i]

                    curr_port_idx = i * 2 #Every port is represented by two genes
                    port_type = None if port_gene[curr_port_idx] == 0 \
                                else "r" if port_gene[curr_port_idx] == 1 \
                                else 'w' if port_gene[curr_port_idx] == 2 \
                                else "rw"
                    port_number = port_gene[curr_port_idx + 1]

                    port_str = f"{port_type}_port_{port_number}" if port_type is not None else None

                    operand_port_alloc[curr_port] = port_str
                port_alloc += (operand_port_alloc,)

            #Step 4. Set served_dimensions based on the next n_dims genes
            dimension_genes = memory_node[28 : 28 + self.n_dims]
            served_dimensions = set()
            n_served_dims = np.sum(dimension_genes)
            if n_served_dims == self.n_dims:
                served_dimensions = "all"
            elif n_served_dims == 0:
                served_dimensions.add(self._generate_dimension_tuple(None))

            else:
                for i in range(self.n_dims):
                    if dimension_genes[i] == 1:
                        served_dimensions.add(self._generate_dimension_tuple(i))

            #We're done, so we can add everything to the memory hierarchy graph
            self.memory_hierarchy_graph.add_memory(
                memory_instance=memory_instance,
                operands=operands,
                port_alloc=port_alloc,
                served_dimensions=served_dimensions
            )
    def get_core(self):
        core1 = Core(1, self.operational_array, self.memory_hierarchy_graph)
        return {core1}

    def get_accelerator(self):
        cores = self.get_core()
        return Accelerator('acc', self.get_core())

hierarchy_test.py
from zigzag.classes.hardware.architecture.memory_hierarchy import MemoryHierarchy
from zigzag.classes.hardware.architecture.memory_level import MemoryLevel
from zigzag.classes.hardware.architecture.operational_unit import Multiplier
from zigzag.classes.hardware.architecture.operational_array import MultiplierArray
from zigzag.classes.hardware.architecture.memory_instance import MemoryInstance
from zigzag.classes.hardware.architecture.accelerator import Accelerator
from zigzag.classes.hardware.architecture.core import Core
from zigzag.api import get_hardware_performance_zigzag

import numpy as np

#Import hierarchy.py from parent folder
import os
import sys
import inspect

currentdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
parentdir = os.path.dirname(currentdir)
sys.path.insert(0, parentdir)

from hierarchy import Hierarchy

memory_instances = [
    MemoryInstance(
        name="rf_128B",
        size=128 * 8,
        r_bw=8,
        w_bw=8,
        r_cost=0.095,
        w_cost=0.095,
        area=0,
        r_port=1,
        w_port=1,
        rw_port=0,
        latency=1,
    ),

    MemoryInstance(
        name="rf_2B",
        size=16,
        r_bw=16,
        w_bw=16,
        r_cost=0.021,
        w_cost=0.021,
        area=0,
        r_port=2,
        w_port=2,
        rw_port=0,
        latency=1,
    ),

    MemoryInstance(
        name="sram_2MB",
        size=131072 * 16 * 8,
        r_bw=128 * 16,
        w_bw=128 * 16,
        r_cost=26.01 * 16,
        w_cost=23.65 * 16,
        area=0,
        r_port=1,
        w_port=1,
        rw_port=0,
        latency=1,
        min_r_granularity=64,
        min_w_granularity=64,
    ),

    MemoryInstance(
        name="dram",
        size=10000000000,
        r_bw=64,
        w_bw=64,
        r_cost=700,
        w_cost=750,
        area=0,
        r_port=0,
        w_port=0,
        rw_port=1,
        latency=1,
    )
]

def multiplier_array_dut():
    """Multiplier array variables"""
    multiplier_input_precision = [8, 8]
    multiplier_energy = 0.04
    multiplier_area = 1
    dimensions = {"D1": 32, "D2": 32}  # {'D1': ('K', 32), 'D2': ('C', 32)}

    multiplier = Multiplier(
        multiplier_input_precision, multiplier_energy, multiplier_area
    )
    multiplier_array = MultiplierArray(multiplier, dimensions)

    return multiplier_array

multiplier_array = multiplier_array_dut()

genome = np.array([
    # Instance 1
    0,      #Memory instance
    0,      #Operands
    1,
    0,
    0, 0,   #I1 ports
    0, 0,
    0, 0,
    0, 0,
    2, 1,   #I2 ports
    1, 1,
    0, 1,
    0, 1,
    0, 0,   #O ports
    0, 0,
    0, 0,
    0, 0,
    0, 0,   #Served dimensions

    #Instance 2
    1,      #Memory instance
    0,      #Operands
    0,
    1,
    0, 0,   #I1 ports
    0, 0,
    0, 0,
    0, 0,
    0, 0,   #I2 ports
    0, 0,
    0, 0,
    0, 0,
    2, 1,   #O ports
    1, 1,
    2, 2,
    1, 2,
    0, 1,   #Served dimensions

    #Instance 3
    2,      #Memory instance
    1,      #Operands
    0,
    1,
    2, 1,   #I1 ports
    1, 1,
    0, 1,
    0, 1,
    0, 0,   #I2 ports
    0, 0,
    0, 0,
    0, 0,
    2, 1,   #O ports
    1, 1,
    2, 1,
    1, 1,
    1, 1,   #Served dimensions

    #Instance 4
    3,      #Memory instance
    1,      #Operands
    1,
    1,
    3, 1,   #I1 ports
    3, 1,
    0, 1,
    0, 1,
    3, 1,   #I2 ports
    3, 1,
    0, 1,
    0, 1,
    3, 1,   #O ports
    3, 1,
    3, 1,
    3, 1,
    1, 1,   #Served dimensions
    ])

def main():
    h = Hierarchy(memory_instances, multiplier_array, genome)
    print('done')
    from zigzag.visualization.graph.memory_hierarchy import (
            visualize_memory_hierarchy_graph,
        )

    visualize_memory_hierarchy_graph(h.memory_hierarchy_graph)

    mapping = "/Users/rderi/Programming/Class/COSC461-S24/final/test/tpu_like.py"
    accelerator = h.get_accelerator()
    workload = "/Users/rderi/Programming/Class/COSC461-S24/final/test/alexnet.onnx"
    dump_filename_pattern=f"outputs/Edge_TPU-alexnet-layer_?.json"
    pickle_filename = f"outputs/Edge_TPU-alexnet-saved_list_of_cmes.pickle"
    energy, latency, cme = 0, 0, 0
    #try:
    energy, latency, cme = get_hardware_performance_zigzag(workload=workload,
                                                    accelerator=accelerator,
                                                    mapping=mapping,
                                                    opt='energy',
                                                    dump_filename_pattern=dump_filename_pattern,
                                                    pickle_filename=pickle_filename)
    #except Exception as e:
    #    print(e)

    print(f"Total network energy = {energy:.2e} pJ")
    print(f"Total network latency = {latency:.2e} cycles")

if __name__ == "__main__":
    main()

Hi rderi, as far as I can tell, this error is caused by a bug within Zigzag's SpatialMappingGenerator, and not by the way you use the API. Thank you for letting us know!
I've just completely reworked the SpatialMappingGenerator and we're aiming to bring this into production within the next few weeks. If you would like to continue your work before then, I'd suggest you use the code from the robin-dev branch. However, there have been many other changes, and the docs have not been updated yet. If you're willing to give it a try, I can help in case you encounter new bugs.


Fix not validating values in EXPECT_NOTIFICATION with 1 occurence

table.pack() don`t packs the only one argument in the number-indexed
array and returns only that one argument. So, 1st elements of args
returns nil. Assignig of args itself solves issue of getting right
argument.
Related to: APPLINK-17030
Cloned from: https://github.com/CustomSDL/sdl_atf/pull/86

@malirod please review.

Need to check more cases of behavior.


This is the October 2023 Update (v2.18.0)

The Use functions rely on reflection doing the right things, which isn't necessarily correct on AOT.

Need to do input as well

Need to write the patch notes tomorrow and regen bindings. This shall be the last manual update, I decree it!

This is ready for review & release


feat(metrics): add option to specify dataset.

Add option to specify data set under which metrics timeseries will be created under when pushing metrics to cognite.

I've fixed the style and updated change log. However, pre-commit reports errors that are not related to the updated files/classes

The failing CI run is from the tests, and it's related to the updated files. This PR introduces a circular dependency which makes the tests (or anything else) incapable of importing anything from either module:

cognite.extractorutils.metrics depends on cognite.extractorutils.configtools.elements (imports EitherIdConfig)
cognite.extractorutils.configtools.elements depends on cognite.extractorutils.metrics  (it imports the pusher classes, of which CognitePusher uses EitherIdConfig)

This would cause an infinite recursion if the import system didn't catch it.
The metrics module can not depend on the configtools.elements module, neither should it. You should rewrite the change to the CognitePusher to take in an EitherId object instead of an EitherIdConfig, and in the  start_pushers method of MetricsConfig, you should initialize the EitherId from the EitherIdConifg.
Hope that helps!

@mathialo replaced EitherIdConfig with EitherId. pre-commit passing now

Great!
The remaining failures seem to be related to some credentials needed for integration tests, which are not available to PRs from external repos. I'll merge this into an intermediate branch, and add a new PR from that branch.

Thanks @mathialo

When this merges, the feature should be released https://github.com/cognitedata/python-extractor-utils/pull/272


Adds support for the smaller 64x32 ssd1306 displays

This is a simple fix to #52.
The values were found from a little experimentation with the displays and are further backed up by COM_PIN_CFG and DISP_CLK_DIV values found in discussions of the ssd1306 online that include reference to the 64x32 display.
I have tested the branch with ssd1306 128x32 and the smaller 64x32 displays and can confirm the fix solves the problem raised in #52 !
The library is great and I look forward to developing further with it for exciting new projects - thanks!

The discussion here, for example, supports the use of 0x12, not 0x02 (current behaviour) for the COM_PIN_CFG when using the 64x32 display (and also all known ssd1306 displays with a width of 64 pixels).


Delay instruction is perhaps not working

Information

Qiskit Terra version: main, stable
Python version: 3.9.5
Operating system: Linux (Ubuntu)

What is the current behavior?
Not sure if this issue belongs to the Terra repository or to another repository. I suspect that the machines ignore the delay instruction, because I don't see decoherence (i.e., excited qubits don't seem to tend towards the ground state as the delay increases).
Steps to reproduce the problem
from qiskit import IBMQ, QuantumCircuit, pulse

provider = IBMQ.load_account()
backend_names = ["armonk", "belem"]
backends = [provider.get_backend("ibmq_"+name) for name in backend_names]

delays = [1, 800]
delay_str = ["Short", "Long"]
methods = ["Delay", "Id"]
repeats = 4

print("Counts of ground state are expected to be small for short delay and large for long delay")
for backend, name in zip(backends, backend_names):
    id_length = backend.properties().gate_property("id", 0, "gate_length")[0]
    circs = []

    for method in methods:
        for d in delays:
            for i in range(repeats):
                circ = QuantumCircuit(1, 1)
                circ.x(0)

                if method == "Delay":
                    circ.delay(d, unit="us")
                else:
                    num_ids = int(d*1e-6 /  id_length)
                    assert(num_ids > 0)
                    for _ in range(num_ids):
                        circ.id(0)

                circ.measure(0, 0)
                circ.metadata = {"backend": name, "delay": d, "method": method}
                circs.append(circ)

    res = backend.run(circs).result()

    index = 0
    print("\nCounts of ground state in", name+":")
    for method in methods:
        print("  ", method, "instruction:")
        for d in delay_str:
            print("     ", d, "delay", repeats, "executions: ", end="")
            for i in range(repeats):
                print(res.get_counts(index)['0'], end=" ")
                index += 1
            print("")

Here's the output for Terra's main branch:
Counts of ground state are expected to be small for short delay and large for long delay

Counts of ground state in armonk:
   Delay instruction:
      Short delay 4 executions: 88 99 92 97
      Long delay 4 executions: 108 99 97 105
   Id instruction:
      Short delay 4 executions: 89 93 88 120
      Long delay 4 executions: 958 942 947 950

Counts of ground state in belem:
   Delay instruction:
      Short delay 4 executions: 96 86 93 93
      Long delay 4 executions: 104 87 74 89
   Id instruction:
      Short delay 4 executions: 104 115 129 101
      Long delay 4 executions: 999 1008 1004 1001

The choice of machines is arbitrary, and I've observed the same behavior also for additional machines. Similar results are obtained for stable Terra. Apart from Terra I use the stable branches, e.g, stable IBMQ. Am I doing something wrong in the code?

Note that it's important to solve this issue, in order to enable characterization experiments in qiskit-experiments.  @ajavadia @coruscating

It looks like the units are not understood.  Doing dt seems to work whereas us does not

Actually I think any unit is is interpreted as dt.  The unit seems to do nothing.

The circuit must be transpiled to go to dt after which it works.  This is a bit confusing because delay is in the basis set, so one would naively assume that it can be executed just like any other gate in the basis set can be.  There is nothing in the documentation that tells you this as well.

Yesterday I transpiled the circuit (the circuit then contained barriers, optimization level was 1); still I saw this phenomena in athens and santiago, but not in armonk. I'll try to reproduce.

The behavior is reproducible across systems such as Athens.

Consider the following code:
from qiskit import IBMQ, QuantumCircuit, execute

provider = IBMQ.load_account()
backend = provider.get_backend("ibmq_belem")

delays = [783, 790, 800]

circs = []
for d in delays:
    circ = QuantumCircuit(1, 1)
    circ.x(0)
    circ.delay(d, 0, unit="us")
    circ.measure(0, 0)
    circs.append(circ)

res = execute(circs, backend).result()
for i, d in enumerate(delays):
    print(d, ":", res.get_counts(i))

It works fine:
783 : {'0': 1016, '1': 8}
790 : {'0': 1010, '1': 14}
800 : {'0': 1010, '1': 14}

But removing 800 from the list of delays:
783 : {'1': 1024}
790 : {'1': 1024}

Can it be related to 800 being a multiple of 16 (thanks @eggerdj for the idea) ?  Replacing 800 by 784 gives an incorrect result. Replacing 784 by 800 again gives again a correct result - the behavior looks consistent - you need to have 800 around in order for everything to work.
P.S.  It also works fine when 800 is replaced by 816. But not 815. Can it be that the longest delay has to be a multiple of 16?
By the way, running transpile instead of execute results in circuits that make sense.

Just as a reference the transpiled circuits are in dt, e.g.
                 ┌───┐┌────────────────────┐┌─┐
        q_0 -> 0 ┤ X ├┤ Delay(3523500[dt]) ├┤M├
                 └───┘└────────────────────┘└╥┘
  ancilla_0 -> 1 ────────────────────────────╫─
                                             ║
  ancilla_1 -> 2 ────────────────────────────╫─
                                             ║
  ancilla_2 -> 3 ────────────────────────────╫─


translation error

Description
请看截图，这里是否应该使用“保存“比较好？
edit: by google translate: Please look at the screenshot, should it be better to use "Save" here?
Gitea Version
1.16.8
Can you reproduce the bug on the Gitea demo site?
No
Log Gist
No response
Screenshots

Git Version
2.8
Operating System
docker
How are you running Gitea?
docker
Database
PostgreSQL

I don't understand what you want to say as I can't speak Chinese.
If my guess of the content of your issue is correct, you want to say "The translation is incorrect", right?
Our translations are managed by Crowdin and are updated from there automatically.
You can create an account there, and update the corresponding text yourself.
You should be able to find it by searching for the current text.

Yes, I think the translation is unreasonable and not well understood in Chinese.
I'll go to crowdIn, thank you!

For more inforamtion: "保护" is correct here. It comes from "protect branch"

For more inforamtion: "保护" is correct here. It comes from "protect branch"

It's hard for me to understand why it's "Protect Tag", not "Save Tag".

Hmm ... maybe for most people, "Protect something" seems more intuitive, the text means the action. "Save" is too general, and no tag is saved indeed.
I still prefer to keep the word "Protect", and I think many people also prefer it (since the text and translations are there for many years).

Hmm ... maybe for most people, "Protect something" seems more intuitive, the text means the action. "Save" is too general, and no tag is saved indeed.
I still prefer to keep the word "Protect", and I think many people also prefer it (since the text and translations are there for many years).

Maybe I misunderstood. Here is the Git tag, not the label of issue


Error when running npm i

**I'm submitting a ...

[X] bug report
[ ] feature request
[ ] question about the decisions made in the repository

Issue description
node-pre-gyp WARN Tried to download(404): https://fsevents-binaries.s3-us-west-2.amazonaws.com/v1.2.4/fse-v1.2.4-node-v67-darwin-x64.tar.gz
node-pre-gyp WARN Pre-built binaries not found for<EMAIL_ADDRESS>and<EMAIL_ADDRESS>(node-v67 ABI, unknown) (falling back to source compile with node-gyp)
gyp ERR! configure error
gyp ERR! stack Error: Command failed: /anaconda3/bin/python -c import sys; print "%s.%s.%s" % sys.version_info[:3];
gyp ERR! stack   File "", line 1
gyp ERR! stack     import sys; print "%s.%s.%s" % sys.version_info[:3];
gyp ERR! stack                                ^
gyp ERR! stack SyntaxError: invalid syntax
gyp ERR! stack
gyp ERR! stack     at ChildProcess.exithandler (child_process.js:297:12)
gyp ERR! stack     at ChildProcess.emit (events.js:197:13)
gyp ERR! stack     at maybeClose (internal/child_process.js:984:16)
gyp ERR! stack     at Socket.stream.socket.on (internal/child_process.js:401:11)
gyp ERR! stack     at Socket.emit (events.js:197:13)
gyp ERR! stack     at Pipe._handle.close (net.js:611:12)
gyp ERR! System Darwin 18.2.0
Steps to reproduce:
just running npm i
Other information:
node: v11.10.1
npm: v6.7.0
OS:10.14.3 (18D109) (Mojave)
Chrome: Version 72.0.3626.121 (Official Build) (64-bit)

After spending all morning figuring out, I did the following steps:

Install nvm (https://github.com/creationix/nvm)

Run nvm install 8.9.0

Run npm i (if you get the sass error: "Node Sass could not find a binding for your current environment", then run npm rebuild node-sass, and finally run npm i again.

Happy coding!

I'm having similar issue after running npm i
><EMAIL_ADDRESS>install C:\Obralink\git\App proyectos\obralink-user-project-manager\node_modules\node-sass
> node scripts/install.js

Downloading binary from https://github.com/sass/node-sass/releases/download/v4.12.0/win32-x64-83_binding.node
Cannot download "https://github.com/sass/node-sass/releases/download/v4.12.0/win32-x64-83_binding.node":

HTTP error 404 Not Found

Hint: If github.com is not accessible in your location
      try setting a proxy via HTTP_PROXY, e.g.

      export HTTP_PROXY=http://example.com:1234

or configure npm proxy via

      npm config set proxy http://example.com:8080

><EMAIL_ADDRESS>postinstall C:\Obralink\git\App proyectos\obralink-user-project-manager\node_modules\node-sass
> node scripts/build.js

Building: C:\Program Files\nodejs\node.exe C:\Obralink\git\App proyectos\obralink-user-project-manager\node_modules\node-gyp\bin\node-gyp.js rebuild --verbose --libsass_ext= --libsass_cflags= --libsass_ldflags= --libsass_library=
gyp info it worked if it ends with ok
gyp verb cli [
gyp verb cli   'C:\\Program Files\\nodejs\\node.exe',
gyp verb cli   'C:\\Obralink\\git\\App proyectos\\obralink-user-project-manager\\node_modules\\node-gyp\\bin\\node-gyp.js',
gyp verb cli   'rebuild',
gyp verb cli   '--verbose',
gyp verb cli   '--libsass_ext=',
gyp verb cli   '--libsass_cflags=',
gyp verb cli   '--libsass_ldflags=',
gyp verb cli   '--libsass_library='
gyp verb cli ]
gyp info using<EMAIL_ADDRESS>gyp info using<EMAIL_ADDRESS>| win32 | x64
gyp verb command rebuild []
gyp verb command clean []
gyp verb clean removing "build" directory
gyp verb command configure []
gyp verb check python checking for Python executable "python2" in the PATH
gyp verb `which` failed Error: not found: python2
gyp verb `which` failed     at getNotFoundError (C:\Obralink\git\App proyectos\obralink-user-project-manager\node_modules\which\which.js:13:12)
gyp verb `which` failed     at F (C:\Obralink\git\App proyectos\obralink-user-project-manager\node_modules\which\which.js:68:19)
gyp verb `which` failed     at E (C:\Obralink\git\App proyectos\obralink-user-project-manager\node_modules\which\which.js:80:29)
gyp verb `which` failed     at C:\Obralink\git\App proyectos\obralink-user-project-manager\node_modules\which\which.js:89:16
gyp verb `which` failed     at C:\Obralink\git\App proyectos\obralink-user-project-manager\node_modules\isexe\index.js:42:5
gyp verb `which` failed     at C:\Obralink\git\App proyectos\obralink-user-project-manager\node_modules\isexe\windows.js:36:5
gyp verb `which` failed     at FSReqCallback.oncomplete (fs.js:192:21)
gyp verb `which` failed  python2 Error: not found: python2
gyp verb `which` failed     at getNotFoundError (C:\Obralink\git\App proyectos\obralink-user-project-manager\node_modules\which\which.js:13:12)
gyp verb `which` failed     at F (C:\Obralink\git\App proyectos\obralink-user-project-manager\node_modules\which\which.js:68:19)
gyp verb `which` failed     at E (C:\Obralink\git\App proyectos\obralink-user-project-manager\node_modules\which\which.js:80:29)
gyp verb `which` failed     at C:\Obralink\git\App proyectos\obralink-user-project-manager\node_modules\which\which.js:89:16
gyp verb `which` failed     at C:\Obralink\git\App proyectos\obralink-user-project-manager\node_modules\isexe\index.js:42:5
gyp verb `which` failed     at C:\Obralink\git\App proyectos\obralink-user-project-manager\node_modules\isexe\windows.js:36:5
gyp verb `which` failed     at FSReqCallback.oncomplete (fs.js:192:21) {
gyp verb `which` failed   code: 'ENOENT'
gyp verb `which` failed }
gyp verb check python checking for Python executable "python" in the PATH
gyp verb `which` succeeded python C:\Users\Axel\AppData\Local\Programs\Python\Python39\python.EXE
gyp ERR! configure error
gyp ERR! stack Error: Command failed: C:\Users\Axel\AppData\Local\Programs\Python\Python39\python.EXE -c import sys; print "%s.%s.%s" % sys.version_info[:3];
gyp ERR! stack   File "<string>", line 1
gyp ERR! stack     import sys; print "%s.%s.%s" % sys.version_info[:3];
gyp ERR! stack                       ^
gyp ERR! stack SyntaxError: invalid syntax
gyp ERR! stack
gyp ERR! stack     at ChildProcess.exithandler (child_process.js:390:12)
gyp ERR! stack     at ChildProcess.emit (events.js:400:28)
gyp ERR! stack     at maybeClose (internal/child_process.js:1055:16)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:288:5)
gyp ERR! System Windows_NT 10.0.19041
gyp ERR! command "C:\\Program Files\\nodejs\\node.exe" "C:\\Obralink\\git\\App proyectos\\obralink-user-project-manager\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild" "--verbose" "--libsass_ext=" "--libsass_cflags=" "--libsass_ldflags=" "--libsass_library="
gyp ERR! cwd C:\Obralink\git\App proyectos\obralink-user-project-manager\node_modules\node-sass
gyp ERR! node -v v14.17.5
gyp ERR! node-gyp -v v3.8.0
gyp ERR! not ok
Build failed with error code: 1
npm WARN<EMAIL_ADDRESS>requires a peer of<EMAIL_ADDRESS>but none is installed. You must install peer dependencies yourself.
npm WARN<EMAIL_ADDRESS>requires a peer of<EMAIL_ADDRESS>but none is installed. You must install peer dependencies yourself.
npm WARN<EMAIL_ADDRESS>requires a peer of<EMAIL_ADDRESS>but none is installed. You must install peer dependencies yourself.
npm WARN<EMAIL_ADDRESS>requires a peer of<EMAIL_ADDRESS>but none is installed. You must install peer dependencies yourself.
npm WARN<EMAIL_ADDRESS>requires a peer of<EMAIL_ADDRESS>but none is installed. You must install peer dependencies yourself.
npm WARN<EMAIL_ADDRESS>requires a peer of<EMAIL_ADDRESS>but none is installed. You must install peer dependencies yourself.
npm WARN<EMAIL_ADDRESS>requires a peer of<EMAIL_ADDRESS>but none is installed. You must install peer dependencies yourself.
npm WARN<EMAIL_ADDRESS>requires a peer of<EMAIL_ADDRESS>but none is installed. You must install peer dependencies yourself.
npm WARN<EMAIL_ADDRESS>requires a peer of<EMAIL_ADDRESS>- 3 but none is installed. You must install peer dependencies yourself.
npm WARN<EMAIL_ADDRESS>requires a peer of<EMAIL_ADDRESS>but none is installed. You must install peer dependencies yourself.
npm WARN<EMAIL_ADDRESS>requires a peer of<EMAIL_ADDRESS><11.0.0 || >9.0.0-beta <11.0.0 || >9.1.0-beta <11.0.0 || >9.2.0-beta <11.0.0 but none is installed. You must install peer dependencies yourself.
npm WARN<EMAIL_ADDRESS>requires a peer of<EMAIL_ADDRESS><11.0.0 || >9.0.0-beta <11.0.0 || >9.1.0-beta <11.0.0 || >9.2.0-beta <11.0.0 but none is installed. You must install peer dependencies yourself.
npm WARN<EMAIL_ADDRESS>requires a peer of<EMAIL_ADDRESS>but none is installed. You must install peer dependencies yourself.
npm WARN<EMAIL_ADDRESS>requires a peer of<EMAIL_ADDRESS>but none is installed. You must install peer dependencies yourself.
npm WARN<EMAIL_ADDRESS>requires a peer of<EMAIL_ADDRESS>but none is installed. You must install peer dependencies yourself.
npm WARN<EMAIL_ADDRESS>requires a peer of<EMAIL_ADDRESS>but none is installed. You must install peer dependencies yourself.
npm WARN<EMAIL_ADDRESS>requires a peer of<EMAIL_ADDRESS>but none is installed. You must install peer dependencies yourself.
npm WARN<EMAIL_ADDRESS>requires a peer of<EMAIL_ADDRESS>but none is installed. You must install peer dependencies yourself.
npm WARN<EMAIL_ADDRESS>requires a peer of<EMAIL_ADDRESS>but none is installed. You must install peer dependencies yourself.
npm WARN<EMAIL_ADDRESS>requires a peer of typescript@>= 2.3.1 < 3 but none is installed. You must install peer dependencies yourself.
npm WARN<EMAIL_ADDRESS>requires a peer of tslint@>= 4 < 6 but none is installed.  Exit status 1
npm ERR!
npm ERR! Failed at the<EMAIL_ADDRESS>postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR!      C:\Users\Axel\AppData\Roaming\npm-cache\_logs\2021-09-07T15_38_10_551Z-debug.log

2021-09-07T15_38_10_551Z-debug.log

After installing node-sass npm install node-sass the npm i ends successfully

using node v14 fixed this for me .

Hi,
2 things to try:

In package.json change "node-sass" version to "node-sass": "^7.0.1" or

Download and install python 2.7 and then....     npm config set python C:\Python27\python.exe

Let us know if this helped.

the last one fix on windows


Bump version of<EMAIL_ADDRESS>

This updates the version of minidump to 0.9 which includes a fix for building on ARM machines.
:computer: :muscle: :sparkles:
:link: https://github.com/atom/node-minidump/issues/5

Wish all the best to you!


Implement a PostCommitHookAsync method

Is your feature request related to a problem? Please describe.
It would be useful to implement a PostCommitHookAsync method to execute custom code after an entity has been successfully (or not) inserted, updated or deleted.
Describe the solution you'd like
Implement a PostCommitHookAsync method and call it just before the action method finishes to be able to execute custom code.
Describe alternatives you've considered
I'm overriding the CreateAsync, PatchAsync, ReplaceAsync and DeleteAsync methods to get the result and act depending on its value, but a PostCommitHookAsync method would be more convenient.

I like this idea, but I want to get more information on what you want to do with it so I can implement it the right way.
What sort of things are you thinking of doing in the PostCommitHook?
There are basically three ways to do this.

Register an event handler with the table controller.  Call the event handler right before you return.
Create a new type like the IAccessControlProvider that has the PostCommitHook inside it - allows you to access the HttpContext reasonably.
Add the PostCommitHook to the IAccessControlProvider.

Thoughts on which mechanism would fit your use case and why?

I usually do things like logging, sending notifications or starting batch jobs. Options 2 or 3 fit my scenarios better, as I usually access the HttpContext to get information about the current user. I implement the IAccessControlProvider in our custom BaseTableController, so centralising logging in the PostCommitHook is also easy using the PostCommitHook option.


add adhoc playbook to create pv for openshift namespace

Signed-off-by: siddharthvipul<EMAIL_ADDRESS>

Delegation to storage NFS server should be outside of this playbook but we can have a workaround with local mount on the vm used to manage openshift and do local operations.
Merging but let's fix it after


Fake LocalStorage for iOS privacy mode

Right now the FT app fixes broken localStorage implementations (eg. on iOS private browsing mode).  with a library called 'superstore' - https://github.com/matthew-andrews/superstore
Could there a way to deal with this via Polyfill?

This cannot fulfil the requirements to be part of the polyfill library I'm afraid.


Unable to compile "linux"

So I'm trying to install Osiris on Linux Debian (buster 10) (Language - Swedish which may implicate some messages are written in Swedish)
What I've done is.
1 Clone the repository
2 Made a "build" folder inside of Osiris
3 Did "cd Osiris/build" and then ran these 2 commands "cmake .." and "make -j12"
The first command "cmake .." worked and gave this output "
-- Configuring done
-- Generating done
-- Build files have been written to: /home/linusj/Osiris
After I ran "make -j12" and got this output
[  3%] Building CXX object CMakeFiles/Osiris.dir/Osiris/GameData.cpp.o
[  3%] Building CXX object CMakeFiles/Osiris.dir/Osiris/Config.cpp.o
[  5%] Building CXX object CMakeFiles/Osiris.dir/Osiris/GUI.cpp.o
[  7%] Building CXX object CMakeFiles/Osiris.dir/Osiris/Hacks/AntiAim.cpp.o
[  8%] Building CXX object CMakeFiles/Osiris.dir/Osiris/EventListener.cpp.o
[ 10%] Building CXX object CMakeFiles/Osiris.dir/Osiris/Hacks/Backtrack.cpp.o
[ 14%] Building CXX object CMakeFiles/Osiris.dir/Osiris/Hacks/Aimbot.cpp.o
[ 14%] Building CXX object CMakeFiles/Osiris.dir/Osiris/Hacks/EnginePrediction.cpp.o
[ 17%] Building CXX object CMakeFiles/Osiris.dir/Osiris/Hacks/Misc.cpp.o
[ 17%] Building CXX object CMakeFiles/Osiris.dir/Osiris/Hacks/Chams.cpp.o
[ 19%] Building CXX object CMakeFiles/Osiris.dir/Osiris/Hacks/SkinChanger.cpp.o
[ 21%] Building CXX object CMakeFiles/Osiris.dir/Osiris/Hacks/Glow.cpp.o
In file included from /home/linusj/Osiris/Osiris/SDK/Vector.h:5,
from /home/linusj/Osiris/Osiris/SDK/matrix3x4.h:12,
from /home/linusj/Osiris/Osiris/GameData.h:10,
from /home/linusj/Osiris/Osiris/EventListener.cpp:5:
/home/linusj/Osiris/Osiris/SDK/Utils.h:3:10: fatal error: numbers: Filen eller katalogen finns inte
#include
^~~~~~~~~
compilation terminated.
make[2]: *** [CMakeFiles/Osiris.dir/build.make:76: CMakeFiles/Osiris.dir/Osiris/EventListener.cpp.o] Fel 1
make[2]: *** Inväntar oavslutade jobb...
In file included from /home/linusj/Osiris/Osiris/Hacks/../SDK/Vector.h:5,
from /home/linusj/Osiris/Osiris/Hacks/../SDK/Engine.h:7,
from /home/linusj/Osiris/Osiris/Hacks/EnginePrediction.cpp:4:
/home/linusj/Osiris/Osiris/Hacks/../SDK/Utils.h:3:10: fatal error: numbers: Filen eller katalogen finns inte
#include
^~~~~~~~~
compilation terminated.
make[2]: *** [CMakeFiles/Osiris.dir/build.make:167: CMakeFiles/Osiris.dir/Osiris/Hacks/EnginePrediction.cpp.o] Fel 1
In file included from /home/linusj/Osiris/Osiris/Hacks/../SDK/Vector.h:5,
from /home/linusj/Osiris/Osiris/Hacks/../SDK/matrix3x4.h:12,
from /home/linusj/Osiris/Osiris/Hacks/Backtrack.h:8,
from /home/linusj/Osiris/Osiris/Hacks/Backtrack.cpp:1:
/home/linusj/Osiris/Osiris/Hacks/../SDK/Utils.h:3:10: fatal error: numbers: Filen eller katalogen finns inte
#include
^~~~~~~~~
compilation terminated.
In file included from /home/linusj/Osiris/Osiris/Hacks/../SDK/Vector.h:5,
from /home/linusj/Osiris/Osiris/Hacks/../SDK/Engine.h:7,
from /home/linusj/Osiris/Osiris/Hacks/AntiAim.cpp:3:
/home/linusj/Osiris/Osiris/Hacks/../SDK/Utils.h:3:10: fatal error: numbers: Filen eller katalogen finns inte
#include
^~~~~~~~~
compilation terminated.
make[2]: *** [CMakeFiles/Osiris.dir/build.make:141: CMakeFiles/Osiris.dir/Osiris/Hacks/Backtrack.cpp.o] Fel 1
make[2]: *** [CMakeFiles/Osiris.dir/build.make:128: CMakeFiles/Osiris.dir/Osiris/Hacks/AntiAim.cpp.o] Fel 1
In file included from /home/linusj/Osiris/Osiris/Hacks/../SDK/Vector.h:5,
from /home/linusj/Osiris/Osiris/Hacks/../SDK/matrix3x4.h:12,
from /home/linusj/Osiris/Osiris/Hacks/Backtrack.h:8,
from /home/linusj/Osiris/Osiris/GUI.cpp:30:
/home/linusj/Osiris/Osiris/Hacks/../SDK/Utils.h:3:10: fatal error: numbers: Filen eller katalogen finns inte
#include
^~~~~~~~~
compilation terminated.
In file included from /home/linusj/Osiris/Osiris/SDK/Vector.h:5,
from /home/linusj/Osiris/Osiris/SDK/matrix3x4.h:12,
from /home/linusj/Osiris/Osiris/GameData.h:10,
from /home/linusj/Osiris/Osiris/GameData.cpp:8:
/home/linusj/Osiris/Osiris/SDK/Utils.h:3:10: fatal error: numbers: Filen eller katalogen finns inte
#include
^~~~~~~~~
compilation terminated.
In file included from /home/linusj/Osiris/Osiris/Hacks/../SDK/Vector.h:5,
from /home/linusj/Osiris/Osiris/Hacks/../SDK/matrix3x4.h:12,
from /home/linusj/Osiris/Osiris/Hacks/Backtrack.h:8,
from /home/linusj/Osiris/Osiris/Hacks/Chams.cpp:9:
/home/linusj/Osiris/Osiris/Hacks/../SDK/Utils.h:3:10: fatal error: numbers: Filen eller katalogen finns inte
#include
^~~~~~~~~
compilation terminated.
make[2]: *** [CMakeFiles/Osiris.dir/build.make:89: CMakeFiles/Osiris.dir/Osiris/GUI.cpp.o] Fel 1
make[2]: *** [CMakeFiles/Osiris.dir/build.make:102: CMakeFiles/Osiris.dir/Osiris/GameData.cpp.o] Fel 1
In file included from /home/linusj/Osiris/Osiris/Hacks/../SDK/Vector.h:5,
from /home/linusj/Osiris/Osiris/Hacks/../SDK/matrix3x4.h:12,
from /home/linusj/Osiris/Osiris/Hacks/Backtrack.h:8,
from /home/linusj/Osiris/Osiris/Config.cpp:18:
/home/linusj/Osiris/Osiris/Hacks/../SDK/Utils.h:3:10: fatal error: numbers: Filen eller katalogen finns inte
#include
^~~~~~~~~
compilation terminated.
make[2]: *** [CMakeFiles/Osiris.dir/build.make:154: CMakeFiles/Osiris.dir/Osiris/Hacks/Chams.cpp.o] Fel 1
make[2]: *** [CMakeFiles/Osiris.dir/build.make:63: CMakeFiles/Osiris.dir/Osiris/Config.cpp.o] Fel 1
In file included from /home/linusj/Osiris/Osiris/Hacks/../SDK/Vector.h:5,
from /home/linusj/Osiris/Osiris/Hacks/../SDK/Engine.h:7,
from /home/linusj/Osiris/Osiris/Hacks/../SDK/Entity.h:6,
from /home/linusj/Osiris/Osiris/Hacks/Misc.cpp:20:
/home/linusj/Osiris/Osiris/Hacks/../SDK/Utils.h:3:10: fatal error: numbers: Filen eller katalogen finns inte
#include
^~~~~~~~~
compilation terminated.
In file included from /home/linusj/Osiris/Osiris/Hacks/../SDK/Vector.h:5,
from /home/linusj/Osiris/Osiris/Hacks/../SDK/Engine.h:7,
from /home/linusj/Osiris/Osiris/Hacks/../SDK/Entity.h:6,
from /home/linusj/Osiris/Osiris/Hacks/Aimbot.cpp:5:
/home/linusj/Osiris/Osiris/Hacks/../SDK/Utils.h:3:10: fatal error: numbers: Filen eller katalogen finns inte
#include
^~~~~~~~~
compilation terminated.
make[2]: *** [CMakeFiles/Osiris.dir/build.make:193: CMakeFiles/Osiris.dir/Osiris/Hacks/Misc.cpp.o] Fel 1
make[2]: *** [CMakeFiles/Osiris.dir/build.make:115: CMakeFiles/Osiris.dir/Osiris/Hacks/Aimbot.cpp.o] Fel 1
In file included from /home/linusj/Osiris/Osiris/Hacks/../SDK/Vector.h:5,
from /home/linusj/Osiris/Osiris/Hacks/../SDK/Engine.h:7,
from /home/linusj/Osiris/Osiris/Hacks/../SDK/Entity.h:6,
from /home/linusj/Osiris/Osiris/Hacks/Glow.cpp:10:
/home/linusj/Osiris/Osiris/Hacks/../SDK/Utils.h:3:10: fatal error: numbers: Filen eller katalogen finns inte
#include
^~~~~~~~~
compilation terminated.
make[2]: *** [CMakeFiles/Osiris.dir/build.make:180: CMakeFiles/Osiris.dir/Osiris/Hacks/Glow.cpp.o] Fel 1
In file included from /home/linusj/Osiris/Osiris/Hacks/../SDK/Vector.h:5,
from /home/linusj/Osiris/Osiris/Hacks/../SDK/Engine.h:7,
from /home/linusj/Osiris/Osiris/Hacks/SkinChanger.cpp:25:
/home/linusj/Osiris/Osiris/Hacks/../SDK/Utils.h:3:10: fatal error: numbers: Filen eller katalogen finns inte
#include
^~~~~~~~~
compilation terminated.
make[2]: *** [CMakeFiles/Osiris.dir/build.make:206: CMakeFiles/Osiris.dir/Osiris/Hacks/SkinChanger.cpp.o] Fel 1
make[1]: *** [CMakeFiles/Makefile2:73: CMakeFiles/Osiris.dir/all] Fel 2
make: *** [Makefile:84: all] Fel 2
(fyi Fel means error)
I'm not sure if what I've done is what I'm supposed to do. If not then what am I supposed to do, if otherwise how do I compile/fix this error?

@danielkrupinski hi

#2760

I did
cd Osiris/build
then
linusj@r2z26x1:~/Osiris/build$ cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_C_COMPILER=gcc-10 -D CMAKE_CXX_COMPILER=g++-10 ..
-- The C compiler identification is unknown
-- The CXX compiler identification is unknown
CMake Error at CMakeLists.txt:2 (project):
The CMAKE_C_COMPILER:
gcc-10
is not a full path and was not found in the PATH.
Tell CMake where to find the compiler by setting either the environment
variable "CC" or the CMake cache entry CMAKE_C_COMPILER to the full path to
the compiler, or to the compiler name if it is in the PATH.
CMake Error at CMakeLists.txt:2 (project):
The CMAKE_CXX_COMPILER:
g++-10
is not a full path and was not found in the PATH.
Tell CMake where to find the compiler by setting either the environment
variable "CXX" or the CMake cache entry CMAKE_CXX_COMPILER to the full path
to the compiler, or to the compiler name if it is in the PATH.
linusj@r2z26x1:~/Osiris/build$ cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_C_COMPILER=gcc-10 -D CMAKE_CXX_COMPILER=g++-10 ..
-- The C compiler identification is unknown
-- The CXX compiler identification is unknown
CMake Error at CMakeLists.txt:2 (project):
The CMAKE_C_COMPILER:
gcc-10
is not a full path and was not found in the PATH.
Tell CMake where to find the compiler by setting either the environment
variable "CC" or the CMake cache entry CMAKE_C_COMPILER to the full path to
the compiler, or to the compiler name if it is in the PATH.
CMake Error at CMakeLists.txt:2 (project):
The CMAKE_CXX_COMPILER:
g++-10
is not a full path and was not found in the PATH.
Tell CMake where to find the compiler by setting either the environment
variable "CXX" or the CMake cache entry CMAKE_CXX_COMPILER to the full path
to the compiler, or to the compiler name if it is in the PATH.
-- Configuring incomplete, errors occurred!
See also "/home/linusj/Osiris/CMakeFiles/CMakeOutput.log".
See also "/home/linusj/Osiris/CMakeFiles/CMakeError.log"

Do you have g++-10 installed? What does g++ --version return?

g++ (Debian 8.3.0-6) 8.3.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Install gcc-10 and g++-10.


[SPARK-14797] [BUILD] Spark SQL POM should not hardcode spark-sketch_2.11 dep.

Spark SQL's POM hardcodes a dependency on spark-sketch_2.11, which causes Scala 2.10 builds to include the _2.11 dependency. This is harmless since spark-sketch is a pure-Java module (see #12334 for a discussion of dropping the Scala version suffixes from these modules' artifactIds), but it's confusing to people looking at the published POMs.
This patch fixes this by using ${scala.binary.version} to substitute the correct suffix, and also adds a set of Maven Enforcer rules to ensure that _2.11 artifacts are not used in 2.10 builds (and vice-versa).
/cc @ahirreddy, who spotted this issue.

Test build #56495 has started for PR 12563 at commit 9dad944.

LGTM.

Test build #56495 has finished for PR 12563 at commit 9dad944.

This patch passes all tests.
This patch merges cleanly.
This patch adds no public classes.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/56495/
Test PASSed.

Merging in master.


fix(rpc): Calculate getblocktemplate RPC testnet min and max times correctly

Motivation
The min_time field in the getblocktemplate RPC is not being calculated correctly on testnet.
Closes #5871
Specifications

On Testnet from block height 299188 onward, the difficulty adjustment algorithm 6 allows minimum-difficulty blocks, as described in 10, when the block time is greater than a given threshold. This specification changes this threshold to be proportional to the block target spacing.
That is, if the block time of a block at height height ≥ 299188 is greater than 6 · PoWTargetSpacing(height) seconds after that of the preceding block, then the block is a minimum-difficulty block. In that case its nBits field MUST be set to ToCompact(PoWLimit), where PoWLimit is the value defined for Testnet in section 5.3 of the Zcash Protocol Specification 5, and ToCompact is as defined in section 7.7.4 of that specification 7.
...
This change does not affect Mainnet.

https://zips.z.cash/zip-0208#minimum-difficulty-blocks-on-testnet
Complex Code or Requirements
This is a consensus rule, and the calculations are a bit complex. But it only applies to testnet, so it's less risky.
Solution

Use the tip block for the min_time calculation (it's actually the first block in reverse order)
Only adjust times within the min and max range specified by the other consensus rules
Improve documentation

Review
Anyone can review this PR.
Reviewer Checklist

[x] Will the PR name make sense to users?

[ ] Does it need extra CHANGELOG info? (new features, breaking changes, large changes)

[x] Are the PR labels correct?
[x] Does the code do what the ticket and PR says?

[x] Does it change concurrent code, unsafe code, or consensus rules?

[x] How do you know it works? Does it have tests?

This fix gives us an exact match with zcashd:
$ ZCASH_CLI="zcash-cli-testnet" zcash-rpc-diff 38232 getblocktemplate
Checking first node release info...
Checking second node release info...
Connected to zebrad (port 38232) and zcashd (zcash-cli-testnet zcash.conf port).

Checking zebrad network and tip height...
Checking zcashd network and tip height...

Request:
getblocktemplate

Querying zebrad test chain at height >=2180007...

real    0m0.011s
user    0m0.005s
sys     0m0.006s

Querying zcashd test chain at height >=2180007...

real    0m0.023s
user    0m0.007s
sys     0m0.004s

Response diff between zebrad and zcashd:
--- /run/user/1000/tmp.0PycfC3DMm.rpc-diff/zebrad-test-2180007-getblocktemplate.json    2023-01-06 17:50:22.818172323 +1000
+++ /run/user/1000/tmp.0PycfC3DMm.rpc-diff/zcashd-test-2180007-getblocktemplate.json    2023-01-06 17:50:22.841172082 +1000
@@ -1,5 +1,6 @@
 {
   "capabilities": [
+    "proposal"
   ],
   "version": 4,
   "previousblockhash": "002d967dc24ef2ef34eb977fbfd67ef679f4fadf4c8caf84c3ba7d1dc9bf53b2",
@@ -24,7 +25,7 @@
     "sigops": 1,
     "required": true
   },
-  "longpollid": "00021800077623f6ef1672991854000000000000000000",
+  "longpollid": "002d967dc24ef2ef34eb977fbfd67ef679f4fadf4c8caf84c3ba7d1dc9bf53b226534",
   "target": "012bae0000000000000000000000000000000000000000000000000000000000",
   "mintime":<PHONE_NUMBER>,
   "mutable": [
@@ -37,6 +38,5 @@
   "sizelimit": 2000000,
   "curtime":<PHONE_NUMBER>,
   "bits": "20012bae",
-  "height": 2180008,
-  "maxtime":<PHONE_NUMBER>
+  "height": 2180008
 }

Proposal is in PR #5870, long polling is allowed to be different, and maxtime is not implemented by zcashd.

Same network error as:
https://github.com/ZcashFoundation/zebra/pull/5938#issuecomment-1378201078

@mergifyio update

@arya2 would you mind giving this PR a review some time in the next few days?

Failed in the merge queue due to a macOS timeout after downloading the Zcash parameters. Maybe we could increase that timeout:
https://github.com/ZcashFoundation/zebra/actions/runs/3932482431/jobs/6725103522

@mergifyio refresh

Failed in the merge queue due to #5958:
https://github.com/ZcashFoundation/zebra/actions/runs/3935154986/jobs/6730584282#step:9:2109

@mergifyio refresh


Query result dictionary order lost

aql = """FOR x IN Link
              FILTER CONTAINS(x._from, "Core")
              SORT x._from, x._to, x.Port1
              RETURN {[x._from]:x.Port1, [x._to]:x.Port2}"""
result = self.aql_query(aql)
print(result.result[0])

def aql_query(self, aql, rawResults=True, batchSize=100):
  query_result = self.db.AQLQuery(aql, rawResults=rawResults, batchSize=batchSize)
  return query_result

Link is a collection of edges in a topology.
Example of a document in Link:{"Port1":"Port2","Port2":"NM_Port1","_from":"Router/Core1","_to":"Router/Edge2","name":"Core1Edge2"}
Expected response while running pyArango code:
[{'Router/Core1': 'Port1', 'Router/Edge1': 'NM_Port1'}, {'Router/Core1': 'Port2', 'Router/Edge2': 'NM_Port1'}]
Received response while running pyArango code:
[{'Router/Edge1': 'NM_Port1', 'Router/Core1': 'Port1'}, {'Router/Edge2': 'NM_Port1', 'Router/Core1': 'Port2'}]
Expected and received response while running the query in the arango interface:
[{'Router/Core1': 'Port1', 'Router/Edge1': 'NM_Port1'}, {'Router/Core1': 'Port2', 'Router/Edge2': 'NM_Port1'}]
My understanding is - when python gets the query result, it does not care about the order in which the dictionaries are in the result. So even thought the sort function is present in the arango query, it is being overwritten.
I wonder if something can be done about this issue!

Hi @aishusreeni,
The results are normally stored in lists so the order should be the same.
@dothebart do you have an idea of what's going on?

Hi,
Quoting http://json.org/  :
An object is an unordered set of name/value pairs. An object begins with { (left brace) and ends with } (right brace). Each name is followed by : (colon) and the name/value pairs are separated by , (comma).
So you basically can't lean on the sequence of attributes in a json document; you can only sort lists.
Compared this with:
https://stackoverflow.com/questions/10844064/items-in-json-object-are-out-of-order-using-json-dumps
it seems that python supports sorting objects if you explicitely make it to.
You usually should lean on access by the key to object attributes, not by their sequence.


[Defaults]: The language code for the Philippines is tgl or tl which stands for Tagalog.

Link to File
Plex-Meta-Manager/defaults/overlays/languages.yml
Version Number
1.19.0
What branch are you on?
master
Describe the Bug
There is no "fl" in the List of ISO 639-1 https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes so the "fl" in the wiki Overlays page might be wrong.
I can't get the Philippine flag to appear when applying the overlays, even with tgl = tagalog or fil = filipino language tags on the MKV. I also made sure to add "fl" to the template_variables.

Would you mind joining us on the discord for PMM so that we can actively troubleshoot this please? I think there might be a mistake as well however I do not have any media items that have audio or subtitles in Filipino… so I don’t know the best way to resolve this at the moment. This yml is not looking at filename when creating the overlay so adding the code to the filename won’t help. We need to see the meta.log showing that it is looking for a file and that file is missing from our repo.

FYI, submitted a yml change to change fl to tl. This should resolve the issue you are facing

FYI, submitted a yml change to change fl to tl. This should resolve the issue you are facing

Oh thank you! I was about to hop on discord. That's awesome! cheers.

I tried running the nightly but it seems this is the output still:
| Validating Method: plex_search
| Value: {'all': {'audio_language': 'fl'}}

I still can't get the filipino flag to show up :(
Looks like even if the audio language code in the video is tgl or tl (tagalog), plex will interpret it as fil. Just tried nightly branch and no go.
| Validating Method: overlay                                                                         |
| Value: {'name': 'text(FL)', 'pmm': 'flag/square/ph', 'queue': 'flags', 'weight': 270, 'font': 'fonts/Inter-Bold.ttf', 'font_size': 50, 'font_color': '#FFFFFF', 'back_color': '#00000099', 'back_width': 190, 'back_align': 'left', 'addon_offset': 10, 'addon_position': 'left'} |
|                                                                                |
| Validating Method: ignore_blank_results                                                            |
| Value: True                                                                                |
|                                                                                |
| Validating Method: plex_search                                                                     |
| Value: {'all': {'audio_language': 'tl'}}

It looks like the PMM Wiki was updated, and "fil" was added! I'm trying it now!

Still no go. I just read the PMM logs and it's skipping the "fil" language code even tho I added "fil" in my template_variables: languages: in the config.yml
    - pmm: languages
      template_variables:
        languages: [en, de, fr, es, pt, ja, ko, zh, da, ru, it, hi, te, fa, th, nl,
          no, is, sv, tr, pl, cs, uk, hu, ar, bg, bn, bs, ca, cy, el, et, eu, fi,
          fl, gl, he, hr, id, ka, kk, kn, la, lt, lv, mk, ml, mr, ms, nb, nn, pa,
          ro, sk, sl, sq, sr, sw, tg, ta, ur, vi, tl, fil]

I didn't update docker... lol I'm so stupid! It works now! Thanks to bullmoose for taking the time to help!


Brother printer off: many messages in log

The problem
When I turn my Brother printer off, there are many message in the HA log:
" Could not fetch data from 192.168.xxx.yyy, error: No SNMP response received before timeout" and "Config entry for brother not ready yet. Retrying in 80 seconds.".
Environment

Info:
arch | x86_64
dev | false
docker | true
hassio | true
os_name | Linux
python_version | 3.7.6
version | 0.104.3
virtualenv | false

Integration causing this issue: Brother Printer

Problem-relevant configuration.yaml

Traceback/Error logs

Additional information

@bouwew please fill out the issue template :)

After restart HA tries to configure brother config entry but it isn't able to communicate with device (it is impossible to configure confog entry without data from the printer). You have to turn on printer for a while after HA restart.

Yes I understand. But I don't want my printer to be on all the time.
Maybe you code could send less messages to the log? And perform less scanning for the printer?
What is the time_interval between polls?

Home Assistant tries to configure integration and it's not related with integration code. Scan interval doesn't work on this stage.
I tried to add possibility to read necessary data (list of sensors and printer serial number) from registry when device is offline but reviewers didn't like that idea. Look here: https://github.com/home-assistant/home-assistant/pull/30359#discussion_r362954714

Well, OK.
But, I turn my Harman Kardon speaker with Google Assistant off during the night and I don't see any messages in the log related to it being off. Maybe send only messages to the log when the printer is on/detected? And maybe some other people, like the original reviewers of the code, can advise you?

There will be no errors if you turn off printer for night.
You can use logger configuration to decrease numbers of errors in log.
logger:
  default: error
  logs:
    homeassistant.components.brother: fatal

My default is "warn", I will set it to "error" for "brother".
Thanks!

You have to set fatal to brother.

Ok, in that case, maybe you should reconsider the status of your log-message. I would classify the messages I'm seeing in the log as warnings. Not as errors.

@bouwew Please reopen the issue.

The issue is solved.


feat: Win32 compatibility for wcc (MinGW64 MSYS)

Implements #156.
Requires MinGW64 MSYS as toolchain.
Notes:

Relies on #158 (long types are 32-bit, not 64-bit on Win32).
Adds two new vendor files from NetBSD (with permissive BSD license): ar.h and getline.h.
Moves most platform specifics into platform.c and platform.h.

Passes test-wcc and test-wcc-gen2 tests on Win32.

All tests pass. Ideally there should be no regression on POSIX platforms.

After careful consideration, I would like to reject this pull request because it is difficult for me to support the MinGW64 platform.
I apologize for not being able to meet your request.


[RFC] how should func default props be defined?

Summary
In the initial iteration of the v2.x Table we created a helper function that we used as the default for the callback props in the Table
https://github.com/IBM/carbon-addons-iot-react/blob/438ad2870dff041e9d9b00f5440dfc99eec001db/src/utils/componentUtilityFunctions.js#L115
The thought being that non required props could have a default function alerting the developer using the component that this should be implemented. This is a somewhat uncommon pattern - most other libraries either use null or a noop () => {}.

For PropTypes.func props, should we standardize the entire codebase to use:

Existing defaultFunction helper
null
noop () => {}

I personally lean towards option 2.
If there is any conditional logic relating to these props, a noop is truthy and difficult to tell between the default and a function passed in from a consumer/user. Whereas null is a very clear false saying "this function does not exist/should not be called" and is easy to tell when a consumer/user has utilized the prop.
Alternatively, if the default is null, we will have to implement nullchecks to ensure we don't call a null prop

@scottdickerson didn't we have a convo around this at one point? I can't remember your preference

Something additional to consider is test coverage. If functions are defaulted to null, we implement the null check, istanbul test coverage will be reduced because the else path is not taken.
If the defaults for this file were defined as noops, we would be able to call them without a null check. Currently there are three else paths not taken and is the only reason we are below 80% test coverage:

I'm fine with anything that doesn't log by default @tay1orjones

Something additional to consider is test coverage. If functions are defaulted to null, we implement the null check, istanbul test coverage will be reduced because the else path is not taken.
If the defaults for the file below were defined as noops, we would be able to call them without a null check. Currently there are three else paths not taken and is the only reason we are below 80% test coverage:

But are the lowered coverage misleading? Should we not test explicitly that these callbacks work?

Why not set the props to undefined?

I'm a fan of setting it to null, but the logic is essentially the same if its set to undefined too

@sstone2423 @davidicus @tay1orjones  Not sure if this issue is still valid w/ follow up work needed, or if it can be closed .


How to originate call to sendMessage as appMaker from Smooch.getCore()

Hi guys,
How can I original a call to Smoch.getCore().appUsers.sendMessage(…) as an appMaker (this should be done directly from the client running the sdk)?
Currently the documentation states:

For messages originating from an app maker, a jwt credential with app level scope must be used.

and an example is provided:
smooch.appUsers.sendMessage('5963c0d619a30a2e00de36b8', 'c7f6e6d6c3a637261bd9656f', {
    type: 'text',
    text: 'Just put some vinegar on it',
    role: 'appMaker'
}).then(() => {
    // async code
});

But there's no explanation on how to set the jwt credential for an already instantiated version of SmoochCore provided by the Smooch.getCore() method.
Thanks

How can I original a call to Smoch.getCore().appUsers.sendMessage(…) as an appMaker (this should be done directly from the client running the sdk)?

Sending appMaker messages from a client browser is not supported, and strongly discouraged. As you saw in the documentation, a JWT with app scope is required to send messages as an app maker. An app scope JWT should never be distributed to an end-user - it's intended to be used for server-to-server calls only. JWTs with scope app provide access to your entire user base, as well as APIs to configure your app itself. It has permission to:

create/modify webhooks for your app
manage you app's integrations
create new users, modify existing users, fetch conversation history and user profile for your entire userbase
and more...

To send a message as an app maker, you should have your own server instantiate an instance of smooch core, and send the message with a server-to-server call to Smooch.

Thanks Mike.
That makes sense, but it also seems a lot of work to just notify users with
predefined messages based on events isn't it?
Perhaps creating whispers based on events and fire those events via client
then?
Thanks
On Wed, 2 Aug 2017 at 05:39, Mike Spensieri<EMAIL_ADDRESS>wrote:

How can I original a call to Smoch.getCore().appUsers.sendMessage(…) as an
appMaker (this should be done directly from the client running the sdk)?
Sending appMaker messages from a client browser is not supported, and
strongly discouraged. As you saw in the documentation, a JWT with app
scope is required to send messages as an app maker. An app scope JWT should
never be distributed to an end-user - it's intended to be used for
server-to-server calls only. JWTs with scope app provide access to your
entire user base, as well as APIs to configure your app itself. It has
permission to:

create/modify webhooks for your app
manage you app's integrations
create new users, modify existing users, fetch conversation history
and user profile for your entire userbase
and more...

To send a message as an app maker, you should have your own server instantiate
an instance of smooch core
https://github.com/smooch/smooch-core-js#server-side, and send the
message with a server-to-server call to Smooch.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/smooch/smooch-core-js/issues/92#issuecomment-319659812,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAB9Ed3ChRh58MsbKCJcfLww_0Ttvmqxks5sUG36gaJpZM4Oqifb
.

Perhaps creating whispers based on events and fire those events via client
then?

Whispers are actually being deprecated as of October 1st, there was an email blast sent out at the beginning of July with that information. Our replacement guide outlines some ways your could build that functionality into your own backend, but yes it would require a bit of development effort to make that happen.

Thanks Mike.
Didn't know about the deprecation. I appreciate the heads up.
Will have a look on the samples.
All the best
On 3 August 2017 at 08:37, Mike Spensieri<EMAIL_ADDRESS>wrote:

Perhaps creating whispers based on events and fire those events via client
then?
Whispers are actually being deprecated as of October 1st, there was an
email blast sent out at the beginning of July with that information. Our replacement
guide https://docs.smooch.io/guide/whisper-replacements/ outlines some
ways your could build that functionality into your own backend, but yes it
would require a bit of development effort to make that happen.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/smooch/smooch-core-js/issues/92#issuecomment-319956587,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAB9EVJpKiNjrc71deLusQb7zGWsFrklks5sUb7tgaJpZM4Oqifb
.


Can't restore O3DS after System Transfer to N3DS

Well, finished the Transfer and my N3ds is good to go. Already hacked and working 100%.
But my O3ds is now "blocked", tried to do the "Section V - Restoring 3DS #1" of DSiware Downgrade
but it says "Failed" when trying to restore Sysnand from NAND.bin in Hourglass9. When it reads the NAND.bin.sha says failed because the file is corrupted.
Can I restore my O3ds any other way?

You can always try to restore any other backups you have, but if you're ballsy, you can delete NAND.bin.sha and restore without the validation

Deleted the other guy's comment because installing a NAND backup that you know is corrupted is a terrible idea.
Try reading Part 3...

If you are on New 3DS and do not have any usable NAND backups, follow 9.2.0 ctrtransfer starting on Step 4


Age adjustment race backend

https://github.com/SatcherInstitute/health-equity-tracker/issues/966
description doc
population doc

Pending Ebony response

Information on possible data sources here: https://docs.google.com/document/d/1SjlVHQjiuTbW7FJISVaKYPnWk_DoCITFE5qzRDxIb0c/edit#

Suggestions from the CDC:

Round rates to one decimal place.
Display some sort of message when a ration is < .1x
Restrict the population of states that don’t have enough deaths
Switch to 2020 census pop numbers when they come out
Maybe show the un-age adjusted ratios


Cleaned up whitespace.

Added ```sql.

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

Please do not remove the spacing, as in markdown, and a "double-space" creates a new line.
For example, the See Also section is not shown as a list now.
Since we are editing these files now, I will close and reject these changes.
Please review this article again in August 2020 to see if any other changes need to be made.
Thank you.


Use a different shell for updating plugins and editing the config file

I have configured hyper so that it opens an ssh (actually mosh) session to a remote server.
That works beautifully, except that editing the configuration file doesn't work any more, and I constantly get 'plugin update failed' errors. That's expected - after all the config file and plugins aren't stored on the remote server, but locally.
I'd like to be able to configure a different shell for actions that need to be run locally. I think it'd even work to just always use /bin/sh for the purpose invoking nano/npm.
This is somewhat related to #1142 and #1166 - users reporting the same issue when using fish rather than bash as the default shell.
Because you asked, I'm using the latest master (25fcf3a6a4ec6abaeeaf17a1f6681e4c025483af) on mac.

Makes sense. I think wrapping the editing command with sh is a very good idea. Thanks for filing this issue @piscisaureus

cf. #901

Is there a workaround for updating plugins other than changing shell and back? (I haven't had any until today, when I found keymap and hyperlink, but of course they won't install...)
i.e. can I run some npm command somewhere?

@OJFord as a workaround I found you can set shell to e.g. zsh, then execute fish through shellArgs:
shellArgs: ['-c', '/usr/local/bin/fish', '--login'],

The update mechanism doesn't use shellArgs, only the value of shell.


Check Engine MP Data Update Scripts for Testing

Dewayne is going to create scripts to make changes to the existing client data, extract those changes to be applied to cloud.gov development environment so that the new results can be compared to the existing process.

Push as much data through as possible
Create Dummy Data to ensure that the checks are working properly
Create a process for automating the unit testing process


URI Retriever: follow http redirects using Curl by default

The CurlURIRetriever will fallback to the FileGetContents one with relative paths as I understood that file paths and actual URIs were using the same retriever.
Please let me know if my assumption is false.

@soyuka We are working on bringing back this library in an active and maintained state.
I was looking into this PR and was kind of confused over what it is that is being solved, are your proposing a fix for an issue of are you adding a new feature? In its current state it seems to be doing a mix of both.
Could you explain a bit more in detail what this PR aims to do?

Closing the PR for now due to lack of feedback. You're very welcome to get back and reopen this PR with additional feedback.


Relax version constraint

Better solution for #431. I have tested compatibility with opencv, and bindgen 0.54 causes dependency hell because clang which opencv uses relies on a different version of clang-sys from bindgen-0.54.0. Relaxing to >=0.53, <0.55 should fix the problem.
Note that bindgen-0.53 introduces a breaking change from bindgen-0.52.

Thanks for the PR! However this does cover two minor versions. Are you sure that godot-rust is not affected by the breaking changes between 0.53 and 0.54?

I read the changelog here: https://github.com/rust-lang/rust-bindgen/blob/master/CHANGELOG.md#0540.
I think these are just polish changes.
Beyond that I am not fully certain.

Seems like the breaking changes were about Objective-C, which shouldn't affect our use case. Seems fine, then. @karroffel What do you think?

Seems like the breaking changes were about Objective-C, which shouldn't affect our use case. Seems fine, then. @karroffel What do you think?

If it works then it's fine I guess, I do fear that there will still be inconsistencies with other crates that use clang-sys of even other versions.
I personally would just aim for supporting the latest version of bindgen every few months and encourage others to use [patch] sections locally instead if there are conflicts between dependencies. This seems to be an issue with the ecosystem in terms of semver handling and stability and it's not really our power to fix it. But for now we can keep this flexible version constraint I'd say.

@rongcuid Is this impossible to fix with [patch] sections?

Sorry, I was completely unaware of [patch] previously. I will try it in a moment

I confirm something like this works:
[patch.crates-io]
gdnative = { path = '../godot-rust/gdnative' }

And in the local version, I relax the constraints.

That's good, I would be a bit more comfortable pushing the version fiddling to users because I don't think we can please everybody in the long run at least. So if this is an acceptable solution for you I'd prefer to stay on latest bindgen for the time being?

Sure


SetScreenName on Web

Is your feature request related to a problem? Please describe.
I'm wondering why "setScreenName" is not available on Web, since we would love to track everything the same way on Android, iOS and Web.
Describe the solution you'd like
Basically the method "setScreenName" would be required to work on Web, also a potential automatic screen tracking must be disabled.
Describe alternatives you've considered
I'm not sure if there's an alternative.

Nevermind, there's actually the possibility to to use the logEvent method with event name "screen_view". See https://firebase.google.com/docs/analytics/screenviews#web-version-8 for reference, just in case somebody else is having the same issue.

Nevermind, there's actually the possibility to to use the logEvent method with event name "screen_view". See https://firebase.google.com/docs/analytics/screenviews#web-version-8 for reference, just in case somebody else is having the same issue.

Hi, I have the same issue. Logging the screen_view event does work, but the automatic page tracking is still enabled for web an I see no way to disable it for web. Did you find any solution to this?


Fix duplicate updates when saving assocation

When using Replace to update a has-many association, items in the replace array are being updated more than once.  This happens because on each run through the loop of values, it saves all previous values in the array.  As the number of elements being set grows, it becomes quite slow.
It appears that the saveAssociation method is already setup to handle arrays correctly, so there is no need to loop here.  Removing the loop resolves the issue.
An example from the docs:
db.Model(&user).Association("Languages").Replace([]Language{languageZH, languageEN})
The above could would generate:
UPDATE for languageZH
UPDATE for languageZH (duplicated)
UPDATE for languageEN
DELETE to clean up old languages
adding a third language, would add 3 additional UPDATE statements (another for languageZH, and languageEN, plus one for the additional language)

This actually breaks tests for me
--- FAIL: TestManyToMany (0.24s)
panic: reflect: call of reflect.Value.Interface on zero Value [recovered]
        panic: reflect: call of reflect.Value.Interface on zero Value

goroutine 69 [running]:
panic(0x89d860, 0xc082757c80)
        C:/Go/src/runtime/panic.go:481 +0x3f4
testing.tRunner.func1(0xc08202f290)
        C:/Go/src/testing/testing.go:467 +0x199
panic(0x89d860, 0xc082757c80)
        C:/Go/src/runtime/panic.go:443 +0x4f7
reflect.valueInterface(0x0, 0x0, 0x0, 0x81f801, 0x0, 0x0)
        C:/Go/src/reflect/value.go:913 +0x86
reflect.Value.Interface(0x0, 0x0, 0x0, 0x0, 0x0)
        C:/Go/src/reflect/value.go:908 +0x4f
github.com/zardak/gorm.createCallback(0xc082762780)
        D:/Projects/go/src/github.com/zardak/gorm/callback_create.go:58 +0x1598
github.com/zardak/gorm.(*Scope).callCallbacks(0xc082762780, 0xc082060280, 0xa, 0x10, 0x7f6e60)
        D:/Projects/go/src/github.com/zardak/gorm/scope.go:806 +0x6f
github.com/zardak/gorm.(*DB).Save(0xc082768b40, 0x7f6e60, 0xc082757b60, 0x7f6e60)
        D:/Projects/go/src/github.com/zardak/gorm/main.go:367 +0xa2
github.com/zardak/gorm.(*Association).saveAssociations.func1(0x7f6e60, 0xc082757b60, 0x16)
        D:/Projects/go/src/github.com/zardak/gorm/association.go:314 +0x33e
github.com/zardak/gorm.(*Association).saveAssociations(0xc08276cab0, 0xc0823e59b0, 0x1, 0x1, 0x68)
        D:/Projects/go/src/github.com/zardak/gorm/association.go:356 +0x25a
github.com/zardak/gorm.(*Association).Append(0xc08276cab0, 0xc0823e59b0, 0x1, 0x1, 0xc08275b380)
        D:/Projects/go/src/github.com/zardak/gorm/association.go:32 +0xf4
github.com/zardak/gorm_test.TestManyToMany(0xc08202f290)
        D:/Projects/go/src/github.com/zardak/gorm/association_test.go:631 +0xdd5
testing.tRunner(0xc08202f290, 0xcfcf48)
        C:/Go/src/testing/testing.go:473 +0x9f
created by testing.RunTests
        C:/Go/src/testing/testing.go:582 +0x899

Yes, also broken the tests for me.
actually the saveAssociation doesn't handle arrays, it only assign a single association back to a array Field.
Thank you for your PR anyway.


Cortana Channel Documentation - Update for retirement

We might want to think about re-writing or removing this document as Cortana has removed the Skills capability and this content might need a refresh as this is being retired.

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: 28d57239-40c4-16b9-8f33-b4ccd910158f
Version Independent ID: 7e275b0e-8352-9beb-aa35-80177d69b7c8
Content: Connect a bot to Cortana - Bot Service
Content Source: articles/bot-service-channel-connect-cortana.md
Service: bot-service
GitHub Login: @RobStand
Microsoft Alias: kamrani

@Dewain27 I'll do a little research, and hopefully update this article in Jan.

@Dewain27 Cortana is labeled as fully retired now.


gpu available for create data embs

https://app.shortcut.com/galileo/story/3827/create-data-embs-defaults-to-true-if-a-gpu-is-available

Codecov Report

Merging #518 (57d42b9) into main (ba94f69) will decrease coverage by 0.02%.
The diff coverage is 100.00%.

@@            Coverage Diff             @@
##             main     #518      +/-   ##
==========================================
- Coverage   91.23%   91.21%   -0.02%
==========================================
  Files         128      128
  Lines        9866     9871       +5
==========================================
+ Hits         9001     9004       +3
- Misses        865      867       +2

Impacted Files
Coverage Δ

dataquality/dq_auto/auto.py
38.09% <ø> (ø)

dataquality/dq_auto/text_classification.py
98.68% <ø> (ø)

dataquality/core/finish.py
100.00% <100.00%> (ø)

dataquality/utils/auto_trainer.py
93.75% <100.00%> (+0.41%)
:arrow_up:

dataquality/utils/helpers.py
91.30% <100.00%> (+0.60%)
:arrow_up:

tests/test_dataquality.py
99.47% <0.00%> (-0.53%)
:arrow_down:

dataquality/clients/api.py
50.00% <0.00%> (-0.16%)
:arrow_down:

:mega: We’re building smart automated test selection to slash your CI/CD build times. Learn more


Transfer submission files (script, JDF) to dCache at submission time?

This is for discussion: right now we have to transfer the description file to the job, in order for it to get copied out to dCache. We could copy it and the script there right at submission time from jobsub_submit.
Pros:

creates output destination, users won't get 404 error trying to see what files are there (currently it won't be created until the first job has finished)
don't have to copy the JDF in input_files

Cons:

more complexity in jobsub_submit, including IFDH (?) dependency... or maybe we just do straight webDAV calls since it's a very well-defined transfer?

So we have a "cp" in fake_ifdh.py already, it just directly calls gfal-copy. (already used for pnfs tarfile caching).

I think we need this sooner than later, jobs are still getting held from failing to copyback "simple.sh" so let's just get rid of it.

Yeah - let's do it.  We can even sneak in a 1.1.3 release if nothing else is ready in a few days.


'ScriptSession' object has no attribute 'update'

Hey there,
the method ScriptSession.update() does not exist.
[12:52:50][WARN] Traceback (most recent call last):
  File "C:\Users\super\Desktop\EDAutopilot\scripts\robigo.py", line 273, in run
    session.update()
AttributeError: 'ScriptSession' object has no attribute 'update'

I don't know if this is related to this issue, but when I run robigo.py the script crashes just before selecting "Pick Cabin"
Have a nice day,
supermopf

Sorry for inconvenience.
Just remove all session.update() since now every update is event-driven and there's no need to manually trigger update()

13df2223923278c48f32e038202c8f79008d751b


[OSF-7636] Fix bug in auto populating tags

Purpose
The feature to inherit tags from the parent node didn't account for tags that had just been added (tags which added on the backend, but not yet loaded in the frontend contextVars), this changes makes sure the contextVars always reflect reality.
Changes
On a successful Ajax request adding or removing tags, the contextVars are changed to reflect this.
Side effects
None that I know of.
Ticket
https://openscience.atlassian.net/browse/OSF-7636

Yes


Marker image screwed up on draggable=false

Strange behaviour of Marker component. When I set draggable = true it looks just fine, but draggable = false, and it suddenly stops showing properly.
This is how it looks on chrome. On FF markers just disappear.
Marker options:
Object {draggable: true, mapHolderRef: GoogleMapHolder, position: Object}

Marker options:
Object {draggable: false, mapHolderRef: GoogleMapHolder, position: Object}

G.jpg

Weird…

Try using Symbol to define your icon instead of png?

What do you mean? My icon is base64 encoded svg.

Sorry, I don't know why this would happen. Could you try native Google Maps JavaScript API v3 and see if it's still have the same bug?

Close for inactivity.
Also,  6.0.0 is released on npm beta tag now. See the changelog here. We also have a new demo page. Feel free to try it:
https://tomchentw.github.io/react-google-maps/

Have/had same issue. Removing this from the icon definition worked although I had to edit the svg setting height and width to 32 to compensate.
scaledSize: new google.maps.Size(32,32)


all: update to wazero upstream

THis PR updates the examples to use the main wazero instead of the fork we were previously needing. Yes!

You are correct. Once https://github.com/tetratelabs/wazero/pull/2166 lands it does work again :smile_cat:

Just force pushed the modules references using the latest wazero that include those changes, and all is passing. I think we can merge now.


missing constant PENDING_EXIT

Issue
PENDING_EXIT was accidentally removed from beacon chain spec.
proposed solution
add it back

Closing in favour of https://github.com/ethereum/eth2.0-specs/issues/225


States Fields + Validations + Interventions

Updated the states fields to include the updated fields we use for counties
loop through the interventions and upload them all
changed where the build_dod_dataset output lands for file structure joy
added a validations folder that doesn't let you upload if things are bad (ie it's not the right size-ish) or it's missing states/expected headers

Overall solid work.  Would love to get that validation in there.


cudnn.deterministic been set while import, suggestion to avoid this kind of behavior

https://github.com/microsoft/nni/blob/e85f029bd4e4b1bdf3e679893fb6447e4d6b2c79/nni/algorithms/compression/pytorch/pruning/amc/amc_pruner.py#L17
This line of code executes when someone just import nni.algorithms.compression.pytorch.pruning, I suggest to move it into the constructor function of AMCPruner and reset cudnn.deterministic after training because it changed an import setting but does not tell the user.

@mstczuo - would you like to submit a PR for the suggestion? thanks.

@mstczuo - would you like to submit a PR for the suggestion? thanks.

sure. I have submitted this PR: #4139

PR #4161 solved this issue.


[Feature] Store snapshots from multiple simulators side-by-side

We're just starting to use this wonderful library, and already we're scope-creeping it to solve problems it was never intended to...
Namely: it looks like it will do a beautiful job of cross-OS-version/cross-device regression testing, except for the fact that the snapshot filename doesn't depend on any of the simulator details. I see #128 is related, where you suggest the workaround of naming the file by hand, but the problem is more general than just display scale: in particular we're interested in regression testing for OS behaviour changes over different versions, and the by-hand approach gets out of control pretty quickly.
I'm wondering if we could do something more systematic, by encoding some relevant details of the simulator setup in the filename: definitely OS version and device display scale, there might be more. I guess it should be opt-in, or use the current naming scheme as a fallback, or something similar.
I'd be happy to take a crack at a PR if y'all would be open to this idea, what do you think?

Hey @tikitu!
Yeah this is coming up often enough that we definitely think it needs to be baked in. It'll be a breaking change so let's add a new global configuration to opt into it, and then we can enabled it by default in SnapshotTesting 2.0.
We'd want to bake in:

OS
Color gamut
Device scale
(Anything else?)

Some examples:
// unnamed first (index 1) snapshot of "testMyView" test, iOS 12.1, SRGB gamut
<EMAIL_ADDRESS>
// "customName"-named snapshot of "testMyView" test, iOS 12.0, P3 gamut
<EMAIL_ADDRESS>
This means the current delimiter is changing from . to -, but it makes the OS version read a bit more nicely.
One other requirement: we should only record automatically if no screen shot exists for this test. If you run on a simulator, record a snapshot, and then run on an incompatible simulator, it should not record another snapshot, it should fail with an error about an existing snapshot for a different simulator type. In order to recover the ability to record for multiple simulators, one could either:

Explicitly set record = true
We could introduce another global, SnapshotTesting.supportedPlatforms, that turns auto-record on for some explicit platforms.

Whatcha think?

Sounds good, thanks for the feedback! For recording to multiple simulators I'll have to try out some variations, I don't yet have a good feel for the kinds of errors one can make (how often am I going to be surprised by record = true on the wrong simulator if that's the API?).
My team will be using this once we get it figured out, so I can contribute in work hours: I'll make a first attempt in the coming week.

Do we have any non-image use cases for this machinery? If not, I'd like to somehow avoid forcing e.g. text-snapshots to be re-recorded multiple times. A first suggestion for how would be to get Snapshotting<Value, Format> to answer the question "do I care about image properties?": if yes we do the filename dance, if no we keep it simple. (A more elaborate version puts Snapshotting in charge of the filename additions too, but that complicates SnapshotTesting.supportedPlatforms or equivalent, so I'd like to see a use case before going that way, unless y'all feel strongly that it's preferable.)

Hoho, and I guess I also need to ask with which device/simulator you generated the tests for your library, because indeed a few of the tests fail for what I suspect to be exactly this reason!

Hey here! Any update on this? :)

Whoops, I should come back to this but I'm struggling to find time to work on it. It's still something my team would like, though, so I will eventually be able to pick it up again.

Hi everyone! Any updates on this issue/feature?


emacs-modes: add buildInputs override for erlang

Motivation for this change
Erlang mode needs perl5 and ncurses to build, add buildInputs override.
Things done
Using this branch as my nixpkgs upstream, I've compiled this with the latest commit nix-community/emacs-overlay@f9f4e40f55c9e3d9b0fba29f14ac5d7cffecf675.  Everything checked out, I was able to build.  Without this change, the erlang-mode fails to build due to missing buildInputs.

[ ] Tested using sandboxing (nix.useSandbox on NixOS, or option sandbox in nix.conf on non-NixOS linux)
Built on platform(s)

[X] NixOS
[ ] macOS
[ ] other Linux distributions

[ ] Tested via one or more NixOS test(s) if existing and applicable for the change (look inside nixos/tests)
[ ] Tested compilation of all pkgs that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review wip"
[ ] Tested execution of all binary files (usually in ./result/bin/)
[ ] Added a release notes entry if the change is major or breaking
[ ] Fits CONTRIBUTING.md.

This pull request has been mentioned on NixOS Discourse. There might be relevant details there:
https://discourse.nixos.org/t/prs-ready-for-review/3032/529

@adisbladis: What do I need to do to get this merged now?  There was a conflict earlier which has been resolved.  Is there anything else necessary?

@kennyballou please change the commit description to
elisp-packages: add perl5 and ncurses to buildInputs via overrideAttrs

@AndersonTorres: I have rebased and updated the summary line of the commit to the requested description.  Thank you!


Remove TDD docs, add more info on running tests

What kind of PR is this?
/kind docs
What does does this PR do / why we need it:

Removes TDD documentation which is outdated / we no longer use it.
Adds documentation on how to run a single test

Which issue(s) this PR fixes:
Fixes #2295
How to test changes / Special notes to the reviewer:
N/A
Signed-off-by: Charlie Drage<EMAIL_ADDRESS>

#2330 will fix the flake observed in ci/prow/v4.1-integration

/honk

/retest

/test v4.3-integration

/test v4.3-integration

/test v4.3-integration

ping @dharmit @mohammedzee1000 @kadel

Update, thanks @dharmit !

/approve

/lgtm

/test v4.1-benchmark


Google Assistant Integration sync duplicates with invisible devices

Home Assistant release with the issue:

0.83.0b0
Last working Home Assistant release (if known):
Not 100% sure
Operating environment (Hass.io/Docker/Windows/etc.):

Hass.io Generic Linux Install on Debian
Component/platform:

Description of problem:
So today I reconfigured my mesh repeater and reconfigured the SSID on a few devices.
Google Assistant stopped working so I went in and enabled the test app again (this is the manual configured component)
It all worked when I re-linked.
It all works if I say 'hey google sync my devices"
However if I use the Sync Service, it seems to duplicate the devices - I can not SEE any duplicates but I can no longer control any of my devices. I can control a room - say hey google turn on lights in the lounge room and it says ok turning on 2 lights - but I only have one in that room. If I say turn on the lounge light it says it does not know which lounge light...
Delete the app and reling and verbally sync and it all works.
The only other thing I did when I first linked it was I set it to not expose everything by default as I ended up with 63 devices instead of 23....
Otherwise everything is working perfectly.
I duplicated this behaviour a few times before logging the issue.
Problem-relevant configuration.yaml entries and (fill out even if it seems unimportant):

Traceback (if applicable):

Additional information:

I can confirm I have the same problem. I've only tried syncing by saying "sync my devices" though. I only exposed certain things in my configuration though - which could be similar to you. Any idea how to exclude certain items from syncing without not exposing the group then?

I have a persistent, annoying problem with duplicate devices - but I also have it for other integrations (notably Harmony). There's an open community support thread about it, and Google seems to have acknowledged there is a problem: https://support.google.com/googlehome/thread/506752
I also opened an issue on the actions-on-google/smart-home-nodejs repo: https://github.com/actions-on-google/smart-home-nodejs/issues/202
There seems to be some problem on the google home graph backend, and worse, no exposed endpoint for end users to delete devices. Unlinking a service is supposed to clear out all devices, but as I pointed out in the github issue, that doesn't always seem to work reliably.
FWIW, the HA code for google sync operates according to my best understanding of the google smart home integration docs: you ask Google to sync, Google sends a SYNC request, and HA responds with a list of current devices. I don't think the bug is in HA.
But it is incredibly annoying. I've noticed that my duplicates go away after some time - at least a few days. I hope yours do too. :-/

Thanks @ahayworth much appreciated. I just unlinked and then relinked and only use Google to sync and seems I was lucky that fixed it. Glad it's probably not Home Assistant causing this. I daresay Google will just quietly fix it and pretend there was never a problem.
 The 'phantom' ones don't show and even if they did, as you point out there is no way for the user to delete them.

I'm  having similar problems, however, with 0.83 now no matter what I ALL devices sync. expose_by_default: false does nothing. Asking Google to sync just makes things worse. It used to be unlinking/relinking would work but now nothing but scripts, automations, everything.

I'm having similar problems, however, with 0.83 now no matter what I ALL devices sync. expose_by_default: false does nothing. Asking Google to sync just makes things worse. It used to be unlinking/relinking would work but now nothing but scripts, automations, everything.

See #18856

I have a persistent, annoying problem with duplicate devices - but I also have it for other integrations (notably Harmony). There's an open community support thread about it, and Google seems to have acknowledged there is a problem: https://support.google.com/googlehome/thread/506752
I also opened an issue on the actions-on-google/smart-home-nodejs repo: actions-on-google/smart-home-nodejs#202
There seems to be some problem on the google home graph backend, and worse, no exposed endpoint for end users to delete devices. Unlinking a service is supposed to clear out all devices, but as I pointed out in the github issue, that doesn't always seem to work reliably.
FWIW, the HA code for google sync operates according to my best understanding of the google smart home integration docs: you ask Google to sync, Google sends a SYNC request, and HA responds with a list of current devices. I don't think the bug is in HA.
But it is incredibly annoying. I've noticed that my duplicates go away after some time - at least a few days. I hope yours do too. :-/

Closing as "google's fault"


Implement authentication for web app

Stick to username/password?
SSL -> Build script to generate self-signed cert?

Yeah username/password should be fine. Or we can send a token to the server on every request. What do you think?

Yep let’s go with token based auth.
How about this flow to get rid of username/passwords entirely?

Set up app on server
Have build script provide auth tokens displayed as strings or QR-code (
https://www.npmjs.com/package/qrcode-terminal)
On the clientside, enter auth code durectly or use
https://github.com/LazarSoft/jsqrcode + HTML5 Camera API to decode QR-code

On Wed, Sep 16, 2015 at 2:03 AM, Rahij Ramsharan<EMAIL_ADDRESS>wrote:

Yeah username/password should be fine. Or we can send a token to the
server on every request. What do you think?
—
Reply to this email directly or view it on GitHub
https://github.com/LagerApp/Lager/issues/16#issuecomment-140485195.