[BUG] Danfoss Ally valve: Slow actuator response [solved already in other solutions]

Describe the bug
The problem is well described here: https://community.home-assistant.io/t/danfoss-ally-valve-slow-actuator-response-solved/254939
So if you issue a new temperature target setpoint for the thermostat using HA+ZHA the thermostat uses the internal PID mechanism to control the valve which results in slow (and sometimes unexpected) valve control movements.

To Reproduce
Steps to reproduce the behavior:

Go to your Danfos Ally thermostat connected using ZHA
Change the desired temperature
Watch the pi_heating_demand changing over time (far to slow)

Expected behavior
The pi_heating_demand should change much faster
Screenshots

Additional context
The issue is already fixed in deconz (https://github.com/dresden-elektronik/deconz-rest-plugin/pull/4408) as well as in the Koenkk/zigbee-herdsman-converters (https://github.com/Koenkk/zigbee-herdsman-converters/pull/2592)
So mainly the solution is well described in the official document (https://assets.danfoss.com/documents/176987/AM375549618098en-000101.pdf):

The zigbee coordinator needs to send a Setpoint Command including the HeatingSetpoint itself aswell as a bitmask (enum8 set to 1) to circumvent the thermostats PID mechism.
Based on that I started to read carefully all instructions of the zha quirks because I wanted to sort out if I can create a custom zhaquirk (based on https://github.com/zigpy/zha-device-handlers/tree/dev/zhaquirks/danfoss) fixing this issue.
While I already identified that I need to add a custom output cluster in the replacement (and I guess for that I also need to add the thermostat output cluster to the signature itself?) I didn't find any good example (first I thought the tuya custom quirks were good to understand but I honestly gave up) on how to understand:

how do I implement a custom command in the quirk?
(in this specific case) how can I access the occupied_heating_setpoint sent by HA+ZHA to the thermostat (which is based on the solution above an int16)
how can I create a custom command like "setpointType (enum8) + HeatingSetpoint (16bit)" where the HeatingSetpoint is occupied_heating_setpoint from 2) and the setPointType is set to 1 (the final command input needs to be masked in hex I guess)?

Also just to recap how it works:
ZHA is using the climate.py integration in HA and calls the function
async def async_set_temperature(self, **kwargs):
        """Set new target temperature."""

which eventually calls (in the case of the Danfoss Ally):
            elif self.hvac_mode == HVAC_MODE_HEAT:
                success = await thrm.async_set_heating_setpoint(
                    temp, self.preset_mode == PRESET_AWAY
                )

which is implemented in core/homeassistant/components/zha/core/channels/hvac.py
so there in normal operation the following code should be executed:
        if not await self.write_attributes(data):
            self.debug("couldn't set heating setpoint")
            return False

That's where I got lost to find the appropriate calls into zigpy and how the zha quirks overwrite the zigpy code to be executed (or is this assumption already wrong?).
Any help appreciated. Surely you also can fix this yourself if you think this is faster than to teach me ;) (because I won't have time within the next 3 weeks). If you fix it yourself I can learn from your implementation to be able to handle such requests myself in the future.

Hi,
I tried to understand other custom quirks to be able to adapt them to my issue. Prior to start testing I would really ask you to look at my first Idea of enhancing the existing quirk for Danfoss to see if I am on the right track or completely misunderstood the concept of ZHA custom quirks.
"""Module to handle quirks of the  Fanfoss thermostat.

manufacturer specific attributes to control displaying and specific configuration.
"""

import zigpy.profiles.zha as zha_p
from zigpy.quirks import CustomCluster, CustomDevice
import zigpy.types as t
from zigpy.zcl.clusters.general import (
    Basic,
    Identify,
    Ota,
    PollControl,
    PowerConfiguration,
    Time,
)
from zigpy.zcl.clusters.homeautomation import Diagnostic
from zigpy.zcl.clusters.hvac import Thermostat, UserInterface
from zigpy.zcl import foundation

from zhaquirks.const import (
    DEVICE_TYPE,
    ENDPOINTS,
    INPUT_CLUSTERS,
    MODELS_INFO,
    OUTPUT_CLUSTERS,
    PROFILE_ID,
)
from zhaquirks.danfoss import DANFOSS

COMMAND_SETPOINT_COMMAND = "setpoint_command"
MANUFACTURER = 0x1246  # 4151
OCCUPIED_HEATING_SETPOINT_ATTR = 0x0012

class DanfossThermostatCluster(CustomCluster, Thermostat):
    """Danfoss custom cluster."""

    manufacturer_server_commands = {
        0x40: ("setpoint_command", (t.enum8, t.int16s), False),
    }

    manufacturer_attributes = {
        0x4000: ("etrv_open_windows_detection", t.enum8),
        0x4003: ("external_open_windows_detected", t.Bool),
        0x4010: ("exercise_day_of_week", t.enum8),
        0x4011: ("exercise_trigger_time", t.uint16_t),
        0x4012: ("mounting_mode_active", t.Bool),
        0x4013: ("mounting_mode_control", t.Bool),
        0x4014: ("orientation", t.Bool),
        0x4015: ("external_measured_room_sensor", t.int16s),
        0x4016: ("radiator_overed", t.Bool),
        0x4020: ("control_algorithm_scale_factor", t.uint8_t),
        0x4030: ("heat_available", t.Bool),
        0x4031: ("heat_supply_request", t.Bool),
        0x4032: ("load_balancing_enable", t.Bool),
        0x404A: ("load_estimate_radiator", t.uint16_t),
        0x404B: ("regulation_setPoint_offset", t.int8s),
        0x404C: ("adaptation_run_control", t.enum8),
        0x404D: ("adaptation_run_status", t.bitmap8),
        0x404E: ("adaptation_run_settings", t.bitmap8),
        0x404F: ("preheat_status", t.Bool),
        0x4050: ("preheat_time", t.uint32_t),
        0x4051: ("window_open_feature_on_off", t.Bool),
        0xFFFD: ("cluster_revision", t.uint16_t),
    }

        async def write_attributes(self, attributes, manufacturer=None):
        """Send SETPOINT_COMMAND after setpoint change"""

            if "occupied_heating_setpoint" in attributes:
                setpoint = foundation.ReadAttributeRecord(
                    OCCUPIED_HEATING_SETPOINT_ATTR, foundation.Status.SUCCESS, foundation.TypeValue()
                )

                cmd_payload = super().Command()
                cmd_payload.status = 0
                cmd_payload.tsn = self.endpoint.device.application.get_sequence()
                cmd_payload.command_id = 0x40
                cmd_payload.function = 0
                cmd_payload.data = [1, setpoint]

                await super().command(
                    COMMAND_SETPOINT_COMMAND,
                    cmd_payload,
                    manufacturer=MANUFACTURER,
                    expect_reply=True,
                    tsn=cmd_payload.tsn,
                )

            return super().write_attributes(attributes, manufacturer)

class DanfossUserInterfaceCluster(CustomCluster, UserInterface):
    """Danfoss custom cluster."""

    manufacturer_attributes = {
        0x4000: ("viewing_direction", t.enum8),
        0xFFFD: ("cluster_revision", t.uint16_t),
    }

class DanfossDiagnosticCluster(CustomCluster, Diagnostic):
    """Danfoss custom cluster."""

    manufacturer_attributes = {
        0x4000: ("sw_error_code", t.bitmap16),
        0x4001: ("wake_time_avg", t.uint32_t),
        0x4002: ("wake_time max duration", t.uint32_t),
        0x4003: ("wake_time min duration", t.uint32_t),
        0x4004: ("sleep_Postponed_count_avg", t.uint32_t),
        0x4005: ("sleep_Postponed_count_max", t.uint32_t),
        0x4006: ("sleep_Postponed_count_min", t.uint32_t),
        0x4010: ("motor_step_counter", t.uint32_t),
        0xFFFD: ("cluster_revision", t.uint16_t),
    }

class DanfossThermostat(CustomDevice):
    """DanfossThermostat custom device."""

    signature = {
        # <SimpleDescriptor endpoint=1 profile=260 device_type=769
        # device_version=0 input_clusters=[0, 1, 3, 10,32, 513, 516, 1026, 2821]
        # output_clusters=[0, 25]>
        MODELS_INFO: [(DANFOSS, "eTRV0100")],
        ENDPOINTS: {
            1: {
                PROFILE_ID: zha_p.PROFILE_ID,
                DEVICE_TYPE: zha_p.DeviceType.THERMOSTAT,
                INPUT_CLUSTERS: [
                    Basic.cluster_id,
                    PowerConfiguration.cluster_id,
                    Identify.cluster_id,
                    Time.cluster_id,
                    PollControl.cluster_id,
                    Thermostat.cluster_id,
                    UserInterface.cluster_id,
                    Diagnostic.cluster_id,
                ],
                OUTPUT_CLUSTERS: [Basic.cluster_id, Ota.cluster_id],
            }
        },
    }

    replacement = {
        ENDPOINTS: {
            1: {
                INPUT_CLUSTERS: [
                    Basic,
                    PowerConfiguration,
                    Identify,
                    Time,
                    PollControl,
                    DanfossThermostatCluster,
                    DanfossUserInterfaceCluster,
                    DanfossDiagnosticCluster,
                ],
                OUTPUT_CLUSTERS: [Basic, Ota],
            }
        }
    }

In short I added some imports and three constants at the beginning to work with. In the class DanfossThermostatCluster I added the new command to manufacturer_server_commands (hopefully correctly interpreted) and last but not least I replaced the write_attributes function to issue the custom command every time the occupied_heating_setpoint for an thermostat is updated. I struggle a bit as I don't know how the corresponding thermostat should be adressed for which write_attributes is called.
So could someone please tell me if this is completely rubbish or if this should be the way to go?
Thanks in advance.

Do you have your changes on GitHub?

I struggle a bit as I don't know how the corresponding thermostat should be adressed for which write_attributes is called.

What do you mean by addressed?
Is this setpoint command sent through the manufacturer specific cluster? In this case you can send the commands or access other cluster through the endpoint. E.g.
other_cluster = self.endpoint.in_clusters[0xff01]
await other_cluster.command(...

If you know the cluster's ep_attribute, then you can retrieve that cluster by that name e.g.
on_off_cluster = self.endpoint.on_off

Do you have your changes on GitHub?

Freshly forked your repo.

I struggle a bit as I don't know how the corresponding thermostat should be adressed for which write_attributes is called.

What do you mean by addressed?

Maybe a misunderstanding in my view. The command needs to be send to the thermostat where the occupied heating setpoint is changed.

Is this setpoint command sent through the manufacturer specific cluster? In this case you can send the commands or access other cluster through the endpoint. E.g.
other_cluster = self.endpoint.in_clusters[0xff01]
await other_cluster.command(...

If you know the cluster's ep_attribute, then you can retrieve that cluster by that name e.g.
on_off_cluster = self.endpoint.on_off

Based on the official documentation the setpoint command is in the 0x0201 Thermostat Cluster:

seems like you already defined the command correctly.  Do they tell you what behavior is going to be if you do both the "write_attributes" and "setpoint" command? In other words, do you need to filter out the setpoint attribute write?
Try the following instead, which would do both attr write and setpoint command:
    async def write_attributes(self, attributes, manufacturer=None):
    """Send SETPOINT_COMMAND after setpoint change"""

        write_res = await super().write_attributes(attributes, manufacturer=manufacturer)

        if "occupied_heating_setpoint" in attributes:
            await self.setpoint_command(0x01, attributes["occupied_heating_setpoint"], manufacturer=manufacturer)

        return write_res

it would do the write attributes and then the setpoint command, it the heating setpoint was in the attributes

Hey @Adminiuga I have to admit that I really thought is much more complex to create a manufacturer custom command but after reading your short explanation again and again I realized that the framework is really that dynamically created to just take the definition of a custom command to create the corresponding internal data structures and so on (is my understanding right?). This helped a lot to understand how the whole zha quirks integration is working.
I made the proposed change as your suggestion looks legit. I am now at the point to give it a hot try at my home. For that I took over the thermostat.py file to my local HA installation.
The custom quirk is loaded correctly:
2021-09-27 11:42:38 DEBUG (MainThread) [zhaquirks] Loading custom quirks from /config/zha_custom_quirks
2021-09-27 11:42:38 DEBUG (MainThread) [zhaquirks] Loading custom quirks module danfoss
2021-09-27 11:42:38 DEBUG (MainThread) [zhaquirks] Loading custom quirks module danfoss.thermostat

Unfortunately when I change the temperature of the thermostat I see the write_attributes but not the setpoint command:
2021-09-27 11:52:14 DEBUG (MainThread) [homeassistant.components.zha.core.channels.base] [0x6045:1:0x0201]: Attribute report 'DanfossThermostatCluster'[occupied_heating_setpoint] = 2500
2021-09-27 11:52:14 DEBUG (MainThread) [homeassistant.components.zha.core.channels.base] [0x6045:1:0x0201]: Attribute report 'DanfossThermostatCluster'[setpoint_change_source] = SetpointChangeSource.External
2021-09-27 11:52:15 DEBUG (MainThread) [homeassistant.components.zha.core.channels.base] [0x6045:1:0x0201]: wrote {'occupied_heating_setpoint': 2500} attrs, Status: [[WriteAttributesStatusRecord(status=<Status.SUCCESS: 0>)]]
2021-09-27 11:52:15 DEBUG (MainThread) [homeassistant.components.zha.core.channels.base] [0x6045:1:0x0201]: set heating setpoint to 2500
2021-09-27 11:52:15 DEBUG (MainThread) [homeassistant.components.zha.core.channels.base] [0x6045:1:0x0201]: Attribute report 'DanfossThermostatCluster'[setpoint_change_source] = SetpointChangeSource.External

Or do I need further debug code to see if the
        if "occupied_heating_setpoint" in attributes:
            await self.setpoint_command(0x01, attributes["occupied_heating_setpoint"], manufacturer=manufacturer)

is executed?
Anyway thanks for all your help and insights 😊 I will create a pull request as soon I have tested it sucessfully.

Hrm, you won't see specific call outs that the command was called.
Enable logging for quirks and add a debug logging before the command. E.g. self.debug("sending setpoint command: %s", attributes ["occupied_heating_setpoint"])
You could see the command calling in radio lib debug, but that is a tad more complicated to parse

Thanks again. debug logging is enabled this way:
logger:
  default: info
  logs:
    homeassistant.components.zha.core.channels.base: debug
    zhaquirks: debug
    zhaquirks.danfoss: debug
    custom_components: debug

Looks like I am missing the corresponding logger call as there is no quirks output in the logfile. I also added another self.debug call into write_attributes to see if the debug call is logged but it seems I have a wrong logger configuration?

Add zigpy: debug ?  Needed to change zigpy.zcl back to debug 😉 (disabled it as this is really noisy and homeassistant.components.zha mostly tells enough).
2021-09-27 14:13:30 DEBUG (MainThread) [zigpy.zcl] [0x6045:1:0x0201] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=GLOBAL_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=155 command_id=Command.Write_Attributes_rsp>
2021-09-27 14:13:30 DEBUG (MainThread) [zigpy.zcl] [0x6045:1:0x0201] sending setpoint command: 2800
2021-09-27 14:13:31 DEBUG (MainThread) [zigpy.zcl] [0x6045:1:0x0201] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=GLOBAL_COMMAND manufacturer_specific=True is_reply=True disable_default_response=False> manufacturer=4678 tsn=157 command_id=Command.Default_Response>
2021-09-27 14:13:31 DEBUG (MainThread) [zigpy.zcl] [0x6045:1:0x0201] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=GLOBAL_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=124 command_id=Command.Report_Attributes>
2021-09-27 14:13:31 DEBUG (MainThread) [zigpy.zcl] [0x6045:1:0x0201] ZCL request 0x000a: [[Attribute(attrid=48, value=<TypeValue type=enum8, value=enum8.undefined_0x02>)]]
2021-09-27 14:13:31 DEBUG (MainThread) [zigpy.zcl] [0x6045:1:0x0201] Attribute report received: setpoint_change_source=2
2021-09-27 14:13:31 DEBUG (MainThread) [homeassistant.components.zha.entity] climate.thermostat_dj_zimmer_danfoss_thermostat: Attribute 'setpoint_change_source' = SetpointChangeSource.External update
2021-09-27 14:13:33 DEBUG (MainThread) [zigpy.zcl] [0x6045:1:0x0201] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=GLOBAL_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=123 command_id=Command.Report_Attributes>
2021-09-27 14:13:33 DEBUG (MainThread) [zigpy.zcl] [0x6045:1:0x0201] ZCL request 0x000a: [[Attribute(attrid=48, value=<TypeValue type=enum8, value=enum8.undefined_0x02>)]]
2021-09-27 14:13:33 DEBUG (MainThread) [zigpy.zcl] [0x6045:1:0x0201] Attribute report received: setpoint_change_source=2
2021-09-27 14:13:33 DEBUG (MainThread) [homeassistant.components.zha.entity] climate.thermostat_dj_zimmer_danfoss_thermostat: Attribute 'setpoint_change_source' = SetpointChangeSource.External update
2021-09-27 14:13:37 DEBUG (MainThread) [zigpy.zcl] [0x6045:1:0x0201] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=GLOBAL_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=125 command_id=Command.Report_Attributes>
2021-09-27 14:13:37 DEBUG (MainThread) [zigpy.zcl] [0x6045:1:0x0201] ZCL request 0x000a: [[Attribute(attrid=18, value=<TypeValue type=int16s, value=2800>)]]
2021-09-27 14:13:37 DEBUG (MainThread) [zigpy.zcl] [0x6045:1:0x0201] Attribute report received: occupied_heating_setpoint=2800
2021-09-27 14:13:37 DEBUG (MainThread) [homeassistant.components.zha.entity] climate.thermostat_dj_zimmer_danfoss_thermostat: Attribute 'occupied_heating_setpoint' = 2800 update

The command itself looks good (manufacturer_specific=True and manufacturer=4678 set correctly). The only thing I see is the two times Attribute report received: setpoint_change_source=2 which looks like a command is issued twice? If not I will take over the code and create the pull request.

The command was issued once, and you've got a default response for it:
2021-09-27 14:13:30 DEBUG (MainThread) [zigpy.zcl] [0x6045:1:0x0201] sending setpoint command: 2800 2021-09-27 14:13:31 DEBUG (MainThread) [zigpy.zcl] [0x6045:1:0x0201] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=GLOBAL_COMMAND manufacturer_specific=True is_reply=True disable_default_response=False> manufacturer=4678 tsn=157 command_id=Command.Default_Response>

The two attribute updates are likely because setpoint change was from the attribute write and the setpoint command.
Question is: does it work as expected now?
Otherwise could filter just that specific attribute. Just complicates logic a little bit, depending whether that was the only attribute in the write request or not.

The two attribute updates are likely because setpoint change was from the attribute write and the setpoint command.

That would indeed make sense (as I guess the thermostat reports the attribute update both on the attribute write and the setpoint command).

Question is: does it work as expected now?

I will monitor that. Needs some time to check the response of the valve in regards to setpoint changes.

Great 😊 I tested it with all my eight thermostats. The behaviour is really nice:

The first one is the setpoint (not quite right as it also changed instantly through write_attributes) and the second one is the actual pi heating demand of the thermostat. As you can see the slope is much steeper (have a look into the original bug post above for reference how it worked before).
I will create the pull request accordingly. Cheers and thanks!

On the basis of a direct feedback from Danfoss R&D I would like to point out that is certainly good to have the possibility to use Setpoint type = 1 on request (normally, in consequence of a manual increase of temperature), to boost the PI value, but pay attention, this situation can lead to a temperature overshoot and economy losses. Setpoint type = 0 is the normal setup in scheduled mode (almost all the time). Massive Type 1 calls will disturb the self-learning activity of the actuator itself. Hopefully you will take care of this suggestions during deployment of the PR.

When HA Climate sets the setpoint, that should count as a manual setpoint change, correct?

That is really a tricky part, my Allies in HA environment are normally driven all the time by a scheduled activity, as result the temperature control in the rooms is smooth and stable (Standard setpoint = Ss, Eco setpoint (night)  = Ss -1 or maximum -2 °C). so let's call it the basic functioning. Type 1 make is role if you manually rotate the actuator dial. Ideally it would be optimal if only the scheduled temperature changes would be followed by a type 0 setpoint command.

Normally it takes a couple of days before the Ally is properly learning the room response.

Yes that sounds logically. So is there a way to filter if the setpoint change from HA is triggered by schedule or manually?

But this is actually what i mean, by definition, commands originated from ZHA Climate entity count (or should count) as manual setpoint change, because it cannot come from Thermostat scheduling. The scheduled thermostat changes are pushed from Thermostat to HA?
Maybe should ask Dandies support? As is the OP problem that thermostat hasn't learned correctly the room response and that's why it behaves the way it behaves?
In my POV changes pushed from HA to thermostat are equivalent to user changing the dial on the thermostat manually.
Alternatively, could bring this logic into zha climate entity and scope it to specific manufacturers and/or models: the logic being: if new setpoint is not far off from the current temperature than do the usual attribute write and of above the difference, then do the setpoint command with type of 0x01?
The question then becomes what delta triggers the setpoint command

We are on the core, type 0x01 make use of PI control only with aggressive tuning, while type 0x00 belong to occupied_heating_setpoint attribute set changes with high conservative PID tuning control (PID inside) to be sure to operate in so many unpredictable situations without causing an overshoot in room temperature and making use of a more sophisticated control way. In my previous comment I refer to scheduled mode as 100% HA scheduling method (by chrono programmed occupied_heating _setpoint changes). The original Danfoss App is making use of the thermostat (Ally) scheduling capabilities, so it is possible to separates manual changes of setpoint in the app (that is the main difference) and on the mechanical dial from scheduled operation, thus assigning different Setpoint type to both. Going straight into Type 1 mode it mean loose PID functionalities, so it's really difficult take a decision.

Both of you have a point.
I am still checking total behaviour of the thermostat with setpoint 0x01. I can confirm that I had an overshoot in temperature after the change yesterday in one case. As it is not heating season I didn't had a chance to test this on more occasions.
I also can confirm that the "conservative PID tuning control" is quite good in flatening the temperature curve. So I also tend to revert the setpoint change to the less agressive way. That's because after the (also mentioned by Stefano) initial learning period in the first week the pi_heating_demand changes faster and more in a way someone wouldn't acknowledge at all if he does not look at the raw values.
So as Stefano said ...

it's really difficult take a decision.

This field offers a lot to learn for me ... ;)

But this is actually what i mean, by definition, commands originated from ZHA Climate entity count (or should count) as manual setpoint change, because it cannot come from Thermostat scheduling. The scheduled thermostat changes are pushed from Thermostat to HA?

So I know people are using HA for scheduling their heating. This might not be the intention I am aware of this.
On the other side ... as I said ... if no one complains with "setpoint 0x00" because the PID improves over time and the reaction time comes close to "normal behaviour" after one week the decision could be to stay as it was... or in best case to have a config parameter in configuration.yaml for the danfoss quirk to enable users choosing the behaviour on their own. Based on this thread a short description could be easily achieved.

One PM how some users is using there TRVs (at least tuya ones) in HA as manual or scheduling on / off from HA then thinking its more economic then letting the TRV doing the work and getting one stable and more economical heating in the room.
My goal is that the TRV shall doing the work and only changing the set point temperature if changing somthing but normally leaving it doing its work as good it can (if not getting the valve jammed and need little hands on).

You could take advantage of it to include compatibility with the Popp Zigbee thermostat (POPZ701721) that has the same characteristics. Changing the line:
MODELS_INFO: [(DANFOSS, "eTRV0100"),("D5X84YU", "eT093WRO")],
http://manuals-backend.z-wave.info/make.php?lang=en&sku=POPZ701721&cert=ZIG21051ZB330911-24&type=mini

You could take advantage of it to include compatibility with the Popp Zigbee thermostat (POPZ701721) that has the same characteristics. Changing the line: MODELS_INFO: [(DANFOSS, "eTRV0100"),("D5X84YU", "eT093WRO")],
http://manuals-backend.z-wave.info/make.php?lang=en&sku=POPZ701721&cert=ZIG21051ZB330911-24&type=mini

As I don't own this one I can't test this change. Besides that my PR already has been approved and integrated into DEV.

One PM how some users is using there TRVs (at least tuya ones) in HA as manual or scheduling on / off from HA then thinking its more economic then letting the TRV doing the work and getting one stable and more economical heating in the room.
My goal is that the TRV shall doing the work and only changing the set point temperature if changing somthing but normally leaving it doing its work as good it can (if not getting the valve jammed and need little hands on).

As I already mentioned I see that both arguments are legit. I also understand the statement from @Adminiuga

But this is actually what i mean, by definition, commands originated from ZHA Climate entity count (or should count) as manual setpoint change, because it cannot come from Thermostat scheduling.

Checking the code at the moment there is no quirk using a parameter from the configuration.yaml of HA. The zha-device-handler on the other hand already checks for custom quirks path in the config file. So I guess it wouldn't be hard to extend the setup() function in zhaquirks/init.py for additional optional parameters and make them available to the single quirks for further usage?
BTW I reverted back to the original code an disabled the setpoint command again. I have to admit it feels more natural and comfortable this way (knowing that the valve needs some time to react):

This is mostly based on the easy fact that it always needs some time to heat up the air in a room so "feeling" the warm air is never immediately after the valve has fully openend and the time the PID takes is close to normal warm up of our rooms so from a external perspective the effect is not really relevant but the thermostat is much more precise in getting and holding the desired temperature. Nevertheless the PR still makes sense from the ZHA point of view but integrating an parameter would be nice to have. Objections?

@WolfRevo exactly, what really matter is the controlled parameter: air temperature. I've got further details from eTRV department head engineer about the valve movement in scheduling mode, thus is not a pure PID but builded-up on a proprietary algorithm, that has not obviously been unveiled, based on a mix of adaptive and statistical data quite complicated they say, one reason more to use the factory set I would say.

Just a question as you have direct contact with Danfoss R&D. Is Danfoss the OEM of the Thermostat mentioned earlier (Popp Zigbee thermostat (POPZ701721))? It looks like that besides the model code the firmware and hardware is the same? Or is there a unbranded OEM behind both and Danfoss is "just" adjusting the firmware for their needs?
Besides that ... so far no feedback in regards to the config file idea. Anyone?

@WolfRevo, yes Danfoss is the OEM,
my personal suggestion is to enrich the current working quirks zhaquirks.danfoss.thermostat.DanfossThermostat with command cluster Command type 0x01 and 0x00 to be used in automations as service calls "Zigbee Home Automation: Issue zigbee cluster command", if technically possible...

I'm still n00b in understanding the whole architecture. In my understanding filtering on quirk level is far too low for your idea. So only HA itself knows if the setpoing change is send by intentional user interaction or by an automation. The setpoint command itself does not include such information as arguments you could use to filter. So I think the only easier solution would be really to turn the command type 0x01 on and off for all danfoss thermostats at once via configuration file. Maybe the more advanced coders could implement a filtering on NWK level to be able to configure the behaviour for every thermostat differently?
@Adminiuga correct me if I am wrong.

You are correct, this should be done in zha. But even ZHA climate entity won't know if it is an automation or user request. Well, maybe it could, need to look

In other words I would be happy to getCommand type in the list...

.

With the quirk you do get the command in the manage cluster panel. Do you have quirk installed?

The code change I've done is rather small. So for the moment: if you don't like to have the command 0x01 send out automatically you can create a custom quirk based on the danfoss/thermostat.py and comment out the write_attributes() substitution in the thermostat cluster.
from:
class DanfossThermostatCluster(CustomCluster, Thermostat):
    """Danfoss custom cluster."""

    manufacturer_server_commands = {
        0x40: ("setpoint_command", (t.enum8, t.int16s), False),
    }

    manufacturer_attributes = {
[...] # just collapsed for better view here
    }

    async def write_attributes(self, attributes, manufacturer=None):
        """Send SETPOINT_COMMAND after setpoint change."""

        write_res = await super().write_attributes(
            attributes, manufacturer=manufacturer
        )

        if "occupied_heating_setpoint" in attributes:
            self.debug(
                "sending setpoint command: %s", attributes["occupied_heating_setpoint"]
            )
            await self.setpoint_command(
                0x01, attributes["occupied_heating_setpoint"], manufacturer=manufacturer
            )

        return write_res

to:
class DanfossThermostatCluster(CustomCluster, Thermostat):
    """Danfoss custom cluster."""

    manufacturer_server_commands = {
        0x40: ("setpoint_command", (t.enum8, t.int16s), False),
    }

    manufacturer_attributes = {
[...] # just collapsed for better view here
    }

#    async def write_attributes(self, attributes, manufacturer=None):
#        """Send SETPOINT_COMMAND after setpoint change."""
#
#        write_res = await super().write_attributes(
#            attributes, manufacturer=manufacturer
#        )
#
#        if "occupied_heating_setpoint" in attributes:
#            self.debug(
#                "sending setpoint command: %s", attributes["occupied_heating_setpoint"]
#            )
#            await self.setpoint_command(
#                0x01, attributes["occupied_heating_setpoint"], manufacturer=manufacturer
#            )
#
#        return write_res

With that you still have the command definition and the final result looks like:

but with the original bevaviour.

Ok it works as you mentioned. Thank you. @WolfRevo when you say that the PR is already in dev it mean that the next major upgrade of HA is going to implement it?

I'm not part of the dev team. But HA dev already includes this PR so yes one of the next HA releases will have it. Important: this inlcudes the setpoint command by default so to deactivate it you need to maintain your custom quirk.
I've already checked into the code to find out how easy it would be possible to include another config parameter for this. Unfortunately it looks like this also needs changes in HA itself. I would prefer this method but I need more time to see if I can enhance this idea further.

I was looking around and its looks being 2 more clones of Ally.
From Z2M:
        zigbeeModel: ['eTRV0100'],
        model: '014G2461',
        vendor: 'Danfoss',

        zigbeeModel: ['TRV001'],
        model: 'UK7004240',
        vendor: 'Hive',

        zigbeeModel: ['eT093WRO'],
        model: '701721',
        vendor: 'Popp',

I was thinking  adding the 2 new MODELS_INFO IDs in the danfoss quirk but is some knowing if the firmware is having the same functional or is its not compatible ?
I have fast looking in Z2M and its looks both is using danfoss handles but its not the same that all is 110% the same as the "original" device is having.
But in the end if user have baying the devcie they can testing and if its working for 80% is better then not working at all and then some can doing one new quirk that is working for there device.
Feedback is wanted !!!

I agree then we is not knowing is the 3 device types is behaving the same way from Zigbee point of view.
And then some is getting the device is fast done patching for testing if is working OK and if they is searching the git they finding the relevant posting so i dont do "ghost" that is not being tested in real.
Thanks for feed back !!

I have the Popp and it works without problems. it is exactly the same. The only difference from Danfoss is that it has a higher firmware version (1.12). On the Danfoss support page the latest version is 1.08 but in the documentation they refer to 1.12.
https://www.danfoss.com/en/products/dhs/smart-heating/smart-heating/danfoss-ally/danfoss-ally-support/#tab-faq
Basic Cluster
Popp
sw_build_id: 01.12.0008 01.12
hw_version: 69
Danfoss
sw_build_id: 01.08.0008 01.08
hw_version: 69

Sorry for hijacking the issue !
@albalaing shall I making one PR for adding the Popp in the quirk so it working out of the box ?
Then i need you testing it so its being OK.
Looks like its the last firmware for the Ally and some have problems in Z2M getting the devices updated with it but is not reported in ZHA and the firmware can being downloaded from the Danfoss support page as you was saying :-))

@WolfRevo exactly, what really matter is the controlled parameter: air temperature. I've got further details from eTRV department head engineer about the valve movement in scheduling mode, thus is not a pure PID but builded-up on a proprietary algorithm, that has not obviously been unveiled, based on a mix of adaptive and statistical data quite complicated they say, one reason more to use the factory set I would say.

Hi, thanks for your hard work here! One mystery that is being discussed at length over in the HA Community forum is how the Ally makes use of data pushed from an external room temperature sensor, and how to improve its performance with that configuration.
Many observe that the Ally aims to get the average of the onboard sensor and external room sensor to the setpoint temperature, and – related to the topic here – that the actuator can take several hours to get there. (For example, if the setpoint is 21°, and the onboard sensor goes to 22°, then it seems to slowly heat the room to 20° but maintain it once there.) It also seems odd that the documentation recommends that the external temperature reading gets pushed at a minimum interval of 30 minutes, instead of more often.
@WolfRevo do you have any experience with how to handle an external sensor, or maybe your contact with Danfoss R&D can provide some clues?

For feedback from Danfoss we need to ask @Stefano0042, I don't have any connections with them.
I have one example from my daily used room:

Purple is the requested setpoint, dark blue is the temperature from the thermostat itself and light blue is the actual room temperature. Yes, with activated PID (for that you need to use a custom integration right now as the standard ZHA integration disables the PID by intention) it really needs time to reach the desired temperature. But you also can see that the temperature of the thermostat still rises as long as the external temperature is not reached (so in my experience the average fits really well).
I use scripts and an automation in HA that triggers as often as the external room temperature sensor changes. This happens more often than 30 minutes at daytime but only very view times at night. I can't answer why the documentation suggests to only send the temperature at a minimum of 30 minutes. It works well with more often changes also.

Thanks @WolfRevo, and sorry I misread the thread above and thought you were the one in contact with Danfoss. In the meantime, my own experience has changed, and now my Allys do in fact maintain the externally measured room temperature at the desired setpoint (without any apparent averaging with the onboard sensor). Apparently they do "learn" over time.
@Stefano0042 if you have a chance to ask Danfoss, it is still a mystery why their documentation suggests sending temperature updates only every 30 minutes.

@sarangnemo Hello, this is an information half in my pocket yet, there is not any calculation behind the use of an external sensor, simply it will become the new temperature feedback for the output calculation (PI), Ally thermostat will continue to report his "current_temperature", e.g. if the remote sensor location is 2 degree lower than the Ally main sensor location it will report once stabilized 2 degree more than the active setpoint. Regarding the max 30 min update rate I do not have a precise clue about that, but I will simply accept the recommendation ..by now :)
Nowadays the standard ZHA integration disables the predictive/adaptive part of the whole algorithm, that I assume will still make use of a "poor" PI or PID calculation, these are details that will not be unveiled, we can fully understand, but this is not a bad solution especially if you have an idea to use the TRV status e.g. in order to act an external boiler relay connected with all the bunch of TRVs heating demand.

