WIP - Storage mgmt

Description
This PR allows listing files in a primary storage (for KVM, VMWare & XenServer hypervisors) and secondary storage (via SSVM). We also link the templates, snapshots and volumes with the files in the UI.
This will also help to list files which are not in cloudstack db but left over due to some failed action.

Implementation Overview
We send a command to endpoint for a datastore (SSVM for secondary storage and Hypervisor manager or hosts) to list files at a path. Using the answer, we link tempate id, snapshot id and volume id by querying the database and send the response.
Commands Added

Command - listImageStoreObjects
params

id - id of the image store
path - path to list on image store

Command - listStoragePoolObjects
params

id - id of the storage pool
path - path to list on storage pool

Response
List response containing the following keys:

name - Name of the data store object
isdirectory - Is it a directory
size - Size is in Bytes
templateid - Template ID associated with the data store object
format - Format of template associated with the data store object
snapshotid - Snapshot ID associated with the data store object
volumeid - Volume ID associated with the data store object
lastupdated - Last modified date of the file/directory

Types of changes

[ ] Breaking change (fix or feature that would cause existing functionality to change)
[x] New feature (non-breaking change which adds functionality)
[ ] Bug fix (non-breaking change which fixes an issue)
[ ] Enhancement (improves an existing feature and functionality)
[ ] Cleanup (Code refactoring and cleanup, that may add test cases)

Feature/Enhancement Scale or Bug Severity
Feature/Enhancement Scale

[x] Major
[ ] Minor

Bug Severity

[ ] BLOCKER
[ ] Critical
[ ] Major
[ ] Minor
[ ] Trivial

Screenshots (if appropriate):
How Has This Been Tested?

@blueorangutan package

@vishesh92 a [SF] Jenkins job has been kicked to build packages. It will be bundled with  KVM, XenServer and VMware SystemVM templates. I'll keep you posted as I make progress.

@blueorangutan test

@vishesh92 a [SF] Trillian-Jenkins test job (centos7 mgmt + kvm-centos7) has been kicked to run smoke tests

@vishesh92 could you describe in detail what your PR is doing, what it is adding, what is changing, the use case for it, and so on?

[SF] Trillian test result (tid-7646)
Environment: kvm-centos7 (x2), Advanced Networking with Mgmt server 7
Total time taken: 43855 seconds
Marvin logs: https://github.com/blueorangutan/acs-prs/releases/download/trillian/pr7949-t7646-kvm-centos7.zip
Smoke tests completed. 113 look OK, 0 have errors, 0 did not run
Only failed and skipped tests results shown below:

Test
Result
Time (s)
Test File

[SF] Trillian Build Failed (tid-7648)

[SF] Trillian Build Failed (tid-7649)

@GutoVeronezi I have updated the PR description with more details. I will add the screenshots for the UI in a while.

@blueorangutan package

@vishesh92 a [SF] Jenkins job has been kicked to build packages. It will be bundled with  KVM, XenServer and VMware SystemVM templates. I'll keep you posted as I make progress.

Packaging result [SF]: :heavy_check_mark: el7 :heavy_check_mark: el8 :heavy_check_mark: el9 :heavy_check_mark: debian :heavy_check_mark: suse15. SL-JID 7000

@blueorangutan package

@vishesh92 a [SF] Jenkins job has been kicked to build packages. It will be bundled with  KVM, XenServer and VMware SystemVM templates. I'll keep you posted as I make progress.

Packaging result [SF]: :heavy_check_mark: el7 :heavy_check_mark: el8 :heavy_check_mark: el9 :heavy_check_mark: debian :heavy_check_mark: suse15. SL-JID 7010

@blueorangutan package

@vishesh92 a [SF] Jenkins job has been kicked to build packages. It will be bundled with  KVM, XenServer and VMware SystemVM templates. I'll keep you posted as I make progress.

Packaging result [SF]: :heavy_check_mark: el7 :heavy_check_mark: el8 :heavy_check_mark: el9 :heavy_check_mark: debian :heavy_check_mark: suse15. SL-JID 7013

@blueorangutan package

@vishesh92 a [SF] Jenkins job has been kicked to build packages. It will be bundled with  KVM, XenServer and VMware SystemVM templates. I'll keep you posted as I make progress.

Packaging result [SF]: :heavy_check_mark: el7 :heavy_check_mark: el8 :heavy_check_mark: el9 :heavy_check_mark: debian :heavy_check_mark: suse15. SL-JID 7058

@blueorangutan package

@vishesh92 a [SF] Jenkins job has been kicked to build packages. It will be bundled with  KVM, XenServer and VMware SystemVM templates. I'll keep you posted as I make progress.

Packaging result [SF]: :heavy_check_mark: el7 :heavy_check_mark: el8 :heavy_check_mark: el9 :heavy_check_mark: debian :heavy_check_mark: suse15. SL-JID 7069

@blueorangutan test matrix

@vishesh92 a [SF] Trillian-Jenkins matrix job (centos7 mgmt + xenserver71, rocky8 mgmt + vmware67u3, centos7 mgmt + kvmcentos7) has been kicked to run smoke tests

[SF] Trillian test result (tid-7699)
Environment: xenserver-71 (x2), Advanced Networking with Mgmt server 7
Total time taken: 43173 seconds
Marvin logs: https://github.com/blueorangutan/acs-prs/releases/download/trillian/pr7949-t7699-xenserver-71.zip
Smoke tests completed. 112 look OK, 2 have errors, 0 did not run
Only failed and skipped tests results shown below:

Test
Result
Time (s)
Test File

test_01_browser_migrate_template
Error
0.00
test_image_store_object_migration.py

test_03_cancel_host_maintenace_with_migration_jobs_failure
Error
1597.88
test_host_maintenance.py

@blueorangutan package

@vishesh92 a [SF] Jenkins job has been kicked to build packages. It will be bundled with  KVM, XenServer and VMware SystemVM templates. I'll keep you posted as I make progress.

Packaging result [SF]: :heavy_check_mark: el7 :heavy_check_mark: el8 :heavy_check_mark: el9 :heavy_check_mark: debian :heavy_check_mark: suse15. SL-JID 7075

@blueorangutan test

@vishesh92 a [SF] Trillian-Jenkins test job (centos7 mgmt + kvm-centos7) has been kicked to run smoke tests

[SF] Trillian test result (tid-7703)
Environment: kvm-centos7 (x2), Advanced Networking with Mgmt server 7
Total time taken: 44317 seconds
Marvin logs: https://github.com/blueorangutan/acs-prs/releases/download/trillian/pr7949-t7703-kvm-centos7.zip
Smoke tests completed. 113 look OK, 1 have errors, 0 did not run
Only failed and skipped tests results shown below:

Test
Result
Time (s)
Test File

test_01_browser_migrate_template
Failure
15.33
test_image_store_object_migration.py

@blueorangutan package

@vishesh92 a [SF] Jenkins job has been kicked to build packages. It will be bundled with  KVM, XenServer and VMware SystemVM templates. I'll keep you posted as I make progress.

Packaging result [SF]: :heavy_multiplication_x: el7 :heavy_multiplication_x: el8 :heavy_multiplication_x: el9 :heavy_multiplication_x: debian :heavy_multiplication_x: suse15. SL-JID 7086

@blueorangutan package

@vishesh92 a [SF] Jenkins job has been kicked to build packages. It will be bundled with  KVM, XenServer and VMware SystemVM templates. I'll keep you posted as I make progress.

Packaging result [SF]: :heavy_multiplication_x: el7 :heavy_multiplication_x: el8 :heavy_multiplication_x: el9 :heavy_multiplication_x: debian :heavy_multiplication_x: suse15. SL-JID 7087

@blueorangutan package

@vishesh92 a [SF] Jenkins job has been kicked to build packages. It will be bundled with  KVM, XenServer and VMware SystemVM templates. I'll keep you posted as I make progress.

Packaging result [SF]: :heavy_multiplication_x: el7 :heavy_multiplication_x: el8 :heavy_multiplication_x: el9 :heavy_multiplication_x: debian :heavy_multiplication_x: suse15. SL-JID 7089

@blueorangutan package

@vishesh92 a [SF] Jenkins job has been kicked to build packages. It will be bundled with  KVM, XenServer and VMware SystemVM templates. I'll keep you posted as I make progress.

@blueorangutan package

Packaging result [SF]: :heavy_multiplication_x: el7 :heavy_multiplication_x: el8 :heavy_multiplication_x: el9 :heavy_multiplication_x: debian :heavy_multiplication_x: suse15. SL-JID 7090

@blueorangutan package

@vishesh92 a [SF] Jenkins job has been kicked to build packages. It will be bundled with  KVM, XenServer and VMware SystemVM templates. I'll keep you posted as I make progress.

Packaging result [SF]: :heavy_check_mark: el7 :heavy_check_mark: el8 :heavy_check_mark: el9 :heavy_check_mark: debian :heavy_check_mark: suse15. SL-JID 7091

@blueorangutan package

@vishesh92 a [SF] Jenkins job has been kicked to build packages. It will be bundled with  KVM, XenServer and VMware SystemVM templates. I'll keep you posted as I make progress.

Packaging result [SF]: :heavy_multiplication_x: el7 :heavy_multiplication_x: el8 :heavy_multiplication_x: el9 :heavy_multiplication_x: debian :heavy_multiplication_x: suse15. SL-JID 7115

@blueorangutan package

@vishesh92 a [SF] Jenkins job has been kicked to build packages. It will be bundled with  KVM, XenServer and VMware SystemVM templates. I'll keep you posted as I make progress.

Packaging result [SF]: :heavy_multiplication_x: el7 :heavy_multiplication_x: el8 :heavy_multiplication_x: el9 :heavy_multiplication_x: debian :heavy_multiplication_x: suse15. SL-JID 7116

@blueorangutan package

@vishesh92 a [SF] Jenkins job has been kicked to build packages. It will be bundled with  KVM, XenServer and VMware SystemVM templates. I'll keep you posted as I make progress.

Packaging result [SF]: :heavy_check_mark: el7 :heavy_check_mark: el8 :heavy_check_mark: el9 :heavy_check_mark: debian :heavy_check_mark: suse15. SL-JID 7117

@blueorangutan package

@vishesh92 a [SF] Jenkins job has been kicked to build packages. It will be bundled with  KVM, XenServer and VMware SystemVM templates. I'll keep you posted as I make progress.

Packaging result [SF]: :heavy_multiplication_x: el7 :heavy_multiplication_x: el8 :heavy_multiplication_x: el9 :heavy_multiplication_x: debian :heavy_multiplication_x: suse15. SL-JID 7121

@blueorangutan package

@vishesh92 a [SF] Jenkins job has been kicked to build packages. It will be bundled with  KVM, XenServer and VMware SystemVM templates. I'll keep you posted as I make progress.

@blueorangutan package

@vishesh92 a [SF] Jenkins job has been kicked to build packages. It will be bundled with  KVM, XenServer and VMware SystemVM templates. I'll keep you posted as I make progress.

Packaging result [SF]: :heavy_check_mark: el7 :heavy_check_mark: el8 :heavy_check_mark: el9 :heavy_check_mark: debian :heavy_check_mark: suse15. SL-JID 7144

@blueorangutan package

Packaging result [SF]: :heavy_check_mark: el7 :heavy_check_mark: el8 :heavy_check_mark: el9 :heavy_check_mark: debian :heavy_check_mark: suse15. SL-JID 7196

@blueorangutan package

