Prevent the surface upgrade tool from running during export

Closes https://github.com/godotengine/godot/issues/84171. This also adds a new "Project > Tools" menu option to trigger the tool on demand.

Implemented very quickly, please test.

Tested locally, it seems to work fine.
I can only partially reproduce #84171 in 4.2-rc1 on Linux - it shows the overlapped dialogs as shown in the screenshot, but for me the surface upgrade tool one has focus and is functional, so I can select "Upgrade and Re-save". It then proceeds to do the export properly. But I can see how it could behave differently on other OSes/DEs.
With this PR, it no longer shows the surface upgrade tool, and proceeds with the export. I didn't test the actual APK as I don't have the setup to do so.
I tested the manual trigger of the tool, and it seems to work well here:
diff --git a/addons/godot-xr-tools/audio/surface_audio.tscn b/addons/godot-xr-tools/audio/surface_audio.tscn
index 81fdcb9..adf25b7 100644
--- a/addons/godot-xr-tools/audio/surface_audio.tscn
+++ b/addons/godot-xr-tools/audio/surface_audio.tscn
@@ -1,6 +1,6 @@
-[gd_scene load_steps=2 format=2]
+[gd_scene load_steps=2 format=3 uid="uid://bwho375oxeyh1"]

-[ext_resource path="res://addons/godot-xr-tools/audio/surface_audio.gd" type="Script" id=1]
+[ext_resource type="Script" path="res://addons/godot-xr-tools/audio/surface_audio.gd" id="1"]

 [node name="SurfaceAudio" type="Node"]
-script = ExtResource( 1 )
+script = ExtResource("1")
diff --git a/addons/godot-xr-tools/effects/vignette.tscn b/addons/godot-xr-tools/effects/vignette.tscn
index 3ac97d3..304a637 100644
--- a/addons/godot-xr-tools/effects/vignette.tscn
+++ b/addons/godot-xr-tools/effects/vignette.tscn
@@ -6,10 +6,11 @@
 [sub_resource type="ArrayMesh" id="ArrayMesh_yyajy"]
 _surfaces = [{
 "aabb": AABB(-2, -2, 0, 4, 4, 1e-05),
-"format": 4097,
+"format":<PHONE_NUMBER>5,
 "index_count": 192,
 "index_data": PackedByteArray(32, 0, 33, 0, 1, 0, 32, 0, 1, 0, 0, 0, 33, 0, 34, 0, 2, 0, 33, 0, 2, 0, 1, 0, 34, 0, 35, 0, 3, 0, 34, 0, 3, 0, 2, 0, 35, 0, 36, 0, 4, 0, 35, 0, 4, 0, 3, 0, 36, 0, 37, 0, 5, 0, 36, 0, 5, 0, 4, 0, 37, 0, 38, 0, 6, 0, 37, 0, 6, 0, 5, 0, 38, 0, 39, 0, 7, 0, 38, 0, 7, 0, 6, 0, 39, 0, 40, 0, 8, 0, 39, 0, 8, 0, 7, 0, 40, 0, 41, 0, 9, 0, 40, 0, 9, 0, 8, 0, 41, 0, 42, 0, 10, 0, 41, 0, 10, 0, 9, 0, 42, 0, 43, 0, 11, 0, 42, 0, 11, 0, 10, 0, 43, 0, 44, 0, 12, 0, 43, 0, 12, 0, 11, 0, 44, 0, 45, 0, 13, 0, 44, 0, 13, 0, 12, 0, 45, 0, 46, 0, 14, 0, 45, 0, 14, 0, 13, 0, 46, 0, 47, 0, 15, 0, 46, 0, 15, 0, 14, 0, 47, 0, 48, 0, 16, 0, 47, 0, 16, 0, 15, 0, 48, 0, 49, 0, 17, 0, 48, 0, 17, 0, 16, 0, 49, 0, 50, 0, 18, 0, 49, 0, 18, 0, 17, 0, 50, 0, 51, 0, 19, 0, 50, 0, 19, 0, 18, 0, 51, 0, 52, 0, 20, 0, 51, 0, 20, 0, 19, 0, 52, 0, 53, 0, 21, 0, 52, 0, 21, 0, 20, 0, 53, 0, 54, 0, 22, 0, 53, 0, 22, 0, 21, 0, 54, 0, 55, 0, 23, 0, 54, 0, 23, 0, 22, 0, 55, 0, 56, 0, 24, 0, 55, 0, 24, 0, 23, 0, 56, 0, 57, 0, 25, 0, 56, 0, 25, 0, 24, 0, 57, 0, 58, 0, 26, 0, 57, 0, 26, 0, 25, 0, 58, 0, 59, 0, 27, 0, 58, 0, 27, 0, 26, 0, 59, 0, 60, 0, 28, 0, 59, 0, 28, 0, 27, 0, 60, 0, 61, 0, 29, 0, 60, 0, 29, 0, 28, 0, 61, 0, 62, 0, 30, 0, 61, 0, 30, 0, 29, 0, 62, 0, 63, 0, 31, 0, 62, 0, 31, 0, 30, 0, 63, 0, 32, 0, 0, 0, 63, 0, 0, 0, 31, 0),
 "primitive": 3,
+"uv_scale": Vector4(0, 0, 0, 0),
 "vertex_count": 64,
 "vertex_data": PackedByteArray(0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 190, 20, 123, 63, 194, 197, 71, 190, 0, 0, 0, 0, 94, 131, 108, 63, 22, 239, 195, 190, 0, 0, 0, 0, 49, 219, 84, 63, 218, 57, 14, 191, 0, 0, 0, 0, 243, 4, 53, 63, 243, 4, 53, 191, 0, 0, 0, 0, 218, 57, 14, 63, 49, 219, 84, 191, 0, 0, 0, 0, 21, 239, 195, 62, 94, 131, 108, 191, 0, 0, 0, 0, 196, 197, 71, 62, 190, 20, 123, 191, 0, 0, 0, 0, 46, 189, 59, 179, 0, 0, 128, 191, 0, 0, 0, 0, 194, 197, 71, 190, 190, 20, 123, 191, 0, 0, 0, 0, 20, 239, 195, 190, 95, 131, 108, 191, 0, 0, 0, 0, 217, 57, 14, 191, 50, 219, 84, 191, 0, 0, 0, 0, 243, 4, 53, 191, 243, 4, 53, 191, 0, 0, 0, 0, 50, 219, 84, 191, 217, 57, 14, 191, 0, 0, 0, 0, 94, 131, 108, 191, 23, 239, 195, 190, 0, 0, 0, 0, 191, 20, 123, 191, 193, 197, 71, 190, 0, 0, 0, 0, 0, 0, 128, 191, 46, 189, 187, 51, 0, 0, 0, 0, 191, 20, 123, 191, 189, 197, 71, 62, 0, 0, 0, 0, 94, 131, 108, 191, 21, 239, 195, 62, 0, 0, 0, 0, 48, 219, 84, 191, 219, 57, 14, 63, 0, 0, 0, 0, 244, 4, 53, 191, 242, 4, 53, 63, 0, 0, 0, 0, 221, 57, 14, 191, 47, 219, 84, 63, 0, 0, 0, 0, 26, 239, 195, 190, 94, 131, 108, 63, 0, 0, 0, 0, 198, 197, 71, 190, 190, 20, 123, 63, 0, 0, 0, 0, 46, 222, 76, 50, 0, 0, 128, 63, 0, 0, 0, 0, 200, 197, 71, 62, 190, 20, 123, 63, 0, 0, 0, 0, 27, 239, 195, 62, 93, 131, 108, 63, 0, 0, 0, 0, 215, 57, 14, 63, 51, 219, 84, 63, 0, 0, 0, 0, 242, 4, 53, 63, 245, 4, 53, 63, 0, 0, 0, 0, 49, 219, 84, 63, 219, 57, 14, 63, 0, 0, 0, 0, 95, 131, 108, 63, 21, 239, 195, 62, 0, 0, 0, 0, 191, 20, 123, 63, 188, 197, 71, 62, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 190, 20, 251, 63, 194, 197, 199, 190, 0, 0, 0, 0, 94, 131, 236, 63, 22, 239, 67, 191, 0, 0, 0, 0, 49, 219, 212, 63, 218, 57, 142, 191, 0, 0, 0, 0, 243, 4, 181, 63, 243, 4, 181, 191, 0, 0, 0, 0, 218, 57, 142, 63, 49, 219, 212, 191, 0, 0, 0, 0, 21, 239, 67, 63, 94, 131, 236, 191, 0, 0, 0, 0, 196, 197, 199, 62, 190, 20, 251, 191, 0, 0, 0, 0, 46, 189, 187, 179, 0, 0, 0, 192, 0, 0, 0, 0, 194, 197, 199, 190, 190, 20, 251, 191, 0, 0, 0, 0, 20, 239, 67, 191, 95, 131, 236, 191, 0, 0, 0, 0, 217, 57, 142, 191, 50, 219, 212, 191, 0, 0, 0, 0, 243, 4, 181, 191, 243, 4, 181, 191, 0, 0, 0, 0, 50, 219, 212, 191, 217, 57, 142, 191, 0, 0, 0, 0, 94, 131, 236, 191, 23, 239, 67, 191, 0, 0, 0, 0, 191, 20, 251, 191, 193, 197, 199, 190, 0, 0, 0, 0, 0, 0, 0, 192, 46, 189, 59, 52, 0, 0, 0, 0, 191, 20, 251, 191, 189, 197, 199, 62, 0, 0, 0, 0, 94, 131, 236, 191, 21, 239, 67, 63, 0, 0, 0, 0, 48, 219, 212, 191, 219, 57, 142, 63, 0, 0, 0, 0, 244, 4, 181, 191, 242, 4, 181, 63, 0, 0, 0, 0, 221, 57, 142, 191, 47, 219, 212, 63, 0, 0, 0, 0, 26, 239, 67, 191, 94, 131, 236, 63, 0, 0, 0, 0, 198, 197, 199, 190, 190, 20, 251, 63, 0, 0, 0, 0, 46, 222, 204, 50, 0, 0, 0, 64, 0, 0, 0, 0, 200, 197, 199, 62, 190, 20, 251, 63, 0, 0, 0, 0, 27, 239, 67, 63, 93, 131, 236, 63, 0, 0, 0, 0, 215, 57, 142, 63, 51, 219, 212, 63, 0, 0, 0, 0, 242, 4, 181, 63, 245, 4, 181, 63, 0, 0, 0, 0, 49, 219, 212, 63, 219, 57, 142, 63, 0, 0, 0, 0, 95, 131, 236, 63, 21, 239, 67, 63, 0, 0, 0, 0, 191, 20, 251, 63, 188, 197, 199, 62, 0, 0, 0, 0)
 }]
diff --git a/addons/godot-xr-tools/hands/scenes/highpoly/left_fullglove_hand.tscn b/addons/godot-xr-tools/hands/scenes/highpoly/left_fullglove_hand.tscn
index 5af1d46..bed1f5a 100644
--- a/addons/godot-xr-tools/hands/scenes/highpoly/left_fullglove_hand.tscn
+++ b/addons/godot-xr-tools/hands/scenes/highpoly/left_fullglove_hand.tscn
@@ -36,7 +36,7 @@ nodes/OpenHand/node = SubResource("AnimationNodeAnimation_rtx6p")
 nodes/OpenHand/position = Vector2(-600, 100)
 nodes/Trigger/node = SubResource("AnimationNodeBlend2_y01rx")
 nodes/Trigger/position = Vector2(-360, 20)
-node_connections = [&"output", 0, &"Grip", &"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1"]
+node_connections = [&"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1", &"output", 0, &"Grip"]

 [node name="LeftHand" type="Node3D"]
 script = ExtResource("3")
diff --git a/addons/godot-xr-tools/hands/scenes/highpoly/left_fullglove_physics_hand.tscn b/addons/godot-xr-tools/hands/scenes/highpoly/left_fullglove_physics_hand.tscn
index 64dfa96..9dbc3cb 100644
--- a/addons/godot-xr-tools/hands/scenes/highpoly/left_fullglove_physics_hand.tscn
+++ b/addons/godot-xr-tools/hands/scenes/highpoly/left_fullglove_physics_hand.tscn
@@ -37,7 +37,7 @@ nodes/OpenHand/node = SubResource("AnimationNodeAnimation_g5ps2")
 nodes/OpenHand/position = Vector2(-600, 100)
 nodes/Trigger/node = SubResource("AnimationNodeBlend2_v8isy")
 nodes/Trigger/position = Vector2(-360, 20)
