Maximum of 15 blinds

I have 2 DD7002B Connector Bridges operating 37 roller blinds.  One Connector Bridge has 22 the other 15.  Each Connector Bridge maxes out at 22 connected blinds.  I am able to use the plugin 2x by adding the IP address for each individual Connector Bridge to the plugin configuration, however, only have access to 30 blinds.
Are you able to increase the maximum blinds to 22 to match the Connector Bridge?
Thanks

Hi @knh1965,
There's nothing in the plugin that enforces a limit of 15 blinds; it queries the hub for all connected devices, then creates an accessory for each one. I was under the impression that 15 was the limit - that's what we were told by the guy who installed our blinds - but some googling suggests that both the DD7002B and the DD1554 can both control up to 30 motors.
The only thing I can think of is that the hub may only return a maximum of 15 blinds per response. The plugin expects to receive a single message that contains everything, so if there's a second message being sent by the hub with the remaining devices, the plugin won't see it.
I only have 7 blinds myself, so I won't be able to test this theory. Would you be willing to try out some beta versions of the plugin and let me know how they behave? I'm planning to add support for multiple hubs/devices anyway, so you won't have to run two instances of the plugin anymore.

I would definitely try some beta versions. I am very new to the home automation and have very little knowledge on the technical side but happy test what I can!  As an FYI, I am on a HOOBs device.

From: Bernard Gorman @.>
Sent: Saturday, February 4, 2023 6:27 AM
To: gormanb/homebridge-connector-hub @.>
Cc: knh1965 @.>; Mention @.>
Subject: Re: [gormanb/homebridge-connector-hub] Maximum of 15 blinds (Issue #5)
Hi @knh1965https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fknh1965&data=05|01||40bff09937f742ae267f08db06b3866c|84df9e7fe9f640afb435aaaaaaaaaaaa|1|0|638111140347115498|Unknown|TWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D|3000|||&sdata=ShUljPPWQe3eeIo9wXzUP46u%2BRkXkEha6eD4KxD1dg0%3D&reserved=0,
There's nothing in the plugin that enforces a limit of 15 blinds; it queries the hub for all connected devices, then creates an accessory for each one. I was under the impression that 15 was the limit - that's what we were told by the guy who installed our blinds - but some googling suggests that both the DD7002Bhttps://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.hurricaneshutterswholesale.com%2Fdooya-home-automation-smart-hub%2F&data=05|01||40bff09937f742ae267f08db06b3866c|84df9e7fe9f640afb435aaaaaaaaaaaa|1|0|638111140347115498|Unknown|TWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D|3000|||&sdata=iHtCKelc9DWmFAHbznajTJvae3P7MeVPXYMoCvllbgo%3D&reserved=0 and the DD1554https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.ismartwindow.co.nz%2FDD1554_mini_bridge.html&data=05|01||40bff09937f742ae267f08db06b3866c|84df9e7fe9f640afb435aaaaaaaaaaaa|1|0|638111140347115498|Unknown|TWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D|3000|||&sdata=Gxm16i506WqvmjiNuBNJQp7pIqI2X%2BmnNoI20coe8qk%3D&reserved=0 can both control up to 30 motors.
The only thing I can think of is that the hub may only return a maximum of 15 blinds per response. The plugin expects to receive a single message that contains everything, so if there's a second message being sent by the hub with the remaining devices, the plugin won't see it.
I only have 7 blinds myself, so I won't be able to test this theory. Would you be willing to try out some beta versions of the plugin and let me know how they behave? I'm planning to add support for multiple hubs/devices anyway, so you won't have to run two instances of the plugin anymore.
—
Reply to this email directly, view it on GitHubhttps://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fgormanb%2Fhomebridge-connector-hub%2Fissues%2F5%23issuecomment-1416750778&data=05|01||40bff09937f742ae267f08db06b3866c|84df9e7fe9f640afb435aaaaaaaaaaaa|1|0|638111140347115498|Unknown|TWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D|3000|||&sdata=xkYyeF%2B3GD7xybCBD%2BUznPX7RVH3y6mgnx2P5AgTN0c%3D&reserved=0, or unsubscribehttps://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fnotifications%2Funsubscribe-auth%2FA5M65RSQXIQ7F5JDE3CQVZTWVZKK7ANCNFSM6AAAAAAUDHKD4E&data=05|01||40bff09937f742ae267f08db06b3866c|84df9e7fe9f640afb435aaaaaaaaaaaa|1|0|638111140347115498|Unknown|TWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D|3000|||&sdata=8hLrD8qR6TbpH9z3TAEIi0Vaxe%2BTtSZuevqrRM9Bwjk%3D&reserved=0.
You are receiving this because you were mentioned.Message ID: @.***>

Hi @knh1965, apologies for the delay in responding. I've just published a beta version 1.0.8-beta.0 which has support for multiple hubs and for retrieving more than one device list from each hub, so I believe should be able to pick up the remaining blinds in your setup.  Could you please install this version and give it a try? Let me know what behaviour you observe!

It added all 37 of the blinds on the 2 hubs.  Only required one of the IP addresses in the plugin.  In adding the blinds to Home, it brought over serial numbers or some unique identifier.  Had to change all names to add them to Home as Home would not accept special characters in the name.  Thanks

Hi @gormanb. Thank you for putting this beta together. I have 17 blinds in total and all mapped through one hub.
I have been getting the following error after trying out the BETA:
[19/04/2023, 09:08:59] [homebridge-connector-hub] Failed to get position: Connector Device 3c71bf6d7bac0038
[19/04/2023, 09:08:59] [homebridge-connector-hub] Failed to get position: Connector Device 3c71bf6d7bac0039
[19/04/2023, 09:08:59] [homebridge-connector-hub] Failed to get position: Connector Device 3c71bf6d7bac0029
[19/04/2023, 09:08:59] [homebridge-connector-hub] Failed to get position: Connector Device 3c71bf6d7bac002a
[19/04/2023, 09:08:59] [homebridge-connector-hub] Failed to get position: Connector Device 3c71bf6d7bac002b
[19/04/2023, 09:08:59] [homebridge-connector-hub] Failed to get position: Connector Device 3c71bf6d7bac002c
[19/04/2023, 09:08:59] [homebridge-connector-hub] Failed to get position: Connector Device 3c71bf6d7bac002d
[19/04/2023, 09:08:59] [homebridge-connector-hub] Failed to get position: Connector Device 3c71bf6d7bac002e
[19/04/2023, 09:08:59] [homebridge-connector-hub] Failed to get position: Connector Device 3c71bf6d7bac002f
[19/04/2023, 09:08:59] [homebridge-connector-hub] Failed to get position: Connector Device 3c71bf6d7bac0030
[19/04/2023, 09:08:59] [homebridge-connector-hub] Failed to get position: Connector Device 3c71bf6d7bac0031
[19/04/2023, 09:08:59] [homebridge-connector-hub] Failed to get position: Connector Device 3c71bf6d7bac0032
[19/04/2023, 09:08:59] [homebridge-connector-hub] Failed to get position: Connector Device 3c71bf6d7bac0035
[19/04/2023, 09:08:59] [homebridge-connector-hub] Failed to get position: Connector Device 3c71bf6d7bac0036
[19/04/2023, 09:08:59] [homebridge-connector-hub] Failed to get position: Connector Device 3c71bf6d7bac0037
UnhandledPromiseRejection: This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). The promise rejected with the reason "undefined".
[19/04/2023, 09:08:59] [homebridge-connector-hub] Child bridge process ended
I am now running this as a child bridge. If i don't, it crashes the entire server. Atleast this way it just crashes itself and restarts after a few tries. It has been doing that every few minutes or so.
I renamed all my blinds but everytime it restarts it goes back to default names in homekit.
Thanks for all your efforts!

Further to above. when it finally tries 10~15 times. It runs. I can change the names in Homekit. move the blinds etc. Everything works spot on. Then at random, the same error message appears and crashes the child bridge:
UnhandledPromiseRejection: This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). The promise rejected with the reason "undefined".
[19/04/2023, 19:35:26] [homebridge-connector-hub] Child bridge process ended
[19/04/2023, 19:35:26] [homebridge-connector-hub] Process Ended. Code: 1, Signal: null
[19/04/2023, 19:35:33] [homebridge-connector-hub] Restarting Process...
I have downgraded to the last final version. That works flawlessly as direct and as a child bridge (However can only see 15 blinds).
Also reformatted my PI server. Restarted the Blinds Hub. No change. Hope this helps!

Hi @fasif07 - I've just published a new beta version, 1.0.8-beta.1, which I believe should resolve this problem. Can you give it a try and let me know if it works? @knh1965, this beta should also fix the problem you had with invalid names being generated for the devices.