@kiranchavala a [SF] Jenkins job has been kicked to build packages. It will be bundled with  KVM, XenServer and VMware SystemVM templates. I'll keep you posted as I make progress.

Packaging result [SF]: :heavy_check_mark: el7 :heavy_check_mark: el8 :heavy_check_mark: el9 :heavy_check_mark: debian :heavy_check_mark: suse15. SL-JID 7235

@blueorangutan package

@blueorangutan package

@vishesh92 a [SF] Jenkins job has been kicked to build packages. It will be bundled with  KVM, XenServer and VMware SystemVM templates. I'll keep you posted as I make progress.

Packaging result [SF]: :heavy_check_mark: el7 :heavy_check_mark: el8 :heavy_check_mark: el9 :heavy_check_mark: debian :heavy_check_mark: suse15. SL-JID 7241

@blueorangutan test matrix

@kiranchavala a [SF] Trillian-Jenkins matrix job (centos7 mgmt + xenserver71, rocky8 mgmt + vmware67u3, centos7 mgmt + kvmcentos7) has been kicked to run smoke tests

[SF] Trillian Build Failed (tid-7867)

@blueorangutan help

@blueorangutan test

@kiranchavala a [SF] Trillian-Jenkins test job (centos7 mgmt + kvm-centos7) has been kicked to run smoke tests

@harikrishna-patnala @Pearl1594 Could you please review and approve this PR

[SF] Trillian test result (tid-7876)
Environment: kvm-centos7 (x1), Advanced Networking with Mgmt server 7
Total time taken: 39692 seconds
Marvin logs: https://github.com/blueorangutan/acs-prs/releases/download/trillian/pr7949-t7876-kvm-centos7.zip
Smoke tests completed. 109 look OK, 5 have errors, 0 did not run
Only failed and skipped tests results shown below:

Test
Result
Time (s)
Test File

test_DeployVmAntiAffinityGroup
Error
42.76
test_affinity_groups.py

test_DeployVmAntiAffinityGroup_in_project
Error
76.62
test_affinity_groups_projects.py

test_01_non_strict_host_anti_affinity
Failure
112.85
test_nonstrict_affinity_group.py

test_02_non_strict_host_affinity
Error
81.08
test_nonstrict_affinity_group.py

test_02_upgrade_kubernetes_cluster
Failure
606.14
test_kubernetes_clusters.py

test_03_deploy_and_scale_kubernetes_cluster
Failure
235.45
test_kubernetes_clusters.py

test_07_deploy_kubernetes_ha_cluster
Failure
0.03
test_kubernetes_clusters.py

test_08_upgrade_kubernetes_ha_cluster
Failure
0.03
test_kubernetes_clusters.py

test_09_delete_kubernetes_ha_cluster
Failure
0.03
test_kubernetes_clusters.py

test_hostha_enable_ha_when_host_in_maintenance
Error
303.78
test_hostha_kvm.py

@blueorangutan package

@vishesh92 a [SF] Jenkins job has been kicked to build packages. It will be bundled with  KVM, XenServer and VMware SystemVM templates. I'll keep you posted as I make progress.

[SF] Trillian Build Failed (tid-7975)

Packaging result [SF]: :heavy_check_mark: el7 :heavy_check_mark: el8 :heavy_check_mark: el9 :heavy_check_mark: debian :heavy_check_mark: suse15. SL-JID 7368

LGTM

@blueorangutan package

@shwstppr a [SL] Jenkins job has been kicked to build packages. It will be bundled with  KVM, XenServer and VMware SystemVM templates. I'll keep you posted as I make progress.

Packaging result [SF]: :heavy_check_mark: el7 :heavy_check_mark: el8 :heavy_check_mark: el9 :heavy_check_mark: debian :heavy_check_mark: suse15. SL-JID 7435

@blueorangutan test matrix

@vishesh92 a [SL] Trillian-Jenkins matrix job (centos7 mgmt + xenserver71, rocky8 mgmt + vmware67u3, centos7 mgmt + kvmcentos7) has been kicked to run smoke tests

[SF] Trillian test result (tid-8020)
Environment: xenserver-71 (x2), Advanced Networking with Mgmt server 7
Total time taken: 41159 seconds
Marvin logs: https://github.com/blueorangutan/acs-prs/releases/download/trillian/pr7949-t8020-xenserver-71.zip
Smoke tests completed. 113 look OK, 1 have errors, 0 did not run
Only failed and skipped tests results shown below:

Test
Result
Time (s)
Test File

test_01_browser_migrate_template
Failure
5.29
test_image_store_object_migration.py

[SF] Trillian test result (tid-8022)
Environment: kvm-centos7 (x2), Advanced Networking with Mgmt server 7
Total time taken: 44802 seconds
Marvin logs: https://github.com/blueorangutan/acs-prs/releases/download/trillian/pr7949-t8022-kvm-centos7.zip
Smoke tests completed. 112 look OK, 2 have errors, 0 did not run
Only failed and skipped tests results shown below:

Test
Result
Time (s)
Test File

test_01_browser_migrate_template
Failure
15.38
test_image_store_object_migration.py

test_03_deploy_vm_wrong_checksum
Error
40.55
test_templates.py

@vishesh92 test_image_store_object_migration.py is failing for all hypervisors. Can you please have a look?

[SF] Trillian test result (tid-8021)
Environment: vmware-67u3 (x2), Advanced Networking with Mgmt server r8
Total time taken: 85435 seconds
Marvin logs: https://github.com/blueorangutan/acs-prs/releases/download/trillian/pr7949-t8021-vmware-67u3.zip
Smoke tests completed. 111 look OK, 3 have errors, 0 did not run
Only failed and skipped tests results shown below:

Test
Result
Time (s)
Test File

test_01_browser_migrate_template
Failure
5.41
test_image_store_object_migration.py

test_list_vms_metrics_admin
Error
3634.55
test_metrics_api.py

test_list_vms_metrics_history
Error
3640.60
test_metrics_api.py

test_list_volumes_metrics_history
Error
3631.18
test_metrics_api.py

test_01_deploy_vm_on_specific_host
Error
3601.73
test_vm_deployment_planner.py

test_02_deploy_vm_on_specific_cluster
Error
1.27
test_vm_deployment_planner.py

test_03_deploy_vm_on_specific_pod
Error
2.35
test_vm_deployment_planner.py

test_04_deploy_vm_on_host_override_pod_and_cluster
Error
2.37
test_vm_deployment_planner.py

test_05_deploy_vm_on_cluster_override_pod
Error
16.63
test_vm_deployment_planner.py

@vishesh92 test_image_store_object_migration.py is failing for all hypervisors. Can you please have a look?

It's failing because the test requires two secondary storage and only one is available during tests.

@blueorangutan package

@vishesh92 a [SL] Jenkins job has been kicked to build packages. It will be bundled with  KVM, XenServer and VMware SystemVM templates. I'll keep you posted as I make progress.

Packaging result [SF]: :heavy_check_mark: el7 :heavy_check_mark: el8 :heavy_check_mark: el9 :heavy_check_mark: debian :heavy_check_mark: suse15. SL-JID 7466

@blueorangutan package

@vishesh92 a [SL] Jenkins job has been kicked to build packages. It will be bundled with  KVM, XenServer and VMware SystemVM templates. I'll keep you posted as I make progress.

Packaging result [SF]: :heavy_check_mark: el7 :heavy_check_mark: el8 :heavy_check_mark: el9 :heavy_check_mark: debian :heavy_check_mark: suse15. SL-JID 7471

@blueorangutan package

@vishesh92 a [SL] Jenkins job has been kicked to build packages. It will be bundled with  KVM, XenServer and VMware SystemVM templates. I'll keep you posted as I make progress.

Packaging result [SF]: :heavy_check_mark: el7 :heavy_check_mark: el8 :heavy_check_mark: el9 :heavy_check_mark: debian :heavy_check_mark: suse15. SL-JID 7478

@blueorangutan test

@vishesh92 a [SL] Trillian-Jenkins test job (centos7 mgmt + kvm-centos7) has been kicked to run smoke tests

@blueorangutan package

@shwstppr a [SL] Jenkins job has been kicked to build packages. It will be bundled with  KVM, XenServer and VMware SystemVM templates. I'll keep you posted as I make progress.

Packaging result [SF]: :heavy_check_mark: el7 :heavy_check_mark: el8 :heavy_check_mark: el9 :heavy_check_mark: debian :heavy_check_mark: suse15. SL-JID 7518

@blueorangutan package

Packaging result [SF]: :heavy_check_mark: el7 :heavy_check_mark: el8 :heavy_check_mark: el9 :heavy_check_mark: debian :heavy_check_mark: suse15. SL-JID 7547

@blueorangutan test

@vishesh92 a [SL] Trillian-Jenkins test job (centos7 mgmt + kvm-centos7) has been kicked to run smoke tests

[SF] Trillian test result (tid-8136)
Environment: kvm-centos7 (x2), Advanced Networking with Mgmt server 7
Total time taken: 51764 seconds
Marvin logs: https://github.com/blueorangutan/acs-prs/releases/download/trillian/pr7949-t8136-kvm-centos7.zip
Smoke tests completed. 115 look OK, 1 have errors, 0 did not run
Only failed and skipped tests results shown below:

Test
Result
Time (s)
Test File

test_08_upgrade_kubernetes_ha_cluster
Failure
709.31
test_kubernetes_clusters.py

@blueorangutan package

@shwstppr a [SL] Jenkins job has been kicked to build packages. It will be bundled with  KVM, XenServer and VMware SystemVM templates. I'll keep you posted as I make progress.

Packaging result [SF]: :heavy_check_mark: el7 :heavy_check_mark: el8 :heavy_check_mark: el9 :heavy_check_mark: debian :heavy_check_mark: suse15. SL-JID 7571

@blueorangutan test

[SF] Trillian test result (tid-8182)
Environment: kvm-centos7 (x2), Advanced Networking with Mgmt server 7
Total time taken: 43931 seconds
Marvin logs: https://github.com/blueorangutan/acs-prs/releases/download/trillian/pr7949-t8182-kvm-centos7.zip
Smoke tests completed. 116 look OK, 0 have errors, 0 did not run
Only failed and skipped tests results shown below:

Test
Result
Time (s)
Test File


Need a v1 release in order to use

I think we need a release in order to use this GHA. Here's the error I'm getting:
Download action repository 'lee-dohm/last-assigned@v1'
##[warning]Failed to download action 'https://api.github.com/repos/lee-dohm/last-assigned/tarball/v1'. Error Response status code does not indicate success: 404 (Not Found).

Apologies that it took so long for me to get back to this, but it's fixed now.


Added ByteDance to users.md

Show support for Cilium from ByteDance.

@Jiang1155 Thanks for adding to the doc! Can you sign off your commit so we can merge it? https://www.secondstate.io/articles/dco/

@Jiang1155 Just a friendly reminder. Can you sign off your commit so we can merge it? Let me know if you need any help :)

Sorry for the late reply, I just notice your message.
I added sign-off in the commit message, and pushed to the patch-1 branch. But I saw it was behind master of cilium so I clicked "pull and merge" button on github. Now, my patch-1 branch shows 2 commits. One is this one. The other is a merge commit. I think I need to remove the merge commit somehow?  Can you merge it as of now?
Or I can create a new pull request since this is a simple change.
Normally, when I saw my branch is behind the master, do I need to update my branch to make it mergeable? Or the merge process will take care of it?
Let me know how to proceed. Thanks.