@WolfRevo can this issue be closed now that https://github.com/zigpy/zha-device-handlers/pull/1148 by @hertleinj for Popp D5X84YU  (POPZ701721) has been merged into zha-device-handlers as part of 0.0.64 release? -> https://github.com/zigpy/zha-device-handlers/releases or did that not fix all issues?

@Hedda I never had an issue after my initial PR has been taken over as I use a custom quirk to disable my own PR. As noone was able to propose an easy way how the manufacturer custom command can be filtered I am fine with this.
Still if someone has a smart idea how to do so (e.g. like adding parameters in the configuration.yaml to be able to set entity specific options for zha quirks) I'm interested in following this approach. I will close this topic within the next days if there is no new idea posted here.

@Stefano0042 is there any way to directly contact you? I have some questions regarding the specific behaviour for following topics for Danfoss Ally and there is no sufficient documentation on it:

Attr 0x4051 Window Open Feature ON/OFF in conjunction with Attr 0x4003 External Open Window Detected
general understanding of the adaptation run, as the automatic adaptation run is not running in the night anymore but in the morning where the valve should not close. I need to understand if the adaptation run is necessary for the function so that I can create my own automation when to run.
If you want you coud write to me using my username and adding the gmail suffix for reaching me. That would be really nice. Or is there a place to discuss such topics?