Still crashing here and there, I have noticed that I am not loosing the names of first 15 in Homekit even though the child server is crashing sometimes.
Blind # 16 and Blind # 17 is defaulting back to original names and goes to the default room. Rest of them are at least saved.
[08/05/2023, 12:37:54] [homebridge-connector-hub] Updating battery: [ 'Roller Blinds 37-3c71bf6d7bac', 100 ]
Error: bind EADDRINUSE <IP_ADDRESS>
at node:dgram:359:20
at processTicksAndRejections (node:internal/process/task_queues:83:21)
at runNextTicks (node:internal/process/task_queues:64:3)
at listOnTimeout (node:internal/timers:533:9)
at processTimers (node:internal/timers:507:7)
[08/05/2023, 12:38:40] [homebridge-connector-hub] Child bridge process ended
[08/05/2023, 12:38:40] [homebridge-connector-hub] Process Ended. Code: 1, Signal: null
[08/05/2023, 12:38:47] [homebridge-connector-hub] Restarting Process...
[08/05/2023, 12:38:49] [homebridge-connector-hub] Launched child bridge with PID 17298
[08/05/2023, 12:38:49] Registering platform 'homebridge-connector-hub.ConnectorHub'
[08/05/2023, 12:38:49] [homebridge-connector-hub] Loaded homebridge-connector-hub v1.0.8-beta.1 child bridge successfully
[08/05/2023, 12:38:50] Loaded 17 cached accessories from cachedAccessories.0E309A342324.
[08/05/2023, 12:38:50] [homebridge-connector-hub] Loading accessory from cache: Connector Device 3c71bf6d7bac0029
[08/05/2023, 12:38:50] [homebridge-connector-hub] Loading accessory from cache: Connector Device 3c71bf6d7bac002a
[08/05/2023, 12:38:50] [homebridge-connector-hub] Loading accessory from cache: Connector Device 3c71bf6d7bac002b
[08/05/2023, 12:38:50] [homebridge-connector-hub] Loading accessory from cache: Connector Device 3c71bf6d7bac002c
[08/05/2023, 12:38:50] [homebridge-connector-hub] Loading accessory from cache: Connector Device 3c71bf6d7bac002d
[08/05/2023, 12:38:50] [homebridge-connector-hub] Loading accessory from cache: Connector Device 3c71bf6d7bac002e
[08/05/2023, 12:38:50] [homebridge-connector-hub] Loading accessory from cache: Connector Device 3c71bf6d7bac002f
[08/05/2023, 12:38:50] [homebridge-connector-hub] Loading accessory from cache: Connector Device 3c71bf6d7bac0030
[08/05/2023, 12:38:50] [homebridge-connector-hub] Loading accessory from cache: Connector Device 3c71bf6d7bac0031
[08/05/2023, 12:38:50] [homebridge-connector-hub] Loading accessory from cache: Connector Device 3c71bf6d7bac0032
[08/05/2023, 12:38:50] [homebridge-connector-hub] Loading accessory from cache: Connector Device 3c71bf6d7bac0033
[08/05/2023, 12:38:50] [homebridge-connector-hub] Loading accessory from cache: Connector Device 3c71bf6d7bac0034
[08/05/2023, 12:38:50] [homebridge-connector-hub] Loading accessory from cache: Connector Device 3c71bf6d7bac0035
[08/05/2023, 12:38:50] [homebridge-connector-hub] Loading accessory from cache: Connector Device 3c71bf6d7bac0036
[08/05/2023, 12:38:50] [homebridge-connector-hub] Loading accessory from cache: Connector Device 3c71bf6d7bac0037
[08/05/2023, 12:38:50] [homebridge-connector-hub] Loading accessory from cache: Connector Device 3c71bf6d7bac0038
[08/05/2023, 12:38:50] [homebridge-connector-hub] Loading accessory from cache: Connector Device 3c71bf6d7bac0039
[08/05/2023, 12:38:50] Homebridge v1.6.1 (HAP v0.11.1) (homebridge-connector-hub) is running on port 45646.
[08/05/2023, 12:38:51] [homebridge-connector-hub] Updating position: [ 'Roller Blinds 32-3c71bf6d7bac', 0 ]
[08/05/2023, 12:38:51] [homebridge-connector-hub] Updating battery: [ 'Roller Blinds 32-3c71bf6d7bac', 50 ]
[08/05/2023, 12:38:51] [homebridge-connector-hub] Periodic refresh failed: Connector Device 3c71bf6d7bac0029
[08/05/2023, 12:38:51] [homebridge-connector-hub] Periodic refresh failed: Connector Device 3c71bf6d7bac002a
[08/05/2023, 12:38:51] [homebridge-connector-hub] Periodic refresh failed: Connector Device 3c71bf6d7bac002b
[08/05/2023, 12:38:51] [homebridge-connector-hub] Periodic refresh failed: Connector Device 3c71bf6d7bac002c
[08/05/2023, 12:38:51] [homebridge-connector-hub] Periodic refresh failed: Connector Device 3c71bf6d7bac002d
[08/05/2023, 12:38:51] [homebridge-connector-hub] Periodic refresh failed: Connector Device 3c71bf6d7bac002e
[08/05/2023, 12:38:51] [homebridge-connector-hub] Periodic refresh failed: Connector Device 3c71bf6d7bac002f
[08/05/2023, 12:38:51] [homebridge-connector-hub] Periodic refresh failed: Connector Device 3c71bf6d7bac0030
[08/05/2023, 12:38:51] [homebridge-connector-hub] Periodic refresh failed: Connector Device 3c71bf6d7bac0031
[08/05/2023, 12:38:51] [homebridge-connector-hub] Updating position: [ 'Roller Blinds 33-3c71bf6d7bac', 0 ]
[08/05/2023, 12:38:51] [homebridge-connector-hub] Updating battery: [ 'Roller Blinds 33-3c71bf6d7bac', 100 ]
[08/05/2023, 12:38:51] [homebridge-connector-hub] Updating position: [ 'Roller Blinds 34-3c71bf6d7bac', 0 ]
[08/05/2023, 12:38:51] [homebridge-connector-hub] Updating battery: [ 'Roller Blinds 34-3c71bf6d7bac', 100 ]
[08/05/2023, 12:38:52] [homebridge-connector-hub] Updating position: [ 'Roller Blinds 35-3c71bf6d7bac', 100 ]
[08/05/2023, 12:38:52] [homebridge-connector-hub] Updating battery: [ 'Roller Blinds 35-3c71bf6d7bac', 100 ]
[08/05/2023, 12:38:52] [homebridge-connector-hub] Updating position: [ 'Roller Blinds 36-3c71bf6d7bac', 0 ]
[08/05/2023, 12:38:52] [homebridge-connector-hub] Updating battery: [ 'Roller Blinds 36-3c71bf6d7bac', 100 ]
[08/05/2023, 12:38:52] [homebridge-connector-hub] Updating position: [ 'Roller Blinds 37-3c71bf6d7bac', 0 ]
[08/05/2023, 12:38:52] [homebridge-connector-hub] Updating battery: [ 'Roller Blinds 37-3c71bf6d7bac', 100 ]
[08/05/2023, 12:38:52] [homebridge-connector-hub] Updating position: [ 'Roller Blinds 38-3c71bf6d7bac', 0 ]
[08/05/2023, 12:38:52] [homebridge-connector-hub] Updating battery: [ 'Roller Blinds 38-3c71bf6d7bac', 100 ]
[08/05/2023, 12:38:52] [homebridge-connector-hub] Updating position: [ 'Roller Blinds 39-3c71bf6d7bac', 0 ]
[08/05/2023, 12:38:52] [homebridge-connector-hub] Updating battery: [ 'Roller Blinds 39-3c71bf6d7bac', 100 ]
[08/05/2023, 12:38:52] [homebridge-connector-hub] Failed to get position: Connector Device 3c71bf6d7bac0029
[08/05/2023, 12:38:52] [homebridge-connector-hub] Failed to get position: Connector Device 3c71bf6d7bac002a
[08/05/2023, 12:38:52] [homebridge-connector-hub] Failed to get position: Connector Device 3c71bf6d7bac002b
[08/05/2023, 12:38:52] [homebridge-connector-hub] Failed to get position: Connector Device 3c71bf6d7bac002c
[08/05/2023, 12:38:52] [homebridge-connector-hub] Failed to get position: Connector Device 3c71bf6d7bac002d
[08/05/2023, 12:38:52] [homebridge-connector-hub] Failed to get position: Connector Device 3c71bf6d7bac002e
[08/05/2023, 12:38:52] [homebridge-connector-hub] Failed to get position: Connector Device 3c71bf6d7bac002f
[08/05/2023, 12:38:52] [homebridge-connector-hub] Failed to get position: Connector Device 3c71bf6d7bac0030
[08/05/2023, 12:38:52] [homebridge-connector-hub] Failed to get position: Connector Device 3c71bf6d7bac0031
[08/05/2023, 12:38:55] [homebridge-connector-hub] Updating position: [ 'Roller Blinds 29-3c71bf6d7bac', 0 ]
[08/05/2023, 12:38:55] [homebridge-connector-hub] Updating battery: [ 'Roller Blinds 29-3c71bf6d7bac', 100 ]
[08/05/2023, 12:38:55] [homebridge-connector-hub] Updating position: [ 'Roller Blinds 2a-3c71bf6d7bac', 0 ]
[08/05/2023, 12:38:55] [homebridge-connector-hub] Updating battery: [ 'Roller Blinds 2a-3c71bf6d7bac', 100 ]
[08/05/2023, 12:38:55] [homebridge-connector-hub] Updating position: [ 'Roller Blinds 2b-3c71bf6d7bac', 0 ]
[08/05/2023, 12:38:55] [homebridge-connector-hub] Updating battery: [ 'Roller Blinds 2b-3c71bf6d7bac', 100 ]
[08/05/2023, 12:38:55] [homebridge-connector-hub] Updating position: [ 'Roller Blinds 2c-3c71bf6d7bac', 0 ]
[08/05/2023, 12:38:55] [homebridge-connector-hub] Updating battery: [ 'Roller Blinds 2c-3c71bf6d7bac', 100 ]
[08/05/2023, 12:38:55] [homebridge-connector-hub] Updating position: [ 'Roller Blinds 2d-3c71bf6d7bac', 0 ]
[08/05/2023, 12:38:55] [homebridge-connector-hub] Updating battery: [ 'Roller Blinds 2d-3c71bf6d7bac', 100 ]
[08/05/2023, 12:38:56] [homebridge-connector-hub] Updating position: [ 'Roller Blinds 2e-3c71bf6d7bac', 0 ]
[08/05/2023, 12:38:56] [homebridge-connector-hub] Updating battery: [ 'Roller Blinds 2e-3c71bf6d7bac', 100 ]
[08/05/2023, 12:38:56] [homebridge-connector-hub] Updating position: [ 'Roller Blinds 2f-3c71bf6d7bac', 0 ]
[08/05/2023, 12:38:56] [homebridge-connector-hub] Updating battery: [ 'Roller Blinds 2f-3c71bf6d7bac', 100 ]
[08/05/2023, 12:38:56] [homebridge-connector-hub] Updating position: [ 'Roller Blinds 30-3c71bf6d7bac', 0 ]
[08/05/2023, 12:38:56] [homebridge-connector-hub] Updating battery: [ 'Roller Blinds 30-3c71bf6d7bac', 100 ]
[08/05/2023, 12:38:56] [homebridge-connector-hub] Updating position: [ 'Roller Blinds 31-3c71bf6d7bac', 0 ]
[08/05/2023, 12:38:56] [homebridge-connector-hub] Updating battery: [ 'Roller Blinds 31-3c71bf6d7bac', 50 ]
[08/05/2023, 12:45:51] [homebridge-connector-hub] Periodic refresh failed: Roller Blinds 29-3c71bf6d7bac
[08/05/2023, 12:45:51] [homebridge-connector-hub] Periodic refresh failed: Roller Blinds 2a-3c71bf6d7bac