-node_connections = [&"output", 0, &"Grip", &"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1"]
+node_connections = [&"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1", &"output", 0, &"Grip"]

 [node name="LeftPhysicsHand" type="Node3D"]
 script = ExtResource("3")
diff --git a/addons/godot-xr-tools/hands/scenes/highpoly/left_hand.tscn b/addons/godot-xr-tools/hands/scenes/highpoly/left_hand.tscn
index ef1c2d3..d82794f 100644
--- a/addons/godot-xr-tools/hands/scenes/highpoly/left_hand.tscn
+++ b/addons/godot-xr-tools/hands/scenes/highpoly/left_hand.tscn
@@ -36,7 +36,7 @@ nodes/OpenHand/node = SubResource("AnimationNodeAnimation_cxcnq")
 nodes/OpenHand/position = Vector2(-600, 100)
 nodes/Trigger/node = SubResource("AnimationNodeBlend2_yn70n")
 nodes/Trigger/position = Vector2(-360, 20)
-node_connections = [&"output", 0, &"Grip", &"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1"]
+node_connections = [&"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1", &"output", 0, &"Grip"]

 [node name="LeftHand" type="Node3D"]
 script = ExtResource("3")
diff --git a/addons/godot-xr-tools/hands/scenes/highpoly/left_physics_hand.tscn b/addons/godot-xr-tools/hands/scenes/highpoly/left_physics_hand.tscn
index c94c778..9cb3b9d 100644
--- a/addons/godot-xr-tools/hands/scenes/highpoly/left_physics_hand.tscn
+++ b/addons/godot-xr-tools/hands/scenes/highpoly/left_physics_hand.tscn
@@ -37,7 +37,7 @@ nodes/OpenHand/node = SubResource("AnimationNodeAnimation_40ncn")
 nodes/OpenHand/position = Vector2(-600, 100)
 nodes/Trigger/node = SubResource("AnimationNodeBlend2_fjpy6")
 nodes/Trigger/position = Vector2(-360, 20)
-node_connections = [&"output", 0, &"Grip", &"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1"]
+node_connections = [&"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1", &"output", 0, &"Grip"]

 [node name="LeftPhysicsHand" type="Node3D"]
 script = ExtResource("3")
diff --git a/addons/godot-xr-tools/hands/scenes/highpoly/left_physics_tac_glove.tscn b/addons/godot-xr-tools/hands/scenes/highpoly/left_physics_tac_glove.tscn
index 43f657f..05886c7 100644
--- a/addons/godot-xr-tools/hands/scenes/highpoly/left_physics_tac_glove.tscn
+++ b/addons/godot-xr-tools/hands/scenes/highpoly/left_physics_tac_glove.tscn
@@ -37,7 +37,7 @@ nodes/OpenHand/node = SubResource("AnimationNodeAnimation_2ih7n")
 nodes/OpenHand/position = Vector2(-600, 100)
 nodes/Trigger/node = SubResource("AnimationNodeBlend2_02eq5")
 nodes/Trigger/position = Vector2(-360, 20)
-node_connections = [&"output", 0, &"Grip", &"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1"]
+node_connections = [&"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1", &"output", 0, &"Grip"]

 [node name="LeftPhysicsHand" type="Node3D"]
 script = ExtResource("6")
diff --git a/addons/godot-xr-tools/hands/scenes/highpoly/left_tac_glove.tscn b/addons/godot-xr-tools/hands/scenes/highpoly/left_tac_glove.tscn
index 60a45d6..473f3ae 100644
--- a/addons/godot-xr-tools/hands/scenes/highpoly/left_tac_glove.tscn
+++ b/addons/godot-xr-tools/hands/scenes/highpoly/left_tac_glove.tscn
@@ -36,7 +36,7 @@ nodes/OpenHand/node = SubResource("AnimationNodeAnimation_kjpaa")
 nodes/OpenHand/position = Vector2(-600, 100)
 nodes/Trigger/node = SubResource("AnimationNodeBlend2_kisbg")
 nodes/Trigger/position = Vector2(-360, 20)
-node_connections = [&"output", 0, &"Grip", &"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1"]
+node_connections = [&"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1", &"output", 0, &"Grip"]

 [node name="LeftHand" type="Node3D"]
 script = ExtResource("3")
diff --git a/addons/godot-xr-tools/hands/scenes/highpoly/right_fullglove_hand.tscn b/addons/godot-xr-tools/hands/scenes/highpoly/right_fullglove_hand.tscn
index 84e076b..e6c1a10 100644
--- a/addons/godot-xr-tools/hands/scenes/highpoly/right_fullglove_hand.tscn
+++ b/addons/godot-xr-tools/hands/scenes/highpoly/right_fullglove_hand.tscn
@@ -36,7 +36,7 @@ nodes/OpenHand/node = SubResource("AnimationNodeAnimation_gm5ny")
 nodes/OpenHand/position = Vector2(-600, 100)
 nodes/Trigger/node = SubResource("AnimationNodeBlend2_3o6s4")
 nodes/Trigger/position = Vector2(-360, 40)
-node_connections = [&"output", 0, &"Grip", &"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1"]
+node_connections = [&"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1", &"output", 0, &"Grip"]

 [node name="RightHand" type="Node3D"]
 script = ExtResource("3")
diff --git a/addons/godot-xr-tools/hands/scenes/highpoly/right_fullglove_physics_hand.tscn b/addons/godot-xr-tools/hands/scenes/highpoly/right_fullglove_physics_hand.tscn
index c48a0c5..c3f588f 100644
--- a/addons/godot-xr-tools/hands/scenes/highpoly/right_fullglove_physics_hand.tscn
+++ b/addons/godot-xr-tools/hands/scenes/highpoly/right_fullglove_physics_hand.tscn
@@ -37,7 +37,7 @@ nodes/OpenHand/node = SubResource("AnimationNodeAnimation_4mwbe")
 nodes/OpenHand/position = Vector2(-600, 100)
 nodes/Trigger/node = SubResource("AnimationNodeBlend2_x7ees")
 nodes/Trigger/position = Vector2(-360, 40)
-node_connections = [&"output", 0, &"Grip", &"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1"]
+node_connections = [&"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1", &"output", 0, &"Grip"]

 [node name="RightPhysicsHand" type="Node3D"]
 script = ExtResource("3")
diff --git a/addons/godot-xr-tools/hands/scenes/highpoly/right_hand.tscn b/addons/godot-xr-tools/hands/scenes/highpoly/right_hand.tscn
index 3062ad9..5768f69 100644
--- a/addons/godot-xr-tools/hands/scenes/highpoly/right_hand.tscn
+++ b/addons/godot-xr-tools/hands/scenes/highpoly/right_hand.tscn
@@ -36,7 +36,7 @@ nodes/OpenHand/node = SubResource("AnimationNodeAnimation_0hd6d")
 nodes/OpenHand/position = Vector2(-600, 100)
 nodes/Trigger/node = SubResource("AnimationNodeBlend2_okkj6")
 nodes/Trigger/position = Vector2(-360, 40)
-node_connections = [&"output", 0, &"Grip", &"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1"]
+node_connections = [&"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1", &"output", 0, &"Grip"]

 [node name="RightHand" type="Node3D"]
 script = ExtResource("3")
diff --git a/addons/godot-xr-tools/hands/scenes/highpoly/right_physics_hand.tscn b/addons/godot-xr-tools/hands/scenes/highpoly/right_physics_hand.tscn
index 0ee707a..c6c3e86 100644
--- a/addons/godot-xr-tools/hands/scenes/highpoly/right_physics_hand.tscn
+++ b/addons/godot-xr-tools/hands/scenes/highpoly/right_physics_hand.tscn
@@ -37,7 +37,7 @@ nodes/OpenHand/node = SubResource("AnimationNodeAnimation_4bb4h")
 nodes/OpenHand/position = Vector2(-600, 100)
 nodes/Trigger/node = SubResource("AnimationNodeBlend2_b8ks0")
 nodes/Trigger/position = Vector2(-360, 40)
-node_connections = [&"output", 0, &"Grip", &"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1"]
+node_connections = [&"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1", &"output", 0, &"Grip"]

 [node name="RightPhysicsHand" type="Node3D"]
 script = ExtResource("3")
diff --git a/addons/godot-xr-tools/hands/scenes/highpoly/right_physics_tac_glove.tscn b/addons/godot-xr-tools/hands/scenes/highpoly/right_physics_tac_glove.tscn
index 18bf291..8733951 100644
--- a/addons/godot-xr-tools/hands/scenes/highpoly/right_physics_tac_glove.tscn
+++ b/addons/godot-xr-tools/hands/scenes/highpoly/right_physics_tac_glove.tscn
@@ -37,7 +37,7 @@ nodes/OpenHand/node = SubResource("AnimationNodeAnimation_dc0m1")
 nodes/OpenHand/position = Vector2(-600, 100)
 nodes/Trigger/node = SubResource("AnimationNodeBlend2_guoth")
 nodes/Trigger/position = Vector2(-360, 40)
-node_connections = [&"output", 0, &"Grip", &"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1"]
+node_connections = [&"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1", &"output", 0, &"Grip"]

 [node name="RightPhysicsHand" type="Node3D"]
 script = ExtResource("6")
diff --git a/addons/godot-xr-tools/hands/scenes/highpoly/right_tac_glove.tscn b/addons/godot-xr-tools/hands/scenes/highpoly/right_tac_glove.tscn
index 3ac11a0..f965cca 100644
--- a/addons/godot-xr-tools/hands/scenes/highpoly/right_tac_glove.tscn
+++ b/addons/godot-xr-tools/hands/scenes/highpoly/right_tac_glove.tscn
@@ -36,7 +36,7 @@ nodes/OpenHand/node = SubResource("AnimationNodeAnimation_4vdom")
 nodes/OpenHand/position = Vector2(-600, 100)
 nodes/Trigger/node = SubResource("AnimationNodeBlend2_hef27")
 nodes/Trigger/position = Vector2(-360, 40)
-node_connections = [&"output", 0, &"Grip", &"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1"]
+node_connections = [&"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1", &"output", 0, &"Grip"]

 [node name="RightHand" type="Node3D"]
 script = ExtResource("3")
diff --git a/addons/godot-xr-tools/hands/scenes/lowpoly/left_fullglove_low.tscn b/addons/godot-xr-tools/hands/scenes/lowpoly/left_fullglove_low.tscn
index 1899c63..857aa11 100644
--- a/addons/godot-xr-tools/hands/scenes/lowpoly/left_fullglove_low.tscn
+++ b/addons/godot-xr-tools/hands/scenes/lowpoly/left_fullglove_low.tscn
@@ -36,7 +36,7 @@ nodes/OpenHand/node = SubResource("AnimationNodeAnimation_470u2")
 nodes/OpenHand/position = Vector2(-600, 100)
 nodes/Trigger/node = SubResource("AnimationNodeBlend2_fhgyt")
 nodes/Trigger/position = Vector2(-360, 20)
-node_connections = [&"output", 0, &"Grip", &"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1"]
+node_connections = [&"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1", &"output", 0, &"Grip"]

 [node name="LeftHand" type="Node3D"]
 script = ExtResource("3")
diff --git a/addons/godot-xr-tools/hands/scenes/lowpoly/left_hand_low.tscn b/addons/godot-xr-tools/hands/scenes/lowpoly/left_hand_low.tscn
index 7455a9d..489522c 100644
--- a/addons/godot-xr-tools/hands/scenes/lowpoly/left_hand_low.tscn
+++ b/addons/godot-xr-tools/hands/scenes/lowpoly/left_hand_low.tscn
@@ -36,7 +36,7 @@ nodes/OpenHand/node = SubResource("AnimationNodeAnimation_c3h37")
 nodes/OpenHand/position = Vector2(-600, 100)
 nodes/Trigger/node = SubResource("AnimationNodeBlend2_ihxeh")
 nodes/Trigger/position = Vector2(-360, 20)
-node_connections = [&"output", 0, &"Grip", &"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1"]
+node_connections = [&"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1", &"output", 0, &"Grip"]

 [node name="LeftHand" type="Node3D"]
 script = ExtResource("3")
diff --git a/addons/godot-xr-tools/hands/scenes/lowpoly/left_physics_fullglove_low.tscn b/addons/godot-xr-tools/hands/scenes/lowpoly/left_physics_fullglove_low.tscn
index 94f4a5b..5e9ec96 100644
--- a/addons/godot-xr-tools/hands/scenes/lowpoly/left_physics_fullglove_low.tscn
+++ b/addons/godot-xr-tools/hands/scenes/lowpoly/left_physics_fullglove_low.tscn
@@ -37,7 +37,7 @@ nodes/OpenHand/node = SubResource("AnimationNodeAnimation_fvmpw")
 nodes/OpenHand/position = Vector2(-600, 100)
 nodes/Trigger/node = SubResource("AnimationNodeBlend2_a1c3t")
 nodes/Trigger/position = Vector2(-360, 20)