feat: web ui 2.6.0

See https://github.com/ipfs-shipyard/ipfs-webui/releases/tag/v2.6.0.

@hacdias  I am afraid we can't merge this specific release: v2.6.0 causes a crash in Brave.
Please resubmit when https://github.com/ipfs-shipyard/ipfs-webui/issues/1287 is fixed in next release.


justify-content

justify-content

This issue was imported from Google Moderator
Moderator votes: +4
Issue added by ____ on 2013-04-20
To vote this issue up or down, simply include +1 or -1 in your comment.

Already part of http://caniuse.com/#feat=flexbox


fix #140 empty context

Fix empty node element:
Uncaught (in promise) TypeError: Cannot set properties of null (setting '__draggable_context')
Simple error handler
const getHtmlElementFromNode = (node) => {
  const el =
      node.el || (Array.isArray(node.children) && node.children[0].el.parentNode);
  return el || {};
};

@danielsussa, thanks for the PR.  Since this package and repo appears to be unmaintained, I published your changes to a new package: https://www.npmjs.com/package/@marshallswain/vuedraggable.
This project needs a lot of love.  If I can find time, I'll update the tooling to use vitest, vite, and vitepress.  It definitely needs a TS rewrite, too.

It looks like the changes break the onDragStart handler., which references this.context.element, but it's undefined.  Not sure what's different in my setup.

