[feat] HomeKit integration (HomeBridge?)

Is your feature request related to a problem? Please describe.
I currently only use Home Assistant a last resort, when I cannot get something straight into HomeKit. Would love to be able to skip HA altogether by getting Z-wave straight into HomeKit.
Describe the solution you'd like
An integration with HomeKit, possibly through a HomeBridge plugin.
Describe alternatives you've considered
Using the MQTT plugin for HomeBridge that already exists, but it will be a hassle to create everything from the ground.
Additional context

This would be a nice feature but have no time for it right now :(

I’m currently building my HomeKit setup around zwave2mqtt. I’m using node red with this plugin to handle the HomeKit side. I currently have outlets, dimmers, and on/off switches running great.
I spend a lot of time supporting that plugin, I’d be happy to help out if you want to open an issue over there.

@crxporter Would you like to help with a PR or what else?

@robertsLando it's not a change to anything on zwave2mqtt. It's simply using the zwave messages to connect to homekit through node red. Here's what it looks like:

For those not familiar with node-red: each purple box is an MQTT connection (subscribe on the left, publish on the far right), each salmon color ƒ node is a function to adjust for the very specific commands needed in homekit, and the orange ones in the middle are homekit items.
I'll be finishing up my switches/dimmers then adding a few outlets, motion detectors, and a motor curtain. The "magic" happens in the ƒ (function) nodes. They're doing the work like changing a brightness>0 to tell homekit on plus a brightness and holding on to brightness for times when homekit only sends "on" instead of a brightness value.
For anyone who wants to see where I'm at currently, here's the code from nodered for my screenshot:
[{"id":"c3a7ac6.f19425","type":"mqtt out","z":"e88791ff.5a188","name":"","topic":"zwave/Bedroom/Sconce/38/1/0/set","qos":"1","retain":"false","broker":"b0dfe17d.08cb28","x":1160,"y":940,"wires":[]},{"id":"a8d1df38.50fea","type":"mqtt in","z":"e88791ff.5a188","name":"","topic":"zwave/Bedroom/Sconce/38/1/0","qos":"1","datatype":"json","broker":"b0dfe17d.08cb28","x":150,"y":940,"wires":[["3b6d6148.2f3ece"]]},{"id":"3b6d6148.2f3ece","type":"function","z":"e88791ff.5a188","name":"ZWAVE TO HK","func":"const b=msg.payload.value;\nvar newMsg = {};\nif(b === 0){\n    newMsg.payload = {\n        \"On\": false\n    }\n}\nif(b > 0){\n    newMsg.payload = {\n        \"On\": true,\n        \"Brightness\": b\n    }\n}\nreturn newMsg;\n","outputs":1,"noerr":0,"x":420,"y":940,"wires":[["7bc93c51.c34be4"]]},{"id":"c8e82d8b.039f2","type":"mqtt out","z":"e88791ff.5a188","name":"","topic":"zwave/Bathroom/Fan/37/1/0/set","qos":"1","retain":"false","broker":"b0dfe17d.08cb28","x":1170,"y":100,"wires":[]},{"id":"99868b31.38b5e","type":"mqtt in","z":"e88791ff.5a188","name":"","topic":"zwave/Bathroom/Fan/37/1/0","qos":"1","datatype":"json","broker":"b0dfe17d.08cb28","x":140,"y":100,"wires":[["15b284c8.c60603"]]},{"id":"15b284c8.c60603","type":"function","z":"e88791ff.5a188","name":"In function","func":"newMsg = {};\nif(msg.payload.value === true){\n    newMsg.payload={\n        \"On\":true\n    }\n}\nif(msg.payload.value === false){\n    newMsg.payload={\n        \"On\":false\n    }\n}\nreturn newMsg;\n","outputs":1,"noerr":0,"x":410,"y":100,"wires":[["27d5abec.cc5e5c"]]},{"id":"130b70b9.4f7377","type":"function","z":"e88791ff.5a188","name":"Out function","func":"newMsg = {};\nif (msg.hap !== undefined && msg.hap.context !== undefined) {\n    newMsg.payload = msg.payload.On;\n    return newMsg;\n}\nreturn;","outputs":1,"noerr":0,"x":870,"y":100,"wires":[["c8e82d8b.039f2"]]},{"id":"22794e8.f5bcd32","type":"function","z":"e88791ff.5a188","name":"HK TO ZWAVE","func":"var b = context.get('b')||99;\nnewMsg = {};\n\nif(msg.payload.Brightness !== undefined){\n    b = msg.payload.Brightness;\n    if(b === 0){\n        context.set('b',99);\n    }\n    else{\n        context.set('b',b);\n    }\n    if (msg.hap !== undefined && msg.hap.context !== undefined) {\n        newMsg.payload = b;\n        return newMsg;\n    }\n}\n\nif (msg.hap !== undefined && msg.hap.context !== undefined) {\n    if(msg.payload.On === false){\n        newMsg.payload = 0;\n        return newMsg;\n    }\n    if(msg.payload.On === true){\n        newMsg.payload = b;\n        return newMsg;\n    }\n}\nreturn;\n","outputs":1,"noerr":0,"x":880,"y":940,"wires":[["c3a7ac6.f19425"]]},{"id":"7bc93c51.c34be4","type":"homekit-service","z":"e88791ff.5a188","isParent":true,"bridge":"6bd92034.8c2118","parentService":"","name":"Sconce","serviceName":"Lightbulb","topic":"","filter":false,"manufacturer":"Honeywell","model":"39351","serialNo":"Default Serial Number","cameraConfigVideoProcessor":"ffmpeg","cameraConfigSource":"","cameraConfigStillImageSource":"","cameraConfigMaxStreams":2,"cameraConfigMaxWidth":1280,"cameraConfigMaxHeight":720,"cameraConfigMaxFPS":10,"cameraConfigMaxBitrate":300,"cameraConfigVideoCodec":"libx264","cameraConfigAudioCodec":"libfdk_aac","cameraConfigAudio":false,"cameraConfigPacketSize":1316,"cameraConfigVerticalFlip":false,"cameraConfigHorizontalFlip":false,"cameraConfigMapVideo":"0:0","cameraConfigMapAudio":"0:1","cameraConfigVideoFilter":"scale=1280:720","cameraConfigAdditionalCommandLine":"-tune zerolatency","cameraConfigDebug":false,"cameraConfigSnapshotOutput":"disabled","cameraConfigInterfaceName":"","characteristicProperties":"{\n    \"Brightness\": {\n        \"maxValue\": 99\n    }\n}","x":660,"y":940,"wires":[["22794e8.f5bcd32"],[]]},{"id":"55230060.615f68","type":"mqtt in","z":"e88791ff.5a188","name":"","topic":"zwave/Bathroom/Ceiling/38/1/0","qos":"1","datatype":"json","broker":"b0dfe17d.08cb28","x":150,"y":760,"wires":[["8c2851f1.b2363"]]},{"id":"8c2851f1.b2363","type":"function","z":"e88791ff.5a188","name":"ZWAVE TO HK","func":"const b=msg.payload.value;\nvar newMsg = {};\nif(b === 0){\n    newMsg.payload = {\n        \"On\": false\n    }\n}\nif(b > 0){\n    newMsg.payload = {\n        \"On\": true,\n        \"Brightness\": b\n    }\n}\nreturn newMsg;\n","outputs":1,"noerr":0,"x":420,"y":760,"wires":[["99116aa8.38ce7"]]},{"id":"99116aa8.38ce7","type":"homekit-service","z":"e88791ff.5a188","isParent":true,"bridge":"6bd92034.8c2118","parentService":"","name":"Bath Ceiling","serviceName":"Lightbulb","topic":"","filter":false,"manufacturer":"Honeywell","model":"39351","serialNo":"Default Serial Number","cameraConfigVideoProcessor":"ffmpeg","cameraConfigSource":"","cameraConfigStillImageSource":"","cameraConfigMaxStreams":2,"cameraConfigMaxWidth":1280,"cameraConfigMaxHeight":720,"cameraConfigMaxFPS":10,"cameraConfigMaxBitrate":300,"cameraConfigVideoCodec":"libx264","cameraConfigAudioCodec":"libfdk_aac","cameraConfigAudio":false,"cameraConfigPacketSize":1316,"cameraConfigVerticalFlip":false,"cameraConfigHorizontalFlip":false,"cameraConfigMapVideo":"0:0","cameraConfigMapAudio":"0:1","cameraConfigVideoFilter":"scale=1280:720","cameraConfigAdditionalCommandLine":"-tune zerolatency","cameraConfigDebug":false,"cameraConfigSnapshotOutput":"disabled","cameraConfigInterfaceName":"","characteristicProperties":"{\n    \"Brightness\": {\n        \"maxValue\": 99\n    }\n}","x":650,"y":760,"wires":[["6b681390.9ac414"],[]]},{"id":"6b681390.9ac414","type":"function","z":"e88791ff.5a188","name":"with error control","func":"var b = context.get('b')||99;\nnewMsg = {};\n\nif(msg.payload.Brightness !== undefined){\n    b = msg.payload.Brightness;\n    if(b === 0){\n        context.set('b',99);\n    }\n    else{\n        context.set('b',b);\n    }\n    if (msg.hap !== undefined && msg.hap.context !== undefined) {\n        newMsg.payload = b;\n        return [newMsg,null];\n    }\n}\n\n// if (msg.hap !== undefined && msg.hap.context !== undefined) {\n    if(msg.payload.On === false){\n        newMsg.payload = 0;\n        return [newMsg,null];\n    }\n    if(msg.payload.On === true){\n        newMsg.payload = b;\n        return [newMsg,null];\n    }\n// }\nerrorMsg = {\"payload\":\"error\"};\nreturn [null, errorMsg];\n","outputs":2,"noerr":0,"x":890,"y":760,"wires":[["427e80c7.152ae"],[]]},{"id":"427e80c7.152ae","type":"mqtt out","z":"e88791ff.5a188","name":"","topic":"zwave/Bathroom/Ceiling/38/1/0/set","qos":"1","retain":"false","broker":"b0dfe17d.08cb28","x":1160,"y":760,"wires":[]},{"id":"a308dfe5.8e183","type":"mqtt in","z":"e88791ff.5a188","name":"","topic":"zwave/Bathroom/Mirror/38/1/0","qos":"1","datatype":"json","broker":"b0dfe17d.08cb28","x":150,"y":820,"wires":[["4b45a5fd.1484ac"]]},{"id":"4b45a5fd.1484ac","type":"function","z":"e88791ff.5a188","name":"ZWAVE TO HK","func":"const b=msg.payload.value;\nvar newMsg = {};\nif(b === 0){\n    newMsg.payload = {\n        \"On\": false\n    }\n}\nif(b > 0){\n    newMsg.payload = {\n        \"On\": true,\n        \"Brightness\": b\n    }\n}\nreturn newMsg;\n","outputs":1,"noerr":0,"x":420,"y":820,"wires":[["ff566916.becdd"]]},{"id":"ff566916.becdd","type":"homekit-service","z":"e88791ff.5a188","isParent":true,"bridge":"6bd92034.8c2118","parentService":"","name":"Mirror","serviceName":"Lightbulb","topic":"","filter":false,"manufacturer":"Honeywell","model":"39351","serialNo":"Default Serial Number","cameraConfigVideoProcessor":"ffmpeg","cameraConfigSource":"","cameraConfigStillImageSource":"","cameraConfigMaxStreams":2,"cameraConfigMaxWidth":1280,"cameraConfigMaxHeight":720,"cameraConfigMaxFPS":10,"cameraConfigMaxBitrate":300,"cameraConfigVideoCodec":"libx264","cameraConfigAudioCodec":"libfdk_aac","cameraConfigAudio":false,"cameraConfigPacketSize":1316,"cameraConfigVerticalFlip":false,"cameraConfigHorizontalFlip":false,"cameraConfigMapVideo":"0:0","cameraConfigMapAudio":"0:1","cameraConfigVideoFilter":"scale=1280:720","cameraConfigAdditionalCommandLine":"-tune zerolatency","cameraConfigDebug":false,"cameraConfigSnapshotOutput":"disabled","cameraConfigInterfaceName":"","characteristicProperties":"{\n    \"Brightness\": {\n        \"maxValue\": 99\n    }\n}","x":650,"y":820,"wires":[["27a6cf1a.bc08f8"],[]]},{"id":"27a6cf1a.bc08f8","type":"function","z":"e88791ff.5a188","name":"HK TO ZWAVE","func":"var b = context.get('b')||99;\nnewMsg = {};\n\nif(msg.payload.Brightness !== undefined){\n    b = msg.payload.Brightness;\n    if(b === 0){\n        context.set('b',99);\n    }\n    else{\n        context.set('b',b);\n    }\n    if (msg.hap !== undefined && msg.hap.context !== undefined) {\n        newMsg.payload = b;\n        return newMsg;\n    }\n}\n\nif (msg.hap !== undefined && msg.hap.context !== undefined) {\n    if(msg.payload.On === false){\n        newMsg.payload = 0;\n        return newMsg;\n    }\n    if(msg.payload.On === true){\n        newMsg.payload = b;\n        return newMsg;\n    }\n}\nreturn;\n","outputs":1,"noerr":0,"x":880,"y":820,"wires":[["b448da1a.cc7ba"]]},{"id":"b448da1a.cc7ba","type":"mqtt out","z":"e88791ff.5a188","name":"","topic":"zwave/Bathroom/Mirror/38/1/0/set","qos":"1","retain":"false","broker":"b0dfe17d.08cb28","x":1160,"y":820,"wires":[]},{"id":"110283a.7571e7c","type":"mqtt in","z":"e88791ff.5a188","name":"","topic":"zwave/Bathroom/Closet/38/1/0","qos":"1","datatype":"json","broker":"b0dfe17d.08cb28","x":150,"y":880,"wires":[["57289807.97068"]]},{"id":"57289807.97068","type":"function","z":"e88791ff.5a188","name":"ZWAVE TO HK","func":"const b=msg.payload.value;\nvar newMsg = {};\nif(b === 0){\n    newMsg.payload = {\n        \"On\": false\n    }\n}\nif(b > 0){\n    newMsg.payload = {\n        \"On\": true,\n        \"Brightness\": b\n    }\n}\nreturn newMsg;\n","outputs":1,"noerr":0,"x":420,"y":880,"wires":[["93c6679a.75d66"]]},{"id":"93c6679a.75d66","type":"homekit-service","z":"e88791ff.5a188","isParent":true,"bridge":"6bd92034.8c2118","parentService":"","name":"Closet","serviceName":"Lightbulb","topic":"","filter":false,"manufacturer":"Honeywell","model":"39351","serialNo":"Default Serial Number","cameraConfigVideoProcessor":"ffmpeg","cameraConfigSource":"","cameraConfigStillImageSource":"","cameraConfigMaxStreams":2,"cameraConfigMaxWidth":1280,"cameraConfigMaxHeight":720,"cameraConfigMaxFPS":10,"cameraConfigMaxBitrate":300,"cameraConfigVideoCodec":"libx264","cameraConfigAudioCodec":"libfdk_aac","cameraConfigAudio":false,"cameraConfigPacketSize":1316,"cameraConfigVerticalFlip":false,"cameraConfigHorizontalFlip":false,"cameraConfigMapVideo":"0:0","cameraConfigMapAudio":"0:1","cameraConfigVideoFilter":"scale=1280:720","cameraConfigAdditionalCommandLine":"-tune zerolatency","cameraConfigDebug":false,"cameraConfigSnapshotOutput":"disabled","cameraConfigInterfaceName":"","characteristicProperties":"{\n    \"Brightness\": {\n        \"maxValue\": 99\n    }\n}","x":650,"y":880,"wires":[["d292a57e.e25a58"],[]]},{"id":"d292a57e.e25a58","type":"function","z":"e88791ff.5a188","name":"HK TO ZWAVE","func":"var b = context.get('b')||99;\nnewMsg = {};\n\nif(msg.payload.Brightness !== undefined){\n    b = msg.payload.Brightness;\n    if(b === 0){\n        context.set('b',99);\n    }\n    else{\n        context.set('b',b);\n    }\n    if (msg.hap !== undefined && msg.hap.context !== undefined) {\n        newMsg.payload = b;\n        return newMsg;\n    }\n}\n\nif (msg.hap !== undefined && msg.hap.context !== undefined) {\n    if(msg.payload.On === false){\n        newMsg.payload = 0;\n        return newMsg;\n    }\n    if(msg.payload.On === true){\n        newMsg.payload = b;\n        return newMsg;\n    }\n}\nreturn;\n","outputs":1,"noerr":0,"x":880,"y":880,"wires":[["1d751926.981a57"]]},{"id":"1d751926.981a57","type":"mqtt out","z":"e88791ff.5a188","name":"","topic":"zwave/Bathroom/Closet/38/1/0/set","qos":"1","retain":"false","broker":"b0dfe17d.08cb28","x":1160,"y":880,"wires":[]},{"id":"27d5abec.cc5e5c","type":"homekit-service","z":"e88791ff.5a188","isParent":true,"bridge":"6bd92034.8c2118","parentService":"","name":"Master Fan","serviceName":"Fan","topic":"","filter":false,"manufacturer":"Default Manufacturer","model":"Default Model","serialNo":"Default Serial Number","cameraConfigVideoProcessor":"ffmpeg","cameraConfigSource":"","cameraConfigStillImageSource":"","cameraConfigMaxStreams":2,"cameraConfigMaxWidth":1280,"cameraConfigMaxHeight":720,"cameraConfigMaxFPS":10,"cameraConfigMaxBitrate":300,"cameraConfigVideoCodec":"libx264","cameraConfigAudioCodec":"libfdk_aac","cameraConfigAudio":false,"cameraConfigPacketSize":1316,"cameraConfigVerticalFlip":false,"cameraConfigHorizontalFlip":false,"cameraConfigMapVideo":"0:0","cameraConfigMapAudio":"0:1","cameraConfigVideoFilter":"scale=1280:720","cameraConfigAdditionalCommandLine":"-tune zerolatency","cameraConfigDebug":false,"cameraConfigSnapshotOutput":"disabled","cameraConfigInterfaceName":"","characteristicProperties":"{}","x":650,"y":100,"wires":[["130b70b9.4f7377"],[]]},{"id":"1869ae21.7dd22a","type":"mqtt out","z":"e88791ff.5a188","name":"","topic":"zwave/Bedroom/Ceiling/38/1/0/set","qos":"1","retain":"false","broker":"b0dfe17d.08cb28","x":1160,"y":1000,"wires":[]},{"id":"ca8d1179.f470e8","type":"function","z":"e88791ff.5a188","name":"HK TO ZWAVE","func":"var b = context.get('b')||99;\nnewMsg = {};\n\nif(msg.payload.Brightness !== undefined){\n    b = msg.payload.Brightness;\n    if(b === 0){\n        context.set('b',99);\n    }\n    else{\n        context.set('b',b);\n    }\n    if (msg.hap !== undefined && msg.hap.context !== undefined) {\n        newMsg.payload = b;\n        return newMsg;\n    }\n}\n\nif (msg.hap !== undefined && msg.hap.context !== undefined) {\n    if(msg.payload.On === false){\n        newMsg.payload = 0;\n        return newMsg;\n    }\n    if(msg.payload.On === true){\n        newMsg.payload = b;\n        return newMsg;\n    }\n}\nreturn;\n","outputs":1,"noerr":0,"x":880,"y":1000,"wires":[["1869ae21.7dd22a"]]},{"id":"a2c2ec03.4d8d08","type":"homekit-service","z":"e88791ff.5a188","isParent":true,"bridge":"6bd92034.8c2118","parentService":"","name":"Bedroom Ceiling","serviceName":"Lightbulb","topic":"","filter":false,"manufacturer":"Honeywell","model":"39351","serialNo":"Default Serial Number","cameraConfigVideoProcessor":"ffmpeg","cameraConfigSource":"","cameraConfigStillImageSource":"","cameraConfigMaxStreams":2,"cameraConfigMaxWidth":1280,"cameraConfigMaxHeight":720,"cameraConfigMaxFPS":10,"cameraConfigMaxBitrate":300,"cameraConfigVideoCodec":"libx264","cameraConfigAudioCodec":"libfdk_aac","cameraConfigAudio":false,"cameraConfigPacketSize":1316,"cameraConfigVerticalFlip":false,"cameraConfigHorizontalFlip":false,"cameraConfigMapVideo":"0:0","cameraConfigMapAudio":"0:1","cameraConfigVideoFilter":"scale=1280:720","cameraConfigAdditionalCommandLine":"-tune zerolatency","cameraConfigDebug":false,"cameraConfigSnapshotOutput":"disabled","cameraConfigInterfaceName":"","characteristicProperties":"{\n    \"Brightness\": {\n        \"maxValue\": 99\n    }\n}","x":650,"y":1000,"wires":[["ca8d1179.f470e8"],[]]},{"id":"1a5d0317.2e8bfd","type":"function","z":"e88791ff.5a188","name":"ZWAVE TO HK","func":"const b=msg.payload.value;\nvar newMsg = {};\nif(b === 0){\n    newMsg.payload = {\n        \"On\": false\n    }\n}\nif(b > 0){\n    newMsg.payload = {\n        \"On\": true,\n        \"Brightness\": b\n    }\n}\nreturn newMsg;\n","outputs":1,"noerr":0,"x":420,"y":1000,"wires":[["a2c2ec03.4d8d08"]]},{"id":"30a1d36.724d1ac","type":"mqtt in","z":"e88791ff.5a188","name":"","topic":"zwave/Bedroom/Ceiling/38/1/0","qos":"1","datatype":"json","broker":"b0dfe17d.08cb28","x":150,"y":1000,"wires":[["1a5d0317.2e8bfd"]]},{"id":"dbaf2e30.8bd86","type":"comment","z":"e88791ff.5a188","name":"SWITCHES","info":"","x":110,"y":40,"wires":[]},{"id":"dde6008b.42b448","type":"comment","z":"e88791ff.5a188","name":"DIMMERS","info":"","x":100,"y":700,"wires":[]},{"id":"4cf13727.1c4a98","type":"mqtt in","z":"e88791ff.5a188","name":"","topic":"zwave/Kit/Ceiling/37/1/0","qos":"1","datatype":"json","broker":"b0dfe17d.08cb28","x":130,"y":160,"wires":[["efc04949.1a021"]]},{"id":"efc04949.1a021","type":"function","z":"e88791ff.5a188","name":"In function","func":"newMsg = {};\nif(msg.payload.value === true){\n    newMsg.payload={\n        \"On\":true\n    }\n}\nif(msg.payload.value === false){\n    newMsg.payload={\n        \"On\":false\n    }\n}\nreturn newMsg;\n","outputs":1,"noerr":0,"x":410,"y":160,"wires":[["9a5c1b6d.f448b8"]]},{"id":"9a5c1b6d.f448b8","type":"homekit-service","z":"e88791ff.5a188","isParent":true,"bridge":"6bd92034.8c2118","parentService":"","name":"Kitchen","serviceName":"Lightbulb","topic":"","filter":false,"manufacturer":"Default Manufacturer","model":"Default Model","serialNo":"Default Serial Number","cameraConfigVideoProcessor":"ffmpeg","cameraConfigSource":"","cameraConfigStillImageSource":"","cameraConfigMaxStreams":2,"cameraConfigMaxWidth":1280,"cameraConfigMaxHeight":720,"cameraConfigMaxFPS":10,"cameraConfigMaxBitrate":300,"cameraConfigVideoCodec":"libx264","cameraConfigAudioCodec":"libfdk_aac","cameraConfigAudio":false,"cameraConfigPacketSize":1316,"cameraConfigVerticalFlip":false,"cameraConfigHorizontalFlip":false,"cameraConfigMapVideo":"0:0","cameraConfigMapAudio":"0:1","cameraConfigVideoFilter":"scale=1280:720","cameraConfigAdditionalCommandLine":"-tune zerolatency","cameraConfigDebug":false,"cameraConfigSnapshotOutput":"disabled","cameraConfigInterfaceName":"","characteristicProperties":"{}","x":640,"y":160,"wires":[["a4d14ad5.0c3e2"],[]]},{"id":"a4d14ad5.0c3e2","type":"function","z":"e88791ff.5a188","name":"Out function","func":"newMsg = {};\nif (msg.hap !== undefined && msg.hap.context !== undefined) {\n    newMsg.payload = msg.payload.On;\n    return newMsg;\n}\nreturn;","outputs":1,"noerr":0,"x":870,"y":160,"wires":[["6b388ac5.9e6e14"]]},{"id":"a233986f.cd466","type":"mqtt in","z":"e88791ff.5a188","name":"","topic":"zwave/Kit/Dining/37/1/0","qos":"1","datatype":"json","broker":"b0dfe17d.08cb28","x":120,"y":220,"wires":[["c975fa52.b0fa98"]]},{"id":"c975fa52.b0fa98","type":"function","z":"e88791ff.5a188","name":"In function","func":"newMsg = {};\nif(msg.payload.value === true){\n    newMsg.payload={\n        \"On\":true\n    }\n}\nif(msg.payload.value === false){\n    newMsg.payload={\n        \"On\":false\n    }\n}\nreturn newMsg;\n","outputs":1,"noerr":0,"x":410,"y":220,"wires":[["5f8f122e.b6a0a4"]]},{"id":"5f8f122e.b6a0a4","type":"homekit-service","z":"e88791ff.5a188","isParent":true,"bridge":"6bd92034.8c2118","parentService":"","name":"Dining","serviceName":"Lightbulb","topic":"","filter":false,"manufacturer":"Default Manufacturer","model":"Default Model","serialNo":"Default Serial Number","cameraConfigVideoProcessor":"ffmpeg","cameraConfigSource":"","cameraConfigStillImageSource":"","cameraConfigMaxStreams":2,"cameraConfigMaxWidth":1280,"cameraConfigMaxHeight":720,"cameraConfigMaxFPS":10,"cameraConfigMaxBitrate":300,"cameraConfigVideoCodec":"libx264","cameraConfigAudioCodec":"libfdk_aac","cameraConfigAudio":false,"cameraConfigPacketSize":1316,"cameraConfigVerticalFlip":false,"cameraConfigHorizontalFlip":false,"cameraConfigMapVideo":"0:0","cameraConfigMapAudio":"0:1","cameraConfigVideoFilter":"scale=1280:720","cameraConfigAdditionalCommandLine":"-tune zerolatency","cameraConfigDebug":false,"cameraConfigSnapshotOutput":"disabled","cameraConfigInterfaceName":"","characteristicProperties":"{}","x":630,"y":220,"wires":[["ac87331a.621838"],[]]},{"id":"ac87331a.621838","type":"function","z":"e88791ff.5a188","name":"Out function","func":"newMsg = {};\nif (msg.hap !== undefined && msg.hap.context !== undefined) {\n    newMsg.payload = msg.payload.On;\n    return newMsg;\n}\nreturn;","outputs":1,"noerr":0,"x":870,"y":220,"wires":[["eae57f0e.545e08"]]},{"id":"eae57f0e.545e08","type":"mqtt out","z":"e88791ff.5a188","name":"","topic":"zwave/Kit/Dining/37/1/0/set","qos":"1","retain":"false","broker":"b0dfe17d.08cb28","x":1160,"y":220,"wires":[]},{"id":"45522e2b.ff3b38","type":"mqtt in","z":"e88791ff.5a188","name":"","topic":"zwave/Down/Office/37/1/0","qos":"1","datatype":"json","broker":"b0dfe17d.08cb28","x":130,"y":280,"wires":[["4983346c.308b2c"]]},{"id":"4983346c.308b2c","type":"function","z":"e88791ff.5a188","name":"In function","func":"newMsg = {};\nif(msg.payload.value === true){\n    newMsg.payload={\n        \"On\":true\n    }\n}\nif(msg.payload.value === false){\n    newMsg.payload={\n        \"On\":false\n    }\n}\nreturn newMsg;\n","outputs":1,"noerr":0,"x":410,"y":280,"wires":[["e8855d93.5870c8"]]},{"id":"e8855d93.5870c8","type":"homekit-service","z":"e88791ff.5a188","isParent":true,"bridge":"6bd92034.8c2118","parentService":"","name":"Office","serviceName":"Lightbulb","topic":"","filter":false,"manufacturer":"Default Manufacturer","model":"Default Model","serialNo":"Default Serial Number","cameraConfigVideoProcessor":"ffmpeg","cameraConfigSource":"","cameraConfigStillImageSource":"","cameraConfigMaxStreams":2,"cameraConfigMaxWidth":1280,"cameraConfigMaxHeight":720,"cameraConfigMaxFPS":10,"cameraConfigMaxBitrate":300,"cameraConfigVideoCodec":"libx264","cameraConfigAudioCodec":"libfdk_aac","cameraConfigAudio":false,"cameraConfigPacketSize":1316,"cameraConfigVerticalFlip":false,"cameraConfigHorizontalFlip":false,"cameraConfigMapVideo":"0:0","cameraConfigMapAudio":"0:1","cameraConfigVideoFilter":"scale=1280:720","cameraConfigAdditionalCommandLine":"-tune zerolatency","cameraConfigDebug":false,"cameraConfigSnapshotOutput":"disabled","cameraConfigInterfaceName":"","characteristicProperties":"{}","x":630,"y":280,"wires":[["59d71a76.5d627c"],[]]},{"id":"59d71a76.5d627c","type":"function","z":"e88791ff.5a188","name":"Out function","func":"newMsg = {};\nif (msg.hap !== undefined && msg.hap.context !== undefined) {\n    newMsg.payload = msg.payload.On;\n    return newMsg;\n}\nreturn;","outputs":1,"noerr":0,"x":870,"y":280,"wires":[["33458b0e.29e16c"]]},{"id":"33458b0e.29e16c","type":"mqtt out","z":"e88791ff.5a188","name":"","topic":"zwave/Down/Office/37/1/0/set","qos":"1","retain":"false","broker":"b0dfe17d.08cb28","x":1170,"y":280,"wires":[]},{"id":"296d9af9.50606e","type":"mqtt in","z":"e88791ff.5a188","name":"","topic":"zwave/Down/Living/37/1/0","qos":"1","datatype":"json","broker":"b0dfe17d.08cb28","x":130,"y":340,"wires":[["52c5578c.183278"]]},{"id":"52c5578c.183278","type":"function","z":"e88791ff.5a188","name":"In function","func":"newMsg = {};\nif(msg.payload.value === true){\n    newMsg.payload={\n        \"On\":true\n    }\n}\nif(msg.payload.value === false){\n    newMsg.payload={\n        \"On\":false\n    }\n}\nreturn newMsg;\n","outputs":1,"noerr":0,"x":410,"y":340,"wires":[["5f714273.000734"]]},{"id":"5f714273.000734","type":"homekit-service","z":"e88791ff.5a188","isParent":true,"bridge":"6bd92034.8c2118","parentService":"","name":"Living Room","serviceName":"Lightbulb","topic":"","filter":false,"manufacturer":"Default Manufacturer","model":"Default Model","serialNo":"Default Serial Number","cameraConfigVideoProcessor":"ffmpeg","cameraConfigSource":"","cameraConfigStillImageSource":"","cameraConfigMaxStreams":2,"cameraConfigMaxWidth":1280,"cameraConfigMaxHeight":720,"cameraConfigMaxFPS":10,"cameraConfigMaxBitrate":300,"cameraConfigVideoCodec":"libx264","cameraConfigAudioCodec":"libfdk_aac","cameraConfigAudio":false,"cameraConfigPacketSize":1316,"cameraConfigVerticalFlip":false,"cameraConfigHorizontalFlip":false,"cameraConfigMapVideo":"0:0","cameraConfigMapAudio":"0:1","cameraConfigVideoFilter":"scale=1280:720","cameraConfigAdditionalCommandLine":"-tune zerolatency","cameraConfigDebug":false,"cameraConfigSnapshotOutput":"disabled","cameraConfigInterfaceName":"","characteristicProperties":"{}","x":650,"y":340,"wires":[["ce673353.b01ec8"],[]]},{"id":"ce673353.b01ec8","type":"function","z":"e88791ff.5a188","name":"Out function","func":"newMsg = {};\nif (msg.hap !== undefined && msg.hap.context !== undefined) {\n    newMsg.payload = msg.payload.On;\n    return newMsg;\n}\nreturn;","outputs":1,"noerr":0,"x":870,"y":340,"wires":[["bb4e04b6.86c91"]]},{"id":"bb4e04b6.86c91","type":"mqtt out","z":"e88791ff.5a188","name":"","topic":"zwave/Down/Living/37/1/0/set","qos":"1","retain":"false","broker":"b0dfe17d.08cb28","x":1170,"y":340,"wires":[]},{"id":"ccc65428.b5c7d8","type":"mqtt in","z":"e88791ff.5a188","name":"","topic":"zwave/Down/Bath/37/1/0","qos":"1","datatype":"json","broker":"b0dfe17d.08cb28","x":130,"y":400,"wires":[["b89175d4.8b4968"]]},{"id":"b89175d4.8b4968","type":"function","z":"e88791ff.5a188","name":"In function","func":"newMsg = {};\nif(msg.payload.value === true){\n    newMsg.payload={\n        \"On\":true\n    }\n}\nif(msg.payload.value === false){\n    newMsg.payload={\n        \"On\":false\n    }\n}\nreturn newMsg;\n","outputs":1,"noerr":0,"x":410,"y":400,"wires":[["cfa08505.d3a2f8"]]},{"id":"cfa08505.d3a2f8","type":"homekit-service","z":"e88791ff.5a188","isParent":true,"bridge":"6bd92034.8c2118","parentService":"","name":"Small Bath","serviceName":"Lightbulb","topic":"","filter":false,"manufacturer":"Default Manufacturer","model":"Default Model","serialNo":"Default Serial Number","cameraConfigVideoProcessor":"ffmpeg","cameraConfigSource":"","cameraConfigStillImageSource":"","cameraConfigMaxStreams":2,"cameraConfigMaxWidth":1280,"cameraConfigMaxHeight":720,"cameraConfigMaxFPS":10,"cameraConfigMaxBitrate":300,"cameraConfigVideoCodec":"libx264","cameraConfigAudioCodec":"libfdk_aac","cameraConfigAudio":false,"cameraConfigPacketSize":1316,"cameraConfigVerticalFlip":false,"cameraConfigHorizontalFlip":false,"cameraConfigMapVideo":"0:0","cameraConfigMapAudio":"0:1","cameraConfigVideoFilter":"scale=1280:720","cameraConfigAdditionalCommandLine":"-tune zerolatency","cameraConfigDebug":false,"cameraConfigSnapshotOutput":"disabled","cameraConfigInterfaceName":"","characteristicProperties":"{}","x":650,"y":400,"wires":[["3c2a85e3.c9b4da"],[]]},{"id":"3c2a85e3.c9b4da","type":"function","z":"e88791ff.5a188","name":"Out function","func":"newMsg = {};\nif (msg.hap !== undefined && msg.hap.context !== undefined) {\n    newMsg.payload = msg.payload.On;\n    return newMsg;\n}\nreturn;","outputs":1,"noerr":0,"x":870,"y":400,"wires":[["81c4fda8.5c9508"]]},{"id":"81c4fda8.5c9508","type":"mqtt out","z":"e88791ff.5a188","name":"","topic":"zwave/Down/Bath/37/1/0/set","qos":"1","retain":"false","broker":"b0dfe17d.08cb28","x":1160,"y":400,"wires":[]},{"id":"c7059ba7.94222","type":"mqtt in","z":"e88791ff.5a188","name":"","topic":"zwave/Down/Fan/37/1/0","qos":"1","datatype":"json","broker":"b0dfe17d.08cb28","x":130,"y":460,"wires":[["ab4004ca.3206e8"]]},{"id":"ab4004ca.3206e8","type":"function","z":"e88791ff.5a188","name":"In function","func":"newMsg = {};\nif(msg.payload.value === true){\n    newMsg.payload={\n        \"On\":true\n    }\n}\nif(msg.payload.value === false){\n    newMsg.payload={\n        \"On\":false\n    }\n}\nreturn newMsg;\n","outputs":1,"noerr":0,"x":410,"y":460,"wires":[["b7df4b8b.b22428"]]},{"id":"b7df4b8b.b22428","type":"homekit-service","z":"e88791ff.5a188","isParent":true,"bridge":"6bd92034.8c2118","parentService":"","name":"Small Fan","serviceName":"Fan","topic":"","filter":false,"manufacturer":"Default Manufacturer","model":"Default Model","serialNo":"Default Serial Number","cameraConfigVideoProcessor":"ffmpeg","cameraConfigSource":"","cameraConfigStillImageSource":"","cameraConfigMaxStreams":2,"cameraConfigMaxWidth":1280,"cameraConfigMaxHeight":720,"cameraConfigMaxFPS":10,"cameraConfigMaxBitrate":300,"cameraConfigVideoCodec":"libx264","cameraConfigAudioCodec":"libfdk_aac","cameraConfigAudio":false,"cameraConfigPacketSize":1316,"cameraConfigVerticalFlip":false,"cameraConfigHorizontalFlip":false,"cameraConfigMapVideo":"0:0","cameraConfigMapAudio":"0:1","cameraConfigVideoFilter":"scale=1280:720","cameraConfigAdditionalCommandLine":"-tune zerolatency","cameraConfigDebug":false,"cameraConfigSnapshotOutput":"disabled","cameraConfigInterfaceName":"","characteristicProperties":"{}","x":640,"y":460,"wires":[["6b17bd73.b51f2c"],[]]},{"id":"6b17bd73.b51f2c","type":"function","z":"e88791ff.5a188","name":"Out function","func":"newMsg = {};\nif (msg.hap !== undefined && msg.hap.context !== undefined) {\n    newMsg.payload = msg.payload.On;\n    return newMsg;\n}\nreturn;","outputs":1,"noerr":0,"x":870,"y":460,"wires":[["36ad343a.e69d9c"]]},{"id":"36ad343a.e69d9c","type":"mqtt out","z":"e88791ff.5a188","name":"","topic":"zwave/Down/Fan/37/1/0/set","qos":"1","retain":"false","broker":"b0dfe17d.08cb28","x":1160,"y":460,"wires":[]},{"id":"6b388ac5.9e6e14","type":"mqtt out","z":"e88791ff.5a188","name":"","topic":"zwave/Kit/Ceiling/37/1/0/set","qos":"1","retain":"false","broker":"b0dfe17d.08cb28","x":1160,"y":160,"wires":[]},{"id":"b0dfe17d.08cb28","type":"mqtt-broker","z":"","name":"MQTT","broker":"<IP_ADDRESS>","port":"1883","clientid":"","usetls":false,"compatmode":false,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthRetain":"false","birthPayload":"","closeTopic":"","closeQos":"0","closeRetain":"false","closePayload":"","willTopic":"","willQos":"0","willRetain":"false","willPayload":""},{"id":"6bd92034.8c2118","type":"homekit-bridge","z":"","bridgeName":"zwave2mqtt","pinCode":"111-11-111","port":"","allowInsecureRequest":false,"manufacturer":"Default Manufacturer","model":"Default Model","serialNo":"Default Serial Number","customMdnsConfig":false,"mdnsMulticast":true,"mdnsInterface":"","mdnsPort":"","mdnsIp":"","mdnsTtl":"","mdnsLoopback":true,"mdnsReuseAddr":true,"allowMessagePassthrough":true}]

And for anyone with more questions, feel free to ask on this thread or on the node-red-contrib-homekit-bridged github page. Please mention me so I will see and I'll help where I can!

Would love this

@simplenotezy if you’re interested I’d be happy to guide you through the setup as I have built it. I’m running all my Zwave (sensors, switches, curtain, dimmer) through nodered into homekit.
Here’s a link to our nodered homekit project, if you head to the discord linked on the readme, that’s where you’ll find me pretty much every day.
https://github.com/NRCHKB/node-red-contrib-homekit-bridged

Awesome @crxporter. I'll message you directly


fix(Minting): show correct APR for curve after a sucessful mint

Currently, the link goes to back /earn - need to clarify if this should go to https://www.curve.fi/susdv2/ instead?

@andytcf fixed


Support for pluggable "service" name in the SRV records

If you follow this guide and set up SRV records for etcd:
https://github.com/coreos/etcd/blob/master/Documentation/clustering.md
They end up under _etcd-server._tcp.example.com.
But confd looks for it under _etcd._tcp.example.com. So confd and etcd does not really play well here. Would be nice with a way to configure what service to lookup the SRV record for.

@OskarKjellin +1 I wonder if we just add another flag for this?

+1
Same problem here, can't use -srv-domain with etcd on CoreOS. Additional flag would be cool!

+1
Any update about this? is a bit ugly maintain 2 similar records for etcd cluster configuration and for confd client access. I think the additional flag is the best option.

@r0j4z0 I'll be working on a solution for this today.

@r0j4z0 I'm thinking about introducing a new flag called --srv-record which would let you use anything you wanted to look up the SRV records. For example:
$ confd --srv-record="_etcd-client._tcp.confd.io." --log-level=debug
2016-02-20T15:46:04-08:00 confd[85031]: INFO SRV record set to _etcd-client._tcp.confd.io.
2016-02-20T15:46:04-08:00 confd[85031]: INFO Backend set to etcd
2016-02-20T15:46:04-08:00 confd[85031]: INFO Starting confd
2016-02-20T15:46:04-08:00 confd[85031]: INFO Backend nodes set to http://etcd0.confd.io:2379

@r0j4z0 This has been fixed on master. Please test and let me know.

@kelseyhightower Tested, works like a charm! thank you!


Double notifications

I'd like to discuss the double notifications.
I could easily make a pull request to change things, but I wanted to understand the reasoning behind it, and discuss the right way to implement.
The conditions on both of the notifications is the same: "{{ image != '' or video != '' }}", but I could see removing the first notification, and making the second notification step conditional on whether or not the ai response is present.  Of course, maybe it is desirable to get the initial notification, and then the ai response separately, since the later could be delayed.
Are there any thoughts on the best approach here?

The reason there are "two" notifications is simple: The first notification is sent immediately so that users don't miss important events as the summary will add about 5 seconds of delay. I say "two" because the user wont see two separate notifications. Or at least that's how it should be. The second notification should update/replace the first one as seen in the gif in the readme. Are you getting double notifications (as in two separate notifications)?

I think my frigate must send a slew of notifications at once, so I think that some of them we just not updated.  But I definitely have observed a single notification turn into the updated one, now that I am looking for it.


Investigate why semaphore needs to be created all the time.

So the purpose of this issue is to share with the team about what happened in the past when semaphore was added, to try to answer this question.
Starting looking this issue today, I found that was quickly to "solve"...

We added the semaphore feature in middle of 2017, and at that time we were using IRC so I don't have logs about semaphore discussions.

@lance made this question first in 2017:

"...What if there's not really a need for it? Why have it be always on?"

And also answered:

... it really only makes sense to use semaphore isolation in certain use cases where the latency is very low and throughput requirements very high.

Given that, we have no real way of implementing thread pool isolation/rate limiting, so maybe it does make sense to have it always on. I'm not 100% sure, but I think we should discuss it.

link
Then I added a complement

true, with the current code we can see some real changes only when we run the code in parallel.
otherwise, looks like a serial code - like running without semaphore. Since it will release() every time btw.

@alexalikiotis @lholmquist So that is why semaphore is "always on"


Strict JSON Schema validation

@marob Thank you for this PR. This is a bit more involved than enabling the strict validations. @timmyteo is working on a branch, so best to collaborate with him once he is ready.

Hi @marob I have started addressing the related concerns as part of https://github.com/CycloneDX/cdxgen/issues/1107
I have a branch going with the changes and it is close to being completed. But still have a TODO in one code file. Do you want to take over and run with these changes I started as part of this pull request to address all the related issues for this one? https://github.com/CycloneDX/cdxgen/compare/master...timmyteo:cdxgen:feature/issue-1107?expand=1

Hi @timmyteo. I can try to finish but I'm not sure I'll have time.

Ok no problem @marob. If you run out of time then let me know.

Here is what I came up with from your branch: https://github.com/CycloneDX/cdxgen/compare/master...marob:cdxgen:feature/issue-1107

Changes look great @marob! I like the improvements you made to the original. Very clean. Thanks for your work here.

I've created this MR that should replace this one.


Document initializing PackedVectorArray/PackedColorArray correctly

This closes https://github.com/godotengine/godot/issues/62927.
This can be remade for 3.x once we agree on the text to add.

I think it would make more sense to add these notes to the descriptions of Packed<Type>Array(Array from) constructors instead. These notes are about just these specific constructors.

I've amended the PR to put the descriptions in the specific constructors.

Thanks!


Lint Option: Use SQLSTT instead of SQLCOD

SQL-92 YES 1992!!!
section 22.2
Note: SQLSTATE is the preferred status parameter. The SQLCODE status parameter is a deprecated feature that is supported for compatibility with earlier versions of this International Standard. See Annex D, "Deprecated features".

@priceaj Looking at this. I think instead of saying 'use X over Y' we should just say 'Y' is deprecated.
What do you think?

Not sure because if someone uses sqlcod as a matter of course but doesn't know what to use instead they would have to look up what to use instead

Could you say "X is deprecated in favour of Y"?

@priceaj Sounds good to me. Other than the document you linked, are there any other docs we could link to in the extension?

Maybe this https://www.ibm.com/docs/en/i/7.4?topic=codes-sql-message-finder

There isn't a perfect 1-1 mapping between the two, SQL state is a bit more descriptive.


config.yaml / customization / splash not working as expected (expectations and default values for configuration unclear)

Please verify that this bug has NOT been raised before.

[X] I checked and didn't find a similar issue

Describe the bug*
TLDR: no need to read it, solution has been found and PR incoming to add the RELATIVE TO comment to config template.
Steps to Reproduce
docker based install
current stable image
config.yaml edited

good: customize / login_message works as expected
good: customize / navbar_message works as expected
? splash: splash_screen.jpg   does not work as expected

default login screen has a background image in static/img/inventree_splash.jpg
default config.yaml has a commented out    splash: splash_screen.jpg     (but there is no splash_screen.jpg in the repo AND the splash screen we see has a different name)
I would like to override this with my image
I copied my image to the static/img folder under the name "splash_screen.jpg"
updated the config.yaml and uncommented the splash line.

restarted all containers (three times based on the expert advice found at https://youtu.be/uRGljemfwUE?t=59 )
Absolutely no change in the login screen aesthetics.

Conclusion: I must have missed something.
Google-fu: inventree splash, inventree configuration splash... found comment

restart3x, splash screen appears.
Let's rewrite the whole github issue.
Or just make it into a lesson learned and update the config template with this small note?
Expected behaviour
uncommenting the splash field should look for the image in the same folder where the factory default splash image is stored.
Deployment Method

[X] Docker
[ ] Bare metal

Version Information
0.12.3
Please verify if you can reproduce this bug on the demo site.

[X] I can reproduce this bug on the demo site.

Relevant log output
No response

@petrox the default behaviour (expectation) is that the system looks for custom images as specified relative to the /static/ directory. You can put them in the /img/ subdir if you like, but this is not required. I do no think that the suggest change is necessary.
If you put the image in the top-level /static/ directory, and a matching value in your configuration file, I assume this works perfectly fine?

I meant expectations and assumptions are mismatched.
So the program expects the image path to be relative to static. (Which is
perfectly fine for me and I don't think the code needs changing).
But the USER expects the commented out config directive to behave as it is
behaving by default and tries to change that.
No documentation or the config.yaml itself mentions what the default value
of that setting is and actually the examle in the config points to a
nonexistent file. (This can be improved).
Also as best practice the config file could "document itself", so the
relative to /static/ comment improves the configuration file.
My change does not change the behavior of the system or the default value
or the paths, it just shows the reader what is the default value for that
specific item and then the user may decide how to change it and it will
work on the first try.
My comments are not criticism, I'm just walking the path of the new user
and along the way when I see potential for improvement I will make the path
clearer for those coming after me.
Point is, since you have all the details and context in your mind, these
(very minor) things look trivial or invisible, while a newcomer could bump
his head into them.
The default splash is in /static/img so the new user should probably put
their splash there or anywhere else under static, the code does not need
any change.
On Sat, Aug 12, 2023, 12:57 Oliver @.***> wrote:

@Petrox https://github.com/Petrox the default behaviour (expectation)
is that the system looks for custom images as specified relative to the
/static/ directory. You can put them in the /img/ subdir if you like, but
this is not required. I do no think that the suggest change is necessary.
If you put the image in the top-level /static/ directory, and a matching
value in your configuration file, I assume this works perfectly fine?
—
Reply to this email directly, view it on GitHub
https://github.com/inventree/InvenTree/issues/5432#issuecomment-1675852659,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAXFKXLLE6CAPCCHS4LIUA3XU5OSRANCNFSM6AAAAAA3M7XYUM
.
You are receiving this because you were mentioned.Message ID:
@.***>

No documentation or the config.yaml itself mentions what the default value of that setting is and actually the example in the config points to a nonexistent file. (This can be improved).

Ok, I see what you are getting at here.
The issue is that placing a file in the ./img/ directory may be overwritten when the inventree installation is updated. I would suggest that we change the default value to something like custom/splash.jpg - indicating that the user should place in the custom subdirectory. This way, we can avoid any possibility of the system overwriting this file on an update

@SchrodingersGat should we use maintainers permissions to change the path and merge or let this close?


Telegram notifications not initiated

This issue just occurred out of nowhere and persists through a server reboot, reset of Camera-UI database and reinstall of Camera-UI. When motion is detected from the cameras, Telegram notifications are no longer sent through the app. The configuration for Telegram is confirmed to be correct and has not changed between when this was working and now. Nothing telling in Console.

So I figured out through debug that this was due to recording not being enabled; it wasn't exactly clear from the debug logs, I just put 2 and 2 together. It may be helpful to have a message somewhere in the config that Telegram notifications require recordings to be enabled.

I spoke too soon. Same issue occurring again.

And now it’s working again. Out of nowhere.


[GridList] support on Safari, IE and Edge

See last comment on issue #200
@igorbt

That's strange. From screen I see it's mainly a flexbox issue but this should have been fixed in e967763. I will try to have a look tomorrow at work where I could find all these environments.

@igorbt We have merged an improved autoprefixer tool. The prefix are no longer need for the flex property.

https://github.com/callemall/material-ui/pull/2248 this should fix the issue

Seems to work fine in Edge 14:


Property type isn't detected when casting Eloquent attributes to spatie/laravel-data Data objects

The problem
When casting Eloquent attributes to spatie/laravel-data Data objects, ide-helper doesn't pick the correct class. For example, the example from Spatie's documentation https://spatie.be/docs/laravel-data/v2/advanced-usage/eloquent-casting:
<?php
# app/Models/Song.php
namespace App\Models;

use App\SpatieData\ArtistData;
use Illuminate\Database\Eloquent\Model;

class Song extends Model
{
    protected $casts = [
        'artist' => ArtistData::class,
    ];
}

<?php
# app/SpatieData/ArtistData.php
namespace App\SpatieData;

use Spatie\LaravelData\Data;

class ArtistData extends Data
{
    public function __construct(
        public string $name,
        public int $age,
    ) {
    }
}

Running php artisan ide-helper:models --dir='app' --write generates this DocBlock:
/**
 * App\Models\Song
 *
 * @property \Spatie\LaravelData\Contracts\BaseData|null $artist // ❌ not the desired prop definition
 * @method static \Illuminate\Database\Eloquent\Builder|Song newModelQuery()
 * @method static \Illuminate\Database\Eloquent\Builder|Song newQuery()
 * @method static \Illuminate\Database\Eloquent\Builder|Song query()
 * @mixin \Eloquent
 */

This means that we don't get the benefit of type-hinting for casted attributes like this:
$songModel->artist->name;

Why does this happen?
This happens because src/Support/EloquentCasts/DataEloquentCast.php from Spatie's package specifies a return type. This is what ide-helper picks up:
# src/Support/EloquentCasts/DataEloquentCast.php in spatie/laravel-data
…
    public function get($model, string $key, $value, array $attributes): ?BaseData
    {
…

Proposed change
I put this together when looking through the code, trying to work out how to fix it in a project of mine. I thought I'd turn it into a PR for discussion…
This PR lets you instruct ide-helper to use the class that was specified, by adding the DocBlock tag @ide-helper-eloquent-cast-to-specified-class to the class being cast to. e.g.
<?php
# app/SpatieData/ArtistData.php

/**
 * @ide-helper-eloquent-cast-to-specified-class
 */
class ArtistData extends Data
{
…

From which, ide-helper now generates:
/**
 * App\Models\Song
 *
 * @property ArtistData $artist // ✅ the desired prop definition
 * @method static \Illuminate\Database\Eloquent\Builder|Song newModelQuery()
 * @method static \Illuminate\Database\Eloquent\Builder|Song newQuery()
 * @method static \Illuminate\Database\Eloquent\Builder|Song query()
 * @mixin \Eloquent
 */

Notes

The @ide-helper-eloquent-cast-to-specified-class tag can be added to a class, or any of it's parents.
spatie/laravel-data could add this tag to their Spatie\LaravelData\Data class, so it's always applied to Data classes that use it. But if they don't, it can just as easily be added to Data classes (or a parent class) in individual projects.
This solution isn't specific to spatie/laravel-data. It can be used for any classes being cast to in this manner.

Thoughts

I couldn't think of a way for it to happen automatically without forcing it in every case. Which I don't think is 100% desired.
I don't think having to add a @tag is a "nice" solution, however it does give control over when it happens.
An alternative I considered was to specify the relevant classes inside ide-helper's config file. But this doesn't seem very flexible.
I'd be interested to hear if anybody has other ideas about how to detect when it should occur.

Other issues and PRs

This PR may help address this issue https://github.com/barryvdh/laravel-ide-helper/issues/1312
The https://github.com/barryvdh/laravel-ide-helper/pull/1388 PR addresses a slightly different situation. It falls back to the specified-class when none was specified by the casting class. It is short and elegant. However spatie/laravel-data does specify a return type. So whilst it might be a useful change, it doesn't affect this situation.
The comment https://github.com/barryvdh/laravel-ide-helper/issues/1312#issuecomment-1221270878 suggests hard-coding a check for spatie/laravel-data. This seems inflexible to me as it wouldn't allow for other packages or custom classes to benefit.

Type of change

[ ] Bug fix (non-breaking change which fixes an issue)
[X] New feature (non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
[ ] This change requires a documentation update
[ ] Misc. change (internal, infrastructure, maintenance, etc.)

Checklist

[X] Existing tests have been adapted and/or new tests have been added
[X] Add a CHANGELOG.md entry
[ ] Update the README.md
[X] Code style has been fixed via composer fix-style

Fantastic. We are running into the same issue now. I guess the other alternative would be to give laravel-ide-helper special handling for the spatie/laravel-data package. But I think your solution is still workable.

Can we not check if the actual cast is extending the type, and in that case return actual cast (same as fallback $type from #1312?


Crash when joining singleplay / multiplayer world with Physics mod

I want to play with the Physics mod but some other mods require Indium, but when both are enabled at the same time I can't join any world without my game crashing. I reached Physics mod's dev and he told my the issue is coming from Indium, so here I am with the crash report!
crash-2023-03-19_18.27.28-client.txt

You seem to be using an unreleased version of Sodium, that I don't think is compatible with Indium. Only the official releases of Sodium are supported.

Unfortunately the latest version of Physics mod doesn't support Sodium's latest release. Any workaround?

I only support released versions of Sodium, you'll have to wait for Physics mod to update.


Open PR against Pytube.org when new data is merged

When the pytube/pyvideo-data repo moves forward, a PR should be automatically opened against pytube/pytube to advance the pyvideo-data submodule.

This is going to be very hard to do. For now, I'm going to just try and stay on top of fast-forwarding pytube when new changes come through.


settings(user): Display Setting changed to Preferences.

Changed "Display Settings" to "Preferences"  in the User Settings tab and changed the url to #settings/preferences with a redirect from  #settings/display-settings and updated the documentation as  discussed in Community.
Changing to Display-Settings to  Preferences :

changed data name and div id in web/templates/settings/user_display_settings.hbs
changed initialize() in  web/src/settings_sections.js that sets dict as preferences
changed data-section to preferences in web/templates/settings_overlay.hbs

Redirecting :

In function hash_change_overlays in web/src/hashchange.js added if statement that checks if the section is "display-settings" and sets preferences section as active

Documentation:

Edited the help_setting_links.py
Changed in every django.po to refer it as Preferences
Edited in all help/ .md files from "display-settings" to "preferences"

Fixes: #25945

Screenshots and screen captures:
https://github.com/zulip/zulip/assets/91622060/c01622b1-c9c4-4a73-8da5-bb8ba5195a4c

Self-review checklist

[x] Self-reviewed the changes for clarity and maintainability
(variable names, code reuse, readability, etc.).

Communicate decisions, questions, and potential concerns.

[x] Explains differences from previous plans (e.g., issue description).
[x] Highlights technical choices and bugs encountered.
[x] Calls out remaining decisions and concerns.
[x] Automated tests verify logic where appropriate.

Individual commits are ready for review (see commit discipline).

[x] Each commit is a coherent idea.
[x] Commit message(s) explain reasoning and motivation for changes.

Completed manual review and testing of the following:

[x] Visual appearance of the changes.
[x] Responsiveness and internationalization.
[x] Strings and tooltips.
[x] End-to-end functionality of buttons, interactions and flows.
[x] Corner cases, error conditions, and easily imagined bugs.

@zulipbot  add "maintainer review" "area: settings (user)"

@zulipbot add "area: documentation (user)" "priority: high"

@nimishmedatwal welcome! Please read our contributing guidelines and in particular check out our GitHub guide and commit guidelines -- the commit structure here needs to be cleaned up.

@nimishmedatwal welcome! Please read our contributing guidelines and in particular check out our GitHub guide and commit guidelines -- the commit structure here needs to be cleaned up.

Okay sure! I'll do that.

Okay Nimish. This is coming along. I've left some inline comments where it mostly looks like some pieces of your commits ended up in the wrong place. Review those carefully and your own work, too.
I'm not at all sure about the changes to the locale files; I know the translation data gets pulled down from Transifex, but I'm not sure where in the pipeline things like URLs get managed or introduced.  We'll flag Tim about that once these other issues have been addressed.

Okay Nimish. This is coming along. I've left some inline comments where it mostly looks like some pieces of your commits ended up in the wrong place. Review those carefully and your own work, too.
I'm not at all sure about the changes to the locale files; I know the translation data gets pulled down from Transifex, but I'm not sure where in the pipeline things like URLs get managed or introduced. We'll flag Tim about that once these other issues have been addressed.

Hello, thankyou for the feedback. Actually I was used git rebase to squash some of the commits and i think i might've have made a mistake there. I'll definitely look into those. And about the locale files I tried figuring out but in the end I saw that all the translations are working fine this way that's why I changed them.

Okay Nimish. This is coming along. I've left some inline comments where it mostly looks like some pieces of your commits ended up in the wrong place. Review those carefully and your own work, too.
I'm not at all sure about the changes to the locale files; I know the translation data gets pulled down from Transifex, but I'm not sure where in the pipeline things like URLs get managed or introduced. We'll flag Tim about that once these other issues have been addressed.

I have modified the commits so that each changed file is now included in a commit that is relevant to its respective changes. Also, I chose to revert all the changes made in the django.po files, as I wasn't entirely certain about them. Furthermore, I didn't modify the translation files, as I was concerned that I might change the meaning of translation.
You can now continue reviewing the code and hope to hear your feedback soon.

Almost there, Nimish, but the changes in lint: Fix lint errors. really ought to be implemented in the commits where the things the linter caught were introduced.
One way to do that is to reset that commit, then stash its changes, and then walk through your history with git rebase -i, apply the stash and stage just the relevant changes, then amend the commit, stash what's left, and repeat until everything is where it belongs.

Almost there, Nimish, but the changes in lint: Fix lint errors. really ought to be implemented in the commits where the things the linter caught were introduced.
One way to do that is to reset that commit, then stash its changes, and then walk through your history with git rebase -i, apply the stash and stage just the relevant changes, then amend the commit, stash what's left, and repeat until everything is where it belongs.

I thought of doing that but actually linter fixed error in three different files that were based in three different commits, that's why I had to make a single commit. Also git rebase -i wont work on this as I cannot squash this commit into any one commit. So please guide me what should I do.

Almost there, Nimish, but the changes in lint: Fix lint errors. really ought to be implemented in the commits where the things the linter caught were introduced.
One way to do that is to reset that commit, then stash its changes, and then walk through your history with git rebase -i, apply the stash and stage just the relevant changes, then amend the commit, stash what's left, and repeat until everything is where it belongs.

I've removed the lint commit. I think it's ready to be reviewed again.

Great work integrating those changes from the linter, Nimish! You should be really proud of the work you put into this PR, including what's now a first-class set of commits. I'm marking this for integration review.

You should be really proud of the work you put into this PR, including what's now a first-class set of commits. I'm marking this for integration review.

Thank you so much!

The changes generally look good. I note git grep -i 'display[ _-]settings' | wc has another 250 lines of internal variable names and the like that we might want to change, but some of those, like update_display_settings, can't be for backwards compatibility reasons, and I think I'd be happy enough for that to happen in a future PR.
Posting one bug I noticed separately.

I'm not sure it's worth having the individual renames in separate commits, so I'm going to squash them and merge it. Thanks for doing this @nimishmedatwal and @karlstolley!

Yes, it's because you pushed to your main branch in your fork, which changed the contents of this PR. I recommend learning about how to use remote branches on GitHub; our Git Guide has a tutorial.


Revert "Update libraries"

Reverts tanium/octobot#233
Looks like tokio did in fact change and now gets mad by our use of reqwest's blocking client. I think because it uses tokio::runtime::current_thread::Runtime in ClientHandle::new, which when run from an event loop thread results in an error: "attempted to run an executor while another executor is already running"

Or we could just keep master in a broken state until I can get around to fix it.


Add libqrencode to dockerfile

what
Add libqrencode package into dockerfile
why
Be able to see the QRCODE in the terminal, as the Google charts API from google-authenticator-libpam does not work anymore. (Check the issue)
references

@lucawen thanks for submitting this PR. Does this library automatically generate the QR code in terminal without any other changes or does any flags need to be passed to utilize this library?


Problem with set_file_handler in version 2.5.0 beta2 ！

Hi,
It seems that there is an issue with using webui_set_file_handler in version 2.5.0 beta2. When returning resources with this, the page shows an ERR_INVALID_HTTP_RESPONSE, but this problem does not occur in version 2.4.2. Is this a bug in WebUI?

You can test with the '[serve_a_folder]' demo click “[Static file example (Embedded)]” link will show the error.

Please ignore this issue; I noticed you added request headers in the returned content in 2.5.0. I’ll test it.


OpenAI (Addition of Whisper API to Robin Rosengrün's connector) (Independent Publisher)

When submitting a connector, please make sure that you follow the requirements below, otherwise your PR might be rejected. We want to make you have a well-built connector, a smooth certification experience, and your users are happy :)
If this is your first time submitting to GitHub and you need some help, please sign up for this session.

[x] I attest that the connector doesn't exist on the Power Platform today. I've verified by checking the pull requests in GitHub and by searching for the connector on the platform or in the documentation.
[x] I attest that the connector works and I verified by deploying and testing all the operations.
[x] I attest that I have added detailed descriptions for all operations and parameters in the swagger file.
[x] I attest that I have added response schemas to my actions, unless the response schema is dynamic.
[x] I validated the swagger file, apiDefinition.swagger.json, by running paconn validate command.
[x] If this is a certified connector, I confirm that apiProperties.json has a valid brand color and doesn't use an invalid brand color, #007ee5 or #ffffff. If this is an independent publisher connector, I confirm that I am not submitting a connector icon.

If you are an Independent Publisher, you must also attest to the following to ensure a smooth publishing process:

[x] I have named this PR after the pattern of "Connector Name (Independent Publisher)" ex: HubSpot Marketing (Independent Publisher)
[x] Within this PR markdown file, I have pasted screenshots that show: 3 unique operations (actions/triggers) working within a Flow. This can be in one flow or part of multiple flows. For each one of those flows, I have pasted in screenshots of the Flow succeeding.
[x] Within this PR markdown file, I have pasted in a screenshot from the Test operations section within the Custom Connector UI.
[x] If the connector uses OAuth, I have provided detailed steps on how to create an app in the readme.md.

Proposal -  (Independent Publisher)
This is an addition to the Open AI connector by Robin Rosengrun . The proposed additional endpoint leverages the Whisper Open AI to perform robust audio processing, providing functionalities for transcribing and translating audio to text.
Actions
Transcribe Audio
This action allows the transcription of audio into text, providing a convenient method to convert spoken words within an audio file into written text for various applications.
Translate Audio
This action allows the translation of audio from any language to english language text
Implementations
Screenshots of the implementation are as below :
Actions without Parameters

Actions with Parameters

Output in Power Automate Designer

Output in Customer Connector Creation Phase
Since the Test window do not allow file uploading, sharing the output from Swagger test section

@vmanoharas  Requesting your review for proceeding with the addition of the connector

Hello @PriyaranjanKS,
Thank you for submitting proposal, please refer below link and proceed with submitting all the files.
https://github.com/microsoft/PowerPlatformConnectors/tree/dev/templates/Independent Publisher

@vmanoharas I have updated the existing connector files after validating the changes using paconn and ensuring that there are no breaking changes to existing functionalities. Please let me know if there is something additional I can do from my end.
While editing the swagger files, I did not find an option to list myself as a publisher along with Robin in the connection creation section. Though I have updated the api properties with publisher details, it is not getting reflected in the Connection Creation page. Request your help with the same.

@PriyaranjanKS please read the following Contributor License Agreement(CLA). If you agree with the CLA, please reply with the following information.
@microsoft-github-policy-service agree [company="{your company}"]

Options:

(default - no company specified) I have sole ownership of intellectual property rights to my Submissions and I am not making Submissions in the course of work for my employer.

@microsoft-github-policy-service agree

(when company given) I am making Submissions in the course of work for my employer (or my employer has intellectual property rights in my Submissions by contract or applicable law). I have permission from my employer to make Submissions and enter into this Agreement on behalf of my employer. By signing below, the defined term “You” includes me and my employer.

@microsoft-github-policy-service agree company="Microsoft"

Contributor License Agreement

@microsoft-github-policy-service agree

Hello @PriyaranjanKS,
Thank you for submitting proposal, please refer below link and proceed with submitting all the files.
https://github.com/microsoft/PowerPlatformConnectors/tree/dev/templates/Independent Publisher

@vmanoharas I have updated the existing connector files after validating the changes using paconn and ensuring that there are no breaking changes to existing functionalities. Please let me know if there is something additional I can do from my end.
While editing the swagger files, I did not find an option to list myself as a publisher along with Robin in the connection creation section. Though I have updated the api properties with publisher details, it is not getting reflected in the Connection Creation page. Request your help with the same.

Hi @PriyaranjanKS
There is no publisher option in swagger file, we have contact information.  Publisher is available only in api properties file.

Hello @PriyaranjanKS,
Could you kindly verify the process by which you acquired this connector from Robin Rosengrün? Has this information been communicated to Robin Rosengrün and received their approval? Please confirm.
CC<EMAIL_ADDRESS>

@vmanoharas Hello , just checking to see if there is something we can do to expedite the merge as we dont see a momentum for past 3 weeks

Hello<EMAIL_ADDRESS>Could you please review provide your approval to proceed futher?

Hello @PriyaranjanKS, kindly contact<EMAIL_ADDRESS>through email and take an action soon, as this PR is in open state from many months.

Hello @PriyaranjanKS, kindly contact<EMAIL_ADDRESS>through email and take an action soon, as this PR is in open state from many months.

@vmanoharas Considering that there is already another endpoint with this functionality in the connector ecosystem , closing this PR

Hello @PriyaranjanKS, kindly contact<EMAIL_ADDRESS>through email and take an action soon, as this PR is in open state from many months.

@vmanoharas Considering that there is already another endpoint with this functionality in the connector ecosystem , closing this PR

Thank you @PriyaranjanKS


Fix weaklist

Fix sort
Add reverted
Add get/set/del slice
Add str/repr

Yes, its a good idea

Here it is


light touch Market class refactoring

CDC has asked me to familiarize myself with the Market code because of a certain project.
In this PR, I'll try to do some light maintenance based on previously established design principles.
Some considerations:

A performance benefit for namespaces/dictionaries for state storage rather than as object attributes (see #674)
By packaging alike variable together, it makes it easier to write generalized functions (see #760 #761)
The more mathematical values can be represented as key/value pairs in a dict-like data structure, the less conflict there is between specialized mathematics formatting desiderata and Python style conventions (see https://github.com/econ-ark/governance/issues/5 )

The current step in this PR, meant to be illustrative, is moving the storage of initial and state values for sow_vars into dictionaries. The trajectory of this work is to make similar adjustments for the reap_vars, etc. The Market class is a nice place to do these changes because the variables are already categorized in the class constructor. (I'd recommend similar changes to the Agent classes, but these are not yet written in as abstract a way.)
The current PR passes the test_ConsAggShockModel.py tests. I'd like to note that this is without changes to e.g. the SmallOpenEconomy that would be necessary to retain functionality. This indicates a gap in the current test suite. If this PR's direction gets approval, I would write tests for those other classes as part of this PR.

Another reason to store Market state in this way is that this kind of representation is needed by the mill method anyway. Currently, this is done via awkward ad hoc construction. The trajectory of this PR is to have the Market natively store the reap and const variable values in dictionaries, making this ad hoc construction unnecessary.
https://github.com/econ-ark/HARK/blob/master/HARK/core.py#L1058-L1065

This PR is now ready for review.

Can use regular dicts instead of OrderedDict for Python 3.7+

0.10.6 supports Python 3.6:
https://github.com/econ-ark/HARK/blob/master/setup.cfg#L42
I think in our meeting today we agreed 0.10.7 would drop Python 3.6 support

OrderedDict replaced with dict in recent commit

I expect this to be merged AFTER the 0.10.7 release, since there seems to be a feature freeze there.


[💡 FEATURE REQUEST]: Worker reset_timeout setting

Plugin
No response
I have an idea!
I have an idea, listen to me!!
By defaylt. RR will restart worker if something went wrong after 60 sec., but in some cases it needs to restart it ASAP, It would be great to have the ability to change a default timout.
centrifuge:
    proxy_address: "tcp://<IP_ADDRESS>:10001"
    grpc_api_address: "<IP_ADDRESS>:10000"
    pool:
        reset_timeout: 10 <===============
        num_workers: 2

is it for centrifuge only? how about http plugin?

It's for the pool. So, not bound to a particular plugin.


When a _geo field contains one extra unspecified field, an error should be throw

Closed by https://github.com/meilisearch/meilisearch/pull/3415


separated kv stuff into its own proto file

This moves kv related stuff into kv.proto; introduces a few new KV-related fields.


Run a basic test against  browsers

Overview
This PR adds a step in the sauce:get-browsers script to build a file of all desktop browsers.  It also adds a very basic test that can be run against by all browsers. It checks if there was an error on the page (from the loader), and then checks if a subsequent script can still run.

Related Issue(s)

Testing

Codecov Report

Merging #437 (448dbae) into main (6239b2d) will not change coverage.
The diff coverage is n/a.

@@          Coverage Diff          @@
##            main    #437   +/-   ##
=====================================
  Coverage   3.62%   3.62%
=====================================
  Files        119     119
  Lines       4001    4001
  Branches     991     991
=====================================
  Hits         145     145
  Misses      3040    3040
  Partials     816     816

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


The path '/tmp/opentelemetry-php-instrumentation' doesn't contain package.xml

Describe your environment
Base Docker Image:

php:8-fpm-bullseye

PHP Version:

PHP 8.2.7 (cli) (built: Jun 13 2023 23:25:14) (NTS)

Composer version:

2.5.8 2023-06-09 17:13:21

GCC version:

gcc (Debian 10.2.1-6) 10.2.1 20210110

Clang version:

Debian clang version 11.0.1-2, Target: aarch64-unknown-linux-gnu

Steps to reproduce

I follow the installation guideline: https://opentelemetry.io/blog/2023/php-auto-instrumentation/
composer require open-telemetry/opentelemetry-instrumentation-installer (OK)
./vendor/bin/install-otel-instrumentation basic (NOK)

=> Error message:
./vendor/bin/install-otel-instrumentation basic
php pickle.phar install --source https://github.com/open-telemetry/opentelemetry-php-instrumentation.git#main  -n

Installing opentelemetry-php-instrumentation (main): Cloning main from cache

In PackageXml.php line 68:
The path '/tmp/opentelemetry-php-instrumentation' doesn't contain package.xml
install [--no-convert] [--defaults] [--source] [--with-configure-options WITH-CONFIGURE-OPTIONS] [--save-logs SAVE-LOGS] [--dry-run] [--php PHP] [--ini INI] [--tmp-dir TMP-DIR] [--version-override [VERSION-OVERRIDE]] [--] []
What is the expected behavior?

./vendor/bin/install-otel-instrumentation basic runs through and I can proceed with the guide: https://opentelemetry.io/blog/2023/php-auto-instrumentation/

What is the actual behavior?
I am blocked during the installation steps

I compared the main with beta6. The package.xml moved from the main folder to a sub-folder. As a result, the installer will work only for the beta6 version or the main. I see following options: (a) the package.xml goes back in main (b) dependent installation scripts must have the option to pass the version as an argument. Lets see. Maybe I can fix it an propose the solution here.

Following https://opentelemetry.io/blog/2023/php-auto-instrumentation/:

step "./vendor/bin/install-otel-instrumentation basic" must be changed to "./vendor/bin/install-otel-instrumentation basic version"

in /script/vendor/open-telemetry/opentelemetry-instrumentation-installer/install-otel-instrumentation, line 11
should return not only the mode from the arguments but also the version, or the version is passed as package reference

in /script/vendor/open-telemetry/opentelemetry-instrumentation-installer/installer_internals.php, line 393
instead of hard-coding main, the version number must be parsed

Now, I go into the WE. However, I can fix the issue locally on Monday. Just let me know if I you can include the fix in your your code or another OTel project. Cheers

I haven't worked on the installer before, but this looks like a problem since we moved the code into a directory:

php pickle.phar install --source https://github.com/open-telemetry/opentelemetry-php-instrumentation.git#main -n

AFAIK pickle can not install from github with a subdirectory, so we should probably update the installer to use pecl. The installer pre-dates our project getting pecl access, which is why it currently installs from source. As we get closer to a GA release, I don't think there is a strong case for installing main.
So, I think the fix is to update the installer. I don't think there's a way with pecl to specify "stable or beta", but if somebody can find a way to get it to install the best available of beta|rc|stable that should work for future versions.

I used the following workaround so far (in in /script/vendor/open-telemetry/opentelemetry-instrumentation-installer/installer_internals.php):

replaced the hard-coded main with hard-coded the tag:

function make_basic_setup($dependencies, $core_packages, $auto_packages) {
execute_command(make_pickle_install(
"https://github.com/open-telemetry/opentelemetry-php-instrumentation.git",
"#1.0.0beta6", " -n"), " 2>&1");
update_ini_file(get_php_info_output());

Then I ran into another problem when the composer tried to install the detected auto instrumentation packages. As a result, I limited the search to only the needed package in my case:

function get_auto_packages(): array {
colorLog ("get_auto_packages\n", 'e');
$auto_packages = "https://packagist.org/search.json?q=opentelemetry-auto";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $auto_packages);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$output = curl_exec($ch);
curl_close($ch);
$json = json_decode($output);
$results = $json->{"results"};
$opentelemetry_auto_packages = array();
foreach ($results as $package) {
array_push($opentelemetry_auto_packages, $package->name);
}
$opentelemetry_auto_packages = array();
array_push($opentelemetry_auto_packages, "open-telemetry/opentelemetry-auto-slim");
return $opentelemetry_auto_packages;
}
Lessons learned so far:

in the installer it is not so good to reference the hard-coded main branch. Better to reference a specific, fixed artifact for a specific realease version
it is not so good to capture the auto detection packages automatically from the repo. It might be better to move this to a config file

I continue with the hard-coded workaround for the moment.

Problem solved:

I used the pickle to install the package artifact for a specific version
I followed the instructions on github for the tag: https://github.com/open-telemetry/opentelemetry-php-instrumentation/tree/1.0.0beta6

Here the docker RUNs:
RUN composer require
slim/slim:"^4"
slim/psr7:"^1"
php-http/guzzle7-adapter:"1.0.0"
grpc/grpc:"^1.38"
open-telemetry/sdk:"1.0.0beta13"
open-telemetry/opentelemetry:"1.0.0beta1"
open-telemetry/exporter-otlp:"1.0.0beta11"
RUN pecl install
opentelemetry-1.0.0beta6
protobuf-3.23.3
RUN echo "[opentelemetry]" >> /usr/local/etc/php/conf.d/docker-fpm.ini &&
echo "extension=opentelemetry.so" >> /usr/local/etc/php/conf.d/docker-fpm.ini &&
echo "extension=protobuf.so" >> /usr/local/etc/php/conf.d/docker-fpm.ini
RUN wget https://github.com/FriendsOfPHP/pickle/releases/tag/v0.7.11/pickle.phar &&
php pickle.phar install --source https://github.com/open-telemetry/opentelemetry-php-instrumentation.git#1.0.0beta6

@lhintzsc this should be fixed now in installer v0.0.5


added clear error messages for different failures sending remote logs

Resolve: https://app.clickup.com/t/86byqmh6t

I'll review it next week.

@Jongy fixed 2 small comments


[ALLUXIO-2416] Split UFS delete into deleteFile and deleteDirectory

Part 3 of UFS refactoring.

For the UFS.delete call, Alluxio indicates whether the path it is operating on should be a file or a directory.
GCSUnderFileSystem avoids certain additional RPCs using a new nested class UnderFileStatus to store whether the listing item is a file or a directory. TODO: This will be replicated in other object stores after abstraction in a follow up PR.

JIRA: https://alluxio.atlassian.net/browse/ALLUXIO-2416

@calvinjia @gpang Please take a look. Thanks!

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/Alluxio-Pull-Request-Builder/12342/
Test PASSed.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/Alluxio-Pull-Request-Builder/12346/
Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/Alluxio-Pull-Request-Builder/12347/
Test PASSed.

Merged build finished. Test PASSed.

@calvinjia I've addressed your comments so far. Feel free to take another look.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/Alluxio-Pull-Request-Builder/12351/
Test PASSed.


chore(master): release 0.33.0

:robot: I have created a release beep boop
0.33.0 (2023-12-06)
Features

build with appdmg on macos (#400) (1740c14)

This PR was generated with Release Please. See documentation.

:robot: Release is at https://github.com/ethersphere/swarm-desktop/releases/tag/untagged-93368be997554352c584 :sunflower:


[Bug] File overwrite every iteration

Hi, I suspect I spotted the bug, it is not affecting functionality, as eventually final file would;d be created successfully, however it overwrite it on every iteration
I believe this write operation must be tabbed outside of for loop and make single write when all audio segments are collected after the loop instead of overwriting over and over again file with +1 audio segment

Nice catch. Thanks for pointing out. Will fix it ASAP.


Update the Prerequisites section of README.md

What type of PR is this?
/kind documentation

What this PR does / why we need it:
The Prerequisites section of README.md has some critical information missing. This PR fill up this section with information translated from the Chinese userguide: https://bio-os.gitbook.io/userguide/bu-shu/getting-set-up/bu-shu-zhun-bei.
Which issue(s) this PR fixes:

Fixes #
N/A

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


Create IDL Wrapper to the Upload/Query/Download APIs

Once we've finished all previous tickets before this (https://github.com/IMAP-Science-Operations-Center/SDS-in-a-box/issues/1, https://github.com/IMAP-Science-Operations-Center/SDS-in-a-box/issues/2, https://github.com/IMAP-Science-Operations-Center/SDS-in-a-box/issues/3, https://github.com/IMAP-Science-Operations-Center/SDS-in-a-box/issues/4, https://github.com/IMAP-Science-Operations-Center/SDS-in-a-box/issues/5, https://github.com/IMAP-Science-Operations-Center/SDS-in-a-box/issues/6, https://github.com/IMAP-Science-Operations-Center/SDS-in-a-box/issues/7), we should make an IDL wrapper to help with the various APIs.
See for example the EMM python/IDL scripts on this page: https://sdc.emiratesmarsmission.ae/software
The issue I see is I'm not sure how these scripts would avoid having to hard-code in the API Gateway endpoints and the cognito login. It seems like it should be able to retrieve them dynamically somehow. Maybe after deploying the CDK code, the app.py takes the output of the things that were generated and inserts them into a config file? Or sets environment variables at the top of the scripts or something?
The idea behind these scripts is that they are a single file that we could hand a scientist and say "here, you can download files to your local machine with the command download_sds_files(instrument=glows,level=l1a) or something.

I'll be so bold as to say that we shouldn't do this and I would argue we should close it.

My concern is that using IDL to talk to the HTTPS APIs is pretty weird, much weirder than the python requests library.  I feel like we'd constantly be getting questions and/or troubleshooting errors from people's homebuilt scripts.  At some point its just simpler to spend a few hours making an IDL script for the community to use/reference lol

Regardless of what we decide to do here, it should live in the sds-access-lib repo if anything, so I'll close this


Inject into iframe, not main page

Quick question if I may: I am attempting to scrape a site making use of iframes. When injecting artoo.js via the bookmarklet, artoo.js is injected in the top-level context and is not present in a lower (iframe) context.
I have been able to get around this by running the bookmarklet code straight in the required context using the Google Chrome Developer Console. However, I cannot figure out how to automate this just yet, i.e. perhaps create a bookmarklet specifically for that site that would target the required context.

Hum... I guess the possibility to use artoo on the frame context depends on whether the iframe hit an url on the same domain. Is that and old school site using frames for its layout? If this is the case, then jquery is able to access the iframe dom and you should therefore be able to use artoo. If not, you'll probably need some level of chrome extension yes.

Many thanks! Your answer pointed me in the right direction. I had troubles scraping the iframe from the 'top' context because the page itself is split into multiple frames. So artoo couldn't see the iframe; it had to be guided down the correct path. In the end, I ended up with this to refer to the specific frame I'm interested in:
$('#iFrame', window.parent.frames[1].document).contents().find('#Grid .grid-row').scrape()

Yup, this should work indeed. If the frame refers to the same domain you are safe. Else things will get difficult.

Many thanks the quick response!


Complete inline documentation for bevy_audio

Objective
Part of #3492

Complete inline documentation of bevy_audio

Solution

Added inline documentation to all public parts of bevy_audio
Added a few inline examples at important places
Some renaming for clarity (e.g. AudioLoader and generics)
added #![warn(missing_docs)] and #![forbid(unsafe_code)] to bevy_audio

I also tried adding support for the other vorbis file endings .oga and .spx to the AudioLoader (see file endings at https://tools.ietf.org/html/rfc5334#section-10.3), but the rodio decoder does not seem to support those.

bors r+


Added Python to Dockerfile

I was getting an issue where python3 isn't installed and instead of opening an issue I've decided to contribute

Thank you!! Where did you get the issue?

when installing the Bitcoin Node app, too much of a nerd...


Clean up README.markdown

Various typos, use of "encoding" for "escaping", and some minor style changes.

Thank you for submitting this pull request, however I do not see a valid CLA on file for you. Before we can merge this request please visit https://yahoocla.herokuapp.com/ and agree to the terms. Thanks! :smile:

Thanks for the touch up. I'll take most of your changes in the next updates. :)


Update centos6 image alias to keep in sync with rhel6 image alias

Updated centos image per @mbrukman 's suggestion.

Thanks, @handavid!


Add dobs support for VolumeInspectByName

This patch add the VolumeInspectByName function to the dobs driver,
allowing a caller to more efficiently retrieve a single volume when
doing a lookup by name instead of by ID.
When looking up a volume by name instead of ID, the DO API requires a
region, so the way a region was looked up was changed to have
commonality between VolumeCreate() and VolumeInspectByName().
VolumeCreate() retains the additional capability to read a region from
the AvailabilityZone create option.
The order of precedence for region is:

az op (create only)
IID header field
driver config

Codecov Report

Merging #581 into master will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##           master     #581   +/-   ##
=======================================
  Coverage   28.42%   28.42%
=======================================
  Files          34       34
  Lines        2016     2016
=======================================
  Hits          573      573
  Misses       1381     1381
  Partials       62       62

Continue to review full report at Codecov.

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


NeoHdf5Io not reading ChannelIndex

I've been trying to use the new ChannelIndex objects from the master branch, and write them to a file using NeoHdf5Io. NeoHdf5Io writes Block, Segment, and ChannelIndex objects to the hdf5 file, but does not seem to be able to read the ChannelIndex objects. Here's some code that reproduces the problem:

import numpy as np

import neo
import quantities as pq

blk = neo.Block(name='The Block')
seg = neo.Segment(name='The Segment')
blk.segments.append(seg)

sig = neo.AnalogSignal(np.random.randn(16, 10000),
                       sampling_rate=1e3*pq.Hz,
                       t_start=0*pq.second,
                       units=pq.volt,
                       dtype='float32')

chx = neo.ChannelIndex(name='Electrode Array', index=range(16))
chx.analogsignals.append(sig)
seg.analogsignals.append(sig)
blk.channel_indexes.append(chx)

blk.create_many_to_one_relationship(force=True, recursive=True)
blk.create_many_to_many_relationship()

# write a new file
f = neo.io.NeoHdf5IO('/tmp/neo_file.h5')
f.write_all_blocks([blk])
f.close()

# read the file
f = neo.io.NeoHdf5IO('/tmp/neo_file.h5')
blocks = f.read_all_blocks(lazy=False, cascade=True)
f.close()

blk = blocks[0]

assert len(blk.channel_indexes) > 0, "Block should have one ChannelIndex"

The original NeoHdf5IO was not compatible with the master branch; I have just merged a new version (see #249), which is able to read data files produced by Neo 0.4 and earlier, but does not have write support.
The reasons for not implementing write support are given in #249 - in brief, IO classes for two other, more widely-supported, HDF5-based formats (NWB and NIX) are in development and it would be better to use one of these once they are finished.

Note that NIXIO is now available in the master branch, and should be used in place of NeoHdf5IO.


Open new tab without focusing on it

I usually open several pages at once, but when I Shift+Click to open the bookmark on a new tab, it switch my tab to it, making it harder to open the next link, as I have to switch back to the Ultra light newtab page with bookmarks before opening the next bookmark.
May be another shortcut as Ctrl+Click could be added to open it in a new tab without switching focus to the new tab just opened?

Great idea! I'll do it for the next coulple of weeks.

It turned out easier than I expected. New version <IP_ADDRESS> has already published on WebStore. Try to restart your brouser to force extensions update. Ctrl-Click works as you said. Have you enjoyed? ,-) @evandrocoan

BTW, if you are a happy MacBook owner, I have bad news for you. Ctrl-Click doesn't work on MacBooks. I know how to fix it and I'll do it. But not today )

Thanks! It is working now. I use Window 10.


Inconsistent tabs/spaces in code base.

The project seems to have started with tabs as the code indent style. Over time code with 4 spaces as indentation has been introduced into the code base (I'm guilty of this too if you can tell from my latest PRs)
What should we do about this?

Enforce tabs as the project's indentation style, while fixing up all other inconsistencies?
Switch everything to use spaces?

(I don't mean to start a holy war here..)

Long since resolved to be 4 spaces, not tabs.  Closing


Add new code control

Add a new control that uses the expression control without the builder option

Added.


Replace for loop in _build() with tf.while_loop for EncodeProcessDecode class

I'm trying to transfer the _build() function of EncodeProcessDecode into a tf.while_loop variant for variable-sized num_processing_steps that I now feed as a placeholder value at every build() call.
So far, I'm struggling to concatenate the decoded_op in a list because I can only come up with a version using shape_invariants which in turn requires to know shapes of GraphTuple. However, calls like tf.shape(output_op) won't work, nor does tf.concat accept values other than Tensors. To my knowledge, a variant not requiring shape_invariants must rely on tf.TensorShape() which is only defined for TensorFlow primitive data types.
Can someone give me a hint how to use tf.while_loop for replacing the _build() Python for loop? Can one use utils_tf.concat for the while_loop iterations instead of tf.concat? How should its output be further processed or how can the concatenated GraphTuple elements be accessed for constructing the loss function again? An example would very handy! Here's my approach so far:
def _build(self, input_op, input_ctrl_ph, num_processing_steps, is_training):
        latent = self._encoder(input_op, is_training)

        latent_global = self._encoder_globals(input_op, is_training)
        latent_init = latent.replace(globals=latent_global.globals)

        global_T = self._encoder_globals(input_ctrl_ph, is_training).globals

        i = tf.constant(0)
        output_ops = tf.Variable([])

        def iter(i, *args):
            return i < num_processing_steps

        def body(i, output_ops, latent):
            global_t = tf.gather(global_T, i)
            global_t = tf.expand_dims(global_t, 0)
            latent = latent.replace(globals=global_t)

            latent = self._core(latent)

            decoded_op = self._decoder(latent, is_training)
            return i+1, tf.concat([output_ops, decoded_op], axis=0), latent

        i, outputs, latent = tf.while_loop(iter, body, [i, output_ops, latent_init],
                             shape_invariants=[i.get_shape(),
                                               tf.TensorShape([None]),
                                               tf.TensorShape([None])])

It is usually easier to use tf.TensorArrays rather than concatenation. Also, for now you will need to use separate tensor arrays for node, edges and globals explicitly.

Thanks!


feat: add from_parquet to dataloader

A parquet file loader would be a convenient addition to the dataloader class. I particularly like that parquet files preserve types better than a csv file.
The primary change is the addition of the from_parquet() function:
def from_parquet(self, file_path: str, fields: list[str] = None, input_keys: tuple[str] = ()) -> list[dspy.Example]:
        dataset = load_dataset("parquet", data_files=file_path)["train"]

        if not fields:
            fields = list(dataset.features)

        return [dspy.Example({field: row[field] for field in fields}).with_inputs(input_keys) for row in dataset]

The rest of the changes were caused by the ruff precommit hook.

There might be a conflict but other than that this looks good!

happy to merge once no conflict! thank you @JamesHWade !

should be good to go. thanks!

@JamesHWade There seems to be some conflicts still. Aside from that, any reason to remove typing types in favor of python type?
I don't oppose the idea as such, just wanted to know the reasoning behind it. Thanks for contributing!

I'll fix. No reason for the type change. They were added by Ruff automatically with the precommit hook, but happy to revert to python types.

Should be merge-ready now. I just skipped pre-commit this time.

No worries, thanks for informing! I actually have no issues with python types either!
Some tests seem to be failing on this though. Will take a look soon!

I think it was a temporary network error. It failed to checkout the repo for testing.

Sorry for the trouble with this PR. For reasons unclear to me, the checkout@v4 action is look for my branch within this repo. I'm not sure how to fix it other than to abandon this PR and create a new one. @krypticmouse, LMK if that sounds good to you and I'll create that quickly.

@JamesHWade just following up on this PR. feel free to close this and open the new one without conflicts! Thanks

Closing to resubmit as separate PR.


generate-supervisor-conf.sh does not account for changed INITIAL_PORT

Discovered when trying to set this up with java testcontainers.  When i set the INITIAL_PORT env var to be the first in whatever the random generated port range is, the docker-entrypoint script correctly calculates the new $max-port value.  This value is then sent into the generate-supervisor-conf.sh but the seq line still has a hardcoded 7000 for the start value which will take a considerable time if the new max port is somewhere in the 30000s.
I tested this using docker run -e "INITIAL_PORT=33011" grokzen/redis-cluster:latest
and again with docker run -e "INITIAL_PORT=6998" grokzen/redis-cluster:latest and you can really see the difference in startup times (I gave up on the 33011 try).

and the container image need to update


Expose method for apps to increase auth timeout

It doesn't look easily possible in withKeyInfo at least, possibly other helper methods.
cc @carsonfarmer in case you see a quick fix

withKeyInfo doesn't currently support it, but the Context.withKeyInfo does take a Date object (https://github.com/textileio/js-threads/blob/master/packages/client/src/index.ts#L207), so we could add an arg to Client. withKeyInfo to take a date or even a duration (to compute the Date offset).

This could also be added to withUserAuth. Not also the "quick fix" here is to use an auth callback that returns a UserAuth object with a longer timeout using createUserAuth from @textile/security (https://github.com/textileio/js-threads/blob/master/packages/security/src/index.ts#L128).


Craft/getuptuning

Front get up script works well. Back get up works about 70% of the time.

Update the PR name and merge in master