Hi @Jiang1155 , thanks for coming back to this! We can't merge it right now because the second commit isn't signed off.
It is probably easier to just close this PR and open a new one. If you do it in the GitHub UI, sign off is actually now automatically added to new PRs in the repo.

Sure. I just opened a new one.  I will close this one. Thanks.


Dag history component v0 8 1

@darthtrevino,
Thanks for your contribution as a Microsoft full-time employee or intern. You do not need to sign a CLA.
Thanks,
Microsoft Pull Request Bot


♻ Update from NetlifyCMS to DecapCMS

Hi Team,
We have had a lot of issues recently with NetlifyCMS due to the project being decommissioned. The new maintainers have called it decapCMS and are now actively maintaining it.
Tasks

[x] Update to decapcms
[x] Test
[ ] Deploy

Update:
BUG - This is working on localhost however, this is failing to run on staging.

[ ] Investigate about creating a config.yml instead of using the config.js

Update:
DecapCMS runs successfully in staging using config.yml, but we couldn't dynamically add GUID and API address to this file. We might still need to use config.js for manual CMS setup.

Make DecapCMS manual setup work in staging

Based on my investiagation, we have an existing admin/index.html that prevents the Gatsby plugin from automatically creating it and using our manual configuration (config.js).
The bug in staging should be fixed if we remove this file. I have created a PR for this.

Done - DecapCMS is now working on production


Sagemaker Contrainer (tensorflow) Fails to Fully Utilize GPU

Hi, I'm running a full-local install, and am running into the following log message when initializing training:
## Created agent: agent
## Stop physics after creating graph
## Creating session
Creating regular session
2023-04-16 04:16:59.381165: W tensorflow/core/common_runtime/colocation_graph.cc:983] Failed to place the graph without changing the devices of some resources. Some of the operations (that had to be colocated with resource generating operations) are not supported on the resources' devices. Current candidate devices are [
  /job:localhost/replica:0/task:0/device:CPU:0].
See below for details of this colocation group:
Colocation Debug Info:
Colocation group had the following types and supported devices:
Root Member(assigned_device_name_index_=-1 requested_device_name_='/device:GPU:0' assigned_device_name_='' resource_device_name_='/device:GPU:0' supported_device_types_=[CPU] possible_devices_=[]
Identity: GPU CPU XLA_CPU XLA_GPU
VariableV2: CPU
Assign: GPU CPU

Colocation members, user-requested devices, and framework assigned devices, if any:
  main_level/agent/main/online/Variable (VariableV2) /device:GPU:0
  main_level/agent/main/online/Variable/Assign (Assign) /device:GPU:0
  main_level/agent/main/online/Variable/read (Identity) /device:GPU:0
  main_level/agent/main/online/Assign (Assign) /device:GPU:0

2023-04-16 04:16:59.381819: W tensorflow/core/common_runtime/colocation_graph.cc:983] Failed to place the graph without changing the devices of some resources. Some of the operations (that had to be colocated with resource generating operations) are not supported on the resources' devices. Current candidate devices are [
  /job:localhost/replica:0/task:0/device:CPU:0].
