scrapli.exceptions.ScrapliTimeout: timed out reading from transport

Hello, tried to upgrade IOS-XE using "send_interactive"
connection_options:   scrapli:     platform: cisco_iosxe     timeout_transport: 300
but have this issue on output
  File "/home/py_user/projects_python/upgrade_os_cisco_project/.venv/lib/python3.10/site-packages/scrapli/channel/sync_channel.py", line 644, in send_inputs_interact
    buf += self._read_until_explicit_prompt(prompts=prompts)
  File "/home/py_user/projects_python/upgrade_os_cisco_project/.venv/lib/python3.10/site-packages/scrapli/channel/sync_channel.py", line 177, in _read_until_explicit_prompt
    read_buf.write(self.read())
  File "/home/py_user/projects_python/upgrade_os_cisco_project/.venv/lib/python3.10/site-packages/scrapli/channel/sync_channel.py", line 69, in read
    buf = self.transport.read()
  File "/home/py_user/projects_python/upgrade_os_cisco_project/.venv/lib/python3.10/site-packages/scrapli/decorators.py", line 216, in decorate
    return _multiprocessing_timeout(
  File "/home/py_user/projects_python/upgrade_os_cisco_project/.venv/lib/python3.10/site-packages/scrapli/decorators.py", line 108, in _multiprocessing_timeout
    return _handle_timeout(
  File "/home/py_user/projects_python/upgrade_os_cisco_project/.venv/lib/python3.10/site-packages/scrapli/decorators.py", line 134, in _handle_timeout
    raise ScrapliTimeout(message)
scrapli.exceptions.ScrapliTimeout: timed out reading from transport

seems pretty clear that there was a timeout...
without more information there is no way to help you and im going to close this. logs would be a good start. what does the upgrade process look like? does the box restart (then this will not work), etc.. if you want to provide enough information to get help, or much better: show an actual bug and how to reproduce it, then feel free to reopen.

I made o simple code what clear all inactive file from IOS-XE,
in log on cisco device it's show what my script work fine
log from cisco device
Feb 13 17:46:09: %INSTALL-5-INSTALL_START_INFO: Switch 1 R0/0: install_engine: Started install remove Feb 13 17:46:29: %INSTALL-5-INSTALL_COMPLETED_INFO: Switch 1 R0/0: install_engine: Completed install remove
My  code:
`from nornir import InitNornir
from nornir_scrapli.tasks import send_interactive
from nornir_utils.plugins.functions import print_result
nr = InitNornir(config_file="config.yaml")
def clean_up(task):
interact = [
("install remove inactive", f"{task.host}#"),
]
task.run(task=send_interactive, interact_events=interact)
if name == "main":
result = nr.run(task=clean_up)
print_result(result)`

f"{task.host}#") <- is this exactly the hostname of the device. and logs from scrapli would be much more useful.

@carlmontanari  Thx a lot, hostname from file and device was different

hello, sorry but i have issue with this output
My function
def _clean_up(task):
    """Delete inactive file from flash"""
    log.info(f"Run clean up for host {task.host}")
    interact = [
        ("install remove inactive", "Do you want to remove the above files? [y/n]", False),
        ("y", f"{task.host}#", False),
    ]
    task.run(task=send_interactive, interact_events=interact, timeout_ops=1800)

Log:
10:44:38 - INFO: sending interactive input: install remove inactive; expecting: Do you want to remove the above files? [y/n]; hidden_input: False
10:44:38 - DEBUG: write: 'install remove inactive'
10:44:38 - DEBUG: read: b'i'
10:44:38 - DEBUG: read: b'n'
10:44:38 - DEBUG: read: b's'
10:44:38 - DEBUG: read: b'ta'
10:44:38 - DEBUG: read: b'l'
10:44:38 - DEBUG: read: b'l'
10:44:38 - DEBUG: read: b' '
10:44:38 - DEBUG: read: b'r'
10:44:38 - DEBUG: read: b'e'
10:44:38 - DEBUG: read: b'm'
10:44:38 - DEBUG: read: b'o'
10:44:38 - DEBUG: read: b'v'
10:44:38 - DEBUG: read: b'e'
10:44:38 - DEBUG: read: b' '
10:44:38 - DEBUG: read: b'i'
10:44:38 - DEBUG: read: b'n'
10:44:38 - DEBUG: read: b'a'
10:44:38 - DEBUG: read: b'c'
10:44:38 - DEBUG: read: b't'
10:44:38 - DEBUG: read: b'i'
10:44:38 - DEBUG: read: b'v'
10:44:38 - DEBUG: read: b'e'
10:44:38 - DEBUG: write: '\n'
10:44:38 - DEBUG: read: b'\n'
10:44:49 - DEBUG: read: b'install_remove: START Tue Feb 14 10:44:49 UTC 2023\n'
10:44:53 - DEBUG: read: b'<5>%INSTALL-5-INSTALL_START_INFO: R0/0: install_engine: Started install remove\n'
10:45:23 - CRITICAL: operation timed out, closing connection
10:45:23 - DEBUG: closing transport connection to '*.*.*.*' on port '22'
10:45:23 - CRITICAL: encountered EOF reading from transport; typically means the device closed the connection
10:45:23 - DEBUG: transport connection to '*.*.*.*' on port '22' closed successfully

on cisco device when it's starting this command install remove inactive after this command it's took some minutes to make this proccess till device will ask remove file or not
Is should be like on cisco device
Clean-up

install remove inactive
Use this command to clean-up old installation files in case of insufficient space and to ensure that you have at least 1GB of space in flash, to expand a new image.

The following sample output displays the cleaning up of unused files, by using the install remove inactive command:
Switch# install remove inactive
install_remove: START Mon Jul 19 17:46:18 IST 2021
Cleaning up unnecessary package files
No path specified, will use booted path flash:packages.conf
Cleaning flash:
  Scanning boot directory for packages ... done.
  Preparing packages list to delete ...
    cat9k_lite-rpbase.17.05.01.SPA.pkg
      File is in use, will not delete.
    cat9k_lite-rpboot.17.05.01.SPA.pkg
      File is in use, will not delete.
    cat9k_lite-srdriver.17.05.01.SPA.pkg
      File is in use, will not delete.
    cat9k_lite-webui.17.05.01.SPA.pkg
      File is in use, will not delete.
    packages.conf
      File is in use, will not delete.
  done.

The following files will be deleted:
[switch 1]:
/flash/cat9k_lite_iosxe.17.05.01.SPA.bin

Do you want to remove the above files? [y/n]y

[switch 1]:
Deleting file flash:cat9k_lite_iosxe.17.05.01.SPA.bin ... done.
SUCCESS: Files deleted.
--- Starting Post_Remove_Cleanup ---
Performing Post_Remove_Cleanup on all members
  [1] Post_Remove_Cleanup package(s) on switch 1
  [1] Finished Post_Remove_Cleanup on switch 1
Checking status of Post_Remove_Cleanup on [1]
Post_Remove_Cleanup: Passed on [1]
Finished Post_Remove_Cleanup
SUCCESS: install_remove  Mon Jul 19 17:47:20 IST 2021
Switch#

looks like timeout ops is not set. try w/ scrapli without nornir or drop a breakpoint in the nornir task to see if timeout value is getting passed in and why it is or is not getting set there.

I tried without nornir, using only scrapli
I set breackpoint on -> response = conn.send_interactive(interact, timeout_ops=1200.0), and in breakpoint it's show
timeout_ops = 30.0
timeout_socket = 15.0
timeout_transport = 30.0

interact = [
    ("install remove inactive", "Do you want to remove the above files? [y/n]", False),
    ("y", "Sw-ISE-Test#", False),
]
conn = Scrapli(**device)
conn.open()
response = conn.send_interactive(interact, timeout_ops=1200.0)
conn.close()

Log:
15:39:26 - DEBUG: created transport 'open_cmd': '['ssh', '*.*.*.*', '-p', '22', '-o', 'ConnectTimeout=15', '-o', 'ServerAliveInterval=30', '-l', 'user', '-o', 'StrictHostKeyChecking=no', '-o', 'UserKnownHostsFile=/dev/null', '-F', '/dev/null']'
15:39:32 - DEBUG: transport connection to '*.*.*.*' on port '22' opened successfully
15:39:32 - DEBUG: attempting in channel ssh authentication
15:39:32 - DEBUG: read: b'6.36s - pydevd: Sending message related to process being replaced timed-out after 5 seconds\n'
15:39:33 - DEBUG: read: b"Warning: Permanently added '*.*.*.*' (RSA) to the list of known hosts.\n"
15:39:35 - DEBUG: read: b'Password: '
15:39:35 - DEBUG: write: REDACTED
15:39:35 - DEBUG: write: '\n'
15:39:35 - DEBUG: read: b'\n'
15:39:35 - DEBUG: read: b'Sw-ISE-Test#'
15:39:35 - DEBUG: write: '\n'
15:39:35 - DEBUG: read: b'\n'
15:39:35 - DEBUG: read: b'Sw-ISE-Test#'
15:39:35 - INFO: attempting to acquire 'privilege_exec' privilege level
15:39:35 - DEBUG: determined current privilege level is one of '['privilege_exec']'
15:39:35 - DEBUG: determined current privilege level is target privilege level, no action needed
15:39:35 - INFO: sending channel input: terminal length 0; strip_prompt: True; eager: False
15:39:35 - DEBUG: write: 'terminal length 0'
15:39:35 - DEBUG: read: b'te'
15:39:35 - DEBUG: read: b'r'
15:39:35 - DEBUG: read: b'm'
15:39:35 - DEBUG: read: b'i'
15:39:35 - DEBUG: read: b'na'
15:39:35 - DEBUG: read: b'l'
15:39:35 - DEBUG: read: b' '
15:39:35 - DEBUG: read: b'l'
15:39:35 - DEBUG: read: b'e'
15:39:35 - DEBUG: read: b'n'
15:39:35 - DEBUG: read: b'gt'
15:39:35 - DEBUG: read: b'h 0'
15:39:35 - DEBUG: write: '\n'
15:39:35 - DEBUG: read: b'\n'
15:39:35 - DEBUG: read: b'Sw-ISE-Test#'
15:39:35 - INFO: sending channel input: terminal width 512; strip_prompt: True; eager: False
15:39:35 - DEBUG: write: 'terminal width 512'
15:39:35 - DEBUG: read: b't'
15:39:35 - DEBUG: read: b'e'
15:39:35 - DEBUG: read: b'r'
15:39:35 - DEBUG: read: b'm'
15:39:35 - DEBUG: read: b'i'
15:39:35 - DEBUG: read: b'n'
15:39:35 - DEBUG: read: b'a'
15:39:35 - DEBUG: read: b'l'
15:39:35 - DEBUG: read: b' '
15:39:35 - DEBUG: read: b'w'
15:39:35 - DEBUG: read: b'idt'
15:39:35 - DEBUG: read: b'h '
15:39:35 - DEBUG: read: b'512'
15:39:35 - DEBUG: write: '\n'
15:39:35 - DEBUG: read: b'\n'
15:39:35 - DEBUG: read: b'Sw-ISE-Test#'
15:39:35 - INFO: connection to '*.*.*.*' on port '22' opened successfully
15:42:34 - INFO: modifying driver timeout for current operation, temporary timeout_ops value: '1200.0'
15:42:37 - DEBUG: setting 'timeout_ops' value to '1200.0'
15:42:37 - INFO: sending interactive input: install remove inactive; expecting: Do you want to remove the above files? [y/n]; hidden_input: False
15:42:37 - DEBUG: write: 'install remove inactive'
15:42:37 - DEBUG: read: b'i'
15:42:37 - DEBUG: read: b'n'
15:42:37 - DEBUG: read: b'st'
15:42:37 - DEBUG: read: b'al'
15:42:37 - DEBUG: read: b'l r'
15:42:37 - DEBUG: read: b'e'
15:42:37 - DEBUG: read: b'm'
15:42:37 - DEBUG: read: b'o'
15:42:37 - DEBUG: read: b'v'
15:42:37 - DEBUG: read: b'e'
15:42:37 - DEBUG: read: b' '
15:42:37 - DEBUG: read: b'i'
15:42:37 - DEBUG: read: b'n'
15:42:37 - DEBUG: read: b'ac'
15:42:37 - DEBUG: read: b't'
15:42:37 - DEBUG: read: b'i'
15:42:37 - DEBUG: read: b'v'
15:42:37 - DEBUG: read: b'e'
15:42:37 - DEBUG: write: '\n'
15:42:37 - DEBUG: read: b'\n'
15:42:52 - DEBUG: read: b'install_remove: START Tue Feb 14 15:42:52 UTC 2023\n'
15:42:57 - DEBUG: read: b'<5>%INSTALL-5-INSTALL_START_INFO: R0/0: install_engine: Started install remove\n'
15:43:27 - CRITICAL: operation timed out, closing connection
15:43:27 - DEBUG: closing transport connection to '*.*.*.*' on port '22'
15:43:27 - CRITICAL: encountered EOF reading from transport; typically means the device closed the connection
15:43:27 - DEBUG: transport connection to '*.*.*.*' on port '22' closed successfully

After this line 15:42:57 - DEBUG: read: b'<5>%INSTALL-5-INSTALL_START_INFO: R0/0: install_engine: Started install remove\n' Cisco start process what took some time and after show output for Do you want to remove the above files? [y/n]y

if I add
"timeout_transport": 1200.0,
device = {
    "host": "*.*.*.*",
    "auth_strict_key": False,
    "platform": "cisco_iosxe",
    "timeout_transport": 1200.0,
}

It's work and not get timeout

yep that makes sense, all the timeouts are documented here -> https://carlmontanari.github.io/scrapli/user_guide/advanced_usage/#timeouts
glad you got it sorted.


add Svensa fan to supported devices

Dear Eriknn
Like @texnic in closed issue #49 I'm trying to add my Svensa fan to HA.  I've decompiled a android package and interrogated the device using BLE Inspector but my coding skills are not good enough to solve this.
Would you be willing to assist? I can do any testing needed.
I have matched characteristics from  BLE explorer with decompiles apk and made changes to calima.py;
CHARACTERISTIC_APPEARANCE = "00002a01-0000-1000-8000-00805f9b34fb"
#CHARACTERISTIC_AUTOMATIC_CYCLES = "f508408a-508b-41c6-aa57-61d1fd0d5c39"
CHARACTERISTIC_AUTOMATIC_CYCLES = "7c4adc05-2f33-11e7-93ae-92361f002671"
CHARACTERISTIC_BASIC_VENTILATION = "faa49e09-a79c-4725-b197-bdc57c67dc32"
#CHARACTERISTIC_BOOST = "118c949c-28c8-4139-b0b3-36657fd055a9"
CHARACTERISTIC_BOOST = "7c4adc07-2f33-11e7-93ae-92361f002671"
CHARACTERISTIC_CLOCK = "6dec478e-ae0b-4186-9d82-13dda03c0682"
CHARACTERISTIC_DEVICE_NAME = "00002a00-0000-1000-8000-00805f9b34fb"
#CHARACTERISTIC_FACTORY_SETTINGS_CHANGED = "63b04af9-24c0-4e5d-a69c-94eb9c5707b4"
CHARACTERISTIC_FACTORY_SETTINGS_CHANGED = "7c4adc01-2f33-11e7-93ae-92361f002671"   #same as humidity?
CHARACTERISTIC_FAN_DESCRIPTION = "b85fa07a-9382-4838-871c-81d045dcc2ff"
CHARACTERISTIC_FIRMWARE_REVISION = "00002a26-0000-1000-8000-00805f9b34fb"
CHARACTERISTIC_HARDWARE_REVISION = "00002a27-0000-1000-8000-00805f9b34fb"
CHARACTERISTIC_SOFTWARE_REVISION = "00002a28-0000-1000-8000-00805f9b34fb"
CHARACTERISTIC_LED = "8b850c04-dc18-44d2-9501-7662d65ba36e"
CHARACTERISTIC_LEVEL_OF_FAN_SPEED = "1488a757-35bc-4ec8-9a6b-9ecf1502778e"
#CHARACTERISTIC_MANUFACTURER_NAME = "00002a29-0000-1000-8000-00805f9b34fb"
CHARACTERISTIC_MANUFACTURER_NAME = "90ED66FE-8854-C433-A290-B96C5C8D418D"
#CHARACTERISTIC_MODE = "90cabcd1-bcda-4167-85d8-16dcd8ab6a6b"
CHARACTERISTIC_MODE = "7c4adc0d-2f33-11e7-93ae-92361f002671"
CHARACTERISTIC_MODEL_NAME = "00002a00-0000-1000-8000-00805f9b34fb"
CHARACTERISTIC_MODEL_NUMBER = "00002a24-0000-1000-8000-00805f9b34fb"
CHARACTERISTIC_NIGHT_MODE = "b5836b55-57bd-433e-8480-46e4993c5ac0"
CHARACTERISTIC_PIN_CODE = "4cad343a-209a-40b7-b911-4d9b3df569b2"
CHARACTERISTIC_PIN_CONFIRMATION = "d1ae6b70-ee12-4f6d-b166-d2063dcaffe1"
CHARACTERISTIC_RESET = "ff5f7c4f-2606-4c69-b360-15aaea58ad5f"
CHARACTERISTIC_SENSITIVITY = "e782e131-6ce1-4191-a8db-f4304d7610f1"
CHARACTERISTIC_SENSOR_DATA = "528b80e8-c47a-4c0a-bdf1-916a7748f412"
CHARACTERISTIC_SERIAL_NUMBER = "00002a25-0000-1000-8000-00805f9b34fb"
CHARACTERISTIC_SOFTWARE_REVISION = "00002a28-0000-1000-8000-00805f9b34fb"
CHARACTERISTIC_STATUS = "25a824ad-3021-4de9-9f2f-60cf8d17bded"
CHARACTERISTIC_TEMP_HEAT_DISTRIBUTOR = "a22eae12-dba8-49f3-9c69-1721dcff1d96"
CHARACTERISTIC_TIME_FUNCTIONS = "49c616de-02b1-4b67-b237-90f66793a6f2"
#New Values
CHARACTERISTIC_CONSTANT_OPERATION = "7c4adc03-2f33-11e7-93ae-92361f002671"
CHARACTERISTIC_BLE_ADDRESS = "638ff62c-3823-4e0f-8179-1695c46ee8af"
CHARACTERISTIC_HUMIDITY = "7c4adc01-2f33-11e7-93ae-92361f002671"  # same as FACTORY_SETTINGS_CHANGED??
CHARACTERISTIC_FAN_TEST = "7c4adc08-2f33-11e7-93ae-92361f002671"
HARACTERISTIC_PAUSE = "7c4adc06-2f33-11e7-93ae-92361f002671"
CHARACTERISTIC_PRESENCE_GAS = "7c4adc02-2f33-11e7-93ae-92361f002671"

pin code is exchanged when the device is "paired" by default 4cad343a-209a-40b7-b911-4d9b3df569b2  reads 00 00 00 00 but in pairing mode is is exchanged and never changes.

Are there any updates? I'm not on Discord but happy to help. I've got some ideas on how to implement something more generic.
@Modderhut Were you able to get the existing integration to work with the pin code? I followed these instructions, but it didn't seem to work for me.

It looks like it might be quite different compared to the Pax. I think we have two options here:

Make a new integration for other fan-types
If they are quite similar we could make a fan-type selection in the configuration, which would use a different data set. This shouldn’t be too much work - especially if the data-types are the same, so that we just have to change UUIDs. Bur I doubt this is the case…

Anyways, someone has to figure out these id’s and what the data types are, and that has to be someone that has this fan. Or it might be extracted from an apk-file.

Option 1 would be the easiest, but option 2 would be the nicest IMO.
If Pax/Vent-Axia are consistent with CHARACTERISTIC_DEVICE_NAME then we can use that to load in a different list for each model. I think it's available without pairing which helps, but as some models have the PIN on the unit and other during the pairing process it may as well be a manual drop down to select the model name.
I'll see what I can get working, but at the moment I can't even pair to the device.

Hi @RobPope   thanks! all help is welcome! Discord is free and a sort of chat env. You can install it and just search for our usernames if you want.
I have been working on it but have a hard time deciphering the python code as I'm not a coder.
I'm using Bluetooth LE Lab from the windows store on my pc and that connects fine to the fan and I can read all characteristics and their return value's.
Using JADX I've decompiled "Vent-Axia Connect_6.1.72_APKPure.apk", as the app is for multiple fan types its hard to find the right code.
x-referencing the Eriks code with what I find in BLE and finding the meaning of that characteristic in the apk I have now below characteristics  that are in the BLE explorer.
When I change these in Erik's code the HA plugin fails to load, so working my way trough by commenting out stuff.
I'm also trying to setup PyCharm to do this outside HA as the reloads are really slowing me down. Again not a coder so very slow at this.
The pin is exchanged during pairing and is not found on the device 4cad343a-209a-40b7-b911-4d9b3df569b2  reads 00 00 00 00 but when pairing mode is enabled it reads a value. As far as I tested the pin is static and does not change. Not sure but I think if you take the output in decimals and fill that as pincode is works to pair. Don't think the pin is need for reading but only needed for writing values.
sensor_data reads hex 00 00 C0 05 35 04 00 00 00 00 39 04 00 15 00
I guess these are sensor readings combined, I'm also trying to figure out how @eriknn deciphered these in his code.
The fan only allows 1 connection so kill BLE explorer or phone app when trying HA
CHARACTERISTIC_DEVICE_NAME = "00002a00-0000-1000-8000-00805f9b34fb"
CHARACTERISTIC_APPEARANCE = "00002a01-0000-1000-8000-00805f9b34fb"
#CHARACTERISTIC_SERVICE_CHANGED"00002A05-0000-1000-8000-00805F9B34FB"                        #NEW   uuid 00001801-0000-1000-8000-00805F9B34FB
CHARACTERISTIC_MODEL_NUMBER = "00002A24-0000-1000-8000-00805F9B34FB"
CHARACTERISTIC_HARDWARE_REVISION = "00002A27-0000-1000-8000-00805F9B34FB"
CHARACTERISTIC_FIRMWARE_REVISION = "00002A26-0000-1000-8000-00805F9B34FB"
CHARACTERISTIC_SOFTWARE_REVISION = "00002A28-0000-1000-8000-00805F9B34FB"
CHARACTERISTIC_MANUFACTURER_NAME = "00002A29-0000-1000-8000-00805F9B34FB"
CHARACTERISTIC_PIN_CODE = "4CAD343A-209A-40B7-B911-4D9B3DF569B2"
CHARACTERISTIC_PIN_CONFIRMATION = "D1AE6B70-EE12-4F6D-B166-D2063DCAFFE1"
CHARACTERISTIC_FAN_DESCRIPTION = "B85FA07A-9382-4838-871C-81D045DCC2FF"
CHARACTERISTIC_BLE_ADDRESS = "638ff62c-3823-4e0f-8179-1695c46ee8af"                                    #NEW
CHARACTERISTIC_STATUS = "25A824AD-3021-4DE9-9F2F-60CF8D17BDED"
CHARACTERISTIC_SENSOR_DATA = "528B80E8-C47A-4C0A-BDF1-916A7748F412"
CHARACTERISTIC_FACTORY_SETTINGS_CHANGED = "7C4ADC01-2F33-11E7-93AE-92361F002671"
CHARACTERISTIC_PRESENCE_GAS = "7c4adc02-2f33-11e7-93ae-92361f002671"                                #NEW
CHARACTERISTIC_CONSTANT_OPERATION = "7C4ADC03-2F33-11E7-93AE-92361F002671"               #NEW
CHARACTERISTIC_TIME_FUNCTIONS = "7c4adc04-2f33-11e7-93ae-92361f002671"
CHARACTERISTIC_AUTOMATIC_CYCLES = "7c4adc05-2f33-11e7-93ae-92361f002671"
CHARACTERISTIC_PAUSE = "7c4adc06-2f33-11e7-93ae-92361f002671"                                               #NEW
CHARACTERISTIC_BOOST = "7c4adc07-2f33-11e7-93ae-92361f002671"
CHARACTERISTIC_FAN_TEST = "7c4adc08-2f33-11e7-93ae-92361f002671"                                          #NEW
CHARACTERISTIC_BASIC_VENTILATION = "faa49e09-a79c-4725-b197-bdc57c67dc32"          #in eriknn's code but not in BLE
CHARACTERISTIC_CLOCK = "6dec478e-ae0b-4186-9d82-13dda03c0682"                               #in eriknn's code but not in BLE
CHARACTERISTIC_LED = "8b850c04-dc18-44d2-9501-7662d65ba36e"                                    #in eriknn's code but not in BLE
CHARACTERISTIC_MODE = "7c4adc0d-2f33-11e7-93ae-92361f002671"                                  #in eriknn's code but not in BLE
CHARACTERISTIC_MODEL_NAME = "00002a00-0000-1000-8000-00805f9b34fb"                    #in eriknn's code but not in BLE
CHARACTERISTIC_NIGHT_MODE = "b5836b55-57bd-433e-8480-46e4993c5ac0"                    #in eriknn's code but not in BLE
CHARACTERISTIC_RESET = "ff5f7c4f-2606-4c69-b360-15aaea58ad5f"                                      #in eriknn's code but not in BLE
CHARACTERISTIC_SERIAL_NUMBER = "00002a25-0000-1000-8000-00805f9b34fb"                 #in eriknn's code but not in BLE
CHARACTERISTIC_TEMP_HEAT_DISTRIBUTOR = "a22eae12-dba8-49f3-9c69-1721dcff1d96"   #in eriknn's code but not in BLE
7C4ADC09-2F33-11E7-93AE-92361F002671 in BLE investigation but not found anywhere else
7C4ADC0A-2F33-11E7-93AE-92361F002671 in BLE investigation but not found anywhere else
7C4ADC0B-2F33-11E7-93AE-92361F002671 in BLE investigation but not found anywhere else
7C4ADC0C-2F33-11E7-93AE-92361F002671 in BLE investigation but not found anywhere else
7C4ADC0D-2F33-11E7-93AE-92361F002671 in BLE investigation but not found anywhere else
7C4ADC0E-2F33-11E7-93AE-92361F002671 in BLE investigation but not found anywhere else

The format of sensor data could be was found in the pax apk (This wasn't my work). Probably the same for other fan types.
You see this part in calima.py:
# Short Short Short Short    Byte Short Byte
# Hum   Temp  Light FanSpeed Mode Tbd   Tbd
v = unpack("<4HBHB", await self._readUUID(CHARACTERISTIC_SENSOR_DATA))
Which matches the following in the Pax Apk:
@Override // com.volution.wrapper.acdeviceconnection.request.BaseRequest
public Observable execute() {
if (getConnection() == null) {
return Observable.error(new Exception("Connection was null"));
}
return getConnection().read(getData()).map(new Func1<byte[], CalimaResponseSensorData>() { // from class: com.volution.wrapper.acdeviceconnection.request.CalimaRequestSensorDataRead.1
@Override // rx.functions.Func1
public CalimaResponseSensorData call(byte[] bArr) {
ByteBuffer order = ByteBuffer.wrap(bArr).order(ByteOrder.LITTLE_ENDIAN);
CalimaResponseSensorData calimaResponseSensorData = new CalimaResponseSensorData();
calimaResponseSensorData.setHumidityLevel(order.getShort(0));
calimaResponseSensorData.setTemperature(order.getShort(2));
calimaResponseSensorData.setLightLevel(order.getShort(4));
calimaResponseSensorData.setFanSpeed(order.getShort(6));
calimaResponseSensorData.setCurrentTrigger(order.get(8));
calimaResponseSensorData.setTbd(order.get(9));
return calimaResponseSensorData;
}
});
}

I've installed BLE Lab on my laptop and it's giving me the same output as I had on GATTBrowser from my phone, but with values I can copy and paste out. Not sure when I'll have a chance to take a deep dive into it, but will update you on progress. Have you got a branch with the code you've been working on so far @Modderhut? Or are you working locally only at the moment?

I can take a look at refactoring this integration tonight, to allow for different fan types. I believe there already is a connection made when adding the device, so I’ll look into reading device name/type there, and we’ll take it from there. I might release a beta version for you guys to test.

I can take a look at refactoring this integration tonight, to allow for different fan types. I believe there already is a connection made when adding the device, so I’ll look into reading device name/type there, and we’ll take it from there. I might release a beta version for you guys to test.

uuid 00001800-0000-1000-8000-00805F9B34FB
char 00002A00-0000-1000-8000-00805F9B34FB
CHARACTERISTIC_DEVICE_NAME
outputs   83 118 101 110 115 97      UTF8  "Svensa"    which is the model name, as  its read-only I guess it would be a good ID

I created a framework with model selection in the configuration, that's all I have time for now. Would be nice if you guys can builld on this and figure out if it'll work. Each device model name has its own class containing the characteristics. I predict we'll have to move some of the functions there as well.

I had a look last night and think I've found the first issue. Are you getting any values from CHARACTERISTIC_SENSOR_DATA @Modderhut?
I wrote the following code to take the value from that GUID and parse it through the function only to be met with a failure because it was expecting 12 bytes. The sensor data on mine appears to be 15 bytes.
sensorData = bytearray.fromhex("10 00 6D 07 E9 04 08 00 00 00 51 04 00 18 00")
byteData = bytearray(sensorData)

print(struct.calcsize("<4HBHB")) # <- Gives the value of 12
print(len(byteData)) # <- Gives the value of 15

The output doesn't quite align with the values I was expecting so I think the format needs updating, I just need to do some research into how. It might need some unpacking of the APK to know for sure

I found this in the APK
    @Override // com.volution.wrapper.acdeviceconnection.request.BaseRequest     public Observable<SkyDeviceSensor> execute() {         if (getConnection() == null) {             return Observable.error(new Exception("Connection was null"));         }         return getConnection().read(getData()).map(new Func1<byte[], SkyDeviceSensor>() { // from class: com.volution.wrapper.acdeviceconnection.request.SkyDeviceRequestSensorDataRead.1             @Override // rx.functions.Func1             public SkyDeviceSensor call(byte[] bArr) {                 ByteBuffer order = ByteBuffer.wrap(bArr).order(ByteOrder.LITTLE_ENDIAN);                 SkyDeviceSensor skyDeviceSensor = new SkyDeviceSensor();                 skyDeviceSensor.setTrigger1(order.get(0));                 skyDeviceSensor.setTrigger2(order.get(1));                 skyDeviceSensor.setHumidityLvl(order.getShort(2));                 skyDeviceSensor.setGasLvl(order.getShort(4));                 skyDeviceSensor.setLightLvl(order.getShort(6));                 skyDeviceSensor.setFanSpeed(order.getShort(8));                 return skyDeviceSensor;             }         });     }
when I translate that to python I get
`class SkyDeviceRequestSensorDataRead:
def execute(self):
connection = self.get_connection()
if connection is None:
return Observable.error(Exception("Connection was null"))
    return connection.read(self.get_data()).map(lambda b_arr: self.parse_sensor_data(b_arr))

def parse_sensor_data(self, b_arr):
    order = struct.unpack('<BBHHHHH', b_arr)  # Little-endian format
    sky_device_sensor = SkyDeviceSensor()
    sky_device_sensor.set_trigger1(order[0])
    sky_device_sensor.set_trigger2(order[1])
    sky_device_sensor.set_humidity_lvl(order[2])
    sky_device_sensor.set_gas_lvl(order[3])
    sky_device_sensor.set_light_lvl(order[4])
    sky_device_sensor.set_fan_speed(order[5])
    return sky_device_sensor`

I have what is probably an old Pax apk lying here, and in this it seems that Sky may be a different fan? Maybe Fresh Intellivent Sky? I ahve a feeling that there are a lot of fans out there using roughly the same software / app...

Further, this probably hints at which fans use the same firmware(?):
  public static int getImageForProduct(String str) {
      str.hashCode();
      char c = 65535;
      switch (str.hashCode()) {
          case -2012406216:
              if (str.equals(Constants.DEVICE_NAME_COMAIR_HRUC_PLUS)) {
                  c = 0;
                  break;
              }
              break;
          case -1985561074:
              if (str.equals(Constants.DEVICE_NAME_MANROSE_GENIUS)) {
                  c = 1;
                  break;
              }
              break;
          case -1893252195:
              if (str.equals(Constants.DEVICE_NAME_PULSAR)) {
                  c = 2;
                  break;
              }
              break;
          case -1846639247:
              if (str.equals(Constants.DEVICE_NAME_FLOW_KONTROLLPANEL)) {
                  c = 3;
                  break;
              }
              break;
          case -1806654022:
              if (str.equals(Constants.DEVICE_NAME_SVENSA)) {
                  c = 4;
                  break;
              }
              break;
          case -1664073796:
              if (str.equals(Constants.DEVICE_NAME_CONTROLLER)) {
                  c = 5;
                  break;
              }
              break;
          case -1395042737:
              if (str.equals(Constants.DEVICE_NAME_MOMENTO)) {
                  c = 6;
                  break;
              }
              break;
          case -1273321984:
              if (str.equals(Constants.DEVICE_NAME_LEVANTE)) {
                  c = 7;
                  break;
              }
              break;
          case -963503872:
              if (str.equals(Constants.DEVICE_NAME_PURE_AIR_SENSE)) {
                  c = '\b';
                  break;
              }
              break;
          case -884209162:
              if (str.equals(Constants.DEVICE_NAME_EASY_CONNECT_E_16)) {
                  c = '\t';
                  break;
              }
              break;
          case -638922444:
              if (str.equals(Constants.DEVICE_NAME_VENT_AXIA_SVARA)) {
                  c = '\n';
                  break;
              }
              break;
          case -85654462:
              if (str.equals(Constants.DEVICE_NAME_PAX_LEVANTE)) {
                  c = 11;
                  break;
              }
              break;
          case 69432:
              if (str.equals(Constants.DEVICE_NAME_FCU)) {
                  c = '\f';
                  break;
              }
              break;
          case 76222:
              if (str.equals(Constants.DEVICE_NAME_MEV)) {
                  c = '\r';
                  break;
              }
              break;
          case 83201:
              if (str.equals(Constants.DEVICE_NAME_SKY)) {
                  c = 14;
                  break;
              }
              break;
          case 88652:
              if (str.equals(Constants.DEVICE_NAME_ZCU)) {
                  c = 15;
                  break;
              }
              break;
          case 2192718:
              if (str.equals(Constants.DEVICE_NAME_FLOW)) {
                  c = 16;
                  break;
              }
              break;
          case 2382559:
              if (str.equals(Constants.DEVICE_NAME_MZCU)) {
                  c = 17;
                  break;
              }
              break;
          case 70209100:
              if (str.equals(Constants.DEVICE_NAME_HYPER)) {
                  c = 18;
                  break;
              }
              break;
          case 80264429:
              if (str.equals(Constants.DEVICE_NAME_SVARA)) {
                  c = 19;
                  break;
              }
              break;
          case 154342979:
              if (str.equals(Constants.DEVICE_NAME_DMVHR)) {
                  c = 20;
                  break;
              }
              break;
          case 178143512:
              if (str.equals(Constants.DEVICE_NAME_AIR_SENSE)) {
                  c = 21;
                  break;
              }
              break;
          case 675654913:
              if (str.equals(Constants.DEVICE_NAME_MEV_COMAIR_DELTA)) {
                  c = 22;
                  break;
              }
              break;
          case 797615480:
              if (str.equals(Constants.DEVICE_NAME_MEV_MULTIHOME)) {
                  c = 23;
                  break;
              }
              break;
          case 954071225:
              if (str.equals(Constants.DEVICE_NAME_KINETIC)) {
                  c = 24;
                  break;
              }
              break;
          case<PHONE_NUMBER>:
              if (str.equals(Constants.DEVICE_NAME_PAX_MOMENTO)) {
                  c = 25;
                  break;
              }
              break;
          case<PHONE_NUMBER>:
              if (str.equals(Constants.DEVICE_NAME_IV_CONNECT)) {
                  c = 26;
                  break;
              }
              break;
          case<PHONE_NUMBER>:
              if (str.equals(Constants.DEVICE_NAME_E16)) {
                  c = 27;
                  break;
              }
              break;
          case<PHONE_NUMBER>:
              if (str.equals(Constants.DEVICE_NAME_AVIANT)) {
                  c = 28;
                  break;
              }
              break;
          case<PHONE_NUMBER>:
              if (str.equals(Constants.DEVICE_NAME_PURE_SENSE)) {
                  c = 29;
                  break;
              }
              break;
          case<PHONE_NUMBER>:
              if (str.equals(Constants.DEVICE_NAME_CALIMA)) {
                  c = 30;
                  break;
              }
              break;
          case<PHONE_NUMBER>:
              if (str.equals(Constants.DEVICE_NAME_MANROSE_QUIET)) {
                  c = 31;
                  break;
              }
              break;
          case<PHONE_NUMBER>:
              if (str.equals(Constants.DEVICE_NAME_FCX_90)) {
                  c = ' ';
                  break;
              }
              break;
      }
      switch (c) {
          case 0:
          case 24:
          case ' ':
              return getImageResourceForKinetic();
          case 1:
          case 2:
          case 7:
          case '\n':
          case 11:
          case 19:
          case 30:
              return getImageResourceForSvara();
          case 3:
          case 5:
          case '\t':
          case 15:
          case 17:
          case 27:
              return getImageResourceForZirconia();
          case 4:
          case '\b':
          case 14:
          case 21:
          case 28:
          case 29:
              return getImageResourceForSky();
          case 6:
          case 25:
              return getImageResourceForMomento();
          case '\f':
          case 16:
          case 20:
          case 26:
              return getImageResourceForZirconiaFCU();
          case '\r':
          case 22:
          case 23:
              return getImageResourceForMev();
          case 18:
              return getImageResourceForHyper();
          case 31:
              getImageResourceForManrose();
              break;
      }
      return getImageResourceForSvara();
  }

The format "<BBHHHHH" isn't correct for the response I'm getting for fan state as it's still 12 bytes. I hate working with byte arrays and shifting bits, so this is going to take a lot of trial and error.
I've managed to log the outputs with the format "<4BBHHHHH" into the HA debug log, but it's still not looking obvious where to go from here. I'm going to guess v[1] is the mode and v[6] is the fan speed.
No fan: 	        Read Fan States: (0, 0,     205, 4, 77, 5, 0, 	    22528, 5, 24)
Boost fan:	Read Fan States: (0, 103, 9,     4, 53, 5, 32512,    12553, 5, 24)

I've created a discord channel to continue there

Any luck getting this working folks?

Yup, released it now. Please feel free to test it and come with suggestions for improvements!

Closing as the issue is more or less solved Problems will be handled in new issues.


🚨 DO NOT MERGE YET 🚨 [New Architecture][iOS][0.71.0] Update the App Migration section

This PR updates the website with the improvement for iOS: this improvement allow to remove two full pages from the migration guide.
This changes will be available starting from 0.71, so we have to wait to merge this until 0.70 is released.

Just a reminder - please remember to add redirects for the removed pages. 🙂

Just a reminder - please remember to add redirects for the removed pages. 🙂

@Simek Can I ask what do you mean? 😅
I changed the links pointing to them, thanks to netlify that was telling me when they broke. Is there something else that I should do?

Yup, you also need to add the entries for the Netlify redirects file:

https://github.com/facebook/react-native-website/blob/main/website/static/_redirects

You can read more about this feature here:

https://docs.netlify.com/routing/redirects/

@Simek Thanks for the clarification! I updated the PR!


need to set up www.teachosm.org dns redirect

need to set up www.teachosm.org dns redirect

Completed.


Added values for distance calculation

Added some values required for distance calculation. Previously, I had put 1 as a placeholder there.

Hey I put the CONSTANTS at the top


Allow customizing spring-merge-dependabot-pr.yml merge strategy

Some projects might want to pass --rebase or even not opt for --squash.

squash and rebase boolean inputs could be added to the workflow.
an option to pass the argument as a whole can be a possibility too, like merge-arguments: '--rebase --squash

https://github.com/spring-io/spring-github-workflows/blob/460018c198950730359ed81ac796079467b851aa/.github/workflows/spring-merge-dependabot-pr.yml#L75

Sure!
The merge-arguments optional input sounds good.
Feel free to contribute!
Thanks

Closing in favor of https://github.com/spring-io/spring-github-workflows/pull/7


Can't install from pip directly and install from source need --recurse-submodules in git

Use pip to install:
$ pip install liftover
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Collecting liftover
  Using cached https://pypi.tuna.tsinghua.edu.cn/packages/72/fe/2c951c8f118a492ecbf68efe928b1633c57b4ac94d4f7ae0aab7da130f8f/liftover-1.1.12.tar.gz (185 kB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
    Preparing wheel metadata ... done
Requirement already satisfied: requests in ./miniconda3/lib/python3.9/site-packages (from liftover) (2.25.1)
Requirement already satisfied: certifi>=2017.4.17 in ./miniconda3/lib/python3.9/site-packages (from requests->liftover) (2021.10.8)
Requirement already satisfied: chardet<5,>=3.0.2 in ./miniconda3/lib/python3.9/site-packages (from requests->liftover) (4.0.0)
Requirement already satisfied: idna<3,>=2.5 in ./miniconda3/lib/python3.9/site-packages (from requests->liftover) (2.10)
Requirement already satisfied: urllib3<1.27,>=1.21.1 in ./miniconda3/lib/python3.9/site-packages (from requests->liftover) (1.26.6)
Building wheels for collected packages: liftover
  Building wheel for liftover (PEP 517) ... error
  ERROR: Command errored out with exit status 1:
   command: /home/yangjk/miniconda3/bin/python /home/yangjk/miniconda3/lib/python3.9/site-packages/pip/_vendor/pep517/in_process/_in_process.py build_wheel /tmp/tmphabyp249
       cwd: /tmp/pip-install-2b2tklwt/liftover_8134422265364a15a21cd9526c4bc2f5
  Complete output (7 lines):
  running bdist_wheel
  running build
  running build_py
  running build_ext
  building 'liftover.chain_file' extension
  gcc: error: src/gzstream/gzstream.C: 没有那个文件或目录
  error: command '/usr/bin/gcc' failed with exit code 1
  ----------------------------------------
  ERROR: Failed building wheel for liftover
Failed to build liftover
ERROR: Could not build wheels for liftover which use PEP 517 and cannot be installed directly

It says the package doesn't have gzstream.C.
As the repo has gzstream.C in submodule in src/gzstream directory so I moved to install from source.
$ git clone https://github.com/jeremymcrae/liftover.git
$ cd liftover
$ ls src/gzstream/

Sadly, no file in this directory.
Adding an argument in git will help.
$ git clone https://github.com/jeremymcrae/liftover.git --recurse-submodules
$ cd liftover
$ ls src/gzstream/
COPYING.LIB  index.html  README         test_gzip.C
gzstream.C   logo.gif    README.md      version
gzstream.h   Makefile    test_gunzip.C

And the installation is a success.
$ python setup.py install

I think all these problems are caused by the submodules like gzstream in this repo and I recommend to handle these carefully.

Yep, I missed including some files in the version uploaded to pypi. I've issued a new new release which fixes this, thanks!


Feature Request: self updating / moving graph

As a User, I'd like to open pingwatch in a browser and watch it over time.
Situation now:
The graph loads with all existing values
If i want to check more recent values that were measured after i openend pingwatch, I need to refresh the page.
Desired behaviour:
Pingwatch graph should update itself every x-seconds. Ideally it should take the interval parameter that was used to start the pingwatch instance.

Good idea, with one exception: you do not want the graph to autoscroll if the user selected a specific time period by selecting a date range with the mouse.
I will need to restructure the code to allow incremental updates, it would be very inefficient to send the entire data every minute.

I just re-read your comment.
Maybe i want the Graph to auto scroll - even when zoomed.
Lets say I keep 14 days of data (either due to auto triggered db housekeeping, or due to new option that you are going to introduce).
Maybe i want to keep the 14 days for retrospective diagnostic, but when i use pingwatch as some kind of dashboard, i'm rather interested in the last 30/60/120 minutes as an overview. So in the WebUI i could zoom into this relative timeframe (last x minutes) and still want to see it auto update.
I don't know whether you share this idea or opinion, i'm not sure where you want to go with pingwatch actually :)
I repeat that i really like it for its lean UI and easy to use UX.
And if i need more i could still just find something that feeds into influxdb and then draw nice complicated dashboards with Grafana.
Altough pingwatch would be a nice data collection demon to feed ping results into influx db ;-)