Hi @fasif07 - I've just published 1.0.8-beta.2, which attempts to better handle the network exceptions you've observed. Please give it a try and let me know how it goes! If the exceptions persist, then this may be an issue with Homebridge itself (see e.g. https://github.com/homebridge/homebridge/wiki/Basic-Troubleshooting#error---eaddrinuse).

Hi @gormanb. Thank you for the Beta, Just installed it and watched it for the last 30 mins. So far no crashes what so ever!!! Just some failed to update positions in Yellows but no reds.
I will keep an eye and report back if the issue resurfaces again
[06/06/2023, 22:12:23] [homebridge-connector-hub] Updating battery: [ 'Roller Blinds 46-3c71bf6d7bac', 100 ]
[06/06/2023, 22:12:23] [homebridge-connector-hub] Updating battery: [ 'Roller Blinds 47-3c71bf6d7bac', 100 ]
[06/06/2023, 22:12:23] [homebridge-connector-hub] Updating battery: [ 'Roller Blinds 49-3c71bf6d7bac', 50 ]
[06/06/2023, 22:12:24] [homebridge-connector-hub] Updating battery: [ 'Roller Blinds 50-3c71bf6d7bac', 50 ]
[06/06/2023, 22:12:29] [homebridge-connector-hub] Updating battery: [ 'Roller Blinds 55-3c71bf6d7bac', 100 ]
[06/06/2023, 22:12:49] [homebridge-connector-hub] Periodic refresh failed: Roller Blinds 41-3c71bf6d7bac
[06/06/2023, 22:12:49] [homebridge-connector-hub] Periodic refresh failed: Roller Blinds 42-3c71bf6d7bac
[06/06/2023, 22:12:49] [homebridge-connector-hub] Periodic refresh failed: Roller Blinds 43-3c71bf6d7bac
[06/06/2023, 22:12:49] [homebridge-connector-hub] Periodic refresh failed: Roller Blinds 44-3c71bf6d7bac
[06/06/2023, 22:12:49] [homebridge-connector-hub] Periodic refresh failed: Roller Blinds 45-3c71bf6d7bac
[06/06/2023, 22:12:49] [homebridge-connector-hub] Periodic refresh failed: Roller Blinds 46-3c71bf6d7bac
[06/06/2023, 22:12:49] [homebridge-connector-hub] Periodic refresh failed: Roller Blinds 47-3c71bf6d7bac
[06/06/2023, 22:12:49] [homebridge-connector-hub] Periodic refresh failed: Roller Blinds 48-3c71bf6d7bac
[06/06/2023, 22:12:49] [homebridge-connector-hub] Periodic refresh failed: Roller Blinds 49-3c71bf6d7bac
[06/06/2023, 22:12:49] [homebridge-connector-hub] Periodic refresh failed: Roller Blinds 50-3c71bf6d7bac
[06/06/2023, 22:12:49] [homebridge-connector-hub] Periodic refresh failed: Roller Blinds 51-3c71bf6d7bac
[06/06/2023, 22:12:49] [homebridge-connector-hub] Periodic refresh failed: Roller Blinds 52-3c71bf6d7bac
[06/06/2023, 22:12:49] [homebridge-connector-hub] Periodic refresh failed: Roller Blinds 53-3c71bf6d7bac
[06/06/2023, 22:12:49] [homebridge-connector-hub] Periodic refresh failed: Roller Blinds 54-3c71bf6d7bac
[06/06/2023, 22:12:49] [homebridge-connector-hub] Periodic refresh failed: Roller Blinds 55-3c71bf6d7bac
[06/06/2023, 22:12:50] [homebridge-connector-hub] Periodic refresh failed: Roller Blinds 56-3c71bf6d7bac
[06/06/2023, 22:12:50] [homebridge-connector-hub] Periodic refresh failed: Roller Blinds 57-3c71bf6d7bac
[06/06/2023, 22:12:54] [homebridge-connector-hub] Periodic refresh failed: Roller Blinds 41-3c71bf6d7bac
[06/06/2023, 22:12:54] [homebridge-connector-hub] Periodic refresh failed: Roller Blinds 42-3c71bf6d7bac
[06/06/2023, 22:12:54] [homebridge-connector-hub] Periodic refresh failed: Roller Blinds 43-3c71bf6d7bac
[06/06/2023, 22:12:54] [homebridge-connector-hub] Periodic refresh failed: Roller Blinds 44-3c71bf6d7bac
[06/06/2023, 22:12:54] [homebridge-connector-hub] Periodic refresh failed: Roller Blinds 45-3c71bf6d7bac
[06/06/2023, 22:12:54] [homebridge-connector-hub] Periodic refresh failed: Roller Blinds 46-3c71bf6d7bac
[06/06/2023, 22:12:54] [homebridge-connector-hub] Periodic refresh failed: Roller Blinds 47-3c71bf6d7bac
[06/06/2023, 22:12:54] [homebridge-connector-hub] Periodic refresh failed: Roller Blinds 48-3c71bf6d7bac
[06/06/2023, 22:12:54] [homebridge-connector-hub] Periodic refresh failed: Roller Blinds 49-3c71bf6d7bac
[06/06/2023, 22:12:54] [homebridge-connector-hub] Periodic refresh failed: Roller Blinds 50-3c71bf6d7bac
[06/06/2023, 22:12:54] [homebridge-connector-hub] Periodic refresh failed: Roller Blinds 51-3c71bf6d7bac
[06/06/2023, 22:12:54] [homebridge-connector-hub] Periodic refresh failed: Roller Blinds 52-3c71bf6d7bac
[06/06/2023, 22:12:54] [homebridge-connector-hub] Periodic refresh failed: Roller Blinds 53-3c71bf6d7bac
[06/06/2023, 22:12:54] [homebridge-connector-hub] Periodic refresh failed: Roller Blinds 54-3c71bf6d7bac
[06/06/2023, 22:12:54] [homebridge-connector-hub] Periodic refresh failed: Roller Blinds 55-3c71bf6d7bac
[06/06/2023, 22:12:55] [homebridge-connector-hub] Periodic refresh failed: Roller Blinds 56-3c71bf6d7bac
[06/06/2023, 22:12:55] [homebridge-connector-hub] Periodic refresh failed: Roller Blinds 57-3c71bf6d7bac
[06/06/2023, 22:13:23] [homebridge-connector-hub] Updating battery: [ 'Roller Blinds 41-3c71bf6d7bac', 100 ]
[06/06/2023, 22:13:23] [homebridge-connector-hub] Updating battery: [ 'Roller Blinds 42-3c71bf6d7bac', 100 ]
[06/06/2023, 22:13:23] [homebridge-connector-hub] Updating battery: [ 'Roller Blinds 43-3c71bf6d7bac', 100 ]
[06/06/2023, 22:13:23] [homebridge-connector-hub] Updating battery: [ 'Roller Blinds 45-3c71bf6d7bac', 100 ]
[06/06/2023, 22:13:23] [homebridge-connector-hub] Updating battery: [ 'Roller Blinds 47-3c71bf6d7bac', 100 ]
[06/06/2023, 22:13:23] [homebridge-connector-hub] Updating battery: [ 'Roller Blinds 49-3c71bf6d7bac', 50 ]
[06/06/2023, 22:13:24] [homebridge-connector-hub] Updating battery: [ 'Roller Blinds 50-3c71bf6d7bac', 50 ]
[06/06/2023, 22:13:24] [homebridge-connector-hub] Updating battery: [ 'Roller Blinds 54-3c71bf6d7bac', 100 ]
[06/06/2023, 22:13:29] [homebridge-connector-hub] Updating battery: [ 'Roller Blinds 55-3c71bf6d7bac', 100 ]
[06/06/2023, 22:14:23] [homebridge-connector-hub] Updating battery: [ 'Roller Blinds 43-3c71bf6d7bac', 100 ]
[06/06/2023, 22:14:23] [homebridge-connector-hub] Updating battery: [ 'Roller Blinds 44-3c71bf6d7bac', 100 ]
[06/06/2023, 22:14:23] [homebridge-connector-hub] Updating battery: [ 'Roller Blinds 45-3c71bf6d7bac', 100 ]
[06/06/2023, 22:14:23] [homebridge-connector-hub] Updating battery: [ 'Roller Blinds 46-3c71bf6d7bac', 100 ]
[06/06/2023, 22:14:23] [homebridge-connector-hub] Updating battery: [ 'Roller Blinds 49-3c71bf6d7bac', 50 ]
[06/06/2023, 22:14:24] [homebridge-connector-hub] Updating battery: [ 'Roller Blinds 50-3c71bf6d7bac', 50 ]
[06/06/2023, 22:14:24] [homebridge-connector-hub] Updating battery: [ 'Roller Blinds 52-3c71bf6d7bac', 100 ]
[06/06/2023, 22:14:24] [homebridge-connector-hub] Updating battery: [ 'Roller Blinds 54-3c71bf6d7bac', 100 ]
[06/06/2023, 22:14:29] [homebridge-connector-hub] Updating battery: [ 'Roller Blinds 55-3c71bf6d7bac', 100 ]
Thank you so much once again!

Glad to hear that everything is working OK for you now, @fasif07! I'll publish release version 1.0.8 and close out this issue later today.


 I'd like to be able to use my Next Cloud folders. Is that possible?

Figured it out.


CRI validation test suite

Feature Name

One-line feature description (can be used as a release note): Provide a serial of common validation test suites for Kubelet CRI.
Primary contact (assignee): @feiskyer
Responsible SIGs: sig-node
Design proposal link (community repo): https://github.com/kubernetes-incubator/cri-tools
Reviewer(s) - (for LGTM) recommend having 2+ reviewers (at least one from code-area OWNERS file) agreed to review. Reviewers from multiple companies preferred: @Random-Liu @yujuhong @dchen1107
Approver (likely from SIG/area to which feature belongs): @dchen1107
Feature target (which target equals to which milestone):

Alpha release target 1.7

@feiskyer I helped you filing this since today is the deadline: https://groups.google.com/forum/#!topic/kubernetes-dev/JHANlDCFxOY
With this issue, all features in sig-node 1.7 roadmap: https://docs.google.com/a/google.com/spreadsheets/d/1-hADEbGEUrW04QP4bVk7xf1CWuqbFU6ulMAH1jqZQrU/edit?usp=sharing has the issue in feature repo. Thanks!

@dchen1107 Thanks a lot.

Documentation PR: https://github.com/kubernetes/community/pull/725

@feiskyer any updates for 1.8? Is this feature still on track for the release?

1.8 release process is on track at https://github.com/kubernetes-incubator/cri-tools/issues/145

@feiskyer
Any plans for this in 1.11?
If so, can you please ensure the feature is up-to-date with the appropriate:

Description
Milestone
Assignee(s)
Labels:

stage/{alpha,beta,stable}
sig/*
kind/feature

cc @idvoretskyi

@feiskyer please fill out the appropriate line item of the
1.11 feature tracking spreadsheet
and open a placeholder docs PR against the
release-1.11 branch
by 5/25/2018 (tomorrow as I write this) if new docs or docs changes are
needed and a relevant PR has not yet been opened.

@feiskyer @dchen1107 --
We're doing one more sweep of the 1.11 Features tracking spreadsheet.
Would you mind filling in any incomplete / blank fields for this feature's line item?

@justaugustus Already updated. Thanks

1.11 has been released. Let's close this one.
/close


Updatable deferred

I'm using a database that can push modifications to the client whenever data changes. It would be great to have a deferred object (or something alike) that can be resolved multiple times, in this case for every database update.
I found an Angular library that does this by adding update() and mistake() methods to deferreds.
DeferredWithUpdate.js
https://github.com/bennadel/DeferredWithUpdate.js

What about publishing intermediate results with notify() and registering a ProgressCallback on the promise?

I guess that is a solution, but it's not enough for what I need. I have to join multiple sets of data that are queryed asynchronously and I can only show results to the user when data is finally joined. For that I use a DeferredManager instance that waits until all promises are done. BUT data can change after the compiled list is shown and since I cannot re-resolve deferreds I have to do some trickery
/* class instance variable */
private Set<String> allData = new HashSet<>();

/*class method*/
Set<DataLoader> dataLoaders = mDataLoaderFactory.getDataLoaders();
Set<Promise> promiseSet = new HashSet<>();
for(DataLoader dataLoader : dataLoaders) {
    final Deferred deferred = new DeferredObject();
    dataLoader.load(new OnDataLoadedListener() {
        String previouslyLoadedData;

        // This method can be called multiple times
        void onDataLoaded(String data) {
            if(previouslyLoadedData != null) {
                allData.remove(previouslyLoadedData);
            }
            previouslyLoadedData = data;
            allData.add(data);
            if(deferred.isResolved()) {  // Seems 'hacky'
                onAllDataLoaded();
            } else {
                deferred.resolve();
            }
        }
    })
    promiseSet.add(deferred);
}

// Do something when all data sources have reported something.
// Only possible when data sources resolve the promises (not update progress).
DeferredManager dm = new DefaultDeferredManager();
dm.when(promiseSet.toArray(new Promise[]{}))
        .done(new DoneCallback() {
                @Override
                public void onDone(Object result) {
                    onAllDataLoaded();
                }
        });

private void onAllDataLoaded() {
    /* show allData to the user */
}

If there's a more clever way of waiting for all loaders to report something and keep updating the data with new updates, please let me know.
PD: After writing this, I tried to do it by using a progress listener in the promise returned by DeferredManager's when method, but even there I have no direct way of knowing if all sources have at least loaded once. I know that using a counter would be one way to go, but I think it goes against the spirit of a DeferredManager in which I can set something to be done when a series of other things are done.

I recently discovered the world of reactive programming, which was what I needed, so I'll leave this closed.


Allow deployments from UI and deprecate rest2tasks

Checklist

[x] Affected Issues have been mentioned in the Closing issues section
[ ] Documentation has been written/updated.
[x] Changelog entry has been written

API
New mutations added to the API to trigger deployments. Examples:
# Deploy latest code for an environment that already exists
mutation deployEnvironmentLatest {
  deployEnvironmentLatest (input: {
    environment: {
      name: "nginx"
      project: {
        name: "ci-nginx"
      }
    }
  })
}

# Deploy latest or specific commit for an environment that does or does not already exist
mutation deployEnvironmentBranch {
  deployEnvironmentBranch(input:{
    project: {
      name: "ci-nginx"
    }
    branchName: "nginx"
    branchRef: "b82sx9234"
  })
}

mutation deployEnvironmentPullrequest {
  deployEnvironmentPullrequest(input: {
    project: {
      name: "ci-nginx"
    }
    number: 5
    title: "111 Add New Feature"
    baseBranchName: "master"
    baseBranchRef: "origin/master"
    headBranchName: "111-add-new-feature"
    headBranchRef: "origin/111-add-new-feature"
  })
}

mutation deployEnvironmentPromote {
  deployEnvironmentPromote(input: {
    sourceEnvironment: {
      name: "source"
      project: {
        name: "ci-features"
      }
    }
    branchName:"target"
    project: {
      name:"ci-features"
    }
  })
}

In order to facilitate deployments, new information is tracked for environments and is now required when creating/updating them. Example:
"environmentByOpenshiftProjectName": {
  "id": 3,
  "openshiftProjectName": "high-cotton-master",
  "name": "Master",
  "deployType": "branch",
  "deployTitle": null,
  "deployBaseRef": "Master",
  "deployHeadRef": null
}

UI
Environments that have been configured with deployment information will have a new button on the deployments page to trigger a deploy of the latest code for that environment.

Changelog Entry

Feature - API has new mutations for triggering deployments
Change - API requires new deployment information when creating/updating environments
Improvement - UI can now trigger new deployments for environments (#838)
Change - rest2tasks is deprecated in favor of API
Closing issues
Closes #838

very nice work! just some small adaptions and unfortunately we have some conflicts now :(

I rebased to fix the conflicts, will wait for tests to come back while I test locally.

All green for me locally

ugh, another Conflict now :( @rocketeerbkw can you have another look? thank you


Shadow DOM builds

adds minified files for npm or cdn that are scoped to :host
fixes #240
todo:

[x] update docs with new import paths
[x] update docs with new cli options
[x] add tests

example of shadow.props.cyan.css:
:host {
  --cyan-0: #e3fafc;
  --cyan-1: #c5f6fa;
  --cyan-2: #99e9f2;
  --cyan-3: #66d9e8;
  --cyan-4: #3bc9db;
  --cyan-5: #22b8cf;
  --cyan-6: #15aabf;
  --cyan-7: #1098ad;
  --cyan-8: #0c8599;
  --cyan-9: #0b7285;
}

@argyleink does :where(:host) work?
I feel I tried that a few times without it actually working. But if you have a working example that is perfect :)
I could only get :host to work.

does :where(:host) work?

doesnt work in my tests either! i'll flip the bit so these files render without it again 👍🏻 thanks for helpin!

🥳


Having a TileGrid origin bottom left instead of top left

Is your feature request related to a problem? Please describe.
We have a custom tile set in British grid where we assume the origin to be Bottom Left but TileGrid API documentation states "Tile coordinates increase left to right and downwards" which sounds like the API can only accept tiles with Top Left origin, is that correct?
Describe the solution you'd like
The Openlayers API should cater for custom tiles with alternative origins such as Bottom Left rather than just Top Left. I am sure we had no issue with this in previous Openlayers versions.

TMS grids are supporting can  by specifying -y in the tile template https://openlayers.org/en/latest/examples/canvas-tiles-tms.html

Thanks for replying Mike. Would that be the "official" way to implement this custom origin?
I did find another way using our original Openlayers 3 code, but similarly modifying the y as follows:
//===========================================
my_customTileLayer = new ol.layer.Tile({
source: new ol.source.TileImage({
extent: my_customBounds,
projection: my_bng_projection,
tileGrid: new ol.tilegrid.TileGrid({
origin: [my_customBounds[0], my_customBounds[1]],
resolutions: my_customResolutions
}),
tileUrlFunction: function(tileCoord, pixelRatio, projection) {
var z = tileCoord[0];
var x = tileCoord[1];
var y = -tileCoord[2]-1;   //= Rather than: var y = tileCoord[2];
...etc.
//===========================================

Either is acceptable, these example use the same tileset:
The {-y} placeholder works when the tiles fit into the height of the tilegrid extent, no need to specify an origin, but you may need to specify a layer extent to deal with overflow https://codesandbox.io/s/simple-forked-j34e1?file=/main.js
If you have tiles overflowing the grid extent you need will need a tileUrlFunction.  The origin must be specified but a layer extent will not be needed https://codesandbox.io/s/simple-forked-o33ko?file=/main.js

Thanks again. The 2nd example you gave is more or less the implementation I already developed so I will keep to that.

I'll close this assuming your issue is resolved.


Add EventConfigurator to index.php

Q
A

Is bugfix?
❌

New feature?
✔

Breaks BC?
❌

Tests pass?
✔

👍


⚠ API (search) has degraded performance

In 6294918, API (search) (https://api.dev.package-search.services.jetbrains.com/search-packages) experienced degraded performance:

HTTP code: 200
Response time: 5408 ms

Resolved: API (search) performance has improved in 840c1c6 after 7 minutes.


Multiplexing between subscription operation not handled properly

Description:
The graphql-transport-ws/graphql-ws subprotocol allows multiplexing a single WebSocket between multiple subscription operations. Each subscription operation is uniquely identified by a unique id generated by the client.
The subscription operation in ballerina graphql doesn't handle this multiplexing operation properly. In the current implementation,
the socket connection is closed whenever there is a websocket_complete message (to stop specific subscription) recived or when there is an error while executing the subscription operation. Closing the socket will terminate all the other subscription operations requested by the client.
According to this spec, the socket should not be closed But no further messages should be sent to that specific(completed/error-occurred) subscription operation.
Steps to reproduce:
Affected Versions:
OS, DB, other environment details and versions:
Related Issues (optional):

Suggested Labels (optional):

Suggested Assignees (optional):

We need to fix this and port the fix to the 1.4.x versions (2201.2.x branch) as well.


AsyncPromises get retrigerred when defined on BrButtons that are part of a gtView tha requires scrolling

You can replicate with code sample below, if you scroll up, down, and then back up, promises are not cached but re-run.
buttonFactory := [
    | button |
    button := BrButton new
    aptitude: BrGlamorousButtonWithLabelAptitude.
    button asyncPromise promise: [(20 atRandom * 100) milliSeconds wait.
        "(String loremIpsum: 1000) substrings atRandom" 42.
        ] asAsyncPromise.
    button withAsyncPromiseDo: [ :anElementPromise |
        anElementPromise whenSuccess: [ :anElement :succeededPromise |
            anElement label: succeededPromise ] ].
    button
].
view := GtPhlowProtoView new columnedList
        title: 'Test';
        column: 'Number' text: [:aNumber| aNumber];
        column: 'Squared' text: [:aNumber| aNumber **2];
        column: 'Buttons' icon: [buttonFactory value];
        items: (1 to:60).
    view columns first weight: 0.2.
    view columns second weight: 0.2.
    view columns third weight: 0.6.
view

Understanding the relation between BlElements & promises a bit better, I need to keep track of a promise in the element's view model or somewhere else so that fulfilled promises can be re-used and not calculated every time element gets re-used/re-added to scene graph. Don't consider this a bug anymore. Closing.


SPEC: propose erroring on overlapping files in tar

Tar has this pretty sad property that dentries can appear multiple times in the same file. I was thinking it would be rather pragmatic to just say this is always an error and advise executors to reject such files.
Thoughts?

It's a great property when tar is used to actually store on tape! :)
+1 on this. My approach would be to reject any ACI that does not strictly follow the format (manifest must be a regular file, rootfs must be a directory, error on any extraneous top-level files).

+1, we have been dancing a little around the fact that the tar stuff is slightly underspecified, this is as good a place to start as any for being stricter/clearer.

Fixed by #186, thanks.


[Documentation] Examples of Authentication with providers

in the current version I don't find the examples to auth with providers(Google, Facebook, GitHub, etc..). Can create a examples/ in this repo with authentication examples? I can contribute with this ?
My plan is create some examples using firebase-admin library to Python+Flask API. Today don't have these examples with Firebase.

This is not intended to be used as a client library, but instead for privileged admin accounts. To verify clients making requests against your servers, there are a few common practices:

Have the client pass their current auth token and use verify_id_token
Have the client write to the Realtime Database and use security rules to verify authentication (don't allow write in not authenticated). Have the server listen on the path for adds and process the requests. (This is a great method for reducing your server stack, see firebase-queue)
Utilize Functions, which provide built-in access to user identity in same triggers (e.g. RTDB events).

Sorry but my goal is different that you mentioned above. I would like use the firebase as database for my API. I have an API created with Python + Flask + Auth0. In this API we use MongoDB as database. I found some alternatives using JavaScript and Python but this is not a good implementation in my opinion [1]. In that case Firebase  can't used as Database to an API ? I would like use this library but I don't see much advantages in Firebase Auth if I can't use this with Python. My flow followin below:
MongoDB <=> Python API(Auth0) <=> Mobile App IOS/Android and Web. I run all services in GCP.
I can change from MongoDB and Auth0 to Firebase stack ?
[1] https://github.com/fthai-google/template-app/blob/master/main.py

@katowulf your recommendations are JavaScript projects why I'll use JavaScript if have a SDK to Python ? this is a repository to Python not JavaScript if this is don't offer this access from Python maybe the Python community can't use Firebase. Maybe the good alternative is continue using the Auth0 service and MongoDB.

@hiranya911 What are goal of this SDK if don't offer the same features of Node.JS and Go SDK ? I would like use Firebase in my Python APIs because have the Authentication and Database in the same service. Do you can provide any example or explain more. I'll create a post my blog about this SDK if works like Node and Go.

@katowulf is right. The Admin SDKs do not support authenticating as end users (this is same across all languages we support; Node and Go don't support it either). The Admin SDKs should only be used in privileged environments, and therefore supports authenticating with service accounts and other types of Google Cloud credentials.
However, you claim that your workflow is something like the following:
MongoDB <=> Python API(Auth0) <=> Mobile App IOS/Android and Web. I run all services in GCP.

Now this is something Admin SDK supports. But you need to do the end user authentication in your mobile or web app, and pass the resulting ID token to the Python service. There, the admin SDK can call verify_id_token() (as @katowulf mentioned), and then you can proceed to access the database on behalf of the user.

Perfect. Thanks for explain the flow recommended. I'll implement and test. Have a good one.


Remove hardhat-etherscan as its been deprecated in

favour of hardhat-verify.
hardhat-toolbox includes hh-verify.
Add arb sepolia to custom networks for verification functionality.

Nice! Will this break the --verify flat when running the npx hardhat functions-deploy-consumer command or does that still work as expected?

Nice! Will this break the --verify flat when running the npx hardhat functions-deploy-consumer command or does that still work as expected?

nope-- WAI with CLI commands. See for example this verified contract on Op Sep
https://sepolia-optimistic.etherscan.io/address/0x8eb0561Ace3168930Cc698885A9e0904280cd77b#code


Operator overloading for Mobject "Integer"

Already possible:
num= Integer(0)
num.set_value(2)

Nice to have:
num= Integer(0)
num += 2

This should be done for DecimalNumber, which is the base for Integer.

I submitted a modification supporting these operators - everything goes through the set_value() method so all should be well with it functioning properly.

Stale and already has a PR

https://github.com/ManimCommunity/manim/pull/2311


self.update_ema_every set but never used

In denoising_diffusion_pytorch/denoising_diffusion_pytorch.py
class Trainer takes an argument update_ema_every = 10, and sets self.update_ema_every = update_ema_every but then this is not used. self.ema.update() is called every step.
Suggested fix:
if self.step != 0 and self.step % self.update_ema_every == 0:
    self.ema.update()

EDIT: I see ema_pytorch can take in update_every, so a better fix is to switch self.ema = EMA(diffusion_model, beta = ema_decay) with self.ema = EMA(diffusion_model, beta = ema_decay, update_every=self.update_ema_every).
Not sure if this is just a temporary issue due to the EMA bits being partly moved to ema_pytorch but figured I should point it out in case it got missed :)

@johnowhitaker oh yes Jonathan, you are correct https://github.com/lucidrains/denoising-diffusion-pytorch/commit/75ea49a7eff6e5b5a922f0fa2a9a2b06eab137be :pray:


[Transaction List v2] - "Send to" action missing

This PR closes #1874, by adding the TxInfoDetails where missing.

Travis automatic deployment:
https://pr1879--safereact.review.gnosisdev.com/rinkeby/app

It looks good to me:
A comparison how it was broken in 1781 and how it is fixed here in 1879
1781:

1879:


Add PowerShell unit test cases for when service principals are passed into scubagear

🗣 Description
closes #169
Added additional unit test to cover passing/processing of service principal parameters.
💭 Motivation and context
Unit test cases were added to increase coverage.
🧪 Testing
Executed PowerShell unit test, all passed

✅ Pre-approval checklist

[X] This PR has an informative and human-readable title.
[X] PR targets the correct parent branch (e.g., main or release-name) for merge.
[X] Changes are limited to a single goal - eschew scope creep!
[X] Changes are sized such that they do not touch excessive number of files.
[X] All future TODOs are captured in issues, which are referenced in code comments.
[X] These code changes follow the ScubaGear content style guide.
[X] Related issues these changes resolve are linked preferably via closing keywords.
[X] All relevant type-of-change labels added.
[X] All relevant project fields are set.
[X] All relevant repo and/or project documentation updated to reflect these changes.
[X] Unit tests added/updated to cover PowerShell and Rego changes.
[X] Functional tests added/updated to cover PowerShell and Rego changes.
[X] All relevant functional tests passed.
[X] All automated checks (e.g., linting, static analysis, unit/smoke tests) passed.

✅ Pre-merge checklist

[ ] PR passed smoke test check.

[ ] Feature branch has been rebased against changes from parent branch, as needed
Use Rebase branch button below or use this reference to rebase from the command line.

[ ] Resolved all merge conflicts on branch

[ ] Notified merge coordinator that PR is ready for merge via comment mention

✅ Post-merge checklist

[ ] Feature branch deleted after merge to clean up repository.
[ ] Verified that all checks pass on parent branch (e.g., main or release-name) after merge.

Your edits and the new test file looks good. I ran the pester tests but got the following error:
Get-ChildItem : Cannot find path
'C:\Users\rgbrow\ScubaGear\PowerShell\ScubaGear\Testing\Unit\PowerShell\PowerShell\ScubaGear\Sample-Config-Files'
because it does not exist.
At
C:\Users\rgbrow\ScubaGear\PowerShell\ScubaGear\Testing\Unit\PowerShell\Support\Copy-ScubaSampleConfigFile.Tests.ps1:5
char:25
+ ... pleFiles = (Get-ChildItem PowerShell/ScubaGear/Sample-Config-Files).N ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (C:\User    s\rgbrow...le-Config-Files:String) [Get-ChildItem]    ,
ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.P    owerShell.Commands.GetChildItemCommand

All tests pass, none fail.
Also, this branch is currently out of date with main.
When the error gets resolved (it may be on my side, I'm not sure) and the branch gets updated, this is ready to be approved.

@nanda-katikaneni  PR is ready to merge with main


requirements file

Hello!
Could you please provide a requirement file for baselines? In case one do not want to run it on google colab, or at least how to extract it from colab :)
Thank you!

A little confused. What do you mean the requirement files for baselines? Do you mean something like demo.py?

Hi, We are putting one together, I will add to the repo when finished. Thanks!

I made requirements.txt as follows:
opencv-python
imageio
MoviePy
pygame
git+https://github.com/votchallenge/vot-toolkit-python
tqdm
torch
numpy

Hi,
Sorry it's not practical to have a requirements.txt that covers all of the baselines, can we instead suggest using something like pipreqs? This should be able to export the required libraries for any of the baselines.
Thanks!


Add installation requirements

I took these requirements from the google colab example.
ru-clip will now be a proper python package. It can be installed with:
pip install .

or
poetry install

I also suggest to publish the package to PyPI.

Right now the python package name is clip. I suggest to rename it to ru-clip.


Pulse type

Add a feature for pulse (aka 'cash draw kick-out') variations.
feature:
  pulseStandard: true/false
  pulseBel: true/false

By my reading, most printers use the ESC p m t1 t2 ("pulse") command, while Citizen printers are using a single BEL character instead.
--

http://keyhut.com/popopen.htm
python-escpos/python-escpos#179

As far as I understand the keyhut-source we should also specify the parameters t1 and t2.

The keyhut.com website seems to suggest that t1/t2 are somehow related to the printer; it seems that this is wrong, right?
The website also sometimes lists codes that do not fit into the scheme (standard/bel). Should we assume that they are right?

This is correct- t1/t2/pin number depend on the cash drawer and how it's connected, not the printer. Most of the differences in the table are the m t1 t2 arguments, which need to be exposed to the user with some good defaults.
For the pin selection, it also doesn't matter whether you send chr(48) (ASCII "0") or chr(0) over the wire, they are equivalent.
It would be good to validate the unusual ones against some documentation, but there's only a few of them, so I'm not sure it's worth the effort. ESC p m t1 t2 vs BEL will get 90% plus coverage.

Plotted out as a tree to get an idea for the number of printers using each command type.

(I can't speak for how these work, just drawing the keyhut link above)

So let's go with the two standard variations. If the use case arises, we can still add a way to specify a custom command. My guess is that since the keyhut site allows submission, there is some incorrect information there too.


[Backport 2.3] Creating new cluster using Aliyun generates API error 400 while allocating EIP

https://github.com/rancher/rancher/issues/15847

Version:
rancher/rancher:master-head  04/13  commit id: 419b87a70
Create two Aliyun ECS clusters with different EIP Charge Type (Pay By Bandwidth or Pay By Traffic). The cluster can be created successfully, and all containers and pods under the system project are healthy and some workloads can be successfully created in the default project
Test passed, Close it.


Fix how we collect tax forms

Our current approach to collecting tax forms (W9 and W8-BEN/E) is broken. We missed getting these forms from a significant number of people in 2018, despite investing a lot of time and effort. We need to improve for 2019.
Why this is important:
Open Collective risks not being in IRS compliance, and our users will have trouble filing their own taxes if we don't issue them a 1099.
Requirements:

Users who invoice over >$600 must provide us a tax form (this does not apply for receipt reimbursements - more details here).
We need a way to clearly determine if they owe us a form, and have road blocks in place so we don't pay their expense if they have not submitted the tax form when required.

Current process:

Tax form bot makes a comment on all expenses that push a user over the $600 threshold (regardless of if it's an invoice or receipt)
The user gets this notification and follows the instructions
They select the correct form and email it to<EMAIL_ADDRESS>Alanna manually downloads these and uploads them to the tax form dropbox folders
If someone over the threshold does not have a tax form on file, we hold off paying their expenses
At the end of the year, we do a big data export of all users who have been paid >$600, and Alanna manually goes through them to see if we have their form
Alanna manually emails the people who we should have a form for but don't
Some reply with the form, some do not
The accountants to their best to issue the required 1099s but many fall through the cracks

Problems:

System does not differentiate between invoice and receipt expenses, but only invoice payments count toward the $600 limit
Tax form bot only posts on one expense, but users might have many expenses, so it's not a reliable signal for the host admin to look out for the tax bot's comment
Checking if someone has a form on file is a totally manual process, prone to error
Sometimes people have different names attached to their tax ID, user account, and email account, including pseudonyms, company names, multiple personal names, etc—very hard to confirm if we have the form on file to match the Open Collective user account
Sometimes people are paid even when their form has not been submitted
If they have already been paid, we have no leverage to get them to respond to our request for the tax form
Users are often confused about which form they need to file and how to answer some of the questions (especially W8 BEN-E)
At the end of the year, we don't have all the forms we need to be in IRS compliance

Ideas for solutions

Make the system differentiate between invoices and expenses so we can separate that data
Clearly flag if a user has hit the threshold and if we have their tax form on file - disallow paying out their expense if they don't have the right flag
Have the user to submit the form through Open Collective, automatically associated with their user account, so we don't have to match up their tax name and their user name, which are often different

Potential workflow

When user submits an expense (not on expense approval, see #1305) that puts them over the $600 threshold, they get a warning message saying they need to submit a tax form and that we've sent them an email with details
A red flag is put on their account, disabling payouts for invoice expenses (but not receipt reimbursements)
They get an email with details about the required tax form, and a button that says "upload your form"
That button takes them to a page on Open Collective where they submit the form
The host admin is notified and they check the form and approve it if it's valid
User gets a green flag and their expense can be paid
At the end of the year, we export all the required tax form for the accountants at once

Related issues:

#1386 shows screenshots of a third party service we could use
#1167 includes a design that would seperate out invoices from expense reimbursements

We've been kicking this (and our very old expense flow) down the road for too long. It's boring and it doesn't bring more money, but it's important.

Added another example of a third party system for automating this (from HelloSign) in #1386
@znarf - would it be possible for you to look into this and estimate how much work it would take to integrate?
I think we could potentially do a manual-assisted process using the free version, if we don't want to invest in integration.
https://www.hellosign.com/products/helloworks

@Betree this is the big hairy tax forms issue I mentioned to you. It would be great if a dev could look into scope/feasibility of integrating a third party solution like the ones mentioned here, or we could work together on another solution.

@pietgeursen I head back from the accountant - we need to collect a new tax form each year from each person who hits the threshold for that year.

Ok good to know!
On Thu, 30 May 2019, 9:20 PM Alanna<EMAIL_ADDRESS>wrote:

@pietgeursen https://github.com/pietgeursen I head back from the
accountant - we need to collect a new tax form each year from each person
who hits the threshold for that year.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/opencollective/opencollective/issues/1774?email_source=notifications&email_token=ACQRI6QJVL4GBKEN4CPVMMTPX6L7BA5CNFSM4G3BBGI2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGODWR2TCA#issuecomment-497265032,
or mute the thread
https://github.com/notifications/unsubscribe-auth/ACQRI6VTEYA2VUZZWQAFV7LPX6L7BANCNFSM4G3BBGIQ
.

Update after speaking with a couple other US-based fiscal hosts: They really only pay out receipt reimbursements so this feature won't be relevant to them.
One definitely would not appreciate the system automatically requesting tax forms from people who go over $600 in receipt reimbursements but don't actually owe them a form, and when they do need to collect a W9 they have their own systems (integrated via QuickBooks across all their payables not just OC payouts).
So, in conclusion, we should just build this for Open Source Collective for now.

I've been studying this and I think Alanna's proposal is on point.
It sounds like this feature must only be available for Open Source Collective.
I've taken Alanna's proposal and tweaked it slightly:
MVP

When user submits any invoice that takes their total for the year over $600 (just ignore the expense case for now.) then:
A red flag is put on their account
They get an email with details about the required tax form, and a button that says "upload your form"
That button takes them to a page on Open Collective where they submit the form
The flag is visible in the host dashboard and if the host tries to approve an expense, they get a warning that they can override.
The host admin is notified and they check the form and approve it if it's valid
There's somewhere for the host to go and set the flag to 'approved' for that user. (could be forest or somewhere sensible in the ui)
At the end of the year, we export all the required tax form for the accountants at once

What about HelloWorks
Hello works is kinda like google forms, if the results of the form input could then be automatically added to a pdf template.
This seemed really promising: We could make a beautiful flow that asks just the right questions, depending if they're a US person etc and then it generates a nice pdf at the end. They even have a template for the W9. But we would need to make our own W8BEN. I looked at their example code for their W9. It's 1700 lines and not really worth it to try and learn whatever they're doing. I don't think how to do this is even documented.
I don't think this is an option.
What about HelloSign
Advantages:

We might get better engagement / higher response rates because filling out forms on HellosSign is really easy.
We could automate some things:

When the user crosses the threshold, we hit the HelloSign api. They get an email.
When they've signed, HelloSign hits our server with a link to the signed document. It can also email the host at the same time.
We could probably remove the manual validation step by the host as HelloSign does form validations for you.

Probably faster to build?
There's an official hellosign node module that might save a little time.
Cost is actually minimal, $13 a month.

Disadvantages:

Vendor lock in?

Now that I've written this, I actually think we should use HelloSign.

Thanks for that @pietgeursen
Helloworks has a form builder UI, so I could build the forms and workflows, no code required. If we think there's a benefit to proving Helloworks' nice flow experience, form building should not be the blocker. That way, we could send everyone to the same flow from our app and they answer questions and work their way through a decision tree providing the info we need.
I'm open to using HelloSign instead. It would be quite a different experience, where they have to figure out for themselves what form to use, and then fill it out in the ugly and confusing IRS PDF formats, but at least all online. We do get a fair few people writing to us confused about which form to use and how to fill it out (especially between W8-BEN and W8 BEN-E), which could be lessened by walking them through it step by step, but I don't think that's the most important problem we're trying to solve.
Another option would be to just build it ourselves. It's actually a really simple workflow that we could accomplish with a form on our site natively. It could ask you a couple questions, then give you the link to the form to download, fill out, and sign, and a button to upload the signed version. If we wanted to avoid vendor lock-in, this would be the way to go. Even if it were really ugly and basic, it would be 100x better than our current system.
The most important things to solve is making sure we ask for forms from people who need to submit them, provide them a functional way to do that, and mark in our system if they have one on file so we don't pay them without it. Either Helloworks or HelloSign, or a DIY solution, could accomplish this.
@pietgeursen should I have a go at designing the DIY form option, so you can see how complex or simple it is from a programming perspective? Or do you reckon a 3rd party system is the way to go.

@alanna

Helloworks has a form builder UI, so I could build the forms and workflows, no code required.

Yeah, I saw the form builder when I was looking at their example w9. In the form builder they had a warning for the component that displays one path or another depending on the selection. It said something along the lines of "this component must be used with the code builder." And then there were 1700 lines of code.
If we can build what we need only in the form builder that would be great. That might mean re-implementing the w9 rather than just using their version.
We need to check if HelloWorks supports the ability to populate either the w8 or the w9 pdf based on user input. Because it might assume you're only trying to populate one pdf.

Or do you reckon a 3rd party system is the way to go.

At this point yes.

Specs seem good, would be nice indeed to have an estimation of how much time it would take to integrate with HelloWorks or HelloSign VS homemade.

@pietgeursen and I are moving forward with HelloWorks for the moment, because I figured out how to create the workflow we need without code. There are a lot of details to it so it will take me some time to complete, but so far testing is going well. We're also researching HelloSign if it turns out HelloWorks doesn't do what we need.

I've created a [project)(https://github.com/opencollective/opencollective/projects/21) that breaks up the tasks into smaller pieces.
I'd appreciate @Betree  having a look over the tickets I created in case there are better ways to do things.

I have completed a draft of the full tax form workflow, and it's ready for testing. There are likely still small tweaks to be made. You can launch it here. Feel free to fill it out - this doesn't send the data anywhere yet, just captures it in HelloWorks.
Testing  notes:

This form flow collects the data for W9, W8BEN and W8BENE depending on the options you select.
When testing, decide on a test case (ex. overseas company or US individual) and go start to finish. Certain options trigger other questions to appear, but unselecting those options doesn't cause those extra questions to disappear, so if you go back and change earlier answers you'll be left with irrelevant questions at the end.
This form covers the use case of every tax form we've ever had submitted. However, form W8BENE is also used by heaps of other types of entities we don't interact with and including them would be hugely complex. I have stated in the form that if you don't fit one of the three common classification options (active NFFE, passive NFFE, or nonprofit), not to submit the form and to contact us. I don't think this will ever actually come up, but that's why it only lists 3 out of like 30 possible FATCA classifications.

@pietgeursen @piamancini please test if you get a chance.

great! We are starting the expense flow wireframes process soon, so will be great to have this tested before and incorporate. We should also add a flag to enable users to differentiate between invoices and reimbursements.

@pietgeursen Regarding the cards:

Create a hook that gets triggered when the user's invoice total for the year crosses $600 for an enabled host.

A daily (or hourly) job would be appropriate. This is a process that can be delayed and run asynchronously without slowing down the main thread.

Add a new table to the db that can track the tax form for a user account

This one seems good, we'll be able to easily extend that if we need to collect other documents in the future. I'd decouple that from the notion of tax ; something like a LegalDocuments table (and document_link instead of tax_form_link) and a type column could bring more genericity at a little cost (eg. type=W9, type=IDENTITY_PAPERS,type=COMPANY_CERTIFICATE...etc).
Example: if a host require collectives admins to provide their IDs, we can easily extend the table just by using a different type.
I wonder if we shouldn't user collective_id instead of user_id, that we we could collect documents for collectives too. @znarf you recently advocated that we should do that for applications, does that stand here too?

Should we rip out the Tax Bot?

Regarding the fact that tax bot publishes public comments on expenses, it won't be able to show private links to the user. We should probably replace it by an email, or a notification bar that stays on top of the page until the form is submitted if we really want to push it agressively :slightly_smiling_face:

Should we rip out the Tax Bot?
Once this is done, yes.

something like a LegalDocuments table

Good idea. Have used that.

and a type column could bring more genericity at a little cost

Also used that too.

I wonder if we shouldn't user collective_id instead of user_id

Yep, good call. Did that too.
Thanks @Betree

This is what I could find about good practice and compliance to store SSN (social security numbers): https://security.stackexchange.com/questions/143235/what-is-the-best-practice-industry-standard-for-storing-documents-with-social
Amazon S3 is PCI compliant. But as a good practice, we should encrypt the documents that we store and keep the private key away from S3.

Ok so, PR for the main chunk of work is up for review.
When it is merged:

@alanna and I will work to manually update the db for people who have already submitted tax forms for this year.
This PR for the frontend will be able to flag expenses that need a tax form.
Once a few other details (s3 buckets, pdf encryption) have been sorted, then this PR can be merged which will turn on the cron job so that users get sent an email from hello works.


Building via Make

What is the proper way to build via Make? At this point, I get an error due to kubecfg missing, but, then, which version of kubecfg should I fetch?
Everything installs properly via go get, but that does not allow me to install a specific version of ksonnet, which is my requirement.
I apologize, but I'm not experienced much with the Go toolchain.

So, I figured out that I need to do go get -d before running make, but then I get this errro:
$ go get -d
$ make
go build -ldflags="-X main.version=dev-2017-10-23T08:04:10-0700 "  .
# _/Users/nkolev/Downloads/ksonnet-0.5.0
./main.go:36:19: cannot use logFmt (type "github.com/ksonnet/kubecfg/vendor/github.com/sirupsen/logrus".Formatter) as type "github.com/sirupsen/logrus".Formatter in argument to "github.com/sirupsen/logrus".SetFormatter:
	"github.com/ksonnet/kubecfg/vendor/github.com/sirupsen/logrus".Formatter does not implement "github.com/sirupsen/logrus".Formatter (wrong type for Format method)
		have Format(*"github.com/ksonnet/kubecfg/vendor/github.com/sirupsen/logrus".Entry) ([]byte, error)
		want Format(*"github.com/sirupsen/logrus".Entry) ([]byte, error)
./main.go:40:8: undefined: cmd.ErrDiffFound
make: *** [kubecfg] Error 2

Please, excuse my go ignorance, something that I'm doing incorrectly is probably beyond obvious, but I'm trying to build asdf plugins for all ksonnet tools, and I'm blocked on this.

@nikolay, apologies but the ksonnet tool hasn't had an official release yet. The releases you were seeing resulted from Github's "import" feature when creating the ksonnet/ksonnet project from ksonnet/kubecfg last week. We've fixed this issue now (by removing the bad releases), and will update the README shortly.
I'd advise you to use the ksonnet/kubecfg releases for the time being, as ksonnet/ksonnet is still in development phase.

@jessicayuen Thank you!


Optimize binary packed encoding

This PR optimizes the encoding of values with DELTA_BINARY_PACKED.
These optimizations should have a wide effect since the encoding is used for DELTA_BYTE_ARRAY and DELTA_LENGTH_BYTE_ARRAY, the latter being the default encoding for string value in parquet.
The optimization comes in two forms:

improve the pure Go implementation by working on 32 or 64 bits values instead of setting individual bits, making the algorithm O(numValues) instead of O(numValues*bitWidth)
when available, leverage SIMD instructions of AVX2 to increase throughput further

Description
The parquet format claims that delta encoding of integer values is derived from Decoding billions of integers per second through vectorization, tho after careful reading of the paper and related implementation in https://github.com/lemire/FastPFor, it appeared that there were many differences between the two.
First, encoding of values was not investigated in depth. The paper glanced over it and the FastPFor code had a trivial implementation. The paper focused on using SEE instructions, which left a lot of opportunities on the table to leverage AVX2 (e.g. using variable bit shifts of vector registers via VPSLLVD) and simplifies the algorithms (no need to write a custom version of for each bit width that values are getting packed into).
I ended having to reinvent an algorithm for generic vectorization of bit-packing, tho it applies only on bit width 0 to 16 (see miniBlockPackInt32x3to16bits). Since delta encoding is intended to encode values that are nearby in distance, I expect the current code to be effective in practice. Future research can be done to optimize delta encoding of larger deltas.
The parquet format differed in few other ways from the paper. For example, the paper uses vectorized prefix sum computation by performing deltas on groups of 4 integers, but the parquet format requires deltas to be computed between consecutive elements. As determined in the paper, after vectorizing the encoding of values, the next bottleneck was the computation of deltas, so I had to figure out an algorithm to optimize this process as well (see blockDeltaInt32AVX2).
The rest of the subroutines are optimizations that rely on the knowledge that blocks are of constant size. If we were to modify the block size in the future (or make it configurable), we could keep it a multiple of the current block size to be able to reuse the functions introduced in this PR.
Since there is a lot of added complexity here, I invested time in adding thorough testing, including to validate the behavior of subroutines of the algorithm.
Benchmarks
I chose to invest time in optimizing DELTA_BINARY_PACKED because it showed up as the busiest code path and main bottleneck in many benchmarks, especially after the landing the optimizations from #199
The following snapshots show the comparison of encoding throughput from the main branch:

with -tags=purego

name                                             old time/op   new time/op    delta
Encode/DELTA_BINARY_PACKED/int32                   219µs ± 0%      69µs ± 0%   -68.42%  (p=0.000 n=10+9)
Encode/DELTA_BINARY_PACKED/int64                   229µs ±11%      70µs ± 0%   -69.38%  (p=0.000 n=10+9)
Encode/DELTA_LENGTH_BYTE_ARRAY/byte_array          352µs ± 0%     238µs ± 0%   -32.43%  (p=0.000 n=9+9)
Encode/DELTA_BYTE_ARRAY/byte_array                 690µs ± 0%     551µs ± 0%   -20.18%  (p=0.000 n=8+8)
Encode/DELTA_BYTE_ARRAY/fixed_length_byte_array    397µs ± 0%     359µs ± 0%    -9.58%  (p=0.000 n=10+9)

name                                             old speed     new speed      delta
Encode/DELTA_BINARY_PACKED/int32                 183MB/s ± 0%   578MB/s ± 0%  +216.68%  (p=0.000 n=10+9)
Encode/DELTA_BINARY_PACKED/int64                 350MB/s ±10%  1139MB/s ± 0%  +225.42%  (p=0.000 n=10+9)
Encode/DELTA_LENGTH_BYTE_ARRAY/byte_array        410MB/s ± 0%   607MB/s ± 0%   +48.00%  (p=0.000 n=9+9)
Encode/DELTA_BYTE_ARRAY/byte_array               210MB/s ± 0%   262MB/s ± 0%   +25.28%  (p=0.000 n=8+8)
Encode/DELTA_BYTE_ARRAY/fixed_length_byte_array  403MB/s ± 0%   445MB/s ± 0%   +10.59%  (p=0.000 n=10+9)

name                                             old value/s   new value/s    delta
Encode/DELTA_BINARY_PACKED/int32                   45.6M ± 0%    144.5M ± 0%  +216.68%  (p=0.000 n=10+9)
Encode/DELTA_BINARY_PACKED/int64                   43.8M ±10%    142.4M ± 0%  +225.42%  (p=0.000 n=10+9)
Encode/DELTA_LENGTH_BYTE_ARRAY/byte_array          28.4M ± 0%     42.0M ± 0%   +48.00%  (p=0.000 n=9+9)
Encode/DELTA_BYTE_ARRAY/byte_array                 14.5M ± 0%     18.2M ± 0%   +25.28%  (p=0.000 n=8+8)
Encode/DELTA_BYTE_ARRAY/fixed_length_byte_array    25.2M ± 0%     27.8M ± 0%   +10.58%  (p=0.000 n=10+9)

with AVX2 optimized code paths

name                                             old time/op   new time/op    delta
Encode/DELTA_BINARY_PACKED/int32                   219µs ± 0%      10µs ± 0%    -95.57%  (p=0.000 n=10+8)
Encode/DELTA_BINARY_PACKED/int64                   229µs ±11%      29µs ± 0%    -87.57%  (p=0.000 n=10+10)
Encode/DELTA_LENGTH_BYTE_ARRAY/byte_array          352µs ± 0%     183µs ± 0%    -48.16%  (p=0.000 n=9+10)
Encode/DELTA_BYTE_ARRAY/byte_array                 690µs ± 0%     445µs ± 0%    -35.55%  (p=0.000 n=8+9)
Encode/DELTA_BYTE_ARRAY/fixed_length_byte_array    397µs ± 0%     277µs ± 0%    -30.21%  (p=0.000 n=10+8)

name                                             old speed     new speed      delta
Encode/DELTA_BINARY_PACKED/int32                 183MB/s ± 0%  4118MB/s ± 0%  +2155.74%  (p=0.000 n=10+8)
Encode/DELTA_BINARY_PACKED/int64                 350MB/s ±10%  2807MB/s ± 0%   +701.72%  (p=0.000 n=10+10)
Encode/DELTA_LENGTH_BYTE_ARRAY/byte_array        410MB/s ± 0%   792MB/s ± 0%    +92.90%  (p=0.000 n=9+10)
Encode/DELTA_BYTE_ARRAY/byte_array               210MB/s ± 0%   325MB/s ± 0%    +55.17%  (p=0.000 n=8+9)
Encode/DELTA_BYTE_ARRAY/fixed_length_byte_array  403MB/s ± 0%   577MB/s ± 0%    +43.29%  (p=0.000 n=10+8)

name                                             old value/s   new value/s    delta
Encode/DELTA_BINARY_PACKED/int32                   45.6M ± 0%   1029.5M ± 0%  +2155.76%  (p=0.000 n=10+8)
Encode/DELTA_BINARY_PACKED/int64                   43.8M ±10%    350.9M ± 0%   +701.71%  (p=0.000 n=10+10)
Encode/DELTA_LENGTH_BYTE_ARRAY/byte_array          28.4M ± 0%     54.7M ± 0%    +92.90%  (p=0.000 n=9+10)
Encode/DELTA_BYTE_ARRAY/byte_array                 14.5M ± 0%     22.5M ± 0%    +55.17%  (p=0.000 n=8+9)
Encode/DELTA_BYTE_ARRAY/fixed_length_byte_array    25.2M ± 0%     36.1M ± 0%    +43.29%  (p=0.000 n=10+8)

name                                          old time/op  new time/op  delta
GenericWriter/benchmarkRowType/go1.18         7.46µs ± 2%  7.37µs ± 1%    -1.23%  (p=0.007 n=10+10)
GenericWriter/booleanColumn/go1.18            1.24µs ± 4%  1.20µs ± 0%    -2.89%  (p=0.000 n=10+8)
GenericWriter/int32Column/go1.18              23.5µs ± 2%   2.4µs ± 0%   -89.78%  (p=0.000 n=8+9)
GenericWriter/int64Column/go1.18              2.26µs ± 0%  2.25µs ± 0%    -0.71%  (p=0.000 n=8+10)
GenericWriter/floatColumn/go1.18              2.01µs ± 0%  1.99µs ± 1%    -0.93%  (p=0.000 n=10+10)
GenericWriter/doubleColumn/go1.18             2.55µs ± 0%  2.56µs ± 1%      ~     (p=0.670 n=10+10)
GenericWriter/byteArrayColumn/go1.18          60.3µs ± 0%  46.1µs ± 1%   -23.48%  (p=0.000 n=9+10)
GenericWriter/fixedLenByteArrayColumn/go1.18  15.3µs ± 1%  15.3µs ± 1%      ~     (p=0.782 n=10+10)
GenericWriter/stringColumn/go1.18             36.6µs ± 1%  32.0µs ± 0%   -12.48%  (p=0.000 n=9+9)
GenericWriter/indexedStringColumn/go1.18       114µs ± 1%   113µs ± 1%    -0.57%  (p=0.028 n=9+10)
GenericWriter/uuidColumn/go1.18               44.3µs ± 0%  33.6µs ± 1%   -24.22%  (p=0.000 n=10+10)
GenericWriter/mapColumn/go1.18                 894µs ± 2%   891µs ± 2%      ~     (p=0.393 n=10+10)
GenericWriter/decimalColumn/go1.18            2.26µs ± 1%  2.24µs ± 0%    -0.51%  (p=0.017 n=10+10)
GenericWriter/contact/go1.18                  49.7µs ± 1%  49.6µs ± 1%      ~     (p=0.529 n=10+10)

name                                          old row/s    new row/s    delta
GenericWriter/benchmarkRowType/go1.18           134M ± 2%    136M ± 1%    +1.24%  (p=0.007 n=10+10)
GenericWriter/booleanColumn/go1.18              807M ± 4%    830M ± 0%    +2.89%  (p=0.000 n=10+9)
GenericWriter/int32Column/go1.18               42.6M ± 2%  416.4M ± 0%  +878.06%  (p=0.000 n=8+9)
GenericWriter/int64Column/go1.18                442M ± 0%    445M ± 0%    +0.73%  (p=0.000 n=8+10)
GenericWriter/floatColumn/go1.18                499M ± 0%    503M ± 1%    +0.94%  (p=0.000 n=10+10)
GenericWriter/doubleColumn/go1.18               392M ± 0%    391M ± 1%      ~     (p=0.739 n=10+10)
GenericWriter/byteArrayColumn/go1.18           16.6M ± 0%   21.7M ± 1%   +30.69%  (p=0.000 n=9+10)
GenericWriter/fixedLenByteArrayColumn/go1.18   65.4M ± 1%   65.3M ± 1%      ~     (p=0.796 n=10+10)
GenericWriter/stringColumn/go1.18              27.3M ± 1%   31.2M ± 0%   +14.25%  (p=0.000 n=9+9)
GenericWriter/indexedStringColumn/go1.18       8.77M ± 1%   8.82M ± 1%    +0.57%  (p=0.028 n=9+10)
GenericWriter/uuidColumn/go1.18                22.6M ± 0%   29.8M ± 1%   +31.96%  (p=0.000 n=10+10)
GenericWriter/mapColumn/go1.18                 1.12M ± 2%   1.12M ± 2%      ~     (p=0.393 n=10+10)
GenericWriter/decimalColumn/go1.18              443M ± 1%    446M ± 0%    +0.51%  (p=0.023 n=10+10)
GenericWriter/contact/go1.18                   20.1M ± 1%   20.2M ± 1%      ~     (p=0.529 n=10+10)

Please take a look and let me know if you have any questions.

The encodings are part of the parquet spec and documented at https://github.com/apache/parquet-format/blob/master/Encodings.md
This seems to be a similar to the protobuf documents. Do you think it is useful or did you picture something different?

Ah, I assumed from "encoding of values was not investigated in depth" and "ended having to reinvent an algorithm for generic vectorization of bit-packing" that the packed format was left unspecified and you added new optimizations there. Maybe not.

The parquet spec specifies how the bits need to be laid out, but we have some flexibility on how to write the program that generates it. I tried to document details about the implementation choices in the source code, the rest should be found in the public specification of parquet encodings.


website resources - community blog

@kramasamy - as discussed, added website resources community blog post section with 2 blog posts.

:+1:


Add GDPR notice if you would collect the user's email address and track their activities

Since we store the user's email address and track their activities on the site. it is important to respect GDPR by adding a notice to prompt the user, especially for users from the EU.
TODO:
Create a simple GDPR consent form. They will see a banner prompting them to accept cookies until they click accept. Afterward, we can begin tracking their activities on the site.

Done!


Add cljs tests to travis

Add lein-doo plugin to run cljs tests. This is the new recommended
approach.
Update project.clj to add cljsbuild config
Update .travis.yml file to run cljs tests as well.

To run do:
$ lein do javac, doo phantom test-build once
Note that you'll need phantomjs installed for above to work.
Fixed #77

Thanks, this is really helpful. Before I can merge this in, I'll need you to sign a contributor agreement (sent to your email). Contributor agreements put the project on a sound legal foundation and protect users/developers.

@nathanmarz Signed and sent.

The Travis cljs build is failing for some reason, perhaps a timeout of some sort. Had to disable the cljs tests for now and opened #190 to track it.


Clicking on Notification doesn't fire actions in iOS 10

Expected Behaviour
When the user receives a notification and click on it and the application is closed or in background the app should open a page with the information refered to the notification.
If the app is running it should create an alert message and then the user can choose if he wants to see or ignore the notification details
Actual Behaviour
After installing the app and allowing notifications, when the app is open or in backgroung, it works like the expected behaviour, but after closing the application I still received the notifications but when I click on it, it only opens the app, it doesn't execute any of the actions I create. Even with the app opened or in background the expected behavior stop working.
Reproduce Scenario (including but not limited to)
Just need to install the app and then close it. The expected behavior stop working after that.
Steps to Reproduce
Just need to install the app and then close it. The expected behavior stop working after that.
Platform and Version (eg. Android 5.0 or iOS 9.2.1)
iOS 10.2 and iOS 10.2.1
(Android) What device vendor (e.g. Samsung, HTC, Sony...)
Cordova CLI version and cordova platform version
6.4.0
Plugin version
1.9.2
Sample Push Data Payload
{ "tokens": ["****"],
"profile": "****",
"notification": {
"title": "Let's Run Away",
"message": "Roteiro: Madrid",
"payload": { "postID": "1561584567277854524" },
"ios": { "sound": "default" },
"android": { "sound": "default" }
}
}

Sample Code that illustrates the problem
this.push.register().then((t: PushToken) => {
      return this.push.saveToken(t);
    }).then((t: PushToken) => {
      console.log('Token saved:', t.token);
      });

      this.push.rx.notification()
      .subscribe((msg) => {
        let postID = msg.payload["postID"];
        let post = true;

        let postMessage = msg.text;

        //if user using app and push notification comes
        if (!msg.app.asleep && !msg.app.closed) {
          // if application open, show popup
            let confirmAlert = this.alertCtrl.create({
              title: msg.title,
              message: postMessage,
              buttons: [{
                text: 'Ignorar',
                role: 'cancel',
                handler: data => {
                  Mixpanel.track("Ignorou notificação");
                }
              }, {
                text: 'Abrir',
                handler: () => {
                  Mixpanel.track("Abriu notificação-App Aberta");
                  this.LRAPage.getPreferedPost(postID).subscribe(response => {
                    this.navCtrl.push(PostPage, {item: response});
                  });
                }
              }]
            });
            confirmAlert.present();

        } else {

            this.LRAPage.getPreferedPost(postID).subscribe(response => {
              this.navCtrl.push(PostPage, {item: response});
            });
        }
      });

Logs taken while reproducing problem
N/A (I can only receive notifications when the application was installed from TestFlight, and I don't know how to see logs here)

@joaodmsoares the code that you are using to register for push notifications doesn't look like it uses this plugin. Can you give me some more information on how you are registering?

I'm using the plugin with ionic and I just reproduced their example: https://docs.ionic.io/services/push/

@joaodmsoares right, well you need to open an issue on the Ionic forums. I wish I had the time to setup everything for testing an Ionic app but I don't and they have the right people to answer your question. Sorry.


It stopped working

I need help!!
I stopped running the plugin and change settings and PHP.
{
"codeformatter_php_options": {
"php_path": "C:/xampp/php/php.exe"
}
}
although this PHP environment variables.
Error:

I have the same problem since today for javascript

I will fix it asap

Thank you very much will be careful.

Make sure you go update your user settings file after this package is updated. Mine was using the pre-3.0 settings file, which the 3.0 version wasn't using properly. Copy the new default settings file over and re-do your settings, including adding your path to PHP in the new user settings file.

@EdwinPalacios @holgerh I've tested on Windows 7 x64 and plugin works fine. Can you show me your config file?

Had the same problem for javascript. Copying new default settings into my user settings fixed it.

Had the same problem for javascript. Copying new default settings into my user settings fixed it.

I have Windows 10 pro 64 bits

Removing (or commenting out) User settings fixes the problem for me.
(Preferences > Package Settings > CodeFormatter > Settings - User)

works not for me, too :-)

Am 20.01.2016 um 15:48 schrieb joshwyrick<EMAIL_ADDRESS>Removing (or commenting out) User settings fixes the problem for me.
(Preferences > Package Settings > CodeFormatter > Settings - User)
—
Reply to this email directly or view it on GitHub.

What is final decision? Works or not?

works for me after deleting my old user-settings

Am 20.01.2016 um 16:49 schrieb Avtandil Kikabidze<EMAIL_ADDRESS>What is final decision? Works or not?
—
Reply to this email directly or view it on GitHub.

On OSX El Capitan PHP formatting doesn't work anymore. I've tried setting my path to many of my php locations but it doesn't do anything. I currently have two php 5.6 versions installed but I use my homebrew one because it updates itself easily.
When I do "which php" I get my homebrew php path and when I do php -v I get
php -v
PHP 5.6.0RC2 (cli) (built: Jul 31 2014 19:31:51)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.6.0-dev, Copyright (c) 1998-2014 Zend Technologies

@01271 what is result of which php command?

"Removing (or commenting out) User settings fixes the problem for me."
this worked for me too

@01271 try "Removing (or commenting out) User settings fixes the problem for me."

with the command that is my result. and I tried it on my other pc pro with Windows 10 and 64 bits nor php 7.0.1
which php
/c/xampp/php/php

My user settings file is completely blank, there's nothing in it.

Copy content from default setrings file

Still unresolved, all my settings have been copy pasted and no change.
here are my preferences
{
"codeformatter_php_options": {
"syntaxes": "php", // Syntax names which must process PHP formatter
"php_path": "/usr/local/opt/php56/bin/php",
"format_on_save": false, // Format on save
"psr1": false, // Activate PSR1 style
"psr1_naming": false, // Activate PSR1 style - Section 3 and 4.3 - Class and method names case
"psr2": true, // Activate PSR2 style
"indent_with_space": 4, // Use spaces instead of tabs for indentation
"enable_auto_align": true, // Enable auto align of = and =>
"visibility_order": true, // Fixes visibiliy order for method in classes - PSR-2 4.2
"smart_linebreak_after_curly": true, // Convert multistatement blocks into multiline blocks
// Enable specific transnformations. Example: ["ConvertOpenTagWithEcho", "PrettyPrintDocBlocks"]
// You can list all available transnformations from command palette: CodeFormatter: Show PHP Transformations
"passes": [],
// Disable specific transnformations
"exclude": []
},
"codeformatter_js_options": {
"syntaxes": "javascript,json", // Syntax names which must process JS formatter
"format_on_save": false, // Format on save
"indent_size": 4, // indentation size
"indent_char": " ", // Indent character
"indent_with_tabs": false, // Indent with one tab (overrides indent_size and indent_char options)
"eol": "\n", // EOL symbol
"preserve_newlines": false, // whether existing line breaks should be preserved,
"max_preserve_newlines": 10, // maximum number of line breaks to be preserved in one chunk
"space_in_paren": false, // Add padding spaces within paren, ie. f( a, b )
"space_in_empty_paren": false, // Add padding spaces within paren if parent empty, ie. f(  )
"e4x": false, // Pass E4X xml literals through untouched
"jslint_happy": false, // if true, then jslint-stricter mode is enforced. Example function () vs function()
"brace_style": "collapse", // "collapse" | "expand" | "end-expand". put braces on the same line as control statements (default), or put braces on own line (Allman / ANSI style), or just put end braces on own line.
"keep_array_indentation": false, // keep array identation.
"keep_function_indentation": false, // keep function identation.
"eval_code": false, // eval code
"unescape_strings": false, // Decode printable characters encoded in xNN notation
"wrap_line_length": 0, // Wrap lines at next opportunity after N characters
"break_chained_methods": false, // Break chained method calls across subsequent lines
"end_with_newline": false, // Add new line at end of file
"comma_first": false // Add comma first
},
"codeformatter_css_options": {
"syntaxes": "css,less", // Syntax names which must process CSS formatter
"format_on_save": false, // Format on save
"indent_size": 4, // Indentation size
"indent_char": " ", // Indentation character
"indent_with_tabs": false, // Indent with one tab (overrides indent_size and indent_char options)
"selector_separator_newline": false, // Add new lines after selector separators
"end_with_newline": false, // Add new line of end in file
"newline_between_rules": false, // Add new line between rules
"eol": "\n" // EOL symbol
},
"codeformatter_scss_options": {
"syntaxes": "scss", // Indentation size
"format_on_save": false, // Format on save
"indent_size": 2, // Indentation size
"indent_char": " ", // Indentation character
"indent_with_tabs": false, // Indent with one tab (overrides indent_size and indent_char options)
"selector_separator_newline": true, // Add new lines after selector separators
"end_with_newline": true // Add new line of end in file
},
"codeformatter_html_options": {
"syntaxes": "html,asp,xml", // Syntax names which must process HTML formatter
"format_on_save": false, // Format on save
"indent_size": 4, // indentation size
"indent_char": " ", // Indentation character
"indent_with_tabs": false, // Indent with one tab (overrides indent_size and indent_char options)
"preserve_newlines": false, // Preserve existing line-breaks
"max_preserve_newlines": 10, // Maximum number of line-breaks to be preserved in one chunk
"indent_tags": "html|head|body|div|nav|ul|ol|dl|li|table|thead|tbody|tr|th|td|blockquote|select|form|option|optgroup|fieldset|legend|label|header|section|aside|footer|figure|video|datalist|keygen|audio|embed|source|track|output|article|bdi|details|dialog|figcaption|main|mark|menuitem|meter|nav|progress|rp|rt|ruby|summary|time|wbr" // List of tags (defaults to indent) that should be reformatted. Example "div|p|li|table"
},
"codeformatter_python_options": {
"syntaxes": "python", // Syntax names which must process Python formatter
"format_on_save": false, // Format on save
"indent_size": 1, // indentation size
"indent_with_tabs": true, // Indent with tabs or spaces
"max_char": 80, // Width of output lines in characters.
"assignment": " = ", // This is how the assignment operator is to appear.
"function_param_assignment": "=", // This is how function-parameter assignment should appear.
"function_param_sep": ", ", // This is how function parameters are separated.
"list_sep": ", ", // This is how list items are separated.
"subscript_sep": "=", // This is how subscripts are separated.
"dict_colon": ": ", // This separates dictionary keys from values.
"slice_colon": ":", // this separates the start:end indices of slices.
"comment_prefix": "# ", // This is the sentinel that marks the beginning of a commentary string.
"shebang": "#!/usr/bin/env python", // Hashbang, a line-one comment naming the Python interpreter to Unix shells.
"boilerplate": "", // Standard code block (if any). This is inserted after the module doc string on output.
"blank_line": "", // This is how a blank line is to appear (up to the newline character).
"keep_blank_lines": true, // If true, preserve one blank where blank(s) are encountered.
"add_blank_lines_around_comments": true, // If true, set off comment blocks with blanks.
"add_blank_line_after_doc_string": true, // If true, add blank line after doc strings.
"max_seps_func_def": 3, // Split lines containing longer function definitions.
"max_seps_func_ref": 5, // Split lines containing longer function calls.
"max_seps_series": 5, // Split lines containing longer lists or tuples.
"max_seps_dict": 3, // Split lines containing longer dictionary definitions.
"max_lines_before_split_lit": 2, // Split string literals containing more newline characters.
"left_margin": "", // This is how the left margin is to appear.
"normalize_doc_strings": false, // If true, normalize white space in doc strings.
"leftjust_doc_strings": false, // If true, left justify doc strings.
"wrap_doc_strings": false, // If true, wrap doc strings to max_char.
"leftjust_comments": false, // If true, left justify comments.
"wrap_comments": false, // If true, wrap comments to max_char.
"double_quoted_strings": false, // If true, use quotes instead of apostrophes for string literals.
"single_quoted_strings": false, // If true, use apostrophes instead of quotes for string literals.
"can_split_strings": false, // If true, longer strings are split at the max_char.
"doc_tab_replacement": "....", // This literal replaces tab characters in doc strings and comments.
// Optionally preserve unassigned constants so that code to be tidied
// may contain blocks of commented-out lines that have been no-op'ed
// with leading and trailing triple quotes.  Python scripts may declare
// constants without assigning them to a variables, but CodeFormatter
// considers this wasteful and normally elides them.
"keep_unassigned_constants": false,
// Optionally omit parentheses around tuples, which are superfluous
// after all.  Normal CodeFormatter behavior will be still to include them
// as a sort of tuple display analogous to list displays, dict
// displays, and yet-to-come set displays.
"parenthesize_tuple_display": true,
// When CodeFormatter splits longer lines because max_seps
// are exceeded, the statement normally is closed before the margin is
// restored.  The closing bracket, brace, or parenthesis is placed at the
// current indent level.  This looks ugly to "C" programmers.  When
// java_style_list_dedent is True, the closing bracket, brace, or
// parenthesis is brought back left to the indent level of the enclosing
// statement.
"java_style_list_dedent": false
},
"codeformatter_vbscript_options": {
"syntaxes": "vbscript", // Syntax names which must process VBScript formatter
"format_on_save": false, // Format on save
"indent_size": 1, // indentation size
"indent_char": "\t", // Indentation character
"indent_with_tabs": true, // Indent with one tab (overrides indent_size and indent_char options)
"preserve_newlines": true, // Preserve existing line-breaks
"max_preserve_newlines": 10, // Maximum number of line-breaks to be preserved in one chunk
"opening_tags": "^(Function .|Sub .|If .* Then|For .|Do While .|Select Case.)", // List of keywords which open a new block
"middle_tags": "^(Else|ElseIf . Then|Case .*)$", // List of keywords which divide a block, but neither open or close the block
"closing_tags": "(End Function|End Sub|End If|Next|Loop|End Select)$" // List of keywords which close an open block
},
}

I've found a solution and was put in the user configuration the syntaxis package.
"codeformatter_php_options": {
      "syntaxes": "php",
      "php_path": "C:/xampp/php/php.exe"
}

for some reason does not take the default settings.

Adding  "syntaxes": "php" worked for me too. Thanks a lot!

Ok well, upgrading from php 5.6 to php 7 worked... It shouldn't needed that step but thankfully I don't have a workplace where I require a specific php version.

commenting out User settings worked for me (JavaScript)

Adding the "syntaxes" configuration option to codeformatter user settings seems to work! No need to add all configuration options, only the ones you override, but syntaxes apparently needs to be included.

I have the same problem as @01271  on OSX El Capitan.
I get the error :
PHP needs to be a minimum version of PHP 5.6.0
I have added the options
"syntaxes": "php", // Syntax names which must process PHP formatter
"php_path": "/usr/local/php5/bin/php", // Path for PHP executable, e.g. "/usr/lib/php"

"which php" on terminal gives me:

/usr/local/php5/bin/php

"php -v" in terminal gives me :

PHP 7.0.2 (cli) (built: Jan  8 2016 10:14:20) ( NTS )

https://github.com/akalongman/sublimetext-codeformatter/issues/181#issuecomment-194391900

+EdwinPalacios that right.
"codeformatter_php_options": {
"syntaxes": "php",
"php_path": "C:/xampp/php/php.exe"
}
this is problem!!


Presets integration (close #26)

[Current coverage][cc-pull] is 65.86%

Merging [#55][cc-pull] into [master][cc-base-branch] will increase coverage by 2.89%

@@             master        #55   diff @@
==========================================
  Files            13         13
  Lines           451        457     +6
  Methods           0          0
  Messages          0          0
  Branches          0          0
==========================================
+ Hits            284        301    +17
+ Misses          132        121    -11
  Partials         35         35

Powered by Codecov. Last updated by [226c76a...e078f85][cc-compare]
[cc-base-branch]: https://codecov.io/gh/snickers/snickers/branch/master?src=pr
[cc-compare]: https://codecov.io/gh/snickers/snickers/compare/226c76a4a7427c81b3f68d21cc7933c9c075716e...e078f85149da4100143e3807902927d49ca28246?src=pr
[cc-pull]: https://codecov.io/gh/snickers/snickers/pull/55?src=pr


Support for Docker version 18.06.1-ce

I tried to run the scan for all local docker images. My docker daemon is Docker version 18.06.1-ce. I get the below error.
Will there be too much of a difference between 1.40 and 1.38 to not support ?
root@services-test:~# docker --version
Docker version 18.06.1-ce, build e68fc7a

root@services-test:~# ./divd-2021-00038--log4j-scanner scan-image --local
divd-2021-00038--log4j-scanner by DTACT
http://github.com/dtact/divd-2021-00038--log4j-scanner
--------------------------------------
[ ] Currently scanning , checked 0 images in 00h:00m:00s.
[!] Error identifying application: Error response from daemon: client version 1.40 is too new. Maximum supported API version is 1.38

root@services-test:~# cat /etc/os-release
NAME="RancherOS"
VERSION=v1.5.0
ID=rancheros
ID_LIKE=
VERSION_ID=v1.5.0
PRETTY_NAME="RancherOS v1.5.0"
HOME_URL="http://rancher.com/rancher-os/"
SUPPORT_URL="https://forums.rancher.com/c/rancher-os"
BUG_REPORT_URL="https://github.com/rancher/os/issues"
BUILD_ID=

Could you test the latest version (from source), https://github.com/dtact/divd-2021-00038--log4j-scanner/commit/95350653359d9d92bf829a03d1a190b7e4bf6845 should fix this issue.

Thanks! built from latest version.👍🏽