See below for details of this colocation group:
Colocation Debug Info:
Colocation group had the following types and supported devices:
Root Member(assigned_device_name_index_=-1 requested_device_name_='/device:GPU:0' assigned_device_name_='' resource_device_name_='/device:GPU:0' supported_device_types_=[CPU] possible_devices_=[]
Identity: GPU CPU XLA_CPU XLA_GPU
VariableV2: CPU
Assign: GPU CPU

Colocation members, user-requested devices, and framework assigned devices, if any:
  main_level/agent/main/target/Variable (VariableV2) /device:GPU:0
  main_level/agent/main/target/Variable/Assign (Assign) /device:GPU:0
  main_level/agent/main/target/Variable/read (Identity) /device:GPU:0
  main_level/agent/main/target/Assign (Assign) /device:GPU:0

Unless I'm misinterpreting this log, it appears that the gpu is failing to be fully utilized for some computation paths.
During training gpu memory consumption does increase, but load on the gpu itself appears to be rather low as reported by nvidia-smi.
Host has a 3080ti, and is running ubuntu 22.04 with driver 530.

Digging deeper, gpu under utilization is probably due to broken builds as a result of the rather ancient version of tensorflow being used.
The tf binaries appear to be targeting version 1.15, due to major code changes made with core libraries. However, these builds of tf also appear to be targeting cuda 11.4, which lacks support in tf due to the version's age.
My digging led me to
https://github.com/tensorflow/tensorflow/commit/28feb4df0d4ab386946bdee1a0e5c36cc58246cf
Which is a decent starting point for a hacky patch, but probably not a good long-term solution.

Thanks for raising this. Happy to support alternative TF builds if it will make a significant impact; the real location for those PRs would be https://github.com/aws-deepracer-community/deepracer-simapp and https://github.com/aws-deepracer-community/deepracer-sagemaker-container.
Now - one massive reason for GPU under-utilization is the entire way that DeepRacer / Reinforcement Learning is setup. First you collect a set of episodes (20 as default), then the networks are updated. Only during network update the Sagemaker assigned GPU will do anything at all. Looking at total elapsed time this is not a major factor. Many of us train with VRAM solid, ancient GPUs like K40, K80 and M40 for that reason -- real GPU performance does not really make a difference, as long as you can offload most of those calculations to the GPU.

Closing due to no activity.


🐛 The PaneItemExpander doesn't work normal

Describe the bug
The PaneItemExpander doesn't work normal.
════════ Exception caught by widgets library ═══════════════════════════════════
The following _TypeError was thrown building _PaneItemExpander-[LabeledGlobalKey<__PaneItemExpanderState>#18916](dirty, dependencies: [_FluentTheme, _InheritedNavigationView], state: __PaneItemExpanderState#fd9cf):
Null check operator used on a null value

The relevant error-causing widget was
_PaneItemExpander-[LabeledGlobalKey<__PaneItemExpanderState>#18916]
pane_items.dart:629
When the exception was thrown, this was the stack
#0      __PaneItemExpanderState.build
pane_items.dart:807
#1      StatefulElement.build
framework.dart:5409
#2      ComponentElement.performRebuild
framework.dart:5297
#3      StatefulElement.performRebuild
framework.dart:5462
#4      Element.rebuild
framework.dart:5016
#5      ComponentElement._firstBuild
framework.dart:5279
#6      StatefulElement._firstBuild
framework.dart:5453
#7      ComponentElement.mount
framework.dart:5273
...     Normal element mounting (47 frames)
#54     Element.inflateWidget
framework.dart:4182
#55     Element.updateChild
framework.dart:3707
#56     SliverMultiBoxAdaptorElement.updateChild
sliver.dart:857
#57     SliverMultiBoxAdaptorElement.createChild.<anonymous closure>
sliver.dart:842

To Reproduce
import 'package:fluent_ui/fluent_ui.dart';

void main() {
  runApp(const Demo());
}

class Demo extends StatelessWidget {
  const Demo({super.key});

  @override
  Widget build(BuildContext context) {
    return FluentApp(
        title: 'Flutter Demo',
        home: NavigationView(
          pane: NavigationPane(items: [
            PaneItem(
                title: const Text("Test"),
                icon: const Icon(FluentIcons.accept),
                body: ScaffoldPage.scrollable(
                    children: const [Text("Hello world")])),
            PaneItemSeparator(),
            PaneItemExpander(
                icon: const Icon(FluentIcons.toolbox),
                items: [],
                body: const Text("Expander"))
          ]),
        ));
  }
}

Expected behavior
The Expander should not crash here.
Screenshots

Additional context
Version
fluent_ui: ^4.7.7

Flutter Docker
Doctor summary (to see all details, run flutter doctor -v):
[√] Flutter (Channel stable, 3.13.9, on Microsoft Windows [版本 10.0.22635.2700], locale zh-CN)
[√] Windows Version (Installed version of Windows is version 10 or higher)
[X] Android toolchain - develop for Android devices
    X Unable to locate Android SDK.
      Install Android Studio from: https://developer.android.com/studio/index.html
      On first launch it will assist you in installing the Android SDK components.
      (or visit https://flutter.dev/docs/get-started/install/windows#android-setup for detailed instructions).
      If the Android SDK has been installed to a custom location, please use
      `flutter config --android-sdk` to update to that location.

[X] Chrome - develop for the web (Cannot find Chrome executable at .\Google\Chrome\Application\chrome.exe)
    ! Cannot find Chrome. Try setting CHROME_EXECUTABLE to a Chrome executable.
[√] Visual Studio - develop Windows apps (Visual Studio Community 2022 17.6.3)
[!] Android Studio (not installed)
[√] VS Code (version 1.84.1)
[√] Connected device (2 available)
[√] Network resources

! Doctor found issues in 3 categories.

Hello! I solved now, the PaneItemExpander must have a not empty item list and the selected of NavigationPane must be not null.
I think there should have a more clear exception info, like assert(!widget.items.isEmpty, "The items can not be empty"); in the build Function.
Code
import 'package:fluent_ui/fluent_ui.dart';

void main() {
  runApp(const Demo());
}

class Demo extends StatelessWidget {
  const Demo({super.key});

  @override
  Widget build(BuildContext context) {
    return FluentApp(
        title: 'Flutter Demo',
        home: NavigationView(
          pane: NavigationPane(selected: 0, items: [
            PaneItem(
                title: const Text("Test"),
                icon: const Icon(FluentIcons.accept),
                body: ScaffoldPage.scrollable(
                    children: const [Text("Hello world")])),
            PaneItemSeparator(),
            PaneItemExpander(
                icon: const Icon(FluentIcons.toolbox),
                items: [
                  PaneItem(
                      title: const Text("Test"),
                      icon: const Icon(FluentIcons.accept),
                      body: ScaffoldPage.scrollable(
                          children: const [Text("Hello world 2")])),
                ],
                body: const Text("Expander"))
          ]),
        ));
  }
}


Production Compilation produces strange extra character which causes a syntax error

So I know it looks like there's nothing happening in this PR, but this whitespace appears to not be regular whitespace, because when compiling for produciton, I get a strange extra character inserted at this line:

Deleting the space and adding a regular space seems to clear it up, which is what this PR does.

Strange, but thanks for catching it!


style(model): avoid compare array with nil, if we will compare it's len

Please provide a description of this PR:
Just fix some style and unnecessary code when i read source
To help us figure out who should review this PR, please put an X in all the areas that this PR affects.

[X] Configuration Infrastructure
[ ] Docs
[ ] Installation
[ ] Networking
[ ] Performance and Scalability
[ ] Policies and Telemetry
[ ] Security
[ ] Test and Release
[ ] User Experience
[ ] Developer Infrastructure

Hi @j2gg0s. Thanks for your PR.
I'm waiting for a istio member to verify that this patch is reasonable to test. If it is, they should reply with /ok-to-test on its own line. Until that is done, I will not automatically test new commits in this PR, but the usual testing commands by org members will still work. Regular contributors should join the org to skip this step.
Once the patch is verified, the new status will be reflected by the ok-to-test label.
I understand the commands that are listed here.

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository.

/ok-to-test


Color palette improved.

Issue no. #313
hey @vishanurag sir,
so sorry for this late sir.
I've modified the the canvas palette, kindly review once.

Changes few bugs also,
Before:
https://github.com/user-attachments/assets/b5de2d96-e315-426c-82d6-f677080fac8f
After:
https://github.com/user-attachments/assets/4127434b-c4b6-4afc-a986-bc2bc4858ed9
Changes done:
1.fixed the alignment of the entire home page
2.modified canvas palette
3.adjusted few alignments
Please let me know if any further adjustments are needed.

@vishanurag sir kindly review this PR once

Please resolve merge conflicts

Please resolve merge conflicts

Done sir

Hey @vishanurag sir, you assigned me this issue with level 2 but while merging you changed it to level 1.
Kindly lable it with level2 atleast.


Request for sample google templates - documentation update

Is your feature request related to a problem? Please describe.
There are multiple references within the code that point to google docs templates, but there seems to be little indication on the expected structure/syntax that the code will work best with.
Describe the solution you'd like
Can you provide a sanitized version or example document of the expected template structure? Or alternatively document the syntax that is expected?
Describe alternatives you've considered
I've considered trying to RE the source and determine the expected syntax through that, but I am limited on time and resources and wanted to check first here before taking on such an undertaking.
Additional context
Files referencing templates include dispatch-sample-data.dump, config.py, service.py, and so on.

Yes, we had been planning to do a blog post regarding these templates but ran out of time this quarter.
Here is a list of reference documents that can be copied and used. We typically have a document for each incident type that is the generic template but with questions pertaining to the specific incident type.
I will also add a task to document the variables available to documents.
Incident Document:
https://docs.google.com/document/d/1fv--CrGpWJJ4nyPR0N0hq4JchHJPuqsXN4azE9CGQiE
Incident Review Document:
https://docs.google.com/document/d/1-VwcEpVVdymoojdUg9e5XP8QGam0-B5Djxh-guuPpEc
Executive Report:
https://docs.google.com/document/d/1dab6k14p5ageo5B_d1YlB_zS9hMGHDMXy9RUbIZous4

Wonderful! Thank you very much for the swift response! I look forward to incorporating these.
@kevgliss By chance do you have a similar reference for the investigation sheet template?

We do, although at least in our experience this doesn't get used quite as much (so it doesn't really have any interesting templating abilities).
Incident Tracking Sheet:
https://docs.google.com/spreadsheets/d/1Odk4KlL7uMF_yd7OvTOCaPWmtTA_WzFBIA4lMeU5cGY

Thank you again :)

No problem, we also have internal documents for Incident FAQs and Incident Command Reference cheatsheet. These are not templated and have some internal nflx-isms in them. If there is interest, I can clean them and release them as well.

Sure, that wouldn't hurt to have as well. I appreciate you being willing to share. :)

Cool, will put that on the todo.


Not resolvable variable is not reported

Assuming PRODUCTURL is not defined (i.e. not listed in "Variables" section during test execution), incorrect request is made:
GET https://xxxx:9002/.%7B%7BPRODUCTURL%7D%7D

Expected: Error message should be displayed.

Technically https://xxxx:9002/.{{PRODUCTURL}} is a valid URL.
If any occurrence of {{NAME}} would be treated as error if NAME is not a defined variable than it would be impossible to call URLs (or sending body with) containing {{NAME}}. Which is as problematic than not reporting an error. The only possible workaround would be to set NAME="{{NAME}}" (as substitutions are not recursive).
So won't fix. Occurences of patterns of the form {{NAME}} are replaced by a certain value iff a variable NAME is defined. It is not the case that {{NAME}} actually is a variable reference.


Data science

Sorry for the past injection of dinodex stuff.

@athiercelin Nice work on this! Please take a look at Zamir's comments and submit a second iteration.


chore(package): update sequelize to version 5.5.0

Pull Request Test Coverage Report for Build 1966

0 of 0   changed or added relevant lines in 0 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage remained the same at 95.467%

Totals

Change from base Build 1965:
0.0%

Covered Lines:
1685

Relevant Lines:
1765

💛  - Coveralls


🗑 Deprecation promotion of toNotEmptyMap extension function to hidden level

📝 Description
We would like to promote the deprecation of the toNotEmptyMap extension function to a hidden level.
🔗 Dependencies
This issue is blocked by the following ones:

[x] #532

✅ Checklist

[ ] Promote the deprecation of this declaration, update the public API binaries and the unreleased changelog.
[ ] Close this issue as completed and update tracking ones if present.

We are not ready to implement this change.


Types all components

All components are now typed.
Also adds a helper method for color definitions which is used both to standardize the interface for a "color" type, and to reduce boiler-plate when declaring color choices for a component.

Sorry, I meant to merge this with my fork only, didn't mean to send it over to you. Not sure how to remove it


Bug onChange currentTime

I'm trying update on screen the current time, but it seems there is a bug, sometimes the nativeEvent.currentTime is repeating the last currentTime, or even dont go to the total duration, it end before.
For example, I recorded a video with duration of 6 seconds but its loggin like this

here is my code
        <VideoPlayer
          ref={ref => this.videoPlayerRef = ref}
          replay={true}
          play={this.state.playing}
          source={this.props.src}
          style={styles.player}
          onChange={({ nativeEvent }) => {
              console.log(nativeEvent.currentTime)
              this.setState({
                currentTimeSec:nativeEvent.currentTime})
            }
          }
          resizeMode={VideoPlayer.Constants.resizeMode.CONTAIN}/>

Closing this due to long inactivity

It still exists. It is because when current time is set with state, onChange trigger fires when it receives new state, therefore, it flickers between states. Is there an alternative way to set currectTime without state?


⚠ Community has degraded performance

In 98d418f, Community (https://community.wrk.com/health) experienced degraded performance:

HTTP code: 200
Response time: 218 ms

Resolved: Community performance has improved in 2722a6f.


[QOL] Specify an animation to run after a Once animation finishes

Would be great to queue up a new animation, or specify a default animation to run once one finishes

Yeah, definitely, that sounds like a good idea.
Maybe can you share more details about your current use-case? So that I can try thinking about an API.

So imagine you're making a tile-based game.
Here's some musing:
An AnimationChain and AnimationChainBuilder
let animation_chain = AnimationChainBuilder::new()
                                        .begins_with(attack_animation)
                                        .then(stow_weapon_animation)
                                        .then(idle_animation);

And then that allows you to expand the AnimationChainBuilder to support options other than begins_with and then,
and have maybe play_n_times(3, animation), or more.
Or maybe something like iyes_loopless where you specify the animation to run given a particular animation state enum value.
let animation_states = AnimationStatesBuilder::new()
                                        .run_in_state(EntityAnimState::IdleDown, idle_down_animation)
                                        .run_in_state(EntityAnimState::WalkLeft, walk_left_animation)
                                        .run_in_state(EntityAnimState::AttackLeft, attack_left_animation);

let animation_state = State::new(EntityAnimState::IdleDown, animation_chain);

animation_state.now(EntityAnimState::WalkLeft); // change animation

animation_state.now(EntityAnimState::AttackLeft).next(EntityAnimState::IdleLeft);

I hope this helps! Let me know if you want to chat about it

Yes, it helps, thanks. I will think more about it and try to come up with an initial design.

I've chosen to use benimator (at the very least in it's current form) in a game I'm working on. I would be glad to give feedback on any design ideas you come up with. Thanks Jonathan

Using bevy-simple-state-machine as a reference I was able to implement something that works for benimator over the weekend
Here's the crux of the code. Also, state_machine.animation_finished() checks benimator to see if a Once animation has finished
pub fn check_animation_transitions(
    mut state_machines_query: Query<(Entity, &mut AnimationStateMachine)>,
    mut event_writer: EventWriter<TransitionEndedEvent>,
    animations: Res<Assets<Animation>>,
) {
    for (entity, mut state_machine) in &mut state_machines_query {
        if let Some(current_state) = state_machine.current_state() {
            if current_state.interruptible || state_machine.animation_finished() {
                for transition in state_machine.transitions_from_current_state() {
                    if transition.trigger.evaluate(&state_machine.variables) {
                        if let Some(next_state) =
                            state_machine.get_state(transition.end_state.unwrap())
                        {
                            println!("triggering {}", transition);
                            state_machine.current_state = next_state.name;

                            // Get new animation and restart benimator with it
                            let animation = match animations.get(&next_state.base_animation) {
                                Some(anim) => anim,
                                None => continue,
                            };
                            state_machine.base_frame.reset();
                            state_machine
                                .base_frame
                                .update(animation, Duration::from_millis(0));

                            // emit event that the transition has completed
                            event_writer.send(TransitionEndedEvent {
                                entity,
                                origin: current_state.state_ref(),
                                end: transition.end_state,
                            });
                        }
                    }
                }
            }
        }
    }
}

pub fn update_animations(
    time: Res<Time>,
    mut state_machines_query: Query<(&mut AnimationStateMachine, &mut TextureAtlasSprite)>,
    animations: Res<Assets<Animation>>,
) {
    for (mut state_machine, mut sprite_texture) in &mut state_machines_query {
        if let Some(current_state) = state_machine.current_state() {
            // Get animation and update it
            let animation = match animations.get(&current_state.base_animation) {
                Some(anim) => anim,
                None => continue,
            };

            state_machine.base_frame.update(animation, time.delta());

            sprite_texture.index = state_machine.base_frame.frame_index();
        }
    }
}

Yeah I dig. Aside from those systems the rest of the code in the repo is agnostic. Worth a look!
I put my code here because I’ve seen this issue linked to in bevy discords more than once so I think it might help people that come here and are wondering about implementing that functionality.


执行 python setup.py gcc 失败

···
omu:/opt/swm/github/subpy/src # python setup.py gcc
In file included from vm.c:6:0,
from main.c:1:
builtins.c: In function 'bfInspectPtr':
builtins.c:545:17: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
char* ptr = (char*)(long long)_ptr;
^
/tmp/cczd1qDq.o: In function bf_pow': main.c:(.text+0x44cc): undefined reference to pow'
collect2: error: ld returned 1 exit status
···

环境：suse, gcc
原因：链接错误，缺少math链接库
解决：gcc main.c -lm


⚠ Bofrost.at has degraded performance

In 5efba9e, Bofrost.at (https://www.bofrost.at) experienced degraded performance:

HTTP code: 200
Response time: 912 ms

Resolved: Bofrost.at performance has improved in 3f22706.


Not translated

> This ticket was created automatically by our robot from our translation contribution page.

We need more information to identify the missing translations


Thanks for the work! I will merge this PR


Bind to a specific address

Implemented a way to bind to a specific ip and not to <IP_ADDRESS>.
<IP_ADDRESS> is still default bind address.

I forgot about this. I've reverted the change in README.md, leaving only the configuration for binding to a specific IP.


fix(scheduler): prevent unwanted clearInterval

Description:
In AsyncAction, this.pending was assigned before the call to recycleAsyncId. That prevented the interval from being re-used resulting in the interval being cleared and re-created for each notification.
I cannot see how a test could be easily written for this, but the logic is straightforward.
Related issue (if exists): #3042

Coverage increased (+0.01%) to 97.218% when pulling 150a3f2fa445221a1f2cce9cc5ff44a0af0ff76f on cartant:issue-3042 into cff9dfa7c5fdc6606721a2efcee23327ff966a5f on ReactiveX:master.

Coverage increased (+0.01%) to 97.218% when pulling 5fd3ac63aaf9b65bdce99211d9da179293d7e3a1 on cartant:issue-3042 into cff9dfa7c5fdc6606721a2efcee23327ff966a5f on ReactiveX:master.

interesting. @cartant, can you please add a test?

@benlesh Added two tests.

Coverage increased (+0.01%) to 97.218% when pulling df89d47e07129bd54caa4b9a10542642ad5035df on cartant:issue-3042 into cff9dfa7c5fdc6606721a2efcee23327ff966a5f on ReactiveX:master.

Coverage increased (+0.01%) to 97.218% when pulling b9caac12f239c844c4d2c5447bb1eea553947c61 on cartant:issue-3042 into d58feb7ce4e7c8b8c145f70af4021392e062a947 on ReactiveX:master.

Coverage increased (+0.01%) to 97.218% when pulling 6515461f48bb214d7f75a16cb984a1c102cc65a3 on cartant:issue-3042 into d58feb7ce4e7c8b8c145f70af4021392e062a947 on ReactiveX:master.

I'm going to have this target the 5.5 branch and cherry pick it over. We can do a patch.

Actually, @cartant, do you think you can rebase your changes against stable rather than master? I'd like to get this out in a patch to 5.5.

@benlesh Rebased and tests renamed as per request.

Hmmm... it looks like there are some TS 2.0 incompatible lines in this already... I'm not sure I can merge this into the stable branch. :(

Are you talking about this:
46     const stubSetInterval = sinon.stub(global, 'setInterval').callThrough();
                                                                 ~~~~~~~~~~~

spec/schedulers/AsapScheduler-spec.ts(46,63): error TS2339: Property 'callThrough' does not exist on type 'SinonStub'.

71     const stubSetInterval = sinon.stub(global, 'setInterval').callThrough();
                                                                 ~~~~~~~~~~~

spec/schedulers/AsapScheduler-spec.ts(71,63): error TS2339: Property 'callThrough' does not exist on type 'SinonStub'.

The sinon version in the package.json is the same for stable and next, but stable uses  typings.json - rather than @types and the typings in the typings.json for sinon look old:
"sinon": "registry:npm/sinon#1.16.0+20160723033700"

I can make the tests build on a clean node_modules install for stable if I assert to any to avoid the missing TS declaration for callThrough in the old sinon typings used to stable:
const stubSetInterval = (<any> sinon.stub(global, 'setInterval')).callThrough();

If you're okay with that, I can update the PR.

@benlesh I've made the change mentioned in the above comment and my branch's Travis build now passes - although, I had to clear the cache.

LGTM 👍

Yeah. I'm not sure what's going on with Travis, and I don't have time to take a look. @cartant or @kwonoj, can one of you figure this out?

@benlesh should be good now.

Changes Unknown when pulling 03d0f9fb431702ddfbb264edd3d7f466a0ca0ce6 on cartant:issue-3042 into ** on ReactiveX:stable**.


Soil docs

Add soil docs pages. There are 6 products with 2-4 measurements each, so I've added a docs page for each product.

Thank you @mpho-sadiki, very helpful. I've taken the following actions:

Added link to Jupyter notebook
Group the text referring to the Metadata explorer
Corrected the 'Data Access' typos
Added a Related Datasets subsection which refers to the other soils products
Corrected the units for soil bulk density and added units to the captions for other plots

Thanks for the suggestions @mpho-sadiki.  It would be great to have another set of eyes over it.

Thanks for the suggestions @mpho-sadiki.  It would be great to have another set of eyes over it.

Looks good Michael. Just one minor change in the in the iSDA variables description where it says  20-5cm depth instead of  20-50cm depth. I also think that "We will see through the notebook that we can bring in each variable with the Access Names e.g. ‘bedrock_depth’." should be removed or the link to the notebook added.

Thanks, those edits have been made


Updating for NumPy 2.0

NumPy's first major version update in years has officially released, and if one follows the parcels installation tutorial they will find themselves with NumPy v2.0.0 installed by default.
The only breaking change that I could find for parcels is the use of np.infty, which has been deprecated in favor of np.inf in NumPy 2.0.0. I haven't found any other breaking changes, and with just the changing of np.infty->np.inf, the example python example_peninsula.py --fieldset 100 100 runs without error, but I haven't done any more testing than this.
I can submit a PR and get np.infty changed easily, and it is of course backwards compatible with the current NumPy and parcels versions. I just wanted to open this issue first to start a conversation and see if anyone can find any other breaking changes in NumPy 2.0.0 (especially the NumPy C API, since I'm not well versed in the C code generation used in parcels or if it relies on NumPy at all), or if this has been thought about by others yet.

Thanks heaps for raising this issue, @andrew-s28! Yes, please go ahead and create a PR for the np.inf change.
The C code generation doesn't rely on numpy, but on ast and cgen (see codegenerator.py; it doesn't even import numpy), so should be ok
If we find other issues in the coming weeks, at least we know what the first line of investigation is :-)


what is the type of params ?

When I read this method I don't manage to understand the type of the params.
Looking t the first line (params = visParams or {}) I have the feeling it's a list. But then You go through great extend to check if it's a list or a comma separeted str. To finally treat it as a list again in themin = params.get("min") if "min" in params else "0"
Do you remenber what you envisioned and do you think we could simply use a list parameter ?
https://github.com/Louis-Dreyfus-Company/geeservermap/blob/e0bc8a96f6d68f0b42dc5163d129bc6517f87396/geeservermap/helpers.py#L44

visParams is (or must be) a dict, but in some functions inside helpers.py I handle some parameters, like bands, to match the API requirements, and that's why I use the word params and not viz_params, params can be passed as a list (99.9% of the time) or a str


feat: introduce experimental full nameof support

introduce experimental full nameof support
Description
Introduces experimental full nameof support.
See #401.
This is an early experiment and WIP.
This would allow simpler MapProperty attributes for nested properties:
[MapProperty(nameof(@A.B.C), nameof(@D.E.F)] would be the same as [MapProperty(new[]{nameof(A.B), nameof(A.B.C)}, new[]{nameof(D.E), nameof(D.E.F)}].
Checklist

[ ] The existing code style is followed
[ ] The commit message follows our guidelines
[ ] Performed a self-review of my code
[ ] Hard-to-understand areas of my code are commented
[ ] The documentation is updated (as applicable)
[ ] Unit tests are added/updated
[ ] Integration tests are added/updated (as applicable, especially if feature/bug depends on roslyn or framework version in use)

Nice, what made you reconsider this?
I'm not sure if it's possible, but is it possible to check for and warn the user when a qualified namespace is used?

@TimothyMakkison this is just an experiment 😊 I wanted to poke around and see what it gets. It is still far from ready to be merged, there is still a lot to consider and work out. Not sure if it should relay on the @ prefix, how to handle the namespace thing, ..., ...

I thought the @ symbol is a pretty clever compromise. The namespace thing isn't a big deal. Hopefully the error and documentation would inform people.
Perhaps when a lookup fails mapperly could scan all available assemblies and types looking for a matching namespace. Not sure how slow this is

CallerArgumentExpressionAttribute does not work, because the Roslyn apis resolve only the compile type value provided to the constructor. Mapperly then constructs the PropertyMappingConfiguration type via reflection. Since it is initialized via reflection the CallerArgumentExpressionAttribute cannot be applied.


Homogeneous spaces with a cut point are T_1.

T209 could be referenced.
I'm going to reword the second either ... or ...; if the cut point is open, it would be reached that it is closed aswell.

Depending on what everyone decides to do with Issue https://github.com/pi-base/data/issues/940, a theorem involving that property (currently number 3 on the list) could be referenced.

Good point! I hadn't read this... I could close it or change it to Homogeneous + Has a closed point ==> $T_1$, which would be the number 6 in the list.

Maybe don't close it until that issue gets resolved. If you have the time, maybe you could weigh in any thoughts you have on that issue?

Alright! I will read it better tomorrow. Although, I already agree with adding the property "Has a closed point".

I already agree with adding the property "Has a closed point".

Oh sorry I didn't notice you did!

Yeah, I just missed reading the issue.

Marking as draft as I think it will be closed by #965.


Docs: Generate full public API listing

Would like a page in docs that lists:

Every member of the public API;
Their signatures;
Their docstrings

This is pretty low-priority as it's far more valuable for APIs to be demonstrated and explained in context in the Usage section, where we want representation for all user-facing functionality anyway.

Solution looking for a problem. Users can just use the typical Emacs mechanisms for this.


New version: AnyDeskSoftwareGmbH.AnyDesk version 8.0.14

Checklist for Pull Requests

[ ] Have you signed the Contributor License Agreement?
[ ] Is there a linked Issue?

Manifests

[ ] Have you checked that there aren't other open pull requests for the same manifest update/change?
[ ] This PR only modifies one (1) manifest
[ ] Have you validated your manifest locally with winget validate --manifest <path>?
[ ] Have you tested your manifest locally with winget install --manifest <path>?
[ ] Does your manifest conform to the 1.6 schema?

Note: <path> is the directory's name containing the manifest you're submitting.

Microsoft Reviewers: Open in CodeFlow

Automatic Validation ended with:

2024-08-28T14:11:55.7391523Z Manifest Validation Failed
2024-08-28T14:12:00.7751567Z

(Automated response - build 891.)

8/28/2024 9:18:19 PM
Installer Verification Analysis Context Information:
Installer https://download.anydesk.com/AnyDesk.msi
Scan request id: '72506328-0c5c-47b0-933a-9c9e98205180'
Specified hash doesn't match.
Actual hash:   BED33C3732307E19E9A702E7FF179180A7891B92CB879A5B758021EEFC68A99B
Expected hash: 746475f67cd3456551c5cd9c6205c9754b2aef17472af1b40d41904df2337a2b


fix(dining): build error

[!WARNING]
This pull request is not mergeable via GitHub because a downstack PR is open. Once all requirements are satisfied, merge this PR as a stack on Graphite.
Learn more

#38  👈
#37
main

This stack of pull requests is managed by Graphite. Learn more about stacking.

Join @xdjeremy and the rest of your teammates on  Graphite


Console output/ printf

Summary
Added packets for Console Output and Console PrintF
Issues closed
Client Console Output (packet 17)
Client Console PrintF (packet 19)
Slashcommands added
/consoleOutput messageText
/consolePrint messageText
Added functions to Lua and pages to LuaBot
MapClientSession.ConsoleOutput("Message Text");
MapClientSession.ConsolePrint("Message Text");

This is failing Travis on Linux due to some sort of regression introduced in #719. Further research is needed.
Will review this PR shortly


Issue in 0.2.0

TypeError: Failed to fetch dynamically imported module: https://<IP_ADDRESS>/_content/BcdLib.PullComponent/dist/index.js

Hi @raajwant , How do you use it? I tested it on Android, and it can be used normally, including #1
https://user-images.githubusercontent.com/24973084/196022234-71911297-085d-426e-aba0-29519d9f5f53.mp4

Sorry I reproduced it, but there is a problem with packaging. Please try to use 0.4.0.

Thanks. 0.4.0 version works perfectly. Thanks once again.


[main] Upgrade to latest dependencies

Cron -knative-prow-robot
/cc knative/security-guard-approvers
/assign knative/security-guard-approvers
Produced by: knative-extensions/knobots/actions/update-deps

/approve
/lgtm


[feature request] attribute "auto" for live reloading

@saeidzebardast said in the issue #29

moment-js component is just a wrapper...you could implement a simple component for auto-update feature.

IMHO, this feature is useful and could be nice to have. Except if the purpose is really just to be a wrapper of momentjs library and extra features are prohibited, I could to make a PR for this one.

@masonlouchart I think it's better to still have this component, moment-js, as a wrapper without any extra features. But you could create another Polymer element on top of moment-js with extra features. e.g. moment-js-full or moment-js-auto.


We're sorry. There seem to be an error:

This is the error that is given after seeing a near endless "connecting to docker hub".
OS X 10.11.1
Docker Kitematic 0.9.3
Electron 0.33.6
VirtualBox 5.0.10 r104061
This was a fresh install of https://github.com/docker/toolbox/releases/download/v1.9.0c/DockerToolbox-1.9.0c.pkg but VirtualBox was installed previously. The "default" VM has been removed and trashed so Kitematic could create it.

Can you try to check the following:
docker-machine ls
docker-machine env default
ping <IP_ADDRESS>
and report the output here?

Closing this for lack of activity in the past 15days.


Add json serialization for PauliSum

Fixes #3071
One approach to this would have been to serialize frozenset and tuple in Cirq, but this instead takes the approach of not relying on this but appropriately serializing and deserializing these.

@mpharrigan and @95-martin-orion our Cereal-ization experts.

Thanks @mpharrigan ! Updated per your comments.


Move CSS to separate stylesheet

This moves the CSS to a separate stylesheet. It also updates the CSS for 'black' and 'red' to be their respective hex values.

Sorry, there were a bunch of commits of me just trying to get my forked repo up to date with this branch's master. Feel free to just squash all of them.

Okay, those changes should be made now. I'm not exactly sure why the NL at EOF isn't showing up on the comment above since it should be in there now...let me know if you can't see it.


Use RAII for ExchangeContext contruction and destruction instead of Alloc/Free.

There are several benefits of using constructor and destructor.

They are called from pool manage, or else Alloc and Free is manually called, you may forget to call them
Constructor and destructor calls are propagated to all member fields. otherwise you may forget to call them when adding a new field.

@msandstedt @andy31415 @jepenven-silabs ?

Memory usage:
Extra memory usage are coming from StaticAllocatorBitmap::Deallocate and StaticAllocatorBitmap::Allocate. Fortunately there are onetime overhead for all pools.

Detailed usage
change a-size b-size symbol
 160     0    160    chip::StaticAllocatorBitmap::Deallocate(void*)
 142     0    142    chip::Messaging::ExchangeContext::ExchangeContext(chip::Messaging::ExchangeManager*, unsigned short, chip::SecureSessionHandle, bool, chip::Messaging::ExchangeDelegateBase*)
 140   444    584    chip::Messaging::ExchangeManager::OnMessageReceived(chip::PacketHeader const&, chip::PayloadHeader const&, chip::SecureSessionHandle, chip::Transport::PeerAddress const&, chip::System::PacketBufferHandle, chip::SecureSessionMgr*)
 114     0    114    chip::StaticAllocatorBitmap::Allocate()
  72   288    360    chip::Messaging::ReliableMessageMgr::StartTimer()
  70   150    220    chip::Messaging::ReliableMessageMgr::ExpireTicks()
  68   164    232    chip::Messaging::ReliableMessageMgr::ExecuteActions()
  64     0     64    chip::Messaging::ExchangeContext::~ExchangeContext()
  52     0     52    chip::StaticAllocatorBitmap::StaticAllocatorBitmap(void*, std::atomic<unsigned long>*, unsigned int, unsigned int)
  50   104    154    chip::Messaging::ExchangeManager::OnConnectionExpired(chip::SecureSessionHandle, chip::SecureSessionMgr*)
  50     0     50    chip::Messaging::ReliableMessageMgr::ReliableMessageMgr(chip::BitMapObjectPool<chip::Messaging::ExchangeContext, 8u>&)
  24     0     24    chip::Messaging::ExchangeContextDeletor::Release(chip::Messaging::ExchangeContext*)
  20    58     78    chip::Messaging::ExchangeManager::NewContext(chip::SecureSessionHandle, chip::Messaging::ExchangeDelegateBase*)
  16   760    776    (anonymous namespace)::gExchangeMgr
   4    32     36    hal_timer_get_current_time_us
  -4    80     76    chip::Messaging::ExchangeManager::Init(chip::SecureSessionMgr*)
  -4    36     32    hal_timer_get_current_time_us
 -12    12      0    chip::Messaging::ExchangeManager::IncrementContextsInUse()
 -16   124    108    chip::Messaging::ExchangeManager::ExchangeManager()
 -32    32      0    chip::Messaging::ExchangeManager::DecrementContextsInUse()
 -50    50      0    chip::Messaging::ReliableMessageMgr::ReliableMessageMgr(std::array<chip::Messaging::ExchangeContext, 8u>&)
 -68    68      0    chip::Messaging::ExchangeContext::Free()
 -94    94      0    chip::Messaging::ExchangeContext::Reset()
 -96    96      0    chip::Messaging::ExchangeManager::AllocContext(unsigned short, chip::SecureSessionHandle, bool, chip::Messaging::ExchangeDelegateBase*)
-170   170      0    chip::Messaging::ExchangeContext::Alloc(chip::Messaging::ExchangeManager*, unsigned short, chip::SecureSessionHandle, bool, chip::Messaging::ExchangeDelegateBase*)


Questions about kernel_size

Thanks for your contribution. I want to use the  pixel_dcl(inputs, out_num, kernel_size, scope, activation_fn=tf.nn.relu, d_format='NHWC') in pixel_dcn.py as the deconvolution layer,can you explain how should I decide the kernel_size?

Hi, actually the kernel size is the same to traditional conv. It should be at least 3*3.

can  pixel_dcl directly replace the deconv layer in tensorflow(tf.nn.con2d_transpose())?when I change it,it turns out something wrong.

Actually, it is impelmentedis like tf.contrib.conv2d, which means kernel
size parameter is (3, 3) or similar. In tf.nn.conv2d_transpose, the filters
need to be (width, height, in channel, out channel).channel. Currently,
pixeldcl only support factor 2 upsampling.
On Fri, Jul 14, 2017 at 02:44 daixiaogang<EMAIL_ADDRESS>wrote:

can pixel_dcl directly replace the deconv layer in
tensorflow(tf.nn.con2d_transpose())?when I change it,it turns out something
wrong.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/HongyangGao/PixelDCN/issues/38#issuecomment-315318581,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AGGcr3gNzKPRUO12a5JGIHUljGSe15S1ks5sNziZgaJpZM4OWr_i
.

--
Hongyang


julian date calculation fix

Summary of changes
Noticed that the Julian date calculation was off.
Checklist

[x] Tests were added or updated to cover changes
[x] Commits were squashed into a single coherent commit

Coverage increased (+0.07%) to 70.126% when pulling daced39e4d6713e4d70cbbcd5615d0fb07d42e6b on stwf:fix-julian-dates into 4711f9bc9fc1a51b399cf6928b34e8bc0eec8b0a on bitwalker:master.

Thanks for the PR, and for writing tests :)


Import account flow UX needs to match design

The import account process is not done according to design. There should be a clear “Upload file” button that opens the local folder. And then customer sees the name of the uploaded file.
See design here: https://www.figma.com/file/mBlqs6l6I2d3ihX80Mswm4/Casper-Wallet-–-Extension?node-id=101%3A854&t=k9tDm2aGwaUDQm5y-1

@ost-ptk youre right, sorry I didnt double check before sending your way. Yulia may be on an old build.


Move element from javascript

Hi! Is there anyway to move the draggable element without touch them? I'm trying to move to position I click.
Thanks!

This isn't currently supported by react-draggable itself. You could easily do this on your own by setting the top, and left styles.

Ok but it seems that top and left values are stored in some place because
if I change this values and then try to drag with mouse, instantly turns
last top and left before change values, and moves with the mouse
El 17/2/2015 18:27, "Matt Zabriskie"<EMAIL_ADDRESS>escribió:

This isn't currently supported by react-draggable itself. You could easily
do this on your own by setting the top, and left styles.
—
Reply to this email directly or view it on GitHub
https://github.com/mzabriskie/react-draggable/issues/34#issuecomment-74710500
.

This is incoming when I merge #31.

Fixed in 611c895d0c9f91277b4e73c4fc96d05a36ab24ed.


Officers cannot end calls or add events even if "active dispatchers" are disabled

What version of Node.js are you using?
Latest
What version of npm are you using?
No response
What operating system are you using?
Ubuntu
Describe the Bug
Enabling the "active dispatchers" feature says that it will disable "curtain (sic) buttons" (I assume you meant certain).  Even with this option disabled, police officers cannot add events or end calls.  This requires supervisors (with dispatch access) to have to clear every call.
Expected Behavior
When the "active dispatchers" feature is disabled, police should be permitted to end calls, update descriptions, and update events.  Additionally, if "active dispatchers" is enabled but no dispatchers are on duty, the same logic above should apply
To Reproduce

Should be fixed now!


Hosting Type Providers out-of-process

"Hello from the in-process type provider!".Replace("in-process", "out-of-process")

@auduchinok

Please rebase to net202.

An enormous thank you for the work done so far on this. Myself and many others are looking forward to the day this is merged!

@DedSec256 Congrats on having this merged!
We should probably do some cleanup here and there, but it's OK to do it separately.

THIS IS AMAZING. WELL DONE GUYS!

This seems as if it may have broken the functionality of some type providers, such as FSharp.Configuration, that need to read a project's App.config or web.config file.  The config file cannot be found anymore.  This works with the older version of Rider before I upgraded.

@jam40jeff, Hello!
Can you please provide more information about your problem on our issue tracker?
And it would help us a lot if you could attach a project that reproduces the problem, and logs (Help -> Collect logs)

@DedSec256 Thanks for the workaround.  Reverting back to in-proc type provider hosting solves the issue.  I will open a ticket with a repro when I have time.  Thanks for your help.

@jam40jeff Could you please share some info that could help us reproduce it? What OS and what type provider package version you use? What MSBuild version is chosen in Settings -> Build and Toolset?


difference between watchers and forked watchers

Just curious if there was a functional difference between a watcher and a forked watcher
function* testSaga() {
    const anotherChannel = yield actionChannel('another', buffers.expanding(5))

    yield [
        watchAnother(anotherChannel),
        fork(watchAnother(anotherChannel)),
        takeLatest('action', irrelevantSaga)
    ]
}

function* watchAnother() {
    while (true) {
        const action = yield take(anotherChannel);
        yield call(delay, 200)
        const data = 'bar'
        yield call(api, data)
    }
}

I have no idea how they'd behave if I ran both, but for my current purposes, it's one or the other.
My hypothesis is that if watchAnother is running in parallel, it's not truly blocking saga mw from catching any other dispatched actions. However, because watchAnother does use "take/call" (I understand these to be blocking), I think it's possible that actions are missed
Forking this process so the below happens seems appropriate, but would appreciate input!
function* testSaga() {
    const anotherChannel = yield actionChannel('another', buffers.expanding(5))

    yield fork(watchAnother(anotherChannel))
    yield takeLatest('action', irrelevantSaga)
}

Not much of a difference between those 2. You can yield iterators, and you can even yield promises. But the more standarized approach is to yield those 2 wrapped with call or fork (depending on the needs).
Although if you yield fork(generator) you will get back a task descriptor which is way more easier to cancel with yield cancel(taskDescriptor) than plain iterator. Similar APIs might be introduced in the future which will be way easier to apply to the wrapper effect than on the bare metal structures like iterators. Thinking for example about proposing and implementing restart

My 2 cents about this: the current code and documentation isn't consistent on how to start several sagas in parallel from a root saga. This brings a lot of confusion about The Right Way To Do It.
In Beginner Tutorial, yield []:
// single entry point to start all Sagas at once
export default function* rootSaga() {
  yield [
    helloSaga(),
    watchIncrementAsync()
  ]
}

In Shopping cart example, yield [fork()]:
export default function* root() {
  yield [
    fork(getAllProducts),
    fork(watchGetProducts),
    fork(watchCheckout)
  ]
}

In async example, yield fork:
export default function* root() {
  yield fork(startup)
  yield fork(nextRedditChange)
  yield fork(invalidateReddit)
}

What's the advised way and why?

Found #178 on the same subject

@fzaninotto Also related: https://github.com/redux-saga/redux-saga/pull/644

Also this comment is related - https://github.com/redux-saga/redux-saga/issues/737#issuecomment-269924725
Keep on mind that helper effects - takeLatest, takeEvery, throttle
import { takeEvery } from 'redux-saga/effects'
//...
yield takeEvery(ACTION_A, worker)

are completely the same thing as
import { takeEvery } from 'redux-saga'
import { fork } from 'redux-saga/effects'
//...
yield fork(takeEvery, ACTION_A, worker)

although the latter is deprecated at the moment.
Im saying this only to point out that takeEvery etc in this case returns a task descriptor, cause its wrapped by a fork internally automatically for you, so what I've written there applies directly to your question  (2nd vs 3rd option)
As to yielding iterators directly - although possible (in the same way it is possible to directly yield a promise) it is rather advised to yield them wrapped by a call or fork (depending on the needs). It obviously creates some overhead as more stuff needs to be handled internally, but the cost is minimal and it allow you to easily injecting 'resolved' values of the effects in your tests and bunch of other things.

Actually, advice spread across issue comments don't help. Is it possible to make the code and documentation consistent on that matter?

@fzaninotto unfortunatly it's like asking for JS std to recommand a prefered way to iterate over an array, while there are usecases for forEach, for, map, iterator...
We can't really recommend a way to start root sagas however we can certainly explain better the effect. I think it's probably worth creating a dedicated documentation page.
your examples
1)
// single entry point to start all Sagas at once
export default function* rootSaga() {
  yield [
    helloSaga(),
    watchIncrementAsync()
  ]
}

Here the 2 sagas will be run in parallel. The root saga will block until the 2 sagas complete. If one of the 2 fail, the error will be propagated to the root saga which will be killed, which will also kill the 2nd saga
2)
export default function* root() {
  yield [
    fork(getAllProducts),
    fork(watchGetProducts),
    fork(watchCheckout)
  ]
}

The only difference I see here is that this time the yield effect will not block because forking is non-blocking, thus the root saga will reach the end but the 3 childs will remain alive. Error behavior is the same as 1)
3)
export default function* root() {
  yield fork(startup)
  yield fork(nextRedditChange)
  yield fork(invalidateReddit)
}