On Sep 22, 2020, at 20:05, aslmx<EMAIL_ADDRESS>wrote:
I just re-read your comment.
Maybe i want the Graph to auto scroll - even when zoomed.
Lets say I keep 14 days of data (either due to auto triggered db housekeeping, or due to new option that you are going to introduce).
Maybe i want to keep the 14 days for retrospective diagnostic, but when i use pingwatch as some kind of dashboard, i'm rather interested in the last 30/60/120 minutes as an overview. So in the WebUI i could zoom into this relative timeframe (last x minutes) and still want to see it auto update.

Yes. It should autoscroll as long as the end of the zoomed range is the end of the data. But if you zoomed into yesterday (maybe there wa an outage you want to examine), you don’t want it to scroll. So the rule is, if the end of selection is equal to the most recent data, scroll, otherwise freeze.
By the way, I pushed today a change that adds the option
pingwatch -display 6h
To show only the last 6 hours, no matter how much data is kept in the DB
Or if you want 3 days:
ping watch -days 3
That way you don’t have to waste your time manually selecting your time window every time you load the page.
At some point I’ll add a proper date picker so you can select your range, but for now I think it’s a reasonable compromise.

I don't know whether you share this idea or opinion, i'm not sure where you want to go with pingwatch actually :)

I’m trying to keep it minimal in terms of deployment and configuration, with sensible defaults. 2 weeks is probably too much.