-node_connections = [&"output", 0, &"Grip", &"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1"]
+node_connections = [&"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1", &"output", 0, &"Grip"]

 [node name="LeftPhysicsHand" type="Node3D"]
 script = ExtResource("3")
diff --git a/addons/godot-xr-tools/hands/scenes/lowpoly/left_physics_hand_low.tscn b/addons/godot-xr-tools/hands/scenes/lowpoly/left_physics_hand_low.tscn
index 7c0ccfb..7425e45 100644
--- a/addons/godot-xr-tools/hands/scenes/lowpoly/left_physics_hand_low.tscn
+++ b/addons/godot-xr-tools/hands/scenes/lowpoly/left_physics_hand_low.tscn
@@ -37,7 +37,7 @@ nodes/OpenHand/node = SubResource("AnimationNodeAnimation_3l13i")
 nodes/OpenHand/position = Vector2(-600, 100)
 nodes/Trigger/node = SubResource("AnimationNodeBlend2_ms3kw")
 nodes/Trigger/position = Vector2(-360, 20)
-node_connections = [&"output", 0, &"Grip", &"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1"]
+node_connections = [&"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1", &"output", 0, &"Grip"]

 [node name="LeftPhysicsHand" type="Node3D"]
 script = ExtResource("3")
diff --git a/addons/godot-xr-tools/hands/scenes/lowpoly/left_physics_tac_glove_low.tscn b/addons/godot-xr-tools/hands/scenes/lowpoly/left_physics_tac_glove_low.tscn
index 57263a9..a8f1436 100644
--- a/addons/godot-xr-tools/hands/scenes/lowpoly/left_physics_tac_glove_low.tscn
+++ b/addons/godot-xr-tools/hands/scenes/lowpoly/left_physics_tac_glove_low.tscn
@@ -37,7 +37,7 @@ nodes/OpenHand/node = SubResource("AnimationNodeAnimation_vkt4w")
 nodes/OpenHand/position = Vector2(-600, 100)
 nodes/Trigger/node = SubResource("AnimationNodeBlend2_1yhw8")
 nodes/Trigger/position = Vector2(-360, 20)
-node_connections = [&"output", 0, &"Grip", &"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1"]
+node_connections = [&"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1", &"output", 0, &"Grip"]

 [node name="LeftPhysicsHand" type="Node3D"]
 script = ExtResource("6")
diff --git a/addons/godot-xr-tools/hands/scenes/lowpoly/left_tac_glove_low.tscn b/addons/godot-xr-tools/hands/scenes/lowpoly/left_tac_glove_low.tscn
index 26176eb..93dc1f1 100644
--- a/addons/godot-xr-tools/hands/scenes/lowpoly/left_tac_glove_low.tscn
+++ b/addons/godot-xr-tools/hands/scenes/lowpoly/left_tac_glove_low.tscn
@@ -36,7 +36,7 @@ nodes/OpenHand/node = SubResource("AnimationNodeAnimation_csu2l")
 nodes/OpenHand/position = Vector2(-600, 100)
 nodes/Trigger/node = SubResource("AnimationNodeBlend2_akg52")
 nodes/Trigger/position = Vector2(-360, 20)
-node_connections = [&"output", 0, &"Grip", &"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1"]
+node_connections = [&"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1", &"output", 0, &"Grip"]

 [node name="LeftHand" type="Node3D"]
 script = ExtResource("3")
diff --git a/addons/godot-xr-tools/hands/scenes/lowpoly/right_fullglove_low.tscn b/addons/godot-xr-tools/hands/scenes/lowpoly/right_fullglove_low.tscn
index 530078b..41d3a74 100644
--- a/addons/godot-xr-tools/hands/scenes/lowpoly/right_fullglove_low.tscn
+++ b/addons/godot-xr-tools/hands/scenes/lowpoly/right_fullglove_low.tscn
@@ -36,7 +36,7 @@ nodes/OpenHand/node = SubResource("AnimationNodeAnimation_l50hj")
 nodes/OpenHand/position = Vector2(-600, 100)
 nodes/Trigger/node = SubResource("AnimationNodeBlend2_vrc3g")
 nodes/Trigger/position = Vector2(-360, 40)
-node_connections = [&"output", 0, &"Grip", &"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1"]
+node_connections = [&"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1", &"output", 0, &"Grip"]

 [node name="RightHand" type="Node3D"]
 script = ExtResource("4")
diff --git a/addons/godot-xr-tools/hands/scenes/lowpoly/right_hand_low.tscn b/addons/godot-xr-tools/hands/scenes/lowpoly/right_hand_low.tscn
index e985370..5fb2a85 100644
--- a/addons/godot-xr-tools/hands/scenes/lowpoly/right_hand_low.tscn
+++ b/addons/godot-xr-tools/hands/scenes/lowpoly/right_hand_low.tscn
@@ -36,7 +36,7 @@ nodes/OpenHand/node = SubResource("AnimationNodeAnimation_covtt")
 nodes/OpenHand/position = Vector2(-600, 100)
 nodes/Trigger/node = SubResource("AnimationNodeBlend2_h5uio")
 nodes/Trigger/position = Vector2(-360, 40)
-node_connections = [&"output", 0, &"Grip", &"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1"]
+node_connections = [&"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1", &"output", 0, &"Grip"]

 [node name="RightHand" type="Node3D"]
 script = ExtResource("3")
diff --git a/addons/godot-xr-tools/hands/scenes/lowpoly/right_physics_fullglove_low.tscn b/addons/godot-xr-tools/hands/scenes/lowpoly/right_physics_fullglove_low.tscn
index be22323..cea83ba 100644
--- a/addons/godot-xr-tools/hands/scenes/lowpoly/right_physics_fullglove_low.tscn
+++ b/addons/godot-xr-tools/hands/scenes/lowpoly/right_physics_fullglove_low.tscn
@@ -37,7 +37,7 @@ nodes/OpenHand/node = SubResource("AnimationNodeAnimation_1fjc2")
 nodes/OpenHand/position = Vector2(-600, 100)
 nodes/Trigger/node = SubResource("AnimationNodeBlend2_ai2qv")
 nodes/Trigger/position = Vector2(-360, 40)
-node_connections = [&"output", 0, &"Grip", &"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1"]
+node_connections = [&"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1", &"output", 0, &"Grip"]

 [node name="RightPhysicsHand" type="Node3D"]
 script = ExtResource("4")
diff --git a/addons/godot-xr-tools/hands/scenes/lowpoly/right_physics_hand_low.tscn b/addons/godot-xr-tools/hands/scenes/lowpoly/right_physics_hand_low.tscn
index 7b35e6f..7c3951a 100644
--- a/addons/godot-xr-tools/hands/scenes/lowpoly/right_physics_hand_low.tscn
+++ b/addons/godot-xr-tools/hands/scenes/lowpoly/right_physics_hand_low.tscn
@@ -37,7 +37,7 @@ nodes/OpenHand/node = SubResource("AnimationNodeAnimation_l0mk4")
 nodes/OpenHand/position = Vector2(-600, 100)
 nodes/Trigger/node = SubResource("AnimationNodeBlend2_it0su")
 nodes/Trigger/position = Vector2(-360, 40)
-node_connections = [&"output", 0, &"Grip", &"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1"]
+node_connections = [&"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1", &"output", 0, &"Grip"]

 [node name="RightPhysicsHand" type="Node3D"]
 script = ExtResource("3")
diff --git a/addons/godot-xr-tools/hands/scenes/lowpoly/right_physics_tac_glove_low.tscn b/addons/godot-xr-tools/hands/scenes/lowpoly/right_physics_tac_glove_low.tscn
index 13804db..59ee070 100644
--- a/addons/godot-xr-tools/hands/scenes/lowpoly/right_physics_tac_glove_low.tscn
+++ b/addons/godot-xr-tools/hands/scenes/lowpoly/right_physics_tac_glove_low.tscn
@@ -37,7 +37,7 @@ nodes/OpenHand/node = SubResource("AnimationNodeAnimation_8kdoe")
 nodes/OpenHand/position = Vector2(-600, 100)
 nodes/Trigger/node = SubResource("AnimationNodeBlend2_5qnsq")
 nodes/Trigger/position = Vector2(-360, 40)
-node_connections = [&"output", 0, &"Grip", &"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1"]
+node_connections = [&"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1", &"output", 0, &"Grip"]

 [node name="RightPhysicsHand" type="Node3D"]
 script = ExtResource("6")
diff --git a/addons/godot-xr-tools/hands/scenes/lowpoly/right_tac_glove_low.tscn b/addons/godot-xr-tools/hands/scenes/lowpoly/right_tac_glove_low.tscn
index a258c44..0e2decc 100644
--- a/addons/godot-xr-tools/hands/scenes/lowpoly/right_tac_glove_low.tscn
+++ b/addons/godot-xr-tools/hands/scenes/lowpoly/right_tac_glove_low.tscn
@@ -36,7 +36,7 @@ nodes/OpenHand/node = SubResource("AnimationNodeAnimation_4o3a2")
 nodes/OpenHand/position = Vector2(-600, 100)
 nodes/Trigger/node = SubResource("AnimationNodeBlend2_5v4fm")
 nodes/Trigger/position = Vector2(-360, 40)
-node_connections = [&"output", 0, &"Grip", &"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1"]
+node_connections = [&"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1", &"output", 0, &"Grip"]

 [node name="RightHand" type="Node3D"]
 script = ExtResource("3")
diff --git a/addons/godot-xr-tools/interactables/interactable_hinge.tscn b/addons/godot-xr-tools/interactables/interactable_hinge.tscn
index 11e5ed8..2101ed5 100644
--- a/addons/godot-xr-tools/interactables/interactable_hinge.tscn
+++ b/addons/godot-xr-tools/interactables/interactable_hinge.tscn
@@ -1,6 +1,6 @@
-[gd_scene load_steps=2 format=2]
+[gd_scene load_steps=2 format=3 uid="uid://cmeoos6vf76p4"]

-[ext_resource path="res://addons/godot-xr-tools/interactables/interactable_hinge.gd" type="Script" id=1]
+[ext_resource type="Script" path="res://addons/godot-xr-tools/interactables/interactable_hinge.gd" id="1"]

 [node name="InteractableHinge" type="Spatial"]
-script = ExtResource( 1 )
+script = ExtResource("1")
diff --git a/addons/godot-xr-tools/interactables/interactable_joystick.tscn b/addons/godot-xr-tools/interactables/interactable_joystick.tscn
index 1dcd9a4..d19257e 100644
--- a/addons/godot-xr-tools/interactables/interactable_joystick.tscn
+++ b/addons/godot-xr-tools/interactables/interactable_joystick.tscn
@@ -1,6 +1,6 @@
-[gd_scene load_steps=2 format=2]
+[gd_scene load_steps=2 format=3 uid="uid://coa6mse2kgyt7"]

-[ext_resource path="res://addons/godot-xr-tools/interactables/interactable_joystick.gd" type="Script" id=1]
+[ext_resource type="Script" path="res://addons/godot-xr-tools/interactables/interactable_joystick.gd" id="1"]

 [node name="InteractableJoystick" type="Spatial"]
-script = ExtResource( 1 )
+script = ExtResource("1")
diff --git a/addons/godot-xr-tools/misc/hold_button.tscn b/addons/godot-xr-tools/misc/hold_button.tscn
index 2e69092..84f9aaa 100644
--- a/addons/godot-xr-tools/misc/hold_button.tscn
+++ b/addons/godot-xr-tools/misc/hold_button.tscn
@@ -10,9 +10,9 @@ resource_local_to_scene = true
 render_priority = 0
 shader = ExtResource("2")
 shader_parameter/albedo = Color(1, 1, 1, 1)
+shader_parameter/value = 0.2
 shader_parameter/fade = 0.05
 shader_parameter/radius = 0.8
-shader_parameter/value = 0.2
 shader_parameter/width = 0.2

 [node name="HoldButton" type="Node3D"]
diff --git a/addons/godot-xr-tools/misc/vr_common_shader_cache.tscn b/addons/godot-xr-tools/misc/vr_common_shader_cache.tscn
index 8c9ab26..0ae3646 100644
--- a/addons/godot-xr-tools/misc/vr_common_shader_cache.tscn
+++ b/addons/godot-xr-tools/misc/vr_common_shader_cache.tscn
@@ -1,7 +1,7 @@
-[gd_scene load_steps=8 format=3]
+[gd_scene load_steps=8 format=3 uid="uid://dfdxcsbrkcc07"]

 [ext_resource type="Script" path="res://addons/godot-xr-tools/misc/vr_common_shader_cache.gd" id="1"]