I don't see any difference from 2)

other examples
The problem with forking is that if any of the root saga fails, then the root saga will be killed, and the other sub sagas will also be killed because their parent got killed. In practice this means that your whole app may become unusable (if it relies heavily on sagas) just because of a minor saga error so it's not really good.
4)
export default function* root() {
  yield spawn(saga1)
  yield spawn(saga2)
  yield spawn(saga3)
}

This time, if an error occur in saga1, it will not make root, saga2 and saga3 get killed so only a part of your app stops working in case of error. Somehow this can also be very problematic because the saga1 might be killed due to an error like a failing http request that you didn't catch properly, making the whole feature covered by saga1 unavailable for the app lifetime.
5)
@granmoe has suggested the following way to start sagas in: https://github.com/redux-saga/redux-saga/issues/570
function* rootSaga () {

  const sagas = [
    saga1,
    saga2,
    saga3,
  ];

  yield sagas.map(saga =>
    spawn(function* () {
      while (true) {
        try {
          yield call(saga)
        } catch (e) {
          console.log(e)
        }
      }
    })
  )

}

This time, if any of the 3 sagas had an error, it would be automatically restarted. This may, or not, be the desired behavior according to your app.
6)
Here's how I handle sagas in my own app:
const makeRestartable = (saga) => {
  return function* () {
    yield spawn(function* () {
      while (true) {
        try {
          yield call(saga);
          console.error("unexpected root saga termination. The root sagas are supposed to be sagas that live during the whole app lifetime!",saga);
        } catch (e) {
          console.error("Saga error, the saga will be restarted",e);
        }
        yield delay(1000); // Avoid infinite failures blocking app TODO use backoff retry policy...
      }
    })
  };
};