I repeat that i really like it for its lean UI and easy to use UX.

Thanks!

And if i need more i could still just find something that feeds into influxdb and then draw nice complicated dashboards with Grafana.
Altough pingwatch would be a nice data collection demon to feed ping results into influx db ;-)

They have their own plugin for this. But you can use it for now, and when you upgrade, copy the data from SQLite into InfluxDB so you don’t lose history.
--
Fazal Majid
<EMAIL_ADDRESS>			+44 7367 212202
27 Westfield, 15 Kidderpore Ave                 www.majid.info
London, NW3 7SF

So the rule is, if the end of selection is equal to the most recent data, scroll, otherwise freeze.
Yes, exactly.

By the way, I pushed today a change that adds the option pingwatch -display 6h To show only the last 6 hours, no matter how much data is kept in the DB Or if you want 3 days: ping watch -days 3 That way you don’t have to waste your time manually selecting your time window every time you load the page.

I've seen and built it. Works as expected. Although this would require me to restart pingwatch when i want to see a longer period, so ...

At some point I’ll add a proper date picker so you can select your range, but for now I think it’s a reasonable compromise.
... i guess a date picker to change the default value specified on commandline would really be cool :+1:

For now i keep it at 24hours with housekeeping by sqlite trigger.

FYI, I just pushed pingwatch autoscrolling to Github.
If your selection end is within 5 minutes f the end of the data range, it will automatically autoscroll (I added the 5 minute fudge factor because it is very hard to zoom to the exact end of the graph even using a mouse). If you select a specific window, it will stay static. Data is sent incrementally and uses very little bandwidth (under 1KB per update in my tests).
--
Fazal Majid
<EMAIL_ADDRESS>			+44 7367 212202
27 Westfield, 15 Kidderpore Ave                 www.majid.info
London, NW3 7SF