I just applied an NPM install using your version! Worked pretty!!
Thanks @marshallswain. I can help on further demands.

@marshallswain 感谢，我换成你的包后完美解决draggable与vue3的transition-group不兼容的问题了

@marshallswain Thank you very much. However, my .list-enter-active and .list-leave-active classes are not being triggered. Only the .list-move class is being applied when removing or adding elements.
code:
tag="transition-group"
:component-data="{tag:'ul',name:'list'}"

Thank you very much

Search for Vue-draggable-plus. The primary language is Chinese and you can switch the docs to English.  Those guys have adopted it and made it great.  No need to maintain our own.


[BEAM-8188] Allow PyArrow imports to fail on systems other than Win+Py27

Allow PyArrow imports to fail on systems other than Windows running Python 2.7.
As discussed in apache/beam#9522, PyArrow is not supported on more platforms than we had thought previously. Instead of adding additional special cases, we now allow PyArrow imports to fail on any platform. This is similar to what we already do for e.g. tensorflow and google.cloud.pubsub.
R: @tvalentyn

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

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

Thanks a lot, @ostrokach ! Is this change ready for review?

Thanks a lot, @ostrokach ! Is this change ready for review?

yes

Thanks a lot, @ostrokach . This change LGTM.


Add Evaluator.evaluate.

This should make make_evaluation_predictions obsolete in most cases.
from gluonts.evaluation import Evaluator
from gluonts.dataset.repository.datasets import get_dataset
from gluonts.model.npts import NPTSPredictor

npts = NPTSPredictor(prediction_length=12, freq="H")
ev = Evaluator()

metrics = ev.evaluate(npts, get_dataset("electricity").test)

By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

Would .backtest a better name?

Something I'm wondering: Is there any reason to keep make_evaluation_predictions? As I see it, it is used to call the Evaluator, but I think it's not something people enjoy doing.
There is also backtest_metrics, which does the same as this one, but adds some logging.
In other words, evaluation/backtest.py could be removed entirely.

Is there any reason to keep make_evaluation_predictions?

Eventually no, I think. Right now it's a shortcut to get backetesting forecasts so you can plot them for example, instead of directly evaluating their accuracy.
But in light of what is being discussed in #2041, this should be as easy as doing
forecasts = model.predict(dataset.test.inputs)


Problem with out-of-proc sample Dockerfile

The out-of-proc quote generation sampleDockerfile does not build since open-enclave does not seem to install an example for remote_attestation.
the fix is probably:
-WORKDIR /opt/openenclave/share/openenclave/samples/remote_attestation
+WORKDIR /opt/openenclave/share/openenclave/samples/attestation

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

ID: 995113fc-cded-da15-d906-fcd21eac576a
Version Independent ID: ddfbd829-6e66-20e0-2422-f2eac99d228b
Content: Azure Kubernetes Service plugin for confidential VMs
Content Source: articles/confidential-computing/confidential-nodes-aks-addon.md
Service: virtual-machines
Sub-service: workloads
GitHub Login: @agowdamsft
Microsoft Alias: amgowda

@mythi
Thanks for your feedback! We will investigate and update as appropriate.

looking at this bug, will update the documentation/sample soon.

@Naveenommi-MSFT please accept the suggest changes from @mythi . Can you please create a PR with recommended changes?

@mythi
Thanks for reporting this! We have created a PR for this issue and the changes should go live soon.

#signoff


Hit info not displaying

The overlay comes up on the screen correctly, but there is no frame data. It just has the column headers for where the data would be displayed.

Thats because a T7 patch was out for a while. We need author to update memory addresses or even better ask him to make that detection automatically or configurable

Some users updated it already and it still works even after the latest small patch.
https://github.com/roguelike2d/TekkenBot/pull/58

Okay, I will try to update again and see if it works. Is there more than
one person building this app now?
On Oct 20, 2017 11:23 AM, "thraemonium"<EMAIL_ADDRESS>wrote:

Some users updated it already and it still works even after the latest
small patch.
#58 https://github.com/roguelike2d/TekkenBot/pull/58
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/roguelike2d/TekkenBot/issues/59#issuecomment-338254999,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AV1ge_mOYcnaDQDEi4izXEB4X-hUjKndks5suMkdgaJpZM4P9OCm
.

It still doesn't work, even after updating everything.


Hotfix develop - Brace style

With the release of 1.3 there was an issue with the brace style rule failing if there was no proceeding space.
Fixes #301
DCO 1.1 Signed-off-by: Ben Griffith<EMAIL_ADDRESS>

@bgriffith go for the update :+1:

Updated


TouchEvent handling seems broken when there is jQuery in the page

The line https://github.com/AllanBishop/angular-img-cropper/blob/master/src/angular-img-cropper.js#L1089 seems to break when jquery is in the page because the TouchEvent is wrapped in a jquery event, thus making it only available through the originalEvent property of the event.
Is this something you changed recently ? Im pretty sure that this worked on mobile a few months back but now, its broken on all platforms when jquery is present...

Hi opened a pull request #32 that should fix the issue

Yep, that's exactly the fix I did on my fork to settle the issue. Good for me !


Unit test for load_texture

Hi,
We created a unit test for load_texture
Best
Angie, Mattia, Baptiste and Steven

Hi, Mattia corrected our problem !
Best
Mattia, Baptiste, Angie, Steven


Prune files from validation/test set if they're over max_samples long

Potentially the validation set and test set should be fired up in batches, but that's probably less necessary.

This is handled in ReadyCorpus but not in some of the corpora in persephone.datasets, which can cause crashes even on GPUs with plenty of memory if an utterance is over 20s long and the validation set is a couple hundred utterances. Fixing #63 should fix this.

This is addressed in corpus.Corpus.make_data_splits(). It won't apply for existing test sets: {train,valid,test}_prefixes.txt do not get filtered, as they shouldn't be. However new prefix files will not be created with utterances longer than max_samples.


Support Blend for Visual Studio 2015

With VS2015 we can now install Extensions in Blend. XAMLStyler is listed but when trying to install it it errors with the following message: "This extension is not supported on the current product."

Where did you find that option?
I have:
Microsoft Blend for Visual Studio Professional 2015
Version 14.0.23107.0 D14REL
But I cant find where to install extensions.

Blend for Microsoft Visual Studio Enterprise 2015
Version 14.0.23107.0 D14REL
Microsoft .NET Framework
Version 4.6.00081

Baah! That menu item is missing from Professional version which is what I have access to.
Can't help you there mate.