const rootSagas = [
  saga1,
  saga2,
  saga3,
].map(makeRestartable);

export default function* root() {
  yield rootSagas.map(saga => call(saga));
}

I'm using a saga HOC to add error handling to the root sagas. In my app, all root sagas are never supposed to terminate but should block, and if there are errors they should be automatically restarted.
Restarting synchronously can, in my experience, lead to infinite loops (if the saga fails everytime you try to restart it) so I added a hacky delay for now to prevent this issue.

If this is helpful I can write something like that in the doc.

Well, I'm confused even more.

you say you can't make redux-saga doc and code consistent, but I don't understand why
you say in example 1) the root saga blocks, but since most of the underlying watches use takeEvery, which implicitly fork in 0.14 if I'm not mistaken, then it's not blocking.
example 1 seems to have serious drawbacks because of the blocking risk, yet it's what used in the first tutorial in the documentation - the one developers like me will refer to when composing sagas.
example 4 uses spawn, which is not the default way to make non-blocking calls according to the documentation (it's fork). I tried to understand the difference between spawn and fork by reading the related doc, and my brain melted.
examples 5 and 6 add to the confusion: are they better than the others? Should we forget about all the previous examples and use these? I'm really looking for a simple answer.
thinking that users will understand the intricacies of these choices makes redux a bit too elitist IMO. I'm a long time ES6 developer, and I still don't understand what I'm supposed to use in my use case. You'd better choose the best method, and use it all around the doc and say "that's the only way you should do", without explaining how it works under the hood. Much better Developer Experience!

Sorry to take your time on this, but I'm developing an open-source based on saga (admin-on-rest), and I struggle to explain to my users how they should compose their sagas and why.

you say you can't make redux-saga doc and code consistent, but I don't understand why

Code and doc can be consistent, and we certainly all want that, but it does not mean that there's a "best way" to start root sagas, just that we can explain the different options.
I'm not either officially from redux-saga team, and everybody can contribute to the doc if something is not clear enough.

you say in example 1) the root saga blocks, but since most of the underlying watches use takeEvery, which implicitly fork in 0.14 if I'm not mistaken, then it's not blocking.