Not sure what i'm doing wrong here...
user@host:~/tools/pingwatch# go build
# _/user/tools/pingwatch
./webui.go:88:23: interval.Milliseconds undefined (type *time.Duration has no field or method Milliseconds)

If your selection end is within 5 minutes f the end of the data range, it will automatically autoscroll (I added the 5 minute fudge factor because it is very hard to zoom to the exact end of the graph even using a mouse). If you select a specific window, it will stay static. Data is sent incrementally and uses very little bandwidth (under 1KB per update in my tests).

I tried it and with adaptions mentioned in my previous comments it works. However as you said, selecting 5 minutes from 24hours is pretty tricky ;)
Can we maybe have a checkbox to enable autoscrolling regardless of the selected interval?
(of coruse only if the current selection reaches the end of the data).
That would allow to select arbitrary ranges and auto update them (e.g. 1 hour, 2 hours, ...)

That's a good idea, I added the autoscroll checkbox, and if you change your selection zoom, it will set or reset the checkbox based on the previous rules, but you can override them by checking or unchecking the checkbox.

./webui.go:88:23: interval.Milliseconds undefined (type *time.Duration has no field or method Milliseconds)

Yes, time.Duration.Milliseconds() was added in Go 1.13. You can find out which version of Go you have using go version. I would advise you to upgrade as the current version is 1.15 and 1.13 and older are no longer supported nor do they get security fixes. In the meantime I added e187f3eb85dee83eb12f18650d8c984d04db7008 that fixes this using the older API time.Duration.Nanseconds() instead.