I've been looking into this but I can't find any documentation on how to add Blend as an install target. if anyone would stumble upon something, please let me know.

Apparently, Microsoft enables Blend support for extensions on a case-by-case bases for now. I'm working with them to see if we can get support for XAML Styler in Blend. I'll keep everyone posted

:)

Great stuff. Thank you.

fixed in 2.1


Only download a certain duration of the media

This will be great for users who only want a short part of content in a long video

I would like to bump this request. If this is put, it would set it apart from any other youtuber downloader. For instance the Youtube-dl GUI doesn't provide this functionality.

In the same vein, it would be nice to have an option for downloading the sections of a video seperately. E.g. chapters of a tutorial, or single songs in an album that was uploaded as a single video. I don't know how well-accessible that information is through the API, but it does exist on the website.
Example:

e.g. this video

I second this request. It would be very beneficial :)

Sorry for (very) late reply, but I decided to put the project into maintenance mode due to shifting priorities so it unfortunately won't be receiving new features.

Awww, could this be the very very last feature you add to this project, the parting gift. The mark  of an end of an era? Is it a trivial addition?

@guido-visser @q7z I have in the meantime found a different project that supports exactly this feature.
It's a fork of youtube-dl which has many additional features, and can be used for downloading "chapterized" audios like I wanted to by doing
yt-dlp --split-chapters -x THE_URL

@Tyrrrz Don't worry, I get that. Maintaining projects and adding features you don't even want to use yourself is not something we can expect for free if you don't feel like it :heart:

@lucidBrot Thanks for this I'll try working around. I totally agree with you on that part, @Tyrrrz how difficult do you think it would be to add this? I am willing to first sponsor the addition of this feature for what amount you reckon it should be.

how difficult do you think it would be to add this? I am willing to first sponsor the addition of this feature for what amount you reckon it should be.

Thanks a lot for this suggestion, but it's not something money can fix unfortunately. I'm just trying to limit my exposure to projects I'm no longer as interested or motivated to work on, for the sake of my mental health. I love open source, but it can be really straining at times and lately it's becoming harder for me to deal with everything (it's not anyone's fault or anything, just the nature of things).
On top of that, I want users to have adequate expectations of the project's future. Of course, if anyone wants, they can make a fork and carry on from there, or just use any of the alternative solutions available (youtube-dl being the most popular one).

thank you very much Tyrrrz, your work is still appreciated to this day!

Understandable, thank you and I really hope things improve for you!


Spelling error in the manual

In the manual there is a spelling error right at the beginning of chapter 2 (p. 11). There it says Spledid when it should say Splendid (Notice the n).
I wanted to create a PR that fixes this problem but I couldn't find the respective part of the source code so I'm creating this issue instead.

FYI, https://github.com/cereda/arara/search?utf8=✓&q=spledid&type=

Ah sure... How could I forget about GitHub's search function.
Though it confuses me that the only matches are in the backup folder. Does this mean that the issue has been resolved but the linked manual hasn't been updated yet?

Hello, friends!
Yes, the typo is in the backup directory, which I keep it for sentimental reasons. :wink:
Since the current version of arara in TL and MT is version 3.0, I decided to keep the old sources. Sadly, I could not write the new manual based on the previous one because the tool changed a lot. It had to be written from scratch. Hopefully, I am in the middle of writing the new manual and I plan to release arara 4.0 in the middle of June, so fingers crossed! Then the backup directory will be no more. :wink:
Sorry for the confusion...
Cheerio!

11b22b041f6ce926e4b9d68fa9a16b24432418f3 The (old) user manual is gone, long live the (new) user manual! Now we are in the official release countdown! :wink:


Crash report

java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
at io.branch.referral.ServerRequestQueue.containsClose(ServerRequestQueue.java:159)
at io.branch.referral.Branch$6.run(Branch.java:452)
at java.lang.Thread.run(Thread.java:818)

@aman400 I'm so sorry you were affected by this. We fixed this in v 1.5.1 of the SDK. Please update at your earliest convenience.
It was a rare synchronization issue that our tests didn't catch unfortunately. Hopefully the impact was minimal.

Hi @aaustin, This issue is still happening in 1.5.4.

On a different side, might have been fixed in V 1.5.5. according to their changelog.
Which has exactly addressed this crash.

I'm so sorry @peymankh. You're right but we did find a fix. These multithreaded bugs are so hard to test for screen out of production, but I think we're in the clear now. This was actually the same bug as the previous reported, but our previous fix wasn't thorough enough.
It's now been resolved. I'm really sorry about it!

@aaustin Thanks for the reply. Looking at the changelog of v1.5.5, seems to me that this issue has been addressed. I guess what I do is update to that version for the time being and see if the issue has been resolved.

@peymankh We have released v1.6.0 with lot of enhancement on thread handling. So the concurrent modification issues should not happen any more. Please update  to v1.6.0


Set license

Change-type: patch
Signed-off-by: Josh Bowling<EMAIL_ADDRESS>

@balena-ci I self certify!


restnoded restarts immediately after posting the decleartion

Environment

Application Services Version:
{
"version": "3.17.1",
"release": "1",
"schemaCurrent": "3.17.0",
"schemaMinimum": "3.0.0"
}
BIG-IP Version:
Sys::Version
Main Package
Product     BIG-IP
Version     <IP_ADDRESS>
Build       0.0.4
Edition     Point Release 5
Date        Wed Apr 24 21:26:13 PDT 2019

Summary
After sending post request to URI /mgmt/shared/appsvcs/declare, restnoded restarts.
Steps To Reproduce
Steps to reproduce the behavior:

Submit the following declaration:

{
     "class": "AS3",
     "action": "deploy",
     "persist": true,
     "targetHost": "{{targetHost}}",
     "targetTokens": {
     "X-F5-Auth-Token": "{{authToken}}"
     },
     "declaration": {
         "class": "ADC",
         "schemaVersion": "3.17.0",
         "id": "simple test 1",
         "label": "sample_1",
         "remark": "Simple HTTP Service with Round-Robin Load Balancing",
         "updateMode": "selective",
         "Sample_01": {
             "class": "Tenant",
             "defaultRouteDomain": 0,
             "A1": {
                 "class": "Application",
                 "template": "http",
                 "serviceMain": {
                     "class": "Service_HTTP",
                     "virtualAddresses": [
                         "<IP_ADDRESS>"
                     ],
                     "pool": "web_pool"
                 },
                 "web_pool": {
                     "class": "Pool",
                     "monitors": [
                         "http"
                     ],
                     "members": [
                         {
                             "servicePort": 80,
                             "serverAddresses": [
                                 "<IP_ADDRESS>",
                                 "<IP_ADDRESS>"
                             ]
                         }
                     ]
                 }
             }
         }
     }
 }

Observe the following error response:

 {
    "error": {
        "code": 404,
        "message": "",
        "innererror": {
            "referer": "restnoded",
            "originalRequestBody": "{xxxxx}",
            "errorStack": []
        }
    }
}

Expected Behavior
Partition, virtual server and pool member created.
Actual Behavior
Received 404 error message
/var/log/audit
status=[01020036:3: The requested value list (/Common/appsvcs/____appsvcs_lock) was not found.] cmd_data=delete ltm data-group internal /Common/appsvcs/____appsvcs_lock
/var/log/ltm
01020036:3: The requested value list (/Common/ServiceDiscovery/tasks) was not found.
The requested value list (/Common/appsvcs/____appsvcs_lock) was not found.
/var/log/restnoded
TypeError: Cannot read property 'code' of null
,    at /var/config/rest/iapps/f5-appsvcs/lib/util/networkUtil.js:44:50
,    at GetAddrInfoReqWrap.asyncCallback [as callback] (dns.js:64:16)
,    at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:83:10)
Tue, 18 Feb 2020 18:08:35 GMT - info: path /var/config/rest/nodejskeystore/ is not exist
Tue, 18 Feb 2020 18:08:35 GMT - severe: [RestOperationDispatcher] 'shared/appsvcs/declare' not found.

We have a similar issue in our internal product backlog (AUTOTOOL-1065), however the bug has been appearing very infrequently and intermittently. Does this failure happen consistently for you?

Yes it's consistent for me.

AUTOTOOL-1065 was resolved in version 3.18.0. Closing.


@conda-forge-admin, please add bot automerge

Hi! This is the friendly automated conda-forge-webservice.
I just wanted to let you know that I added bot automerge in conda-forge/django-large-image-feedstock#4.


Onboarding Refactoring

Deleted screen not present in new design
Updated layouts to better reflect new design and fit on screen
Renamed TitleScreen to SplashScreen so there is a match between design and implementation

One other thing; sizes are still pretty spread outside of the dimens.xml. Personally okay with that while doing MVP but we should do them where we can

Yeah, there's definitely a lot of refactoring ahead if we stick with this UI and not Madi's.


Update ResourceBasedTextResource.cs

When you have EndsWith then you can have problems with resources like that:
Orders
ExternalOrders.
End with this case you have error!

Thanks for this! :heart:
This particular class is not well tested, and I'm afraid this might break someone. Would you be able to add a couple of tests for the indexer?
You can add them to ResourceBasedTextResourceFixture :smile:

Been a while since I looked at this, but won't this actually break stuff?
If I recall correctly, the reason we used EndsWith with because resources gets "namespaces"
So you could have
Foo.Name and Bar.Name and you ask for Name then we will find both and throw an exception telling you to provide a more specific key.. so you'd have to request it using either Foo.Name or Bar.Name to get a unique match. The more specific key is only required if you run into this issue with your resources.
However, by turning it into an Equals check, then you're *always going to have to provide the full key. I'e even if you only had a Foo.Name you could no longer just ask for it using Name

@thecodejunkie So you can change to this:
x => x.Key.EndsWith("." + components.Item1, StringComparison.OrdinalIgnoreCase)

And now we are able to specify correct name without mistakes.
I understand when we have resources with both exact name. But i have resources with different names but ending exactly the same.

Will the resource always be prefixed with a namespace?
What about a resource named Orders? That won't match the EndsWith("." + "Orders") check...
Maybe we should split on . and do Equals on the last item?

And again. If you want ut to pull this, I think we need some tests covering a couple of these scenarios.


Update libs

@alanshaw: note that I can't test it locally since I don't see how I can bypass the GitHub OAuth2 error.

Thanks @XhmikosR :)

Good to see you merging this! There might be a few newer dependency updates
so feel free to make those yourself.
On Mar 20, 2015 8:30 PM, "Alan Shaw"<EMAIL_ADDRESS>wrote:

Thanks @XhmikosR https://github.com/XhmikosR :)
—
Reply to this email directly or view it on GitHub
https://github.com/alanshaw/david-www/pull/180#issuecomment-84095209.


Any chance of connecting through SOCKS5 proxy?

Is there a chance you could / want to add this feature? I have a need to sometimes connect to servers that belong to people I don't like/trust and I usually use a tor socks proxy for such things. I'm tired of using Filezilla and am looking for something I can automate using my minuscule knowledge of all things sftp / docker n/unraid etc.
Thanks in advance