The root saga blocks if any subtask blocks. If all subtasks are not blocking then the root saga will terminate as well because there's nothing to wait for.

example 4 uses spawn, which is not the default way to make non-blocking calls according to the documentation (it's fork). I tried to understand the difference between spawn and fork by reading the related doc, and my brain melted.

Forked tasks will be killed when the parent is killed, while spawned tasks will be kept alive (and you will have to cancel them yourself on errors if you don't want them to keep running)
spawned sagas are a bit like new root sagas that you can start directly from deeper levels.

examples 5 and 6 add to the confusion: are they better than the others? Should we forget about all the previous examples and use these? I'm really looking for a simple answer.

IMHO they are for root sagas, but it's only my opinion and my usecase. And this only applied for root sagas because generally on deeper level you might want errors to propagate.
You might be interested to read as well: https://github.com/redux-saga/redux-saga/issues/570

thinking that users will understand the intricacies of these choices makes redux a bit too elitist IMO. I'm a long time ES6 developer, and I still don't understand what I'm supposed to use in my use case. You'd better choose the best method, and use it all around the doc and say "that's the only way you should do", without explaining how it works under the hood. Much better Developer Experience!

Redux-saga is probably not yet mature enough and the doc could certainly be better. We are all figuring this out together but as we are iterating progressively according to usecases we find, it becomes clearer over time.
It's true that a lot of information is currently hidden in github comments, and at some point we should probably make the doc better including the most useful comments.
Feel free to apply some techniques mentionned in comments, and give feedback so we figure out together what to recommend to the users

Thanks for taking the time to explain, I appreciate.

I'm not either officially from redux-saga team

Then maybe @yelouafi or @Andarist could provide insight, too?

everybody can contribute to the doc if something is not clear enough

I'd love to, I just don't know what to write because I don't understand the rationale behind these gazillion choices.

The root saga blocks if any subtask blocks

So I understand that example 1) should be discouraged, because if a subsaga isn't forked, then the developer exposes themselves to problems. Should we update the tutorial accordingly?

spawned sagas are a bit like new root sagas

My understanding is that they are for advanced usage, so this shouldn't be the main recommendation, right ?
All in all, am I right to think that example 3 is safe to use in most cases, simple to explain, and should be the syntax to encourage?

Redux-saga is probably not yet mature enough and the doc could certainly be better.

I think the code is great but the documentation is clearly lagging in behind. And documentation is at least as important as code for open-source projects. Again, I'd love to help if there was a Definitive Way to do things.

@slorber great example and recommendation to use spawn at the top-level. It's nice to see real use-cases for spawn.
Can you explain this statement?

Restarting synchronously can, in my experience, lead to infinite loops (if the saga fails everytime you try to restart it) so I added a hacky delay for now to prevent this issue.

How does delay prevent this issue if a saga fails each time on restart?
Rather than yield a delay, can we just yield PUT{ error: true } to an error-reducer? (or yield to an error-catching saga)

I must admit I'm really struggling to feel confident about my redux-saga architecture at the moment too.
It feels like redux-saga is providing some extremely powerful but also very low-level tools at the moment. Something like a set of primitives for composing these async side effect descriptions. Is it fair to say there could be a role for helper libraries to sit on top of redux-saga and provide "blessed" ways to perform the most idiomatic approaches to common use cases?
In any case, is the following a fair description of the most common use-case for redux-saga (at least for developers that are new to it):

A need to compose a set of "watchers" within a file into one saga for exporting
Then compose those exported watcher sagas into one final root saga
Each watcher mainly just watches for one redux action, and then executes a corresponding worker saga
All watchers should run in parallel and not block each other
Errors in child sagas should not explode the whole app

I'm sure there's a world of more possibilities than that, but it seems like the first step for many? Basically copying the functionality of redux-thunk but with the great testability that comes with sagas?

@anthonychung14 try running something like that and you'll see that the main thread stays in Redux-saga forever, freezing your browser tab:

function* alwaysFailingSaga() {
  throw new Error("boom");
}

function* rootSaga() {
      while (true) {
        try {
          yield call(alwaysFailingSaga);
        } catch (e) {
          console.error("Saga error",e);
        }
      }
    }

Yielding a little delay between restarts make room for the browser to execute other things as well.
This is not a production problem, more related to developer experience when you have a big bug in one of your saga you may not like it to freeze your browser. It's very unlikely that you don't notice this bug locally and you ship it to production.

@jedrichards yes redux-saga is an generator runtime interpreter with addons to work nicely with redux, but it's low level and does not really provide any recommendations on how you manage your sagas over time, it's just a toolbox.
We've already discussed in the past the creation of an extra repository for useful addons and patterns (including takeLatest/takeEvery/throttle/debounce/error handling/bootstrapping etc) and it's likely someday someone will do that.
@fzaninotto I don't think spawn is only for advanced usage, it's kinda important for the sagas startup usecases like this one and you might need it in other cases too
For me 1) 2) 3) should be avoided for app startup unless you catch carefully errors in each subsaga and do not let them propagate to parent who'll terminate and kill everything. Using spawn or runSaga seems safer to me but it only isolate the failure to a branch of your system and won't handle potential restart that's why I'm using 6 which is more resilient.