Energy Period Selection for Daily totals

Is the idea add support Energy Period Selection to render daily energy statuses?

Hi. Can you give me an example, not sure I understand the feature request.

Hi, I have the current card https://github.com/flixlix/energy-period-selector-plus (as sample). I think for non current date - show only daily data, other - online

IMHO seems a bit weird, given this is a POWER flow card, to then have e ENERGY from other days upon it.

Power flow contains daily energy data (but it is power flow card). My idea is only extend logic daily data with help data selection period. So offcourse for prev/next days card can show only daily counters, other - miss.


Object doesn't support property or method 'slice'

confirmation.xlsx
so i was testing this in ie 10, tried to upload excel file but i was getting "Object doesn't support property or method 'slice'"  attached is the screen shot from console.

Please report this to the xlsx issue tracker


HTN-008: Vector Embedding

Build a model for classifying and identifying components of a video

Completed for audio and video


Windows 11 24H2

I clean installed the latest build of windows 11 (24H2) and tried to play the sims 1 with the ddrawcompat fix and it's always worked on 22h2 and 23h2 but since the 24H2 release it stopped working. The game "loads" but nothing on the taskbar or desktop. So I looked into task manager and found that the sims wasn't under the "apps" list but instead under the "Background processes" list. I have to close it that way to get the program to stop. I've since clean installed windows 11 23H2 "thankfully I have a backup ISO". Your .dll works perfectly fine again. So something to do with 24H2 has twiddled something with directX. I love what you do for the retro gaming scene and I appreciate your work. Hope this information helps!

It should already be fixed since v0.5.3. Are you using an older version by chance?

I used your latest version. Not 0.5.3

I mean, v0.5.4 is also fixed. I just tried it, no issues here with 24H2. If it's not the case for you, please enable LogLevel=debug in DDrawCompat.ini and upload your logs.

I'll use my laptop as a test when 24H2 is available to upgrade as I've reinstalled 23h2 back on my desktop but it's running great again. Something to do with 24h2 or the patcher I use? I'm not sure

I have tested other games on 24H2 today, but they all worked fine

Yeah but for this instance it didn't work for me no matter what I tried. With a clean install. So I'm not using 24H2 till Microsoft make it more stable.

I can use my laptop as a dummy and install 24H2 on there and see if the same results show up? Then I can send the log file. I don't use the laptop for much anyways

Up to you, but I'm pretty sure the issue is already fixed, since it was reported multiple times before and confirmed as fixed by multiple people, including myself. You must have used the wrong version when testing, or whatever patcher you mentioned is causing additional problems with this game, or it's automatically replacing DDrawCompat with an older version or something like that.
There's a tiny chance that there are other issues with DDrawCompat on 24H2 that cause the exact same problem, and that nobody else has encountered it yet, but I think that's less likely.

I've updated all the affected releases between v0.3.0 and v0.5.2 (and some of the "debug-previous-builds" under v0.5.3) with new assets (downloads) with a "win11-24h2" suffix. They were patched to be compatible with Windows 11 24H2 by backporting this fix: 89b2a63164dd4775b033fe427eddbb6e94b852cd.
It could be useful for regression testing, even for me.

I'm using Faithbeams sims 1 widescreen patcher.

I'm going to assume this was already fixed, until it can be proven otherwise with debug logs.


How to parse a command line with an an invalid parameter