Sorry I have no plans right now support connection through a SOCKS proxy as lftp doesn't include it by default.


100% width centered carousel

Just curious, is this type of carousel possible with jcarousel?
http://www.obox-design.com/demo-theme.cfm?theme=photolist
If so, how would you style the carousel to where the main slide is centered but it still shows part of the next and previous slides?
Thanks for any help you can provide

Hi guys, I'm really interested to creating something like this: http://theinternationalpicturehouse.com/
But the issue I'm having is that how to set the right and left items opacity?? I mean how to have a class for outside items?
Any help would be really appreciated !


TLS woes

I'm unsure if this is addressed in any other issue (https://github.com/clux/kube-rs/issues/132 for instance), but my setup is fairly simple:
k8s oauth to github with dex/gangway. The certificate is valid (production cert from letsencrypt).
When trying to connect with the client setup using let client = Client::try_default().await?; I get:
`Error: ReqwestError: error sending request for url (https://my-cluster/apis/apiextensions.k8s.io/v1beta1/customresourcedefinitions/collections.blah.test?&force=true&fieldManager=test-operator): error trying to connect: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed:ssl/statem/statem_clnt.c:1913: (unable to get issuer certificate)
Caused by:
0: error sending request for url (https://my-cluster/apis/apiextensions.k8s.io/v1beta1/customresourcedefinitions/collections.blah.test?&force=true&fieldManager=test-operator): error trying to connect: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed:ssl/statem/statem_clnt.c:1913: (unable to get issuer certificate)
1: error trying to connect: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed:ssl/statem/statem_clnt.c:1913: (unable to get issuer certificate)
2: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed:ssl/statem/statem_clnt.c:1913: (unable to get issuer certificate)
3: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed:ssl/statem/statem_clnt.c:1913:`
Any suggestions? No other tool I've tried refuses to use my current config, so I'm a bit suprised :)

Hard to tell from just that output. Oauth providers have always been hard for us to test, but it looks like you're beyond that stage. Then again we're not really doing a lot of magic to the certs. Does the problem persist with openssl as the tls stack?

FWIW, if this is for local testing then you could use kubectl proxy as a workaround, to let kubectl handle all of the OAuth/TLS stuff for you.

@clux I've tried with "native-tls" and "rustls-tls". It seems not to make any difference. And that output is all I get :)
@teozkr, I'll try using kubectl to proxy it for my testing, thanks!

@teozkr Using kube proxy works fine for testing. But moving to the cluster gives me much the same situation.
Using a plain client = Client::try_default().await? gives me similar output:
`Error: ReqwestError: error sending request for url (https://<IP_ADDRESS>/apis/apiextensions.k8s.io/v1beta1/customresourcedefinitions/collections.blah.test?&force=true&fieldManager=test-operator): error trying to connect: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed:ssl/statem/statem_clnt.c:1915: (unable to get issuer certificate)
Caused by:
0: error sending request for url (https://<IP_ADDRESS>/apis/apiextensions.k8s.io/v1beta1/customresourcedefinitions/collections.blah.test?&force=true&fieldManager=test-operator): error trying to connect: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed:ssl/statem/statem_clnt.c:1915: (unable to get issuer certificate)
1: error trying to connect: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed:ssl/statem/statem_clnt.c:1915: (unable to get issuer certificate)
2: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed:ssl/statem/statem_clnt.c:1915: (unable to get issuer certificate)
3: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed:ssl/statem/statem_clnt.c:1915:
`
From the pod describe I see the sa is mounted:
Volumes:   solr-operator-sa-token-dn6jg:     Type:        Secret (a volume populated by a Secret)     SecretName:  test-operator-sa-token-dn6jg     Optional:    false
And to make sure I didn't miss any permissions, the sa is bound to cluster-admin. I'm running with native-tls-vendored.
Suggestions are welcome :)

@sdlarsen What does your /var/run/secrets/kubernetes.io/serviceaccount/ca.crt contain? Is curl https://<IP_ADDRESS>/ --cacert /var/run/secrets/kubernetes.io/serviceaccount/ca.crt able to connect?

Yes, I can connect with curl, but only if I add --insecure as the cluster certs are self-signed, which seems to be the issue (for both environments actually).
Sorry for bothering you with this. The current solution is:
     let mut config = Config::infer().await?;      config.accept_invalid_certs = true;      client = Client::new(config);
Which I think is the correct way with self-signed certs?

No, it should allow the connection if you specify the correct CA explicitly (via --cacert). That cURL doesn't work either makes it sound like a cluster issue, where it mounts the wrong CA into the pods for some reason, or the cert is invalid for some other reason (expired? incorrect clock?).

True, something is off with the certs. Let me fix that and get back to you.

True, fixing the cert setup solved that. Thank you for the assistance.


Implement a simple goto website

What did you implement:
Closes #34
How did you implement it:

Implemented a simple goto website using HTML5 and Bootstrap 3 framework.

How can we verify it:
Visit the following link to see a preview of the website,
http://nc-front.s3-website.ap-south-1.amazonaws.com
Is this ready for review?: YES
Is it a breaking change?: NO

Please make the services support added table configurable otherwise, we need to update and deploy the website after every new service support is added which may be a overhead for the website maintainer.
cc @rehrumesh @rajikaimal

@raju249 I Agree, I thought of making the table configurable using a JSON file.
So whenever new services added,  just updating the JSON file would reflect the changes in the HTML table.

Isn't that as good as updating the HTML table 😅.
Can we do some sort of automation here?
On Mon, Mar 5, 2018, 8:41 PM Gayashan Bombuwala<EMAIL_ADDRESS>wrote:

@raju249 https://github.com/raju249 I Agree, I thought of making the
table configurable using a JSON file.
So whenever new services added, just updating the JSON file would reflect
the changes in the HTML table.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/cloudlibz/nodecloud/pull/46#issuecomment-370449753,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AH7CQvLeiDZM4irBmqWPiparj7XWV0Uyks5tbVWGgaJpZM4SbPxQ
.

Isn't that as good as updating the HTML table sweat_smile.
Can we do some sort of automation here?

@raju249 you mean something like an editable table?

No, maybe we can pick values from a DB in dynamodb.
Whenever new service is added, we can add it to dynamodb and values are
fetched dynamically.
This is not same as adding values in json since Json file has to be hosted
then.
What you think?
On Mon, Mar 5, 2018, 8:47 PM Gayashan Bombuwala<EMAIL_ADDRESS>wrote:

Isn't that as good as updating the HTML table sweat_smile.
Can we do some sort of automation here?
@raju249 https://github.com/raju249 you mean something like an editable
table?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/cloudlibz/nodecloud/pull/46#issuecomment-370451828,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AH7CQgwh0BBSyYuQOlBXF_vHO_pRu9gGks5tbVb-gaJpZM4SbPxQ
.

No, maybe we can pick values from a DB in dynamodb.
Whenever new service is added, we can add it to dynamodb and values are
fetched dynamically.
This is not same as adding values in json since Json file has to be hosted
then.
What you think?

@raju249 surely, can do that, as long as the website maintainer agrees to provision and manage the required cloud resources (i.e DynamoDB, Lambda, API Gateway | may vary depending on the desired approach to implement).
I'll be more than happy to implement it. :)
what do you think?
@rehrumesh @rajikaimal

@gayashanbc Website looks great. Small suggestion, you can host the website in the gh-pages in a separate branch free itself which is provided by GitHub.
https://pages.github.com

@lakindu95 Thank you so much for the suggestion.
But I'm afraid, I don't have the necessary permission to access the repository settings, in order to configure it as a GitHub page.

Shall we maintain this page in a separate branch? @rehrumesh

@rajikaimal can you arrange the gh-pages branch for the development?


fix(v2): do not treat at-rules during CSS minification

Motivation
Fixes #3836
This disables the removeUnusedAtRules option in advanced CSS minifier as it does not work correctly for us.
Have you read the Contributing Guidelines on pull requests?
Yes
Test Plan
Tested on https://github.com/semoal/docusaurus-css-minifier-bug (after that, the building of site goes without fatal errors).
Related PRs
(If this PR adds or changes functionality, please take some time to update the docs at https://github.com/facebook/docusaurus, and link to your PR here.)

Confirmed same issue, hope this gets released soon.


Provide a stable API version for Azure Policy

Currently, the latest tag of Azure Policy contains a preview feature
https://github.com/Azure/azure-rest-api-specs/blob/main/specification/resources/resource-manager/readme.md#tag-package-policy-2021-06

Microsoft.Authorization/preview/2020-07-01-preview/policyExemptions.json

Some customers need a stable version of the SDK which requires service team to release the stable version of this feature.
Please refer to this item: https://github.com/Azure/azure-sdk-for-go/issues/16528

@lirenhe Exemptions are still a preview feature of Azure Policy. At the current moment, we do not have an ETA for the GA of this feature. If any customer is interested in having statements of support for production use, the PM team is happy to have those discussions. Thank you.


[PoviderHub] Polish API for first GA

Contributing to the Azure SDK
Please see our CONTRIBUTING.md if you are not familiar with contributing to this repository or have questions.
For specific information about pull request etiquette and best practices, see this section.

API change check
APIView has identified API level changes in this PR and created following API reviews.
Azure.ResourceManager.ProviderHub


Parenthesis parser

An initial attempt at building some sort of syntax tree so that the formatter could work with a bit higher level info than pure tokens.
At this first iteration I'm just parsing out groups of parenthesis. For example the following SQL:
SELECT (price + (price * tax)) FROM table;

produces the following AST:
[
  {
    type: 'statement',
    children: [
      { type: 'token', token: { type: 'RESERVED_COMMAND', value: 'SELECT' } },
      { type: 'parenthesis', openParen: '(', closeParen: ')', children: [
        { type: 'token', token: { type: 'IDENT', value: 'price' } },
        { type: 'token', token: { type: 'OPERATOR', value: '+' } },
        { type: 'parenthesis', openParen: '(', closeParen: ')', children: [
          { type: 'token', token: { type: 'IDENT', value: 'price' } },
          { type: 'token', token: { type: 'OPERATOR', value: '*' } },
          { type: 'token', token: { type: 'IDENT', value: 'tax' } },
        ] },
      ] },
      { type: 'token', token: { type: 'OPERATOR', value: ';' } },
    ],
  },
]

As you see, I'm wrapping all plain tokens inside a special type: 'token' node. This is to avoid mixing Token types with AST node types. (Tried that approach initially and it created tons of problems, especially regarding types).
For now this is all very much work in progress...

As this developed into a larger rewrite of the whole parsing approach, closing this PR in favor of #250


MGMT: Principal Attribute field should be a dropdown

When selecting "Username Attribute" and choosing "Principle Attribute", the field should possibly turn into a dropdown with the current collection of attributes defined:

User must not be limited to attributes in the dropdown; must be able to type anything or select from the list.

Same thing needs to be done when "Anonymous" is selected:

And here:

Currently the MdAutocomplete widget used to display options and allow user input does not allow multiple selection.  Only one attribute in the list can be selected and selecting an option in the list clears any text that might have been entered.  The fields on the Attribute Release Consent card are both currently coded to be multiple selection.  Anyone wanting multiple attributes will need to type all attributes desired separated by a comma.

Fix has been pushed to mgmt-enhancements


Aliasing when running with impeller

See below, scaled UI has text and image aliasing.  Only happens when running with impeller.

Perhaps just wait for it to be fixed, but good to be aware

Text aliasing is odd and might depend on the font used. What font are you using?
Image aliases even with scaling on some devices. The fix for that is to use exactly 2x the pixel resolution of the image size. So if you have an icon width and height of 48x48, use a source icon image of 96x96.

The fonts are attached, Quicksand-Bold + OpenSans-Regular.
The issue doesn't seem to be there for images, just text.
I've just tested again on the latest flutter, and issue is still there.
Dodgy Fonts.zip

Looks like the issue also appears with SVGPicture library, seems like they are rendered at a much lower resolution, and are then scaled up.
Issue only occurs when using the new Impeller rendering engine, so will become more widespread as it is rolled out

Oh wow, that's an interesting find.
I'll see if I can follow up on this when I have time. I haven't been using Impeller yet so I wonder if the Flutter team is aware of these issues.


Integrated Terminal Backlog

This is a ranked backlog of the larger, heavy hitter items within the overall integrated terminal backlog.

Expose integrated terminal extension API #9957
Backspace, left and right in Windows integrated terminal cause prompt to go out of sync #7345
✅ Add scroll bar to integrated terminal #6602
Integrated terminal does not launch when project folder contains special/unicode characters #7727
Add virtual selection to integrated terminal #9958

This list does not contain smaller issues, check the milestone the specific issue is associated with for that. The full backlog of integrated terminal issues is available here.

@Tyriar
Is it possible to have in terminal features that exist in debug console output like ability to inspect/extend objects ala browser console? Also clickable links to code? Are they based on totally different technologies?

@whitecolor there is stuff happening around bringing the integrated terminal and debugging a little closer, that's the main use case for #9957 but we're only just exploring it right now. Clickable links is being tracked here #7321, before starting on this I think the upstream issue relating to the linkify addon needs to be looked at https://github.com/sourcelair/xterm.js/issues/27

Cool. Though that seems a lot of work)