@slorber I tried using the restart strategy you mentioned for sagas, but found that it didn't make them anymore resilient.
A saga failing crashes from a forked saga that failed an api call.
I found that none of my sagas restarted :\
Any idea as to why?
Additionally, is the 1 second truly necessary?
would yield call(delay, 0) work just as well? I'm assuming you're calling the delay just to get another "tick" in the event loop

@anthonychung14 I don't know what you tried so I can't say. You should be able to add logs to debug why your saga does not restart. In my 6th example there are logs that might help you understand what is happening.
About the 1sec delay, it's just a simple restart strategy. If you want something more advanced I'd recommend looking at what actor systems use as supervision strategy

Delayed restarts with the BackoffSupervisor pattern
Provided as a built-in pattern the akka.pattern.BackoffSupervisor implements the so-called exponential backoff supervision strategy, starting a child actor again when it fails, each time with a growing time delay between restarts.
This pattern is useful when the started actor fails [1] because some external resource is not available, and we need to give it some time to start-up again. One of the prime examples when this is useful is when a PersistentActor fails (by stopping) with a persistence failure - which indicates that the database may be down or overloaded, in such situations it makes most sense to give it a little bit of time to recover before the peristent actor is started.

@slorber Why a 1 second delay specifically instead of just clearing the stack with setTimeout? And how would you handle sagas that throw synchronously?

Don't focus on 1sec it's a random value I pick because I didn't have time to implement something better. The only thing to remember here is that if there's no delay between restart attempts, then you might have a saga that continuously tries to restart itself and locks the current tick. It probably works with 0sec delay too as long as you let some space for other work to happen.

@slorber If a saga throws synchronously, your approach restarts it forever: http://www.webpackbin.com/41eSzkUwM
Is that why you mentioned that a more robust "backoff strategy" would be needed? I'm just nitpicking because I'd like to use the best solution here in my own apps. I know this is something that should only ever be able to happen during development (like if you make a typo).

yes @granmoe I want it to try to restart it forever. But I want to give the UI thread some time between restarts to avoid freezing the UI, that's all. There's no best solution, just a solution that works for your usecase. Just try your webpackBin without the delay and you'll immediately understand that it's painful DX to have to kill your chrome tab and reopen it in case of typo

@slorber Oh, I see. Yep, I'm aware of that problem :P I had the same issue in our app, but ended up with another (not ideal) solution:
yield sagas.map(saga =>
    spawn(function* () {
      let isSyncError = false
      while (!isSyncError) {
        isSyncError = true
        try {
          setTimeout(() => isSyncError = false)
          yield call(saga)
          break
        } catch (e) {
          if (isSyncError) {
            throw new Error(saga.name + ' was terminated because it threw an exception on startup.' + e.stack)
          }
          yield put(actions.setError(e.message))
        }
      }
    })
  )

This thread got a little bit stale and also last comments were a littlbe bit off-topic, so I'm closing it. If you need to discuss this further, please just reply back here.

@slorber Im trying out your example number 6 but I aonly get it to work by adding all like this>
export default function* root() {
  yield all(rootSagas.map(saga => call(saga)));
}

I guess it has to do with changes in a newer version of saga. Is this the proper way to do it?

Yes @henninghall yielding arrays is deprecated for quite a while I think. There used to be a deprecating warning but I guess 1.0.0 did really made the breaking change

@henninghall I think it needs all()

This thread is a bit lengthy and old-ish so if someone could summarize the outcome that would be great. As of redux-saga v1 I can see at least 3 ways to combine multiple takeEvery sagas:

From https://redux-saga.js.org/docs/basics/UsingSagaHelpers.html

yield takeEvery('FETCH_USERS', fetchUsers)
yield takeEvery('CREATE_USER', createUser)

From https://redux-saga.js.org/docs/advanced/RunningTasksInParallel.html

function* fetchUsersDaemon() {
  yield takeEvery('FETCH_USERS', fetchUsers)
}
function* createUserDaemon() {
  yield takeEvery('CREATE_USER', createUser)
}

yield all([ fetchUsersDaemon(), createUserDaemon() ])

Using fork

yield fork(fetchUsersDaemon);
yield fork(createUserDaemon);

I assume 2 is equivalent to 1 (but obviously also works with the variadic count of tasks). Is it true and also is 3) somehow fundamentally different?

My understanding is 1 and 2 are essentially the same, the difference is the syntax and you can choose either one based on your application needs. I think the 2 is more extensible, as you can add some more logic to daemon sagas. The 3 is well documented, and you can take a look at it here.
So the main difference is while in 1 and 2 the generator is blocked until all the effects are resolved or one of them is rejected, in 3 the rootSaga can finish while the child sagas continue to run and be blocked by their internal effects.
Note: This last statement is built quoting the parts of official documentations.


Moving spaces

See https://github.com/mathjax/MathJax/issues/1833

Resolves https://github.com/mathjax/MathJax/issues/1833


System test flaky

The system test is flaky (see https://source.cloud.google.com/results/invocations/6ba7b0c3-e141-4fea-a875-48c64a520f5b/targets)

I think before the start of system test cases collections should be deleted.

We use random collection names in our system tests. Deleting entire collections is currently an async process that requires walking the document hierarchy.


Updated settings to better match the primary repository

Copied a couple of things from the primary repository into the Mac template repository.
This should hopefully help any other Mac folks who are trying to learn the SDK from having to go back and forth trying to figure out why Lua autocompletion wasn't working out of the box.

Hi, what's the primary repository you're referring to?
Also kind of wondering if this template is even still relevant. I think there are working Playdate extensions now for building and running in VS Code. Do you know if there's an advantage to having this manual setup? (I've not been doing Playdate dev recently).

I didn't even think to look for any Playdate specific extensions. There are, indeed, a couple that would accomplish similar goals without having to do this manually.
The "primary" repository is one that links to yours - https://github.com/Whitebrim/VSCode-PlaydateTemplate. It is pointing to your template for Mac use in its README.
The SquidGod video tutorials (among others) are pointing to the Whitebrim repo, which is sending Mac users to yours. My line of thinking was to ease potential headaches for anyone following along on a Mac (like myself). The extensions are going to meet my needs better than this setup. But this might help others who also didn't look for them ahead of time.

Great, thanks for the info.
I'll merge this in and maybe add a note to the README that points to the extensions. Then folks can choose whatever works best for them.


installation problem - bioformats

Hi - I'm having issues with getting the bioformats package, when I run chromosomer I get:
pkg_resources.DistributionNotFound: bioformats
but do have python-bioformats installed:
pip install python-bioformats
Requirement already satisfied (use --upgrade to upgrade): python-bioformats in XXXX
Requirement already satisfied (use --upgrade to upgrade): javabridge>=1.0 in XXXX
Requirement already satisfied (use --upgrade to upgrade): numpy in XXXX
Cleaning up...
Any ideas?
Thomas

Hi Tomas,
python-bioformats and bioformats are different packages. Please try to install the bioformats package in the following way:
pip install bioformats

Gaik

Thanks. When I run 'pip install bioformats', I'm getting:
Downloading/unpacking bioformats
Could not find any downloads that satisfy the requirement bioformats
No distributions at all found for bioformats
Thomas
On 09/05/16 16:46, Gaik Tamazian wrote:

Hi Tomas,
python-bioformats https://pypi.python.org/pypi/python-bioformats and
bioformats https://pypi.python.org/pypi/bioformats are different
packages. Please try to install the bioformats package in the
following way:
|pip install bioformats |
Gaik
—
You are receiving this because you authored the thread.
Reply to this email directly or view it on GitHub
https://github.com/gtamazian/chromosomer/issues/9#issuecomment-217903558

--
The Wellcome Trust Sanger Institute is operated by Genome Research
Limited, a charity registered in England with number 1021457 and a
company registered in England with number 2742969, whose registered
office is 215 Euston Road, London, NW1 2BE.

Could you please show the output of the following commands?
pip -V

and
python -V

My pip version (pip --version) is 1.1. And python version is 2.7.3
(python -V). Are these compatible?
Thomas
On 09/05/16 16:54, Gaik Tamazian wrote:

Could you please show the output of the following commands?
|pip -V |
and
|python -V |
—
You are receiving this because you authored the thread.
Reply to this email directly or view it on GitHub
https://github.com/gtamazian/chromosomer/issues/9#issuecomment-217905817

--
The Wellcome Trust Sanger Institute is operated by Genome Research
Limited, a charity registered in England with number 1021457 and a
company registered in England with number 2742969, whose registered
office is 215 Euston Road, London, NW1 2BE.

The Python version seems fine but pip looks outdated. Please try to update it via the following command:
pip install --upgrade pip

I checked both Chromosomer and bioformats to work on Python 2.7.11 and pip 8.1.1.
Gaik

Thanks, that worked.
Thomas
On 09/05/16 17:36, Gaik Tamazian wrote:

The Python version seems fine but pip looks outdated. Please try
to update it via the following command:
|pip install --upgrade pip |
I checked both Chromosomer and bioformats to work on Python
2.7.11 and pip 8.1.1.
Gaik
—
You are receiving this because you authored the thread.
Reply to this email directly or view it on GitHub
https://github.com/gtamazian/chromosomer/issues/9#issuecomment-217917407

--
The Wellcome Trust Sanger Institute is operated by Genome Research
Limited, a charity registered in England with number 1021457 and a
company registered in England with number 2742969, whose registered
office is 215 Euston Road, London, NW1 2BE.


Tune mangle.json

This pull request tunes the settings in mangle.json to make the core faster (by ~50% in a specific benchmark) and bundle size smaller (about -20 B).

This also illustrates how it's a good idea to run the benchmarks with the production builds, as Terser seems to be able to have a big impact in the (micro level) performance depending on the compression + mangling settings.

For some reason mangling core's Node._source to Node.s adds a significant performance hit (on a small micro-benchmark). Renaming it to Node.S instead helps to boost performance by 20% or so.
Another setting causing another ~20% performance hit is the "evaluate" compression option. Turning it off helps performance, but raises the build bundle size a bit.
To compensate for that turning off "conditionals", "loops" and "sequences" compression options reduce the bundle size quite a bit.
The end result ends up being ~50% core performance reduction in particular microbenchmarks. The core bundle size ends up reduced by around 20 bytes across the board.
The microbenchmark in question:
import * as core from "@preact/signals-core";

{
  const count = core.signal(0);
  const double = core.computed(() => count.value * 2);
  core.effect(() => double.value + count.value);
  core.effect(() => double.value + count.value);
  core.effect(() => double.value + count.value);

  console.time("core");

  for (let i = 0; i < 20000000; i++) {
    count.value++;
    double.value;
  }

  console.timeEnd("core");
}

Here are the results after each step. These seem consistent no matter whether the code is using TS-compiled classes or hand-rolled ES5 classes:

Version
core.js.gz size
benchmark time

baseline
1614 B
3.211s

+ Node.S
1613 B
2.836s

+ "evaluate": false
1627 B
2.348s

+ rest of the PR
1594 B
2.422s

Awesome, I had been toying with this locally but hadn't yet uncovered the s root cause!

Yeah, to be honest I don't really get what's going on there either. Like some object shape transition thing, the shape overlapping with another class's shape until it doesn't?