I want to parse command line but with the possibility of providing an incorrect parameter.
I tried for example:
      Parser.Default.ParseArguments<CmdLineParams>(Environment.GetCommandLineArgs())
        .WithNotParsed(errs => {
          // code for errors
        })
        .WithParsed(opt => {
         // code for valid options
        });

but in situation when any command line parametr is incorrect commandline parser calls only code for errors handling ( "code for errors" in my example).
So how to handle valid parameters and skip incorrect?

You can use our CliParametersNormalizer for processing of invalid and duplicate arguments. Also, it can check types. That normalizer works by the following way: if the error occurred, the corresponding argument won't added to output arguments and error will be logged. After that, you can pass normalized arguments to commandline parser.
See unit-test here.


Tethering to an element with multiple scrollable parents

I came across a situation where the element I want to tether has multiple scroll parents. Event listener is bound to the first one found and naturally does not receive events from other parents.
A simplified example of the issue can be seen in http://jsfiddle.net/mchc2tny/1/

vertical scrolling of "#inner"-div works, but...
horizontal scrolling of "#outer"-div does not

Amendment: The above is with Google Chrome 35.0.1916.114 ... with Firefox 29.0, the tethered element seems to receive absolutely no scroll-events :(

The fiddles need to be adjusted now that http://tether.io/tether.js is no longer the recommended way of including the library. jsdelivr is.

Hmm... I think I created my fiddle as anonymous user, so I'm unable to claim ownership and modify it :(

@ibash 's code fixed my issue. I had two vertical scroll parents, neither of which were <body>. Thank you! And thanks to @DiscoNova for reporting it.


[PORT] [LG] disable datetime parsing in json()

Port this change from botbuilder-dotnet/master branch:
https://github.com/microsoft/botbuilder-dotnet/pull/3765

Closes: #3764
Changed projects

AdaptiveExpressions
AdaptiveExpressions.Tests

Platform specific


JS Client should speak in ids, not names

What happened?
Not technically a bug since we dont have a released python version here yet.
Update JS Client so that it speaks in ids and not names
Versions
--
Relevant log output
No response

nevermind! i was wrong, this is already implemented


fix(datastore): Fix ModelSyncedEventEmitter, add lifecycle events logging

Issue #, if available:
Description of changes:
Check points: (check or cross out if not relevant)

[ ] Added new tests to cover change, if needed
[ ] Build succeeds with all target using Swift Package Manager
[ ] All unit tests pass
[ ] All integration tests pass
[ ] Security oriented best practices and standards are followed (e.g. using input sanitization, principle of least privilege, etc)
[ ] Documentation update for the change if required
[ ] PR title conforms to conventional commit style
[ ] If breaking change, documentation/changelog update with migration instructions

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

Codecov Report

Merging #2022 (13e3c90) into feat/datastore-custom-pk (b6171b1) will decrease coverage by 0.60%.
The diff coverage is 54.54%.

@@                     Coverage Diff                      @@
##           feat/datastore-custom-pk    #2022      +/-   ##
============================================================
- Coverage                     59.52%   58.92%   -0.61%
============================================================
  Files                           719      660      -59
  Lines                         22544    20845    -1699
============================================================
- Hits                          13420    12282    -1138
+ Misses                         9124     8563     -561

Flag
Coverage Δ

API_plugin_unit_test
62.47% <ø> (ø)

AWSPluginsCore
?

Amplify
48.23% <ø> (ø)

Analytics_plugin_unit_test
71.09% <ø> (ø)

Auth_plugin_unit_test
78.33% <ø> (ø)

DataStore_plugin_unit_test
75.65% <54.54%> (-0.07%)
:arrow_down:

Geo_plugin_unit_test
?

Predictions_plugin_unit_test
26.81% <ø> (ø)

Storage_plugin_unit_test
58.04% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

Impacted Files
Coverage Δ

...WSDataStoreCategoryPlugin/AWSDataStorePlugin.swift
75.17% <0.00%> (-1.64%)
:arrow_down:

...gin/Sync/InitialSync/InitialSyncOrchestrator.swift
75.19% <0.00%> (-0.59%)
:arrow_down:

...goryPlugin/Sync/InitialSync/SyncEventEmitter.swift
92.10% <0.00%> (-2.49%)
:arrow_down:

...gin/Sync/InitialSync/ModelSyncedEventEmitter.swift
90.72% <100.00%> (+1.13%)
:arrow_up:

...Engine+IncomingEventReconciliationQueueEvent.swift
51.02% <100.00%> (+1.02%)
:arrow_up:

...ataStoreCategoryPlugin/Sync/RemoteSyncEngine.swift
94.50% <100.00%> (+0.02%)
:arrow_up:

...tionSync/AWSIncomingEventReconciliationQueue.swift
57.50% <0.00%> (-1.67%)
:arrow_down:

...gin/Subscribe/DataStoreObserveQueryOperation.swift
74.64% <0.00%> (-0.94%)
:arrow_down:

...LocationGeoPlugin/AWSLocationGeoPlugin+Reset.swift

...e/AWSPluginsCore/Auth/AWSAuthServiceBehavior.swift

... and 59 more

:mega: Codecov can now indicate which changes are the most critical in Pull Requests. Learn more


Invalid LSP4 schema

I'm submitting a...

[X] bug report
[ ] feature request
[ ] question about the decisions made in the repository
[ ] question about how to use this project

Summary
This must be address type not a uint256
https://github.com/ERC725Alliance/erc725.js/blob/develop/schemas/LSP4DigitalAsset.json#L34-L35

Indeed - nice catch ! Thanks @lykhonis - PR sent - we will release this week


Add support for Adobe Photoshop Elements 10 - 14

The current Photoshop Elements detection code is artificially capped at version 9 and earlier.  Adobe is now up to version 14.  It might be a trivial fix that only requires changing one number and doing some testing.
One catch: the current Elements detection code only supports 32-bit plugins, and presumably Elements now supports 64-bit plugins.

There are trial downloads available for Elements14, which may contain the plug-in path information.

I've got Elements14/64 detected (trials can be downloaded here: https://helpx.adobe.com/nl/photoshop-elements/kb/photoshop-elements-downloads.html), but it's slightly different from Elements9/32 to the point where I wonder if Elements9/32 is detected correctly with the current code at all. Can you actually test and confirm the Elements9 code? I can't find any Elements version prior to 10, and starting with 10, it's slightly different.


web: show number of errors next to errors tab

Future work that will happen in a different PR:

Styling this number to be a bit better
When you click on the errors tab the number gets reset to zero.

The (2) thing should correspond to the resource selected...

I refactored the Router out of the HUD to make testing things easier. Namely I now test that if you are looking at an individual resource the errors tab in the tabnav shows only the number of errors for that resource, not the global number of errors for all resources.
Adding @nicks as a reviewer since I talked over this with him.


feat(studiesIndex):Recreate the studies index from source data

Just a small function to update the studies index.

@dsmith1547 - can you review please?


Blueprint versioning in request headers for an API

Hello,
I am migrating an API from Flask to Sanic (perf are really improved !) and I would like to take advantage of it to add a versioning feature.
Sanic allows us to add the version directly in the blueprint, so for example it's possible to do the following :
v1 = Blueprint('v1', version=1)
v2 = Blueprint('v2', version=2)

@v1.route('/items')
async def get_items(request):
    return json({"foo": "bar"})

@v2.route('/items')
async def get_items(request):
    return json([{
            'title': 'foo',
            'description': 'bar'
        }])

It works perfectly using an URL prefix :
$ curl http://<IP_ADDRESS>:8000/v1/items
{"foo":"bar"}
$ curl http://<IP_ADDRESS>:8000/v2/items
[{"title":"foo","description":"bar"}]

But what is the solution if I want to select the version directly in the request headers please (like Github does it)?
From what I seen this feature is hardcoded, so do you think if there is a solution to select a Blueprint on the fly ? In a middleware for example ?
Thanks in advance !

I have some concerns regarding the injection of the blueprint’s version in the request’s header.
I’m a fan of micro-framework such as Sanic. And the idea of them is to be as small as possible. That being said, I will argue that X-Headers are basically unofficial HTTP headers, meaning that they’re not part of the HTTP protocol, so adding them to the request would mean that Sanic would have to inspect the URI and the request header, remember that HTTP is resource/document-based, hence the URI, in the HTTP layer you’re addressing a version of the resource, hence the routing through URI makes sense, but when referring to the version of the resource in the header is much like, you have a resource (non-versioned) that accepts versioning if requested. It’s a required vs optional.
This can be also an impact to sanic’s performance.
If you really need to handle the logic through the headers, I can think that injecting headers can be useful sometimes when behind a LB or proxy, but in this case I think the routing of the version is happening outside the application layer and in the LB/proxy layer.
Or having different schemas for validating the request/response of the document/resource addressed.
From my point of view, versioning through headers is handled by a non-versioned route and the logic falls into the handler to chose logic.
A way to ensure the header (as these kind of headers are optional) I would add a middleware to ensure the version and use the default before it lands to the handler.
From there I would use schema version validation like for example cerberus or marshmallow, to convert the payload to a standardized input to the service layer.
http://marshmallow.readthedocs.io/en/latest/
http://docs.python-cerberus.org/en/stable/
Hope it helps!

First of all thank you for your answer :)

I will argue that X-Headers are basically unofficial HTTP headers