Removed "Backspace, left and right in Windows integrated terminal cause prompt to go out of sync #7345" from the list as it only impacts git bash and is certainly an upstream issue.

Closing this off, no longer needed for tracking.


Misiu/os advance may10

Bump by 100 commits.

 Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you all sign our Contributor License Agreement before we can accept your contribution.8 out of 14 committers have signed the CLA.:white_check_mark: yoonminnam:white_check_mark: mattpulver:white_check_mark: paul-aiyedun:white_check_mark: jack-mapd:white_check_mark: misiugodfrey:white_check_mark: mattgara:white_check_mark: tmostak:white_check_mark: pearu:x: AndrewVDo:x: simoneves:x: brenocfg:x: cmatzenbach:x: Israel Vicars:x: steveblackmon-mapdIsrael Vicars seems not to be a GitHub user. You need a GitHub account to be able to sign the CLA. If you have already a GitHub account, please add the email address used for this commit to your account.You have signed the CLA already but the status is still pending? Let us recheck it.

clang-format failed

clang-format failed


Make PSQLError public

Motivation
Users want to inspect what has gone wrong. For this they need access to the error type that we throw.
Changes

Rewrite PSQLError to ensure it is a type that we can evolve in public

For this to work we shouldn't use associated types on the code enum

Merge channel and connectionError code into one
Rename PSQLDecodingError to PostgresMessageDecodingError to ensure a clear distinction to PostgresDecodingError
PSQLError is now a CoW type
Attach the query, if we have one to the PSQLError to make debugging easier

Result

Better debuggable errors.

Codecov Report

Merging #342 (1a057b0) into main (f21252b) will decrease coverage by 0.38%.
The diff coverage is 30.40%.

:exclamation: Current head 1a057b0 differs from pull request most recent head 12bebe8. Consider uploading reports for the commit 12bebe8 to get more accurate results

Additional details and impacted files
@@            Coverage Diff             @@
##             main     #342      +/-   ##
==========================================
- Coverage   41.57%   41.19%   -0.38%
==========================================
  Files         115      115
  Lines        9434     9600     +166
==========================================
+ Hits         3922     3955      +33
- Misses       5512     5645     +133

Impacted Files
Coverage Δ

Sources/PostgresNIO/Postgres+PSQLCompat.swift
0.00% <0.00%> (ø)

...es/PostgresNIO/Connection/PostgresConnection.swift
16.63% <3.84%> (-0.70%)
:arrow_down:

...urces/PostgresNIO/New/PostgresChannelHandler.swift
61.14% <33.33%> (ø)

Sources/PostgresNIO/New/PSQLError.swift
43.36% <34.03%> (-37.65%)
:arrow_down:

...nection State Machine/ConnectionStateMachine.swift
57.63% <80.00%> (+0.01%)
:arrow_up:

...ion State Machine/AuthenticationStateMachine.swift
49.18% <100.00%> (ø)

...ostgresNIO/New/PostgresBackendMessageDecoder.swift
94.02% <100.00%> (ø)


npm start失败

$ npm start

<EMAIL_ADDRESS>start E:\node_project\web-highlighter
node script/dev.js

[convert] E:\node_project\web-highlighter\README.md - converting...
[convert] E:\node_project\web-highlighter\README.md - convert md to html success!
i ｢wds｣: Project is running at http://<IP_ADDRESS>:8085/
i ｢wds｣: webpack output is served from undefined
i ｢wds｣: Content not from webpack is served from E:\node_project\web-highlighter\example\static
Starting the development server...
E:\node_project\web-highlighter\node_modules\open\index.js:29
...options
^^^
SyntaxError: Unexpected token ...
at createScript (vm.js:74:10)
at Object.runInThisContext (vm.js:116:10)
at Module._compile (module.js:533:28)
at Object.Module._extensions..js (module.js:580:10)
at Module.load (module.js:503:32)
at tryModuleLoad (module.js:466:12)
at Function.Module._load (module.js:458:3)
at Module.require (module.js:513:17)
at require (internal/module.js:11:18)
at startBrowserProcess (E:\node_project\web-highlighter\node_modules\better-opn\dist\index.js:81:10)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR<EMAIL_ADDRESS>start: node script/dev.js
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the<EMAIL_ADDRESS>start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR!      C:\Users\d\AppData\Roaming\npm-cache_logs\2020-04-17T07_10_28_121Z-debug.log

It looks like your nodejs doesn't support Object Rest/Spread Properties. Updating nodejs to a higher version (>= 8.6.0) may help.
web-highlighter uses better-open in devDependencies which depends on the package open. And open use this syntax.


Decimal entries conform to locale setting, but seemingly get parsed with dot decimal, no matter.

So these contain commas, because my locale says commas are the decimal separator. If I try to put dot decimals in there, it automatically resets them to comma decimals before I can click save.
If I put comma decimals in there, they don't apply after hitting safe (only the whole part of the number applies, the decimals get chopped off)
If I set my OS to an english locale with dot decimals, it works fine.
Please parse the float coming out of there with the locale, .NET has
float.tryParse(f, Thread.CurrentThread.CurrentUICulture);
I assume that's the problem, I didn't check the code, but I've ran into the same problem as well, previously.
Second way would be to force the culture of the UI to also be invariant, then it doesn't matter.

Hi there, thanks for reporting and helping out with some code right away!
I had a check in the source-code and I don't use any .Parse/.TryParse (according to GitHub search). Instead I use a NumericUpDown control which does the conversion for me: https://github.com/luttje/Key2Joy/blob/main/Key2Joy.Gui/Mapping/Actions/Input/GamePadStickActionControl.cs
That makes this situation quite confusing. I might be forcing a specific Locale somewhere?
Currently my focus is on other projects, so if anyone is able to help that's appreciated!
Until then this problem will have to wait.


Can't use this library as dependency  in mmp project

I'm trying to make a simplified fork of your library :) and I want to inherit most of the common code and leave it mmp.
My build.gradle  is here.
dependencies {
    commonMainImplementation("com.soywiz:kds:1.5.0")
}

but when I compile it, then I have an import error in com.soywiz.kds.*. If I change it to     commonMainImplementation("com.soywiz:kds-common:0.6.0") I can see the dependency in the IntelliJ IDEA, but gradle build still has import errors like
e: /Users/tolsi/Documents/code/aik/geom/src/commonMain/kotlin/ru/tolsi/aik/geom/PointArrayList.kt: (23, 25): Unresolved reference: DoubleArrayList
...

What I do wrong? Can you help me build it?

http://dl.bintray.com/korlibs/korlibs/com/soywiz/korlibs/kds/kds/1.9.2/
You have to include the repository: http://dl.bintray.com/korlibs/korlibs/ or jcenter()
And the artifact should be:
com.soywiz.korlibs.kds:kds:1.9.2
I had to change the groupId to be able to publish it to jcenter.

Oh, it works! I spend 3 hours trying to fix it :< Can you update the readme for the future users?

Yeah. Sorry, that was my fault. I have a pending issue of updating all my READMEs and the documentation website. Ill do that one ASAP

I have just fixed all the references to the old bintray repo everywhere

It still failing.
repositories {
    maven { url "https://dl.bintray.com/korlibs/korlibs" }
}
dependencies {
    // For multiplatform projects
    implementation "com.soywiz:kds:1.9.2"
...
}

It should be at https://dl.bintray.com/korlibs/korlibs/com/soywiz/kds/1.9.2/, but correct is https://dl.bintray.com/korlibs/korlibs/com/soywiz/korlibs/kds/kds/1.9.2/ - "com.soywiz.korlibs.kds:kds:1.9.2"

You are right. It seems that I forgot to update the artifact . Thanks for pointing out.


[BUG] Edit Advanced Setting option server-url will redirect to inappropriate page.

Describe the bug
When editing server-url option in Advanced Settings, click either Save or Cancel, will not back to the origin setting page but another setting page which we didn't expose.
The Link in the title also redirect to that page we didn't exposed.
To Reproduce
Steps to reproduce the behavior:

Open dashboard and navigate to Advanced -> Settings
Click Edit Setting of server-url

Click Cancel -> be redirected to /management.cattle.io.setting
Click Save    -> be redirected to /management.cattle.io.setting
Click Link Advance Setting:    -> be redirected to /management.cattle.io.setting
Click browser's previous page => original setting page /harvesterhci.io.setting

Expected behavior
We didn't expose the page of /management.cattle.io.setting in dashboard, so the routing should be the same as where user step in.
Environment:

Harvester ISO version: master-d05a6cc7-head
Underlying Infrastructure (e.g. Baremetal with Dell PowerEdge R630): Baremetal DL360 3nodes
dashboard ui-source: Bundled

Additional context
[origin setting page]

[editing server-url]

[hyperlink of advanced setting]