-[ext_resource type="Material" path="res://addons/godot-xr-tools/materials/teleport.tres" id="2_6822k"]
+[ext_resource type="Material" uid="uid://bk72wfw25ff0v" path="res://addons/godot-xr-tools/materials/teleport.tres" id="2_6822k"]
 [ext_resource type="Material" path="res://addons/godot-xr-tools/materials/target.tres" id="3_agvdv"]
 [ext_resource type="Material" path="res://addons/godot-xr-tools/materials/capsule.tres" id="4_gxjsg"]
 [ext_resource type="Material" path="res://addons/godot-xr-tools/materials/pointer.tres" id="5_12251"]
diff --git a/addons/godot-xr-tools/staging/staging.tscn b/addons/godot-xr-tools/staging/staging.tscn
index d78690b..d3b5231 100644
--- a/addons/godot-xr-tools/staging/staging.tscn
+++ b/addons/godot-xr-tools/staging/staging.tscn
@@ -4,7 +4,7 @@
 [ext_resource type="PackedScene" uid="uid://bqumugyvkct4r" path="res://addons/godot-xr-tools/staging/loading_screen.tscn" id="2"]
 [ext_resource type="Environment" uid="uid://ckiwtcdsam7ed" path="res://addons/godot-xr-tools/staging/staging_env.tres" id="3_40x3a"]
 [ext_resource type="Shader" path="res://addons/godot-xr-tools/staging/fade.gdshader" id="4"]
-[ext_resource type="PackedScene" path="res://addons/godot-xr-tools/misc/vr_common_shader_cache.tscn" id="5"]
+[ext_resource type="PackedScene" uid="uid://dfdxcsbrkcc07" path="res://addons/godot-xr-tools/misc/vr_common_shader_cache.tscn" id="5"]
 [ext_resource type="PackedScene" uid="uid://clc5dre31iskm" path="res://addons/godot-xr-tools/xr/start_xr.tscn" id="6_balvx"]

 [sub_resource type="QuadMesh" id="4"]
diff --git a/game/items/toolbox/toolbox.tscn b/game/items/toolbox/toolbox.tscn
index 0abad73..a6da659 100644
--- a/game/items/toolbox/toolbox.tscn
+++ b/game/items/toolbox/toolbox.tscn
@@ -1,7 +1,7 @@
 [gd_scene load_steps=16 format=3 uid="uid://c33bpwxnrb0gr"]

 [ext_resource type="PackedScene" uid="uid://cc2akik80xtnb" path="res://components/persistent/persistent_item.tscn" id="1_y6luy"]
-[ext_resource type="PackedScene" uid="uid://d3w3e8ocyuq5l" path="res://assets/meshes/inventorys/boxed_toolbox.tscn" id="2_ja1ew"]
+[ext_resource type="PackedScene" uid="uid://d3w3e8ocyuq5l" path="res://game/items/toolbox/boxed_toolbox.tscn" id="2_ja1ew"]
 [ext_resource type="Resource" uid="uid://c61hljsd7ejeo" path="res://game/items/toolbox/toolbox_type.tres" id="2_vckid"]
 [ext_resource type="PackedScene" uid="uid://c25yxb0vt53vc" path="res://addons/godot-xr-tools/objects/grab_points/grab_point_hand_left.tscn" id="3_vbs1k"]
 [ext_resource type="PackedScene" uid="uid://ctw7nbntd5pcj" path="res://addons/godot-xr-tools/objects/grab_points/grab_point_hand_right.tscn" id="4_e0m8r"]
diff --git a/game/zones/house_back_yard/house_back_yard_zone.tscn b/game/zones/house_back_yard/house_back_yard_zone.tscn
index 6a8deb8..52916eb 100644
--- a/game/zones/house_back_yard/house_back_yard_zone.tscn
+++ b/game/zones/house_back_yard/house_back_yard_zone.tscn
@@ -40,7 +40,7 @@ nodes/OpenHand/node = SubResource("AnimationNodeAnimation_030p5")
 nodes/OpenHand/position = Vector2(-600, 100)
 nodes/Trigger/node = SubResource("AnimationNodeBlend2_acps2")
 nodes/Trigger/position = Vector2(-360, 20)