You are right about the X-Headers but here we are talking about the application/vnd header, which is recognized by IANA : https://www.iana.org/assignments/media-types/media-types.xhtml
I don't think it's a bad practice, for example the Github website itself (on which we are talking right now ^^) uses it for its API versioning : https://developer.github.com/v3/media/#request-specific-version
From my opinion (and it's just mine), adding the version in the URL breaks the RESTFUL rules described by Roy Fielding :

a resource is identified by a single URI that is sustainable and stable over time
we show in the URI a purely technical parameter : by default if no application/vnd is present, we call the default API. With versioning inside the URI we must pass the version even if we want the default one.

Moreover clients already send their expected response format when they send a request Accept : application/json, text/xml . So sending the version of the API is also acceptable in the headers.
PS: I don't need LB or proxy to inject this header, the clients can directly do it when crafting their requests ;)
In fact I don't want to remove the ability to add the version in URL, but leave the Sanic users the choice to handle it (it's currently hardcoded : https://github.com/channelcat/sanic/blob/master/sanic/router.py#L124).
If you have an idea for doing it I'll take it, if not maybe a PR is the solution.


EC2 Instance disk size is not sufficient - to install xcode

The ec2 instance that is created - is 30GB in size - when trying to install xcode on the instance - there is not enough space on the drive

Take a look at: https://github.com/aws-samples/mac1-eks-jenkins/commit/86bf79dad1e6d0501a6909d3265e5ec66047d2c0.
I set it for 60GB for now, LMK if that works for you and I'll merge.

Take a look at: https://github.com/aws-samples/mac1-eks-jenkins/commit/86bf79dad1e6d0501a6909d3265e5ec66047d2c0.
I set it for 60GB for now, LMK if that works for you and I'll merge.

Merged.


I was wondering if We can already use the lib in .net 9?

Discussed in https://github.com/taublast/DrawnUi.Maui/discussions/125

Originally posted by YBTopaz8 November 16, 2024
Hi!
I was wondering so because whenever I add try to draw any thing, I have some issues with newly created windows in .net 9
I thought it was my project, but looks not.
I downloaded the official TitleBarDemo here from MS and simply added this lib and put a skialabel in a skialayout but the app kept crashing still the error;
Microsoft.Maui.Platform.HandlerNotFoundException: 'Unable to find a IElementHandler corresponding to .Maui.Draw.SkiaLayout. register a handler for DrawnUi.Maui.Draw.SkiaLayout using Microsoft.Maui.Hosting.MauiHandlersCollectionExtensions.AddHandler or   Microsoft.Maui.Hosting.MauiHandlersCollectionExtensions.TryAddHandler
(The image is from my project because it gives more details on crash, the one on a brand new sample project isn't descriptive)
Any help would be much appreciated 🙋♂

It crashes in my Platforms/Windows/App.xaml.cs file!

The answer seems to be Yes.
I needed to put my skialayout in a canvas first. now it works.
Sorry! (not very easy to understand the demo 😅)


[Bug]: "Waiting for target frame x failed" when crawling a lot of websites concurrently

Bug description
Steps to reproduce the problem:

Do a lot at the same time (opening a lot of browsers and visiting pages etc.), causing Node to lag.
Observe an unhandledRejection like the following:

TimeoutError: Waiting for target frame 38DAB13DFEC9AD09315770D838D9F8C9 failed
    at Timeout._onTimeout (path\to\my_package\node_modules\puppeteer\src\util\DeferredPromise.ts:36:14)
    at listOnTimeout (node:internal/timers:564:17)
    at processTimers (node:internal/timers:507:7)

This is caused by the promise from FrameManager.ts:153 not being fulfilled within 5 seconds (hardcoded in DeferredPromise.ts). If you add if (isRejected) console.log('resolved anyway') to resolve: in DeferredPromise.ts and set process.on('uncaughtException', console.error) then you can see that the promise will be resolved anyway later on.
I think the timeout should probably be configurable in some way (or removed entirely, but it probably serves a purpose).
Puppeteer version
16.2.0
Node.js version
18.7.0
npm version
8.17.0
What operating system are you seeing the problem on?
Windows
Relevant log output
No response

Update: I sometimes have this issue even when I change the timeout to 30 seconds while doing just 5 crawls concurrently

The worst part - there is no way to catch this error. If it happens node crashes.

@ivibe Except process.on('uncaughtException', console.error) that is, but yeah that's a bit evil.

@stevenwdv yep, there're workarounds, but I meant traditional try ... catch block :)

@OrKoN I just checked and unfortunately the issue is not fixed in puppeteer 17.1.0. I can reproduce it with the snippet from #8838.
TimeoutError: Waiting for target frame 94B6342A551DB27D1F1D5A185A000C34 failed
    at Timeout._onTimeout (file:///C:/dev/puppeteer-test/node_modules/puppeteer/lib/esm/puppeteer/util/DeferredPromise.js:26:22)
    at listOnTimeout (node:internal/timers:564:17)
    at process.processTimers (node:internal/timers:507:7)

Sorry, looks like a regression slipped in the @jrandolf's refactoring https://github.com/puppeteer/puppeteer/pull/8863

Hi there am using puppeteer version 17.1.0 and Node 18.10.0. Am facing the exact same issue when I am doing a web scrapping concurrently. Is there any fix or workaround for this? It would be so helpful if it can be address as we are facing the issue in a production system.

@NoelToy
Workaround: Reduce concurrency, only scrape a couple of sites in parallel.
Fix: Already released, just upgrade puppeteer to v17.1.1 or higher, you're on a really old version.


2024_Android_Karimy_124_KBL_AF

[ ] -`

` **  @VSC-Service-Account @azure-sdk  @KarimyDawood @azure-sdk
GETTING READY  MY OWNED MADE (RANA UNIVERSITY)

Closing as spam


Random timing out

The bot is randomly timing out, when idle and when playing music.
This is what comes up in cmd:
Task exception was never retrieved
future: <Task finished coro=<MusicPlayer.websocket_check() done, defined at D:\H
osting\MusicBOT\musicbot\player.py:280> exception=TimeoutError()>
Traceback (most recent call last):
File "D:\Hosting\MusicBOT\musicbot\player.py", line 287, in websocket_check
assert self.voice_client.ws.open
AssertionError
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python35-32\lib\asy
ncio\tasks.py", line 239, in _step
result = coro.send(None)
File "D:\Hosting\MusicBOT\musicbot\player.py", line 291, in websocket_check
await self.bot.reconnect_voice_client(self.voice_client.channel.server)
File "D:\Hosting\MusicBOT\musicbot\bot.py", line 310, in reconnect_voice_clien
t
new_vc = await self.get_voice_client(vc.channel)
File "D:\Hosting\MusicBOT\musicbot\bot.py", line 237, in get_voice_client
s_id_data = await asyncio.wait_for(s_id, timeout=10, loop=self.loop)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python35-32\lib\asy
ncio\tasks.py", line 396, in wait_for
raise futures.TimeoutError()
concurrent.futures._base.TimeoutError

Same problem, maybe a youtube-dl issue ?
I tried to update (in the terminal)
pip3 install -U youtube-dl
But didn't fix.

This is usually down to Discord/CloudFlare being wonky and is beyond our control. If it happens regularly, try using the review branch (git checkout review).


add init.py file in the root for package import

@zihangdai @kimiyoung , could you help review? Thanks!


Chore: bump to 0.3.2

Description
Bump to 0.3.2
Issue ticket number
N/A
Additional Context

Codecov Report
Base: 92.97% // Head: 92.97% // No change to project coverage :thumbsup:

Coverage data is based on head (43863de) compared to base (e503c1d).
Patch has no changes to coverable lines.

:mega: This organization is not using Codecov’s GitHub App Integration. We recommend you install it so Codecov can continue to function properly for your repositories. Learn more
Additional details and impacted files
@@           Coverage Diff            @@
##           develop     #149   +/-   ##
========================================
  Coverage    92.97%   92.97%
========================================
  Files          289      289
  Lines         4398     4398
  Branches       582      582
========================================
  Hits          4089     4089
  Misses         200      200
  Partials       109      109

Flag
Coverage Δ

build
95.01% <ø> (ø)

cli
89.38% <ø> (ø)

core
94.00% <ø> (ø)

extension-dbt
97.43% <ø> (ø)

extension-debug-tools
98.11% <ø> (ø)

extension-driver-bq
85.21% <ø> (ø)

extension-driver-duckdb
100.00% <ø> (ø)

extension-driver-pg
96.11% <ø> (ø)

extension-driver-snowflake
94.59% <ø> (ø)

integration-testing
96.15% <ø> (ø)

serve
90.04% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.
Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

:umbrella: View full report at Codecov.
:loudspeaker: Do you have feedback about the report comment? Let us know in this issue.


Example: Unable to search for any keyword in the body of the question

The example states that all three fields (title, tags, body) were indexed. However, I couldn't get the results I expect when using any keyword from the body of the question. The rest works fine.
Example:

Why does my checkbox return the wrong state?
javascript jquery html
I'm really confused. I have the following:
<input class="check-box"
  id="Data__Correct"
  name="Data.Correct"
  type="checkbox" value="Data.Correct" />

When I put a check in the checkbox and check with fiddler I see it's sending back:
Data.Correct    False
I thought it should be the other way around. What's happening?

When I search with I'm really confused, or any possible pattern taken from the body of any question , I don't get any results.

This is an issue with the example data, it contains html tags still. If you try searching for "really confusing" you should find the correct document, also searching for "I'm" will find other documents that contain "I'm".
The question you have shared actually has the token "I'm" which isn' matched by "I'm". This is more of a problem with the example and its data than with lunr, i.e. the html should be stripped before being indexed if possible.

I see! Thanks a lot for this awesome work :+1:


Travis: Update Rubies in matrix

This PR uses ruby 2.4.2, 2.3.5, 2.2.8 in the build matrix, as soon as rvm supports it.

Thank you!


Use iterators for iterating board, rows, cols, squares

This PR implements iterators for the Sudoku solver 🎉

This PR is replaced by #15


chore: bdd-spring-1574348516 to 0.0.1

chore: Promote bdd-spring-1574348516 to version 0.0.1

[APPROVALNOTIFIER] This PR is NOT APPROVED
This pull-request has been approved by:
To fully approve this pull request, please assign additional approvers.
We suggest the following additional approvers:
If they are not already assigned, you can assign the PR to them by writing /assign  in a comment when ready.
The full list of commands accepted by this bot can be found here.
The pull request process is described here

Needs approval from an approver in each of these files:

OWNERS

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment


Improvements for new mac design

💻 Environment
Platform: macOS
📒 Description

Date format preferences should be taken from profile settings (logging this as a feature request)

In dark mode, some project colors are not clear (dark green and brown for example)
The rounding around fields should be consistent  (what you are doing box is rounded, the fields for editing entries are not rounded in the same way. Plus the remaining app has straight lines)

Case

-Date format preferences should be taken from profile settings (logging this as a feature request)
Date format is based on MacOs  system date format and it is not possible to change this format in the date component.

In dark mode, some project colors are not clear (dark green and brown for example)
Just checked this out and the colors are a bit dark but usable. This is bound to happen when there is a possibility to use light and dark themes. All paid plans have additional color picker so there is a wider choice of colors to select for projects.

The rounding around fields should be consistent  (what you are doing box is rounded, the fields for editing entries are not rounded in the same way. Plus the remaining app has straight lines)

To emphasize timer part of the app it is clearly different by design. This logic is intended.


[Feature]: LLM Model and openai interface can be freely switched online

now LLM Model and openai interface only can be switched in .env file.
If we want to switch models, we can only stop the service first, then modify the .env file, and then start the service.

now LLM Model and openai interface only can be switched in .env file. If we want to switch models, we can only stop the service first, then modify the .env file, and then start the service.

it will be support soon

Already supported.   usage docs


docker-compse import-osm  with multiples

Is it possible to import multiple osm files?
I have 15 bz2 files I wish to import to create a reduced size planet.mbtiles
I have converted them to pbf files
I have tried to use osmconvert to merge them into one pbf or osm file but it doesn't seem to work so I'm wondering if osm2vectortiles can handle that multiple imports without dropping tables

Is it possible to import multiple osm files?

sorry ... no

I have tried to use osmconvert to merge them into one pbf

just a quess:

please use the latest osmconvert (>="0.8.5")
or  osmium tools. http://docs.osmcode.org/osmium/latest/

or just filter the big  osm planet file

it seems osmconvert only keeps the nodes,ways, and relations that they have in common when merging.

the code in import-pbf.sh seems can handle  multiple osm files @ImreSamu


[hi] [wip] Initial /hi localization guide

Fixes #35599
This is a free open-source Creative Commons-licensed guide created by Rajesh Ranjan we can adopt and adapt.
Downloaded from: https://raghukamath.com/downloads/fuel-translation-style-and-convention-guide-hi.pdf
Another slightly different version is also available here: https://issuu.com/ravishankarshrivastava/docs/fuel_translation_style_and_convention_guide_hindi-
Converted to markdown using: https://pdf2md.morethan.io/

/language/hi
/assign @anubha-v-ardhan
/assign @Garima-Negi
/assign @AmanSarraf

/hold

For some reason, rebasing brought a bunch of unwanted commits that I can't seem to get rid of. Closing this PR and continuing with https://github.com/kubernetes/website/pull/35860 instead.


External textures are not working on Android emulators

This regressed in the last week, I'm bisecting.
D/skia    (12710): Shader compilation error
D/skia    (12710): ------------------------
D/skia    (12710):    1 #version 300 es
D/skia    (12710):    2
D/skia    (12710):    3 #extension GL_OES_EGL_image_external_essl3 : require
D/skia    (12710):    4 precision mediump float;
D/skia    (12710):    5 precision mediump sampler2D;
D/skia    (12710):    6 precision mediump samplerExternalOES;
D/skia    (12710):    7 out mediump vec4 sk_FragColor;
D/skia    (12710):    8 uniform samplerExternalOES uTextureSampler_0_Stage0;
D/skia    (12710):    9 in highp vec2 vlocalCoord_Stage0;
D/skia    (12710):   10 void main() {
D/skia    (12710):   11     mediump vec4 outputColor_Stage0;
D/skia    (12710):   12     {
D/skia    (12710):   13         outputColor_Stage0 = vec4(1.0);
Syncing files to device Android SDK built for x86...
D/skia    (12710):   14         highp vec2 texCoord;
D/skia    (12710):   15         texCoord = vlocalCoord_Stage0;
D/skia    (12710):   16         outputColor_Stage0 = texture(uTextureSampler_0_Stage0, texCoord);
D/skia    (12710):   17     }
D/skia    (12710):   18     {
D/skia    (12710):   19         sk_FragColor = outputColor_Stage0;
D/skia    (12710):   20     }
D/skia    (12710):   21 }
D/skia    (12710):   22
D/skia    (12710): Errors:
D/skia    (12710): ERROR: 0:6: 'samplerExternalOES' : unsupported type

Regression started at the Skia roll https://github.com/flutter/engine/pull/11000 (rolled to the framework in https://github.com/flutter/flutter/pull/38559 ).

The regression started at the following Skia commit:
67529b2543 SkSL GLSL generator writes default precision for sampler2D/samplerExternalOS/sampler2DRect

@bsalomon

I think this ought to fix it:
https://skia-review.googlesource.com/c/skia/+/235279/
@amirh can you test it out?

Tried the Skia patch on an Android emulator and was able to play video in Gallery

The Skia patch landed. We now need to wait for the Skia and engine rollers.

The fix was rolled to the framework in https://github.com/flutter/flutter/pull/38729


Fixed Broken Link

Article "Evolution or Rebellion? The rise of Site Reliability Engineers (SRE)" had this link  http://126kr.com/article/7vkoxnk6s01
Link is broken and not the original link to titled blogpost.

Thanks @kai3x5 :)


Insiders opening "C:\Program Files\Microsoft VS Code Insiders\resources\app\out\cli.js" after every few mins automatically.

Issue Type: Bug
Insiders opening "C:\Program Files\Microsoft VS Code Insiders\resources\app\out\cli.js" after every few mins automatically.
A new window is opened every few minutes with "C:\Program Files\Microsoft VS Code Insiders\resources\app\out\cli.js" file opened in it.
 (F1 > Developer: Restart With Extensions Disabled or code --disable-extensions)

@chrmarti yes, this issue is replicated after disabling all the extensions.

I re-installed the Insiders build, but the problem is still there.
I have user installation,
I run the app as administrator.
Is anyone else facing this issue?

@sanket-bhalerao Could you compare with the current stable release 1.38.1? Does it occur there too?

@chrmarti i am facing this issue with the stable release.
however, the popup that requests the permission is for insiders.
screenshot for reference.

@sanket-bhalerao Can you uninstall VS Code Insiders?

@chrmarti let me try.
i have also removed the .insiders directory which contains the extentions.

after re-installing insiders, the issue did not reappear.


'IndigoLogger' object has no attribute 'theaddebug'

`Camect Error                    Error in plugin execution ExecuteAction:
Traceback (most recent call last):
File "plugin.py", line 283, in snapshotCameraCommand
File "/Library/Application Support/Perceptive Automation/Indigo 2021.1/Plugins/Camect.indigoPlugin/Contents/Server Plugin/camect.py", line 115, in snapshot_camera
File "plugin.py", line 105, in callBack
AttributeError: 'IndigoLogger' object has no attribute 'theaddebug'
`

Was wondering why some of my snapshots weren't posting to my "Alert" control page, and when I manually trigger one, this is what I see.
Running 0.0.7 and this used to work. Haven't made any substantive changes to my Indigo setup in months. Just stuff like new automations, added some bulbs.

This was fixed in 0.0.8.


BeginMouseDrag(...) behavior changed in 11-preview 5

Describe the bug
I recently upgraded to 11-preview 5, and my chromeless window stopped working properly. In preview-4 I added a PointerPressed handler to the window that had the following definition:
    private void PointerPressed_Handler(object? sender, PointerPressedEventArgs e)
    {
        if (e.GetCurrentPoint(this).Properties.IsLeftButtonPressed)
        {
            BeginMoveDrag(e);
        }
    }

This allowed the window contents to continue to work properly, but any click not on a button could be used to drag the window around.
Now the drag still works, but all the controls on the page no longer activate. Mouseover events work, but when I click the button everything is eaten by the Window PointerPressed command
To Reproduce
Create a window, add the above handler as a PointerPressed event, add a button. The Button's click handler is no longer called when the above event is registered
Expected behavior
I should be able to drag the window as long as I'm not clicking on a control.
Desktop (please complete the following information):

OS: Windows 11
.NET 7

That's sounds like a known issue in preview5. Shold be fixed already. Can you try latest nightly and give me a feedback if it works again?


Empty comments should be recorded as well

http://code.google.com/p/esprima/issues/detail?id=158

Merged. Thank you!


Add I2C Object

PropWare does not have any class which supports I2C/TWI communication. This needed for numerous peripherals.

An example can be found here:
http://codinglab.blogspot.com/2008/10/i2c-on-avr-using-bit-banging.html
Functions may be okay without assembly since max frequency is typically 400 kHz.


Redirect URL is not matched

After some investigation, I found the login() and getAccessToken method in class authHelper.ts is using the raw URL of window's location. And the window's location contains the '#...' which doesn't match URL we register.

Hi @VitorX . Thanks for reporting this issue. Looking into it now.


Add top-level Calico Enterprise content [WIP - do not merge]

Deploy preview for calico ready!
Built with commit 6bd5160f30d38e93ed5afb6f0440bfd4a28e1c9f
https://deploy-preview-3508--calico.netlify.app


reconnection code fails after some time

posting this here because i'm not sure where it belongs....
I currently use this code to have my bot to reconnect it's room on disconnect
var checkActivity = Date.now();

bot.on('disconnected', function (data) {

});

var checkIfConnected = function ()
{
    if (attemptToReconnect === null) //if a reconnection attempt is already in progress, do not attempt it
    {
        if (bot._isAuthenticated) // if bot is actually connected to turntable use the speaking method
        {
            var currentActivity = (Date.now() - checkActivity) / 1000 / 60;

            if (currentActivity > 30) //if greater than 30 minutes of no talking
            {
                bot.speak('ping', function (callback) //attempt to talk
                    {
                        if (callback.success === false) //if it fails
                        {
                            attempToReconnect();
                        }
                    });
            }
        }
        else //else attempt to reconnect right away
        {
            attempToReconnect();
        }
    }
};

setInterval(checkIfConnected, 5000);

//makes the bot attempt to reconnect to the room

function attempToReconnect()
{
    attemptToReconnect = setInterval(function ()
    {
        if (bot._isAuthenticated)
        {
            whichMessage = true;
            console.log('it looks like your bot is not in it\'s room. attempting to reconnect now....');
        }
        else
        {
            whichMessage = false;
            console.log('connection with turntable lost, waiting for connection to come back...');
        }

        bot.roomRegister(ROOMID, function (data)
        {
            if (data.success === true)
            {
                errorMessage = null;
                clearInterval(attemptToReconnect);
                attemptToReconnect = null;
                checkActivity = Date.now();

                if (whichMessage)
                {
                    console.log('the bot has reconnected to the room ' +
                        'specified by your choosen roomid');
                }
                else
                {
                    console.log('connection with turntable is back!');
                }
            }
            else
            {
                if (errorMessage === null && typeof data.err === 'string')
                {
                    errorMessage = data.err;
                }
            }
        });
    }, 1000 * 10);
};

//checks when the bot speaks
bot.on('speak', function (data)
{
checkActivity = Date.now(); //update when someone says something
});

Assumptions about it:
There are two types of disconnects, ones where you are authenticated and ones where you aren't.
not authenticated:
not in the room so reconnect
authenticated:
i use chatting activity for this. If i see no chatting for 30 minutes I may or may not be in the room. so I attempt to say "ping". if ping doesn't go through then i'm not in the room so reconnect.
it seems to work.... till it doesn't. after about 10-20 days the bot gets lost and doesn't respond to input anymore without a hard reset, despite the fact that the program itself is still running.
any ideas on what might be happening? Thanks.

Why did you close this ? did you find what was going on ?
Not sure if it could be related to:


Release Google.Cloud.Storage.V1 version 4.5.0

Changes in this release:
New features

Support custom retry options on all API calls (other than upload/download object) (commit cc384b5) and (commit 385ee89)

Created release for Google.Cloud.Storage.V1-4.5.0