Tested in master-d05a6cc7-head. Still not navigating to the correct URL The issue seems to be that the URL path for the advanced settings page and the edit server-url page aren't the same and when you click cancel it's just removing the last part of the URL for the server-url edit page.

Verify Steps:

Check server-url create, cancel, and back.

Additional context:

Tested in master-d21b9161-head. fixed.
Verify Steps:

Install harvester
Access harvester
Edit server-url form settings
Check server-url save, cancel, and back.


types: define RegexFlags

This type will be used in the definition of S.regex. It's unlikely to be useful elsewhere, but there's value in defining "well-defined" types in one place.

LGTM

I've decided to merge this pull request, despite the legitimate concern raised by @kedashoe.
Earlier, I wrote:

I see RegexFlags as a union type:
data RegexFlags = Empty | G | I | M | GI | GM | IM | GIM

Were we to define S.regexFlags.gm, I do not believe anyone would expect S.regexFlags.mg as an alias. There's no compelling reason to provide two identical but differently named constructors. If one squints and sees 'gm' as a nullary data constructor for the RegexFlags type, one would be surprised if 'mg' were also a constructor.

I think it would be surprising to users that flags required a certain order.

First, I argue that the notion of order applies to 'gm' :: String but not to 'gm' :: RegexFlags. In the latter case 'gm' is a name rather than a sequence of characters.
Secondly, and more importantly, the concern is largely addressed by Stefano's suggestion that we define RegexFlags via EnumType. An invalid value such as 'mg' will result in a descriptive exception:
//    regex :: RegexFlags -> String -> RegExp
const regex =
def('regex',
    {},
    [$.RegexFlags, $.String, $.RegExp],
    (flags, source) => new RegExp(source, flags));

regex('gm', '^');
// => /^/gm

regex('mg', '^');
// ! TypeError: ‘regex’ expected a value of type ("" | "g" | "i" | "m" | "gi" | "gm" | "im" | "gim") as its first argument; received "mg"

I'm a fan of the principle of least astonishment, but if you're going to surprise me, a good error message is a great mollifier :) And while I still can't say I'm in favor of this, I was never that against it anyway :+1:

The other thing is we always have the option of expanding the type in a future version. ;)


use CompletionItem.label for completion menu

The label should be displayed to the user and insert text can be trimmed here

@rwols I will close this one then and wait for your PR


Favicon is missing

Description
Current favicon is of default icon of react+vite .
Screenshots

I will add a appropriate favicon which will match with website.
Checklist

[X] I have checked the existing issues.
[X] I have read the Contributing Guidelines
[X] I have read the Code Of Conduct
[X] I joined onboarding group for knowledge flow and direct conversation and support from admins  Curious Developers Community - Curious Connect
[X] The changes don't break the code
[X] Please attach the screenshots and video of the development work once it is done
[X] If you need any help please join the default  (Google Meet Link)

You can start working on this @PratikMane0112

Ok, Plz assign it to me.


spiffe compiling failed, need a new release

spiffe=0.5.0 compiling failed because of the 2021 edition not included in the latest crates release.
error[E0405]: cannot find trait `TryInto` in this scope
   --> /root/.cargo/registry/src/rsproxy.cn-0dccff568467c15b/spiffe-0.5.0/src/proto/workload.rs:156:16
    |
156 |             D: TryInto<tonic::transport::Endpoint>,
    |                ^^^^^^^ not found in this scope
    |
    = note: 'core::convert::TryInto' is included in the prelude starting in Edition 2021
    = note: 'std::convert::TryInto' is included in the prelude starting in Edition 2021
help: consider importing one of these items
    |
146 +     use core::convert::TryInto;
    |
146 +     use std::convert::TryInto;
    |

Hey @zkonge,
It looks like the issue is because the TryInto trait isn't automatically imported into the scope . To fix the compilation error, you can explicitly import it:
use std::convert::TryInto;

it's because edition 2018 will not do it automatically, but 2021 include TryInto in the std prelude.


Run desktop app  Lost connection to device.

run windows . flutter calls the DLL, and already gets the value returned by c. But then it will lose connection to device.
I don't know what's causing this.Below is my code
`  Future sendAPDUHex(String cmd) async {
int sendLen = cmd.length ~/ 2;
try {
  Pointer<Uint8> apduRLen = calloc.allocate(sizeOf<Uint8>());

  Pointer<Uint8> apduResData = calloc.allocate(sizeOf<Uint8>());

  Pointer<ffi.Utf8> sendData = cmd.toNativeUtf8();

  int apduRst =
      await cpuAPDUHexFun(icDev, sendLen, sendData, apduRLen, apduResData);
  debugPrint("apduRst=$apduRst");
  if (apduRst != 0) {
    return "";
  }
  Pointer<ffi.Utf8> dataFromAddress =
      Pointer.fromAddress(apduResData.address);
  String message = dataFromAddress.toDartString();
  debugPrint("message=$message");
  await Future.microtask(() => calloc.free(apduRLen));
  await Future.microtask(() => calloc.free(apduResData));
  await Future.microtask(() => calloc.free(dataFromAddress));
  return message;
} on ArgumentError catch (e) {
  return e.toString();
} on Exception catch (e) {
  return e.toString();
}

}`

But then it will lose connection to device.

Any segfault would cause this. For example reading memory that has been freed, or double free.
Add prints to figure out till where it works.

debugPrint("apduRst=$apduRst");

This print still succeeds?
You can use .address to see what memory you're trying to access.
Side note:

calloc.allocate(sizeOf<Uint8>());

Use calloc<Uint8>() instead, sizeOf will be automatic.
Side note 2:

await Future.microtask(() => calloc.free(apduRLen));

Use calloc.free(apduRLen). FFI calls are fast, no need to use async here.
Side note 3:
Instead of manual frees, you can use the Arena:
https://github.com/dart-lang/ffi/blob/master/lib/src/arena.dart

The modification according to the above three points will still lose.
The printing is normal. I don't know if it is a memory allocation problem. Sometimes the first time it is normal, the second time it runs, it will lose


Unable to change or delete relationship between nodes with Neo4j OGM v2.1.6 and Spring Boot Data Neo4j v4.2.10

I can't remove or change existing relationships between two nodes using Spring Boot (v1.5.10) and Neo4j OGM (v2.1.6, with Spring Data Neo4j v4.2.10).  I have already posted this issue on StackOverflow as well:
https://stackoverflow.com/questions/49783019/unable-to-change-or-delete-relationship-between-nodes-with-neo4j-ogm-and-spring
Expected Behavior
Relationship between nodes changed or deleted
Current Behavior
Old relationship remains when new one is added, or, nothing happens when trying to remove existing relationship.
Steps to Reproduce (for bugs)
The working demo is available here:
https://github.com/ADi3ek/neo4j-spring-boot-demo
I also grabbed an actual queries that are being executed in separate file:
https://github.com/ADi3ek/neo4j-spring-boot-demo/blob/master/query.log
Environment:

OGM Version used: 2.1.6
Java Version used: 1.8
Neo4J Version used: Neo4j Community Edition 3.1.2
Bolt Driver Version used: 2.1.6
Operating System and Version: Mac OS Sierra 10.12.6

These are queries sent to the server when trying just to remove existing relationship (by setting it to null):
shell:>update-task-status TASK1 null
2018-04-12 13:37:51.664  INFO 10213 --- [           main] o.n.o.drivers.bolt.request.BoltRequest   : Request: MATCH (n:`Task`) WHERE n.`key` = { `key_0` } WITH n MATCH p=(n)-[*0..1]-(m) RETURN p, ID(n) with params {key_0=TASK1}
2018-04-12 13:37:51.670  INFO 10213 --- [           main] o.n.o.drivers.bolt.request.BoltRequest   : Request: UNWIND {rows} as row MATCH (n) WHERE ID(n)=row.nodeId SET n:`Status` SET n += row.props RETURN row.nodeId as ref, ID(n) as id, row.type as type with params {rows=[{type=node, nodeId=2559, props={key=todo}}]}
2018-04-12 13:37:51.683  INFO 10213 --- [           main] o.n.o.drivers.bolt.request.BoltRequest   : Request: UNWIND {rows} as row MATCH (n) WHERE ID(n)=row.nodeId SET n:`Task` SET n += row.props RETURN row.nodeId as ref, ID(n) as id, row.type as type with params {rows=[{type=node, nodeId=2562, props={key=TASK1}}]}
Task "TASK1" updated, status: "null"

...and, an actual code snippet responsible for it:
    public void updateTaskStatus(Task task, Status status) {
        Status prevStatus = task.getStatus();
        if(prevStatus != null) {
            prevStatus.removeTask(task);
            this.saveStatus(prevStatus);
        }

        task.setStatus(status);
        if(status != null) {
            status.addTask(task);
            this.saveStatus(status);
        }

        this.saveTask(task);
    }

I can reproduce the issue when using SDN. Could you please try it with OGM's SessionFactory (autowired)? This way it works for me.
I just want to be sure that this is a SDN only problem. (https://jira.spring.io/browse/DATAGRAPH-1082)


docs: First draft of Deployment tool content, Getting started section

Description of changes:
Docs, the Getting started section: Adapted content from the current dev guide for four topics:
Setting up your environment
Installing the tool
Setting up credentials
Running the tool
Outstanding questions
In pre-requisites.md (Setting up your environment)

Is the required Node.js version 10.13.0? Or should it be 10.3.

Are there scenarios that don't require the CDK?
If so, is Node.js still required for those scenarios?

By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

Please update this PR to target a merge to Dev and not main


[Feature Request] Add a "throws" keyword to the signature of functions to identify functions that can possibly throw

✅ Viability Checklist
My suggestion meets these guidelines:

[x] This wouldn't be a breaking change in existing TypeScript/JavaScript code
[x] This wouldn't change the runtime behavior of existing JavaScript code
[x] This could be implemented without emitting different JS based on the types of the expressions
[x] This isn't a runtime feature (e.g. library functionality, non-ECMAScript syntax with JavaScript output, new syntax sugar for JS, etc.)
[x] This feature would agree with the rest of TypeScript's Design Goals.

⭐ Suggestion
Add a "throws" keyword to the signature of functions to identify functions that can possibly throw.
📃 Motivating Example
Java has a throws keyword to help the developer who reads code determine whether a function or method can possibly throw or not:
static void testMethod() throws Exception {
    String test = null;
    test.toString();
}

💻 Use Cases
Practically speaking the value of this feature request for the DX is that by reading the code of a function we can be sure simply by reading the signature type whether or not that function can possibly throw, even if it doesn't have the throw keyword explicitly written in the function body.
Related to
https://github.com/microsoft/TypeScript/issues/49549
https://github.com/typescript-eslint/typescript-eslint/issues/5196

Duplicate of #13219. Used search terms: throws in:title

To be honest I'm not that much of a fan of the whole 'throws' Java-esque mechanic. It feels a bit heavy and long-winded for a language such as TypeScript.
It's just that the way TypeScript interprets the type theory is too lax. So it leaves this proposal as the only option to be able to solve the underlying issue I exposed in https://github.com/microsoft/TypeScript/issues/49549