-node_connections = [&"output", 0, &"Grip", &"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1"]
+node_connections = [&"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1", &"output", 0, &"Grip"]

 [sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_6bs3a"]
 animation = &"Grip"
@@ -71,7 +71,7 @@ nodes/OpenHand/node = SubResource("AnimationNodeAnimation_6rona")
 nodes/OpenHand/position = Vector2(-600, 100)
 nodes/Trigger/node = SubResource("AnimationNodeBlend2_4yg54")
 nodes/Trigger/position = Vector2(-360, 40)
-node_connections = [&"output", 0, &"Grip", &"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1"]
+node_connections = [&"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1", &"output", 0, &"Grip"]

 [sub_resource type="QuadMesh" id="QuadMesh_tg51c"]
 material = ExtResource("2_2nr20")
diff --git a/game/zones/house_interior/house_interior_zone.tscn b/game/zones/house_interior/house_interior_zone.tscn
index 71875ff..8945b20 100644
--- a/game/zones/house_interior/house_interior_zone.tscn
+++ b/game/zones/house_interior/house_interior_zone.tscn
@@ -42,7 +42,7 @@ nodes/OpenHand/node = SubResource("AnimationNodeAnimation_4glen")
 nodes/OpenHand/position = Vector2(-600, 100)
 nodes/Trigger/node = SubResource("AnimationNodeBlend2_lh6lx")
 nodes/Trigger/position = Vector2(-360, 20)
-node_connections = [&"output", 0, &"Grip", &"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1"]
+node_connections = [&"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1", &"output", 0, &"Grip"]

 [sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_0dda0"]
 animation = &"Grip"
@@ -73,7 +73,7 @@ nodes/OpenHand/node = SubResource("AnimationNodeAnimation_pe2vh")
 nodes/OpenHand/position = Vector2(-600, 100)
 nodes/Trigger/node = SubResource("AnimationNodeBlend2_kn2ma")
 nodes/Trigger/position = Vector2(-360, 40)
-node_connections = [&"output", 0, &"Grip", &"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1"]
+node_connections = [&"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1", &"output", 0, &"Grip"]

 [sub_resource type="QuadMesh" id="QuadMesh_ss6of"]
 material = ExtResource("4_8oeg0")
diff --git a/game/zones/outside/outside_zone.tscn b/game/zones/outside/outside_zone.tscn
index d072691..e22ba8f 100644
--- a/game/zones/outside/outside_zone.tscn
+++ b/game/zones/outside/outside_zone.tscn
@@ -44,7 +44,7 @@ nodes/OpenHand/node = SubResource("AnimationNodeAnimation_8y4d1")
 nodes/OpenHand/position = Vector2(-600, 100)
 nodes/Trigger/node = SubResource("AnimationNodeBlend2_iyfkk")
 nodes/Trigger/position = Vector2(-360, 20)
-node_connections = [&"output", 0, &"Grip", &"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1"]
+node_connections = [&"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1", &"output", 0, &"Grip"]

 [sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_xxwsy"]
 animation = &"Grip"
@@ -75,7 +75,7 @@ nodes/OpenHand/node = SubResource("AnimationNodeAnimation_8npt3")
 nodes/OpenHand/position = Vector2(-600, 100)
 nodes/Trigger/node = SubResource("AnimationNodeBlend2_doyug")
 nodes/Trigger/position = Vector2(-360, 40)
-node_connections = [&"output", 0, &"Grip", &"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1"]
+node_connections = [&"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1", &"output", 0, &"Grip"]

 [sub_resource type="QuadMesh" id="QuadMesh_0144s"]
 material = ExtResource("2_uryyw")
diff --git a/game/zones/zone_base.tscn b/game/zones/zone_base.tscn
index db44036..a05fa35 100644
--- a/game/zones/zone_base.tscn
+++ b/game/zones/zone_base.tscn
@@ -48,7 +48,7 @@ nodes/OpenHand/node = SubResource("AnimationNodeAnimation_u47f6")
 nodes/OpenHand/position = Vector2(-600, 100)
 nodes/Trigger/node = SubResource("AnimationNodeBlend2_1kag1")
 nodes/Trigger/position = Vector2(-360, 20)
-node_connections = [&"output", 0, &"Grip", &"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1"]
+node_connections = [&"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1", &"output", 0, &"Grip"]

 [sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_n3638"]
 animation = &"Grip"
@@ -79,7 +79,7 @@ nodes/OpenHand/node = SubResource("AnimationNodeAnimation_g0jtn")
 nodes/OpenHand/position = Vector2(-600, 100)
 nodes/Trigger/node = SubResource("AnimationNodeBlend2_g8ki7")
 nodes/Trigger/position = Vector2(-360, 40)
-node_connections = [&"output", 0, &"Grip", &"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1"]
+node_connections = [&"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1", &"output", 0, &"Grip"]

 [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_g8k03"]
 transparency = 1

Note that this means the notice in https://github.com/godotengine/godot-docs/pull/8488 will have to be updated.

The logic for the dialog to appear automatically it still the same, it's just disabled when exporting the project, but that wasn't the intended place for the dialog to appear anyway.
What this shows is that the statement that the dialog will appear on edit is not always true. It likely only appears if the loaded scene(s) include affected meshes. Otherwise it's waiting for any old mesh to be loaded, which can be done by loading other scenes, generating thumbnails, or as seen here exporting the project.
So the migration guide should be tweaked to say that either the dialog will be shown automatically, or we strongly recommend that users should run it manually via the tools menu to ensure that all their scene dependencies are fully updated.

Thanks!

What this shows is that the statement that the dialog will appear on edit is not always true. It likely only appears if the loaded scene(s) include affected meshes. Otherwise it's waiting for any old mesh to be loaded, which can be done by loading other scenes, generating thumbnails, or as seen here exporting the project.
So the migration guide should be tweaked to say that either the dialog will be shown automatically, or we strongly recommend that users should run it manually via the tools menu to ensure that all their scene dependencies are fully updated.

I've found this to be the norm actually, especially when downloading plugins from the asset library (like Godot XR tools), or cloning a template (like Godot XR Template) from Github. This isn't a pure upgrading issue.
A plugin can't be upgraded to include the newer format of meshes because that would make it unusable with older versions of Godot, and there are still plenty of people using our plugin with Godot 4.1. But also the user downloading the plugin doesn't open all the scenes in the plugin, they don't get touched until the export happens prompting the dialog.
Eventually the user will open something with an old format mesh and trigger the conversion, but until then it's an issue.
What makes it worse is that simply going through our getting started tutorial for XR, you run into this exact situation, and with many people trying it out for our upcoming XR game jam, I suspect we haven't seen the end of this.


Fixed #23757 -- Added 3D introspection support to Spatialite backend

Claude, code looks fine, but I think there were still unaddressed test failures last time I looked at this. Should this be documented?

buildbot, test this please.

buildbot, test on lucid.

buildbot, test on lucid.

The Geo3DTest tests don't work on the version of spatialite on 12.04 - maybe the features need to be a function of the spatial version?

I suspect this patch is incompatible with GEOS 3.2. Could you check if Lucid is using GEOS 3.2?

3.1 according to https://launchpad.net/ubuntu/lucid/+source/geos

And we don't support 3.1 any longer...
https://docs.djangoproject.com/en/1.8/ref/contrib/gis/install/geolibs/

Oops, 12.04 is called precise, not lucid. So we actually have 3.2.2 there.

buildbot, test on precise.

buildbot, test on precise.

Checkout errors on the precise build, but the checkouts that succeeded did pass, so I think this is good to go.


Feature: Reply to specific message in group

This is not exactly an issue.
Description:
When in a group with multiple members, multiple messages are send some as information and some as queries. If there could be a feature where we can respond to specific message, it can be really helpful. Members in a group can easily understand  the response is to which message.

Currently teams does not support replying to specific message in group. This feature will be available in future. Please upvote this user voice


Software possibly being used for spying

Im not exactly sure how but i noticed the grey lines on my phone a lot even when i wasnt using the program, would it be possible to send an unathorized access notifcation or something similar when someone outside of another persons network is connected to their phone?

i noticed the grey lines on my phone a lot

What are "the grey lines" ?
Scrcpy does not cause any "grey line".

There are lines on the right side of your phone youll see albeit very faint. Thats what alt+w is for.

Hmmm, no, that looks like a bug on your device. This is not what Alt+g (I think you meant Alt+w) or double click on black borders are for: their purpose is to remove black borders added on the client side, they have no effect on the device.

I noticed that i installed an app with a virus on my phone and i was seeing the line on the side that was identical to the line youd see when using scrcpy.

The app i installed was a working game so i didnt notice anything was wrong till scanned a backup of the game on virus total.

To clairfy i dont think the software itself is malicious more so that someone is using it maliciously.


你好 请问一下你使用的node和npm版本是多少 我的node是17.0.1 npm是8.1.0 然后执行install的时候直接报错

$ npm install
npm notice Beginning October 4, 2021, all connections to the npm registry - including for package installation - must use TLS 1.2 or higher. You are currently using plaintext http to connect. Please visit the GitHub blog for more information: https://github.blog/2021-08-23-npm-registry-deprecating-tls-1-0-tls-1-1/
npm notice Beginning October 4, 2021, all connections to the npm registry - including for package installation - must use TLS 1.2 or higher. You are currently using plaintext http to connect. Please visit the GitHub blog for more information: https://github.blog/2021-08-23-npm-registry-deprecating-tls-1-0-tls-1-1/
npm WARN deprecated<EMAIL_ADDRESS>See https://github.com/lydell/source-map-url#deprecated
npm WARN deprecated<EMAIL_ADDRESS>This version has been deprecated and is no longer supported or maintained
npm WARN deprecated<EMAIL_ADDRESS>This version has been deprecated and is no longer supported or maintained
npm WARN deprecated<EMAIL_ADDRESS>Please see https://github.com/lydell/urix#deprecated
npm WARN deprecated<EMAIL_ADDRESS>this library is no longer supported
npm WARN deprecated<EMAIL_ADDRESS>This loader has been deprecated. Please use eslint-webpack-plugin
npm WARN deprecated<EMAIL_ADDRESS>https://github.com/lydell/resolve-url#deprecated
npm WARN deprecated<EMAIL_ADDRESS>See https://github.com/lydell/source-map-resolve#deprecated
npm WARN deprecated<EMAIL_ADDRESS>fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.
npm WARN deprecated<EMAIL_ADDRESS>Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies
npm WARN deprecated<EMAIL_ADDRESS>fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.
npm WARN deprecated<EMAIL_ADDRESS>Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies
npm WARN deprecated<EMAIL_ADDRESS>The querystring API is considered Legacy. new code should use the URLSearchParams API instead.
npm WARN deprecated<EMAIL_ADDRESS>3.x is no longer supported
npm WARN deprecated<EMAIL_ADDRESS>babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.
npm WARN deprecated<EMAIL_ADDRESS>Moved to 'npm install @sideway/address'
npm WARN deprecated<EMAIL_ADDRESS>Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.
npm WARN deprecated<EMAIL_ADDRESS>request has been deprecated, see https://github.com/request/request/issues/3142
npm WARN deprecated<EMAIL_ADDRESS>This version has been deprecated and is no longer supported or maintained
npm WARN deprecated<EMAIL_ADDRESS>Switch to 'npm install joi'
npm WARN deprecated<EMAIL_ADDRESS>This SVGO version is no longer supported. Upgrade to v2.x.x.
npm WARN deprecated<EMAIL_ADDRESS>This version of tar is no longer supported, and will not receive security updates. Please upgrade asap.
npm WARN deprecated<EMAIL_ADDRESS><EMAIL_ADDRESS>is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js.
npm ERR! code 1
npm ERR! path /Users/lone0x0/bbs-admin-frontend/node_modules/node-sass
npm ERR! command failed
npm ERR! command sh -c node scripts/build.js
npm ERR! Building: /usr/local/Cellar/node/17.0.1/bin/node /Users/lone0x0/bbs-admin-frontend/node_modules/node-gyp/bin/node-gyp.js rebuild --verbose --libsass_ext= --libsass_cflags= --libsass_ldflags= --libsass_library=
npm ERR! gyp info it worked if it ends with ok
npm ERR! gyp verb cli [
npm ERR! gyp verb cli   '/usr/local/Cellar/node/17.0.1/bin/node',
npm ERR! gyp verb cli   '/Users/lone0x0/bbs-admin-frontend/node_modules/node-gyp/bin/node-gyp.js',
npm ERR! gyp verb cli   'rebuild',
npm ERR! gyp verb cli   '--verbose',
npm ERR! gyp verb cli   '--libsass_ext=',
npm ERR! gyp verb cli   '--libsass_cflags=',
npm ERR! gyp verb cli   '--libsass_ldflags=',
npm ERR! gyp verb cli   '--libsass_library='
npm ERR! gyp verb cli ]
npm ERR! gyp info using<EMAIL_ADDRESS>npm ERR! gyp info using<EMAIL_ADDRESS>| darwin | x64
npm ERR! gyp verb command rebuild []
npm ERR! gyp verb command clean []
npm ERR! gyp verb clean removing "build" directory
npm ERR! gyp verb command configure []
npm ERR! gyp verb check python checking for Python executable "python2" in the PATH
npm ERR! gyp verb which succeeded python2 /usr/bin/python2
npm ERR! gyp verb check python version /usr/bin/python2 -c "import sys; print "2.7.16 npm ERR! gyp verb check python version .%s.%s" % sys.version_info[:3];" returned: %j
npm ERR! gyp verb get node dir no --target version specified, falling back to host node version: 17.0.1
npm ERR! gyp verb command install [ '17.0.1' ]
npm ERR! gyp verb install input version string "17.0.1"
npm ERR! gyp verb install installing version: 17.0.1
npm ERR! gyp verb install --ensure was passed, so won't reinstall if already installed
npm ERR! gyp verb install version is already installed, need to check "installVersion"
npm ERR! gyp verb got "installVersion" 9
npm ERR! gyp verb needs "installVersion" 9
npm ERR! gyp verb install version is good
npm ERR! gyp verb get node dir target node version installed: 17.0.1
npm ERR! gyp verb build dir attempting to create "build" dir: /Users/lone0x0/bbs-admin-frontend/node_modules/node-sass/build
npm ERR! gyp verb build dir "build" dir needed to be created? /Users/lone0x0/bbs-admin-frontend/node_modules/node-sass/build
npm ERR! gyp verb build/config.gypi creating config file
npm ERR! gyp verb build/config.gypi writing out config file: /Users/lone0x0/bbs-admin-frontend/node_modules/node-sass/build/config.gypi
npm ERR! (node:1584) [DEP0150] DeprecationWarning: Setting process.config is deprecated. In the future the property will be read-only.
npm ERR!  No receipt for 'com.apple.pkg.CLTools_Executables' found at '/'.
npm ERR!
npm ERR! No receipt for 'com.apple.pkg.DeveloperToolsCLILeo' found at '/'.
npm ERR!
npm ERR! No receipt for 'com.apple.pkg.DeveloperToolsCLI' found at '/'.
npm ERR!
npm ERR! gyp: No Xcode or CLT version detected!
npm ERR! gyp ERR! configure error
npm ERR! gyp ERR! stack Error: gyp failed with exit code: 1
npm ERR! gyp ERR! stack     at ChildProcess.onCpExit (/Users/lone0x0/bbs-admin-frontend/node_modules/node-gyp/lib/configure.js:345:16)
npm ERR! gyp ERR! stack     at ChildProcess.emit (node:events:390:28)
npm ERR! gyp ERR! stack     at Process.ChildProcess._handle.onexit (node:internal/child_process:290:12)
npm ERR! gyp ERR! System Darwin 20.5.0
npm ERR! gyp ERR! command "/usr/local/Cellar/node/17.0.1/bin/node" "/Users/lone0x0/bbs-admin-frontend/node_modules/node-gyp/bin/node-gyp.js" "rebuild" "--verbose" "--libsass_ext=" "--libsass_cflags=" "--libsass_ldflags=" "--libsass_library="
npm ERR! gyp ERR! cwd /Users/lone0x0/bbs-admin-frontend/node_modules/node-sass
npm ERR! gyp ERR! node -v v17.0.1
npm ERR! gyp ERR! node-gyp -v v3.8.0
npm ERR! gyp ERR! not ok
npm ERR! Build failed with error code: 1
npm ERR!      /Users/lone0x0/.npm/_logs/2022-02-21T11_50_37_434Z-debug.log

node是10.19.0 npm是6.14.4

ok 换成你的相对应版本就好了


能否内置实现乐观锁？

1、期望功能
希望能内置加一个Version int64字段，和CreatedAt等类似，每次update时都会自动加上  UPDATE user SET ..., version = version + 1 WHERE id = ? AND version = ?
2、原因
原则上业务端也能子自己实现，但是有时候想提供一个通用的接口，Update（id int64， value interface{}）value既可以既可以传struct，也可以传map
如果调用方传一个map时，接口内部实现  UPDATE user SET ..., version = version + 1 WHERE id = ? AND version = ?就比较不友好，而且还得判断map中是否有version字段等等

没必要加到gorm里吧，可以自已简单封封装一下Update

没必要加到gorm里吧，可以自已简单封封装一下Update

go没有泛型，如果自己封装gorm增加version来实现一个通用接口update，这个接口内部也需要用到反射，gorm内部也做了反射，感觉重复了

go没有泛型，如果自己封装gorm增加version来实现一个通用接口update，这个接口内部也需要用到反射，gorm内部也做了反射，感觉重复了

Just write a plugin for this like the soft delete one, don't think it is necessary to be integrated into GORM.  Pull request welcome if you are interested.

Just write a plugin for this like the soft delete one, don't think it is necessary to be integrated into GORM.  Pull request welcome if you are interested.

@jinzhu
I write a plugin according to sofe-delete implementation https://github.com/Goxiaoy/gorm-concurrency
But it's better to be a built in function like other orms. And provider better support for chain function call
If this issue is still open for PR, I can request one
https://github.com/go-gorp/gorp#optimistic-locking
https://docs.microsoft.com/en-us/ef/core/modeling/concurrency?tabs=data-annotations
https://docs.jboss.org/hibernate/core/3.3/reference/en/html/transactions.html#transactions-optimistic
我根据软删除的实现写了一个乐观锁的插件
但是如果像其他Orm一样有内置的支持会比较方便链式函数调用
如果这个issue 还开放的话我可以提一个PR

Hi @Goxiaoy
Would you like to maintain a gorm plugin like this one? https://github.com/go-gorm/soft_delete

If so, I will create a repo for you.

@jinzhu
Sure, my pleasure. But it will depend on some modification on main repo
https://github.com/go-gorm/gorm/blob/74e7a9ca079ba44c4e9038088dace76726f2b69c/finisher_api.go#L106-L108
Concurrency update will run into this condition


Repeating sentence in Azure 'Create a New Project' page

File: themes/default/content/docs/get-started/azure/create-project.md
At the end, the sentence "After the command completes, the project and stack will be ready." is repeated three times. It seems all three can be removed, since the sentence "After some dependency installations from npm, the project and stack will be ready." seems to explain what happens.

Ah, nevermind, seems one of my Chrome plugins was causing this.


ember-data link on implementations page is broken

didnt check any others - just ember-data. current link is https://api.emberjs.com/ember-data/release/modules/@ember-data%2Fjson-api

What do you mean by broken? Implementation page contains the following link for Ember Data: https://github.com/emberjs/data That link points to the GitHub repository used by that project. We could include the API documentation for one of its classes as well. But for most other implementations links to the GitHub repositories are used as well. I tend towards keeping that for consistency.

yes sorry it was unclear. there is a link in the second sentence to the "official adapter" which points to the ember-data adapter in the ember docs. the ember api docs give a 404 for that link. it i snow https://api.emberjs.com/ember-data/release/modules/@ember-data%2Fadapter%2Fjson-api


Revert "Move code coverage steps into shared template. Enable live test opt-in"

Reverts Azure/azure-sdk-for-net#21277
I accidentally merged this PR, forgetting that were some outstanding coverage issues I was seeing and needed to debug (but not captured by build failures).

/check-enforcer override


Update compatibility with terrafrom > v0.11.0

@thunderbird86 thanks a lot for posting this. Updating this repo to match upstream for a given commit is typically a little bit more involved: all modules should be updated in parallel to the same version as it would be a little odd to import modules at different versions. Luckily, it is very easy to do: updating this repo involves simply executing make update. This will update all of the terraform configuration and create a new commit. I've just just updated the repo to match upstream in the last commit (https://github.com/coreos/terraform-aws-kubernetes/commit/fb5c6c70b74ce60f3face81dc8cadafe5597645d), so this PR should no longer be needed.


Make CustomParameterExpressionBuilder<TArg> non-sealed

Product
Hot Chocolate
Is your feature request related to a problem?
After watching the Customizing the Resolver Compiler in Hot Chocolate video and playing with the resolver compiler stuff, it seems to me that it would make sense to make the generic CustomParameterExpressionBuilder<TArg> class non-sealed so users can inherit from it to create custom parameter expression builder classes that also implement IParameterFieldConfiguration just like what's shown in the video here.
Currently, if you want to do that, you need to inherit from the non-generic CustomParameterExpressionBuilder, and that requires a fair of amount of boring boilerplate (such as the Build and CanHandle methods, and the private Expression<...> field, shown in the video here), which are all things that the generic CustomParameterExpressionBuilder<TArg> class already takes care of.
So why not let people inherit from it instead?
The solution you'd like
This means you could reduce this:
public class AuthenticatedUserParameterExpressionBuilder :
    CustomParameterExpressionBuilder,
    IParameterFieldConfiguration
{
    private static Expression<Func<IResolverContext, AuthenticatedUser?>> _expression =
        ctx => ctx.GetLocalState<AuthenticatedUser?>(nameof(AuthenticatedUser));

    public void ApplyConfiguration(ParameterInfo parameter, ObjectFieldDescriptor descriptor) =>
        descriptor.Use(next => async context =>
        {
            var authRetriever = context.Service<AuthRetriever>();
            context.SetLocalState(nameof(AuthenticatedUser), await authRetriever.User);
            await next(context);
        });

    public override Expression Build(ParameterExpressionBuilderContext context) =>
        Expression.Invoke(_expression, context.ResolverContext);

    public override bool CanHandle(ParameterInfo parameter) =>
        parameter.ParameterType == typeof(AuthenticatedUser);
}

To this:
public class AuthenticatedUserParameterExpressionBuilder :
    CustomParameterExpressionBuilder<AuthenticatedUser>,
    IParameterFieldConfiguration
{
    public AuthenticatedUserParameterExpressionBuilder() : base(ctx => ctx.GetLocalState<AuthenticatedUser?>(nameof(AuthenticatedUser))) { }

    public void ApplyConfiguration(ParameterInfo parameter, ObjectFieldDescriptor descriptor) =>
        descriptor.Use(next => async context =>
        {
            var authRetriever = context.Service<AuthRetriever>();
            context.SetLocalState(nameof(AuthenticatedUser), await authRetriever.User);
            await next(context);
        });
}

@michaelstaib @PascalSenn Sorry to tag you guys but just wanted to ask if you agree with this so I can create a pull request?

Yeah ... go ahead.


Add AlgebraicRewriting as a requirement in Project.toml?

Not currently used in any source files, but we use it in some of the Jupyter files.  Maybe add it under [extras], like Test?

In #63


Security: registration token is stored in plan text in user-data

Describe the solution you'd like
The runner token is stored in the SSM Parameter store but the registration token is just there in plain text.
It would make sense to get it dynamically from another parameter. That parameter can possibly be managed externally.

Describe alternatives you've considered

Suggest a solution

(option 1). Create an SSM parameter with provided registration token. Get the token dynamically from it.
(option 2). Point user-data to the ssm parameter to get the token from it. This way the SSM parameter can be managed externally and the token doesn't end up in the terraform state.

Additional context

Not sure if it's worth creating another issue. The provided IAM policy allows reading all SSM parameters. It doesn't seem like it's required and access should be scoped down to one resource (or 2 if the registration token is placed in there as well).

See #822 which implements option 2.

Thank you!


CLI proof of concept

See #183 #184

Thanks for the contribution. As another contributor has pointed out, a Python-based doesn't really make sense since Ollama CLI already exists. This library is meant to be a thin wrapper around the Ollama API. As such, a CLI would be out of scope.


Auditpol documentation should indicate that changes may not be reflected in local group policy editor GUI

I used the following command to set up object access auditing for ADCS:
auditpol.exe /set /subcategory:{0CCE9221-69AE-11D9-BED3-505054503030} /success:enable /failure:enable

The result was The command was successfully executed. however, the change isn't reflected in the group policy editor.

A coworker pointed me to this article which calls out that changes made using auditpol.exe may not be reflected in the local group policy editor.
I verified this using auditpol /get:

The auditpol documentation should include a call-out that changes made with this tool will not necessarily be reflected in the local group policy editor.

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

ID: 4db7a055-a5ca-e6f9-5786-99d0f325e708
Version Independent ID: eb61d370-6e32-6776-d0bc-17197bacf84f
Content: auditpol set
Content Source: WindowsServerDocs/administration/windows-commands/auditpol-set.md
Service: windows-server
Sub-service: administration
GitHub Login: @JasonGerend
Microsoft Alias: jgerend

We hugely appreciate your contribution, feedback, and support to our technical documentation.
We’ve phased out GitHub Issues on this repository as the feedback mechanism for content and have replaced it with a new feedback system. For more information see, Content User Feedback. As part of this rollout, we are migrating your issue where our team will use your comments to improve the documentation experience. Unfortunately, this does mean you won't be able to access this issue after the migration is complete.
All issues will be migrated by Thursday 29th August 2024.
Once again, thank you for your valuable feedback, we hope you’ll continue to contribute using our new feedback system.


Add support for Selenium 4.3.0, Correct ClickOnAirplane issue

Selenium 4.3.0 deprecated the find_element(s)_xxx commands causing exceptions for installs with the new version. This change adds support for the 4.3.0 commands while retaining support for older installs of Selenium. It does not add any new functionality from 4.3.0.
In ClickOnAirplane, aircraft rows were found by looking for the hex value in <td>. The hex column isn't displayed by default in tar1090, however, which causes an error when trying to find the aircraft. Changed it to look at the id in <tr> which is always available.

Have manually made the relevant changes because I am bumping the requirements, so not all the logic is required. Thanks for the work!


fix(childname): use reference to component instead of type.name

This resolves

https://github.com/carbon-design-system/carbon-components-react/issues/136
https://github.com/carbon-design-system/carbon-components-react/issues/58

Prettier also took a whack at this, but

LGTM. Fixes #137 also ;)

👍 ✅

Bluemix toolchain: Delivery Pipeline deployed carbon-components-react to Bluemix Design System, including commit 7a3ef7efeec0aadf62c6970e814e06825f170876


Seems crash when all data are zero

NSMutableArray* chartData = [NSMutableArray arrayWithCapacity:10];
srand(time(nil));
for(int i=0;i<10;i++) {
int r = (rand() + rand()) % 1000;
chartData[i] = [NSNumber numberWithInt:0];
}
// Creating the line chart
FSLineChart* lineChart = [[FSLineChart alloc] initWithFrame:CGRectMake(20, 60, [UIScreen mainScreen].bounds.size.width - 40, 166)];
lineChart.verticalGridStep = 5;
lineChart.horizontalGridStep = 9;
//lineChart.fillColor = nil;
lineChart.labelForIndex = ^(NSUInteger item) {
return [NSString stringWithFormat:@"%lu",(unsigned long)item];
};
lineChart.labelForValue = ^(CGFloat value) {
return [NSString<EMAIL_ADDRESS>value];
};
[lineChart setChartData:chartData];
return lineChart;
I replace all the data point with 0 in the example project and the app crashed. Here is the failure information:
Assertion failed: (CGFloatIsValid(x) && CGFloatIsValid(y)), function void CGPathMoveToPoint(CGMutablePathRef, const CGAffineTransform *, CGFloat, CGFloat), file Paths/CGPath.cc, line 254.

Same issue. Please, any fix?

Any idea when this will be fixed?

I am going to have a look. However I accept pull requests in general. So if you have a fix please submit one and I'll review it :)

I don't have a fix, but would very much appreciate one, this is a fantastic chart tool.

Any idea on the timeframe for the fix?

Any progress on the all zero bug?

   CGFloat scale = MAX(0, _axisHeight / (maxBound - minBound));

I fixed this:
CGFloat b = maxBound - minBound;
CGFloat scale = b != 0 ? _axisHeight / b : 0;

It should be fixed now. Thanks for reporting the issue.


Circular reference in Computation.wait_sampleset() causes slow garbage collection in some cases

https://github.com/dwavesystems/dwave-cloud-client/blob/5829a538b2045c9fac1bec7fe7888feb6973945d/dwave/cloud/computation.py#L795-L799
creates a circular reference. This means that the garbage collector is slow to identify and remove the sampleset/computation.
You can see this with
from dwave.system import DWaveSampler

sampler = DWaveSampler()

s = 0
for i in range(1000):
    print("job:", i)
    future = sampler.solver.sample_ising({30: 0, 31: 0, 32: 0, 33: 0, 34: 0, 35: 0, 36: 0, 37: 0, 38: 0, 39: 0}, {}, num_reads=1000)
    sampleset = future.wait_sampleset()

where (tested with Python 3.12) you can watch slowly accumulating memory usage, whereas
import gc
from dwave.system import DWaveSampler

sampler = DWaveSampler()

s = 0
for i in range(1000):
    print("job:", i)
    future = sampler.solver.sample_ising({30: 0, 31: 0, 32: 0, 33: 0, 34: 0, 35: 0, 36: 0, 37: 0, 38: 0, 39: 0}, {}, num_reads=1000)
    sampleset = future.wait_sampleset()
    gc.collect()

and
from dwave.system import DWaveSampler

sampler = DWaveSampler()

s = 0
for i in range(1000):
    print("job:", i)
    future = sampler.solver.sample_ising({30: 0, 31: 0, 32: 0, 33: 0, 34: 0, 35: 0, 36: 0, 37: 0, 38: 0, 39: 0}, {}, num_reads=1000)
    sampleset = future.wait_sampleset()
    del sampleset.wait_id

hold steady.

I think it would suffice to just do
        id_ = self.wait_id()
        sampleset.wait_id = lamda: id_

instead.

The first line is an overkill indeed. Response is resolved at the beginning of wait_sampleset(), so id is known already (it's in self.id), and wait_id() returns without blocking. To prevent capturing self in lambda's closure, your proposed approach should work.
However, the bigger problem is in the sampleset property:
https://github.com/dwavesystems/dwave-cloud-client/blob/5829a538b2045c9fac1bec7fe7888feb6973945d/dwave/cloud/computation.py#L822-L828
where sampleset is not resolved yet and wait_id indeed needs to block.
The second part of your snippet, where we store sampleset on computation is needed, in the current code at least. It's used to cache constructed samplesets, but also makes .result() consistent on qpu and hybrid solvers (which return sampleset as part of the response). It seems a bigger refactor will be needed here to remove all circular references.

Agree that the unresolved case is tougher and might require a bigger refactor. We could make accessing the .sampleset property block on the completion of wait_id(). Probably for most use cases that would be fine :thinking:


[Enhancement] Method invocation may produce NPE[MeshMessageProtocolAdaptor]

Search before asking

[X] I had searched in the issues and found no similar issues.

Enhancement Request

located at:
eventmesh-protocol-plugin/eventmesh-protocol-meshmessage/src/main/java/org/apache/eventmesh/protocol/meshmessage/MeshMessageProtocolAdaptor.java line 119,131
Describe the solution you'd like

Are you willing to submit PR?

[ ] Yes I am willing to submit a PR!

Yes, I will close this issue.


Access to per-instance commissioning data needs a refactor

Problem
Matter devices needing to be commissioned must rely on the following data, according to the spec, to get through the entire flow:

Secure storage for a Device Attestation key pair

This has to be randomly generated per device with a secure random number generator. Common practice for this in IoT is for generation on-device during manufacturing, followed by injection of DAC after signature challenge by device.

Storage for the DAC and PAI X.509v3 DER certificates passed to commissioner during commissioning

As above, usually done at factory for products that do not have existing alternate IoT protocols in parallel to Matter

Storage for a signed Certification Declaration (CD) blob

This is directly associated with firmware, but is only available after certification of a given version.

Storage for a SPAKE2+ Verifier (w0/L tuple and associated salt and iteration count)

Currently, the verifier is not stored, but rather passcode is stored, in such a way that the device locally computes the verifier using PBKDF2 on-device at every commissioning, which causes large amount of flash and runtime to be dedicated to generating the verifier that could be precomputed and stored.
Currently the PAKE salt is fixed (see kSpake2pKeyExchangeSalt), which goes against spec that calls for random-per-device and  16 bytes <= length <= 32 bytes
Currently the PAKE iteration counter is fixed to 100 (see kSpake2p_Iteration_Count), which goes against spec that calls for 1000..100000 to be used

Storage of the discovery discriminator, which needs to be random across a distribution of devices, to avoid commissioning discovery collisions

Eventually, storage of the operational key pairs will also have to be done in such a way that they are securely handled to possibly support true storage in secure element/HSM/trustzone, rather than immediate bit storage with possibility of leakage or readout based on side-channel attacks or flash dumping, from devices that may have the ability to securely store them.
Many of the above settings are either not "directly" suitable for persistent storage, or need to vary per instance, in such a way that upon startup and commissionable announcement, the correct data is available and different per-device.
Furthermore, the current ConfigurationManager approach is a global singleton accessed in such a way that it would not be possible to host > 1 commissionable instances (e.g. software-implemented commissionable device, for test or production use) from a single process.
Proposed Solution
This issue is meant to start a conversation, since Device Attestation procedure and PASE are major parts of the commissioning flow that cannot be implemented to-spec until we resolve the issue.
A possible strawman for a solution is:

Split some of the functionality of the ConfigurationManager public interface into some sub interfaces with getters, such as:

PAKESecurityConfiguration with access to the verifier, salt, iteration count
AttestationCredentials with secure signing primitive using DA secret key, and access to the DAC, PAI and CD

Implement tooling and methodologies to exemplify the generation a-priori of an attestation key pair, and injection of a DAC and PAI, and PAKE config, for a given configuration instance, along with implementation of the accesssors, rather than keeping placeholder "common for all builds" default values.
Implement the additional interfaces above, for accessors to the per-instance security data
Rename extern ConfigurationManager & ConfigurationMgr(); to a GetInstance() against the ConfigurationMgr.
Eventually obtain the ConfigurationManager instance from injected Matter stack context (i.e. per-node context) to avoid needing to steer the singleton access to the multiple possible instances based on heuristics or coarse implicit identifiers such as thread IDs.

Steps 1 and 2 can occur in parallel.
Step 3 is the part that will eventually enable to-spec secure PASE and device attestation.
@mleisner @pan-apple @mspang @yyzhong-g @bzbarsky-apple @andreilitvin @woody-apple @msandstedt

Solving this issue would help with #7738.

Today's ConfigurationManager has the following refactorable methods that could be used for and DAC, PAI:
    CHIP_ERROR GetManufacturerDeviceCertificate(uint8_t * buf, size_t bufSize, size_t & certLen);
    CHIP_ERROR GetManufacturerDeviceIntermediateCACerts(uint8_t * buf, size_t bufSize, size_t & certsLen);

These do assume DAC chain length > 3, so some minor refactor is needed for sure.
The following method:
CHIP_ERROR GetManufacturerDevicePrivateKey(uint8_t * buf, size_t bufSize, size_t & keyLen);

is both not used, and not safe for use: it extricates a private key, and if that private key is held in a secure element or similar trusted security module, this is impossible.

@harimau-qirex is working on stabilizing our storage logic (we currently have KVS/PersistedStorage/ConfigurationManager each with own functionality (binary vs non-binary, fixed vs variable keys). Ideally any interface should not extend/depend on a specific item since we plan to have a single way of storing persistent data.
If feasable, I would also expect storage interfaces to be injected instead of global singletons, however I would do this only if it does not couple things too much (propagating a 'storage' class everywhere sounds painful)

Ideally any interface should not extend/depend on a specific item since we plan to have a single way of storing persistent data.

I disagree with this completely. I think the problem we have right now is there is a single way of storing persistent data that both prevents some optimizations and also prevents hardware assist of some features such as security.

@harimau-qirex is working on stabilizing our storage logic (we currently have KVS/PersistedStorage/ConfigurationManager each with own functionality (binary vs non-binary, fixed vs variable keys). Ideally any interface should not extend/depend on a specific item since we plan to have a single way of storing persistent data.
If feasable, I would also expect storage interfaces to be injected instead of global singletons, however I would do this only if it does not couple things too much (propagating a 'storage' class everywhere sounds painful)

The problem is that, for some security collateral, it's untenable for the sdk to be involved in storage / retrieval.
This was called out as an example:
CHIP_ERROR GetManufacturerDevicePrivateKey(uint8_t * buf, size_t bufSize, size_t & keyLen);
CHIP_ERROR StoreManufacturerDevicePrivateKey(const uint8_t * key, size_t keyLen);

This implies that the sdk is responsible for storing a key into and retrieving a key from the environment.  That doesn't work.  For cases like this, we need to invert this relationship and instead define APIs for the sdk to use security collateral owned by the platform environment, e.g. 'sign this thing', 'decrypt this thing', 'encrypt this thing'.

I would view storage as an application concern and believe that the core library should decouple itself from storage. CHIP abstractions should merely exchange data with the application in a way that conforms to protocol requirements without assuming whether or how the data is "stored". For example, an application may be able to reconstitute necessary data from other sources rather than directly store it.

Note that #7738 is V1 and is a subset of this. As far as I understand, the reason this did not get a V1 was because of title saying "refactor" but the requirements seem to be V1 requirements:
Need ability to store factory data and read it as such during commissioning.

The core of this has been fixed overall.


Flash of unstyled content in development mode

Styles don't land instantly in development mode. Appears to be related to sveltejs/kit#915

sveltejs/kit#1892 closes


refactor: A more Pythonic way to set environment variables.

Signed-off-by: ZhengYu, Xu<EMAIL_ADDRESS>

Thanks @zen-xu for the PRs!


Tween seek use less then instead of less or equal

Fixes a bug
Tween seek  could do an infinite loop if the seek value was 1.
using <  instead of <= would fix that

👍


Printing to stdout during compilation should be avoided

rust-embed prints to stdout during compilation:
https://github.com/pyros2097/rust-embed/blob/2025bfb7b8becb4f281efa5cd3febc611ba98fcb/src/lib.rs#L56
macros should not do that.
It breaks editors that parse the json output:
https://github.com/rust-lang/rust-enhanced/issues/310#issuecomment-405052274
All occurrences of println and eprintln in that file should be removed.

Well.. I thought it would be good to see which files are being loaded into the binary at compile time. That would make it easy to find out the progress of the compilation and also if some large file is taking too long. Does printing to stderr is a better approach or removing it altogether better. Anyways I'm ok with removing the println no one else has issues with it.

But will be :sob:  as I have to remove the cool screenshots of my terminal from the readme.md

The include_bytes!() call should be very fast though, right?
It's not really "compiling" (processing) the included files..
So I think it's ok to have no output about this. People who are using rust-embed will know that if it takes a bit longer, it's because of the embedded files :)
I think a better solution is to just mention it in the Readme: "Be aware that compilation might take a little bit longer when embedding a large number of files."

Ok. You convinced me. And it seems no one is going to miss it. Do you want to raise a PR for it or should i do it.

I'm currently traveling on vacation with only my phone, so I think it'd be faster if you do it :)


switch git repo delete notifications to be gregor-based

Two changes on the client side:

Revert the commit that added the git NotifyRouter type. I'm leaving the NoopNotifyListener in there, because I think it was a good cleanup.
Fix keybase git mddel, which was doing a full delete instead of a metadata-only delete.


chore: move to github actions

The docs generation has been tested on my fork and is working as expected!
https://github.com/bshaffer/common-protos-php/tree/gh-pages


Java 16, Turret/unit range rework, Removed redundant casts

Theres still a lot of casts to remove and the turret/unit range display are still lacking some features but from what I can tell its significantly more effecient than before.

you are one of the best code cleaner i have ever seen

Any amount of code cleaning looks amazing because your code is just that messy

You say that now but usually my code is a horrible mess, what meep said is true


Carousel styling customization

I have a question on this great library. Is it intended to add styling customization options for the Carousel container in the future (not just the arrows and dot buttons)?
If not, is it legit to assume the class names .sc-carousel__carousel-container and .sc-carousel__content-container won't change?
Thanks in advance!

Hi @rodrigopineda028,
Thank you 🙂
You can use .sc-carousel__* class name for customization. There will no breaking changes in minor versions.
I'll keep that in mind.


After setting distinct_attribute values inside facetStats and facetDistribution become incorrect.

Describe the bug
I am building e-commerce form. To build form I use values from facetStats and facetDistribution.
Before setting distinct_attribute eveything works correctly and I get all values for price(min and max):
{'estimatedTotalHits': 2,
 'facetDistribution': {'price': {'100': 1, '200': 1}},
 'facetStats': {'price': {'max': 200.0, 'min': 100.0}}, #important
 'hits': [{'distinct_id': 1, 'id': 0, 'price': 100},
          {'distinct_id': 1, 'id': 1, 'price': 200}],
 'limit': 20,
 'offset': 0,
 'processingTimeMs': 0,
 'query': ''}

After setting distinct_attribute my facets lose data:
{'estimatedTotalHits': 1,
 'facetDistribution': {'price': {'100': 1}},
 'facetStats': {'price': {'max': 100.0, 'min': 100.0}},  #important
 'hits': [{'distinct_id': 1, 'id': 0, 'price': 100}],
 'limit': 20,
 'offset': 0,
 'processingTimeMs': 0,
 'query': ''}

Here we can see that both min and max are same and facetDistribution shrinked to 1 value.
To Reproduce
Steps to reproduce the behavior:

Data that I used:

[
    {
        "id": 0,
        "price": 100,
        "distinct_id": 1
    },
    {
        "id": 1,
        "price": 200,
        "distinct_id": 1
    }
]

Settings that I used(in python):

client.index(index_name).update_filterable_attributes(["price"])
client.index(index_name).update_sortable_attributes(["price", ])
client.index(index_name).update_distinct_attribute("distinct_id")

Expected behavior
I expect facets to show data for all items in index even if they are using distinct_attribute. It allows to build complete user interface forms for faceted search.
Screenshots
Because of this problem my form looks like that :

But it should look like that:

Here we can see that audio speakers are grouped by nominal impedance which is distinct_attribute for them.
But because of current facet behaviour it makes impossible to build UI forms when using facets with distinct_attribute because it shrinks data to 1 item which is shown and doesn't take in consideration all of available items.
Meilisearch version:
Package version:        "1.8.0"

Currently solved it by adding copy of index without distinct attribute. And that index is for facets only.

Hello @zxcq544,
If I understand well, your issue seems related to the following discussion:
https://github.com/orgs/meilisearch/discussions/741
We plan to solve the issue reported in the discussion by allowing the user to set the distinctAttribute at search time instead of at setting time. This would allow you to have a consistent facetDistribution using a multi-index search.
We plan to release it in 1.9.0 but it could be delayed to 1.10.0 if we encounter any issue during the implementation. 😄

Yes, I will close it, thank you @zxcq544


fix: set baseUrl if none is provided

If paths is set in TS compilerOptions, then as of TS4.1, the TS compiler will ensure that the baseUrl is set to the current working directory.

Relevant TS Source
TS 4.1 Release (paths without baseUrl)

This PR aligns the plugin to the compiler behavior.
Related to #330

@qmhc any chance to get this one merged? #330 isn't quite resolved but this will fix it.

I found that the reproduction of #330 has baseUrl in its tsconfig.json, but the output still is incorrect.

Ok, I added a failing test which seems to accurately show the error. I'll take a look in the next couple of days unless someone else wants to PR to my branch.

Had some time this morning. New test is passing 👍🏻

Thanks for the approval! Are you able to merge and release?


Bleno discontent when another handle disconnect

In solving the issue #210, I found issue which in turn I have solved.
I am going to explain the issue.
It was my need to be free to connect/disconnect my iPad to my Rpi3 through my bleno service code and at the same time being free to connect my RPi3 to my old Rpi2 (Speaker) via a a2dp service to send music from RPi3 to RPi2.
The issue is that when I disconnect the A2DP service RPi3 to RPi2, even my iPad on bleno service was disconnected, ie bleno saw the disconnection of a2dp RPi2 as a disconnection of the iPad client.
I hope to have been clear!!!!
Anyway I have already solved the issue by modifying the code /lib/hci-socket/hci.js
I am sure that the change must be optimized and I ask Sandeep Mistry to verify the code.
I attach the file, below.
hci.txt

@AlessandroFerri thanks for sharing your patch. Please open a pull request so we can further discuss integrating your changes.


Customize Node size

Some of the names of my nodes are kind of long and they don't fit in the boxes properly. They overflow the edges which doesn't look good.
Node size is currently hardcoded in shared/shapes.ts as IMAGE_H and IMAGE_W. I would like to configure this to be something slightly larger to accommodate my longest name.
In the future, I would like to make the nodes size themselves dynamically based on the width of the label.

Thanks.
I just tried this approach but it only resizes the outermost element (the joint-viewport). Am I doing this correctly?
diff --git a/src/demo/app/renderer.ts b/src/demo/app/renderer.ts
index 0d38c3d..66cc6e4 100644
--- a/src/demo/app/renderer.ts
+++ b/src/demo/app/renderer.ts
@@ -58,7 +58,9 @@ export class Renderer implements Flo.Renderer {
     }

     createNode(metadata : Flo.ElementMetadata, props : Map<string, any>): dia.Element {
-      return new joint.shapes.flo.Node();
+      let node = new joint.shapes.flo.Node();
+      node.set('size', {width:300, height:80});
+      return node;
     }

     initializeNewNode(node : dia.Element, viewerDescriptor : Flo.ViewerDescriptor) {

@acrisci you're probably right (i haven't tried it yet, I'll try it out a bit later), I see that example shape consists of a number of SVG elements where offsets are are all in terms of fixed size. However, you can create your own shape using JointJS and set all those offsets for ports labels etc relative to parent shape dimensions. See this: https://resources.jointjs.com/docs/jointjs/v2.0/joint.html#dia.attributes.ref
You can try devs.Model shapes but i haven't supported them for links/ports, hence they may not work well, but at the same time they might be a good source for examples.

Ok, that's definitely an option. Do you see any path to framework support for this feature?

Support devs.Model shapes? Think they are supported up to ports... Think for ports  imay not use jointjs conventional port attribute values, but otherwise it should be ok. As far as I remember it's important to have port attribute in Flo to equal either 'input' or 'output'... for now at least... otherwise you should be ok building any jointjs shape you like... I haven't explored the limitations though.

Do you think it would be possible to move the default width/height for new node creation to the Flo global? Then I can change it as soon as my app starts so all the new nodes have those dimensions.
Another option might be to add the width/height as a parameter to the constructor.
I'm also going to modify the label. It might be good to add something like this to the demo:
diff --git a/src/demo/app/renderer.ts b/src/demo/app/renderer.ts
index 0d38c3d..dea484b 100644
--- a/src/demo/app/renderer.ts
+++ b/src/demo/app/renderer.ts
@@ -64,7 +64,9 @@ export class Renderer implements Flo.Renderer {
     initializeNewNode(node : dia.Element, viewerDescriptor : Flo.ViewerDescriptor) {
       let metadata : Flo.ElementMetadata = node.attr('metadata');
       if (metadata) {
-        node.attr('.label/text', node.attr('metadata/name'));
+        let name = node.attr('metadata/name');
+        name = joint.util.breakText(name, {width:120}, node.attr('.label'));
+        node.attr('.label/text', name);
         let group = node.attr('metadata/group');
         if (group === 'source') {
           node.attr('.input-port/display','none');

@acrisci you mean IMAGE_W and IMAGE_H? I guess we could have... can you submit the PR for what you'd like to have?


drag-drop + virtual scroll: Draggable item loses its position when new list item is rendered in the DOM as a result of virtual scrollingbug

Reproduction
Use StackBlitz to reproduce your issue:

Components: https://stackblitz.com/fork/components-issue
Harnesses: https://stackblitz.com/fork/harness-issue

Steps to reproduce:
1.
<cdk-virtual-scroll-viewport  cdkDropList  itemSize="25" scrollViewport cdkDropList
class="viewport ps blue-scrollbar member-box" [perfectScrollbar]  (scrolledIndexChange)="nextBatch()"
[cdkDropListData] = "selectedDimension?.memberSelections" (cdkDropListDropped)="onDrag($event)" [style.height]="memberHeight">
<li *cdkVirtualFor="let members of memberSelections " cdkDrag>{{member}}

public onDrag(event: CdkDragDrop<string[]>): void {
if (event.previousContainer === event.container) {
const PREV_IND_WITH_OFFSET: number = this.range ? this.range.start + event.previousIndex  : event.previousIndex;
const CUR_IND_WITH_OFFSET: number = this.range ? this.range.start + event.currentIndex : event.currentIndex ;
moveItemInArray(  this.selectedDimension.memberSelections, PREV_IND_WITH_OFFSET, CUR_IND_WITH_OFFSET);
this.memberSelections = [...this.memberSelections];
} else {
transferArrayItem(event.previousContainer.data,
event.container.data,
event.previousIndex,
event.currentIndex);
}
this.val.emit(false);
}
public nextBatch(){
this.virtualForOf.viewChange.subscribe((range: ListRange) => this.range = range);
console.log(this.range);
}

Expected Behavior
What behavior were you expecting to see?
list drag and drop for virtual scroll with a large dataset. e.g.(1000 of records)
Actual Behavior
What behavior did you actually see?
I am using CDK virtual scroll and CDK drag/drop together for rendering the large list. When I am doing the drag and drop in the middle of the list, the dragged item is coming back to its original position. I have tried to solve this issue using the range, but still not able to get the expected result.
Environment
angular11

Angular:
CDK/Material:
Browser(s):
Operating System (e.g. Windows, macOS, Ubuntu):

We don't currently support drag&drop with virtual scrolling. Closing as a duplicate of https://github.com/angular/components/issues/10122.


Display more data from the database

Feature request

Popular Report Cards
Recently Generated
High Scores

as on https://goreportcard.com/

I'll support those all for public release


Update index.md

corrected link target
PLEASE READ
Following a recent back-end update, all contributors with a local clone or fork of our repository are required to run yarn install. This does not apply to direct page edits.

[ ] Yes, I've run yarn install
[x] No, does not apply to me

Purpose of this pull request
This pull request...

Select the type of change:

[x] Minor Changes - Typos, formatting, slight revisions, .clabot
[ ] Update Content - Revisions, updating sections
[ ] New Content - New features, sections, pages, tutorials
[ ] Site and Tools - Updates, maintenance, dependencies, new packages for the site (Docusaurus, Gatsby, React, etc.)

Thanks @arkhitektor for your contribution and signing the CLA! I'll approve and merge this.


TagBot trigger issue

This issue is used to trigger TagBot; feel free to unsubscribe.
If you haven't already, you should update your TagBot.yml to include issue comment triggers.
Please see this post on Discourse for instructions and more details.

Triggering TagBot for merged registry pull request: https://github.com/JuliaRegistries/General/pull/24229

Triggering TagBot for merged registry pull request: https://github.com/JuliaRegistries/General/pull/24411

Triggering TagBot for merged registry pull request

Triggering TagBot for merged registry pull request: https://github.com/JuliaRegistries/General/pull/26065

Triggering TagBot for merged registry pull request: https://github.com/JuliaRegistries/General/pull/27719

Triggering TagBot for merged registry pull request: https://github.com/JuliaRegistries/General/pull/27719

Triggering TagBot for merged registry pull request
This extra notification is being sent because I expected a tag to exist by now, but it doesn't.
You may want to check your TagBot configuration to ensure that it's running, and if it is, check the logs to make sure that there are no errors.

Triggering TagBot for merged registry pull request
This extra notification is being sent because I expected a tag to exist by now, but it doesn't.
You may want to check your TagBot configuration to ensure that it's running, and if it is, check the logs to make sure that there are no errors.


peer.Send() keeps everything in memory

I'm using the LiteNetLib to send big amounts of data via UDP (I need low latency so TCP is not possible). I get everything to work up until the peer.Send() part which skyrockets my memory consumption until the app crashes. I do receive the packets on the remote device (separate one) but for some reason everything stays in memory. any idea how to fix this?

@kurse well LiteNetLib isn't designed to send big amounts of data. But you can reduce pool size here: https://github.com/RevenantX/LiteNetLib/blob/master/LiteNetLib/NetConstants.cs#L92

@RevenantX Thanks, I will try it out and see how that will go. Thanks!

I ended up implementing my own custom socket management in UDP, if anyone is interested in why and what I've done, go to my question at Stackoverflow . Something similar will probably work with LiteNetLib as well.


Edit the current selection?

I may be missing something but is it possible by any chance to edit the currently selected entry?
Like, if I have rez=$(printf "foo\nbar\ntest" | fzf), and the cursor is on test, but I want the final result, which will be assigned to var $rez, to be test this. Then, can I press some hotkey, which will select the currently highlighted entry, and will allow me to modify it?
Thanks.

fzf doesn't provide that functionaity.

can I press some hotkey

You can use --expect option to see if the user pressed a special key.
readarray -t lines < <(printf "foo\nbar\ntest" | fzf --expect ctrl-e)
if [ "${lines[0]}" = ctrl-e ]; then
  # Edit the value in ${lines[1]} using `read` or something
fi


⚠ Bofrost.at has degraded performance

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

HTTP code: 200
Response time: 1247 ms

Resolved: Bofrost.at performance has improved in ecc85ed.


allow unlimited dimension

IJ should allow an unlimited number of dimensions stored as a 1D array.
It should be done like the current 1D array for X / Y / components information but could be repeated for unlimited dimensions.
IJ.apply could then apply on all points of all the images (and we will have to think about corresponding options).
For information the maximal array size of an array is 2^32-1. If we have RGBA images of 10Mpixels this corresponds to around 100 images, not that huge and we should check if we really can reach this number.
Now it is unlikely that today somebody would like to load more than 100 images of this size but this will evolve.
http://stackoverflow.com/questions/6154989/maximum-size-of-an-array-in-javascript

It was decided to create a "Stack" that allows to put many images in a group. We could think about extending the system to have Stack in Stack


Document where to get the "type" token for imports

Hello!

Vote on this issue by adding a 👍 reaction
To contribute a fix for this issue, leave a comment (and link to your pull request, if you've opened one already)

Issue details
Raised in community slack:

VS: Hi guys,
I'm going to import some existing resources with pulumi import [type] [name] [id] command. How can I get type for my resources?
AN: If you look at the documentation of your provider, on each resource you can see an example of an import command that gives you the type of the resource.
FW: You can also check the SDK code. https://github.com/pulumi/pulumi-aws/blob/master/sdk/nodejs/s3/bucket.ts#L334 for example is the type for old aws providers s3 bucket resource.
VS: Thanks, guys.
It's not obvious from the first look.  It'd would be great to add this to pulumi import doc (https://www.pulumi.com/docs/reference/cli/pulumi_import/)
PS: Hey VS - if we update the docs to say “look for the Import sections in the API Docs for the type” would that help - we can also link to an example

We should document this better. Possibly both here in the docs site and as part of the import command itself.

As part of this, we should document (e.g., in the Concepts docs) what a type token is so we have something to link to when discussing them.


Show missing struct fields in the error message

This provides the most interesting information about the "missing structure fields" error directly to the user.

Yeah, this makes sense, thanks!
bors merge


Binary encoding bit and geometry types on MariaDB

Currently we can't encode bit and geometry types on the binary protocol on MariaDB servers, when we attempt that we get null as the result.
Looks like it's a problem on the server, because if we encode these types as binaries (as opposed to their respective types):
diff --git a/lib/myxql/protocol/values.ex b/lib/myxql/protocol/values.ex
index 7250e57..b64e5c7 100644
--- a/lib/myxql/protocol/values.ex
+++ b/lib/myxql/protocol/values.ex
@@ -212,7 +212,7 @@ defmodule MyXQL.Protocol.Values do
     size = bit_size(bitstring)
     pad = 8 - rem(size, 8)
     bitstring = <<0::size(pad), bitstring::bitstring>>
-    {:mysql_type_bit, encode_string_lenenc(bitstring)}
+    {:mysql_type_var_string, encode_string_lenenc(bitstring)}
   end
␠
   def encode_binary_value(true) do
@@ -246,7 +246,7 @@ defmodule MyXQL.Protocol.Values do
     defp encode_geometry(geo) do
       srid = geo.srid || 0
       binary = %{geo | srid: nil} |> Geo.WKB.encode!(:ndr) |> Base.decode16!()
-      {:mysql_type_geometry, encode_string_lenenc(<<srid::uint4, binary::binary>>)}
+      {:mysql_type_var_string, encode_string_lenenc(<<srid::uint4, binary::binary>>)}
     end
   end

it works!
The problem with this patch however is because we're encoding them as binaries in certain queries where the type is unknown we lose the type information that we otherwise already had:
Before this patch:
iex> MyXQL.query!(pid, "SELECT ?", [%Geo.Point{coordinates: {1, 1}}]).rows
[[%Geo.Point{coordinates: {1.0, 1.0}, properties: %{}, srid: nil}]]

After this patch:
iex> MyXQL.query!(pid, "SELECT ?", [%Geo.Point{coordinates: {1, 1}}]).rows
[
  [
    <<0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 63, 0, 0, 0, 0, 0, 0,
      240, 63>>
  ]
]

Of course this is not a problem when the query does have the column information, e.g. we select
data from a given column.
I'm a bit hestitant to move forward with this. But maybe losing this behaviour is not gonna be a
big issue in practice?
I also submitted this as a bug upstream.

Since the bug is reported upstream, I'm gonna close this for now.

See my comment upstream: https://jira.mariadb.org/browse/MDEV-21150?focusedCommentId=171564&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-171564.