chore: don't auto delete component queue

in https://github.com/nautiluslabsco/ergo/pull/107 i fixed a typo and set component queues to auto delete
but after using that a bit, i have changed my mind; reasoning below
firstly, according to the documentation, if so configured, these queues will be deleted when the consumer disconnects... i could not find anything on the internet that says the queue has to be empty... so it deletes the queue even if it's not empty, as long as the consumer has disconnected
also it's difficult to update an existing component to ergo 0.11.3 because:

queue already exists
we upgrade to 0.11.3 and deploy
we try to recreate the queue with auto delete
this fails because there is already an existing queue with the same name, but without auto delete
we have to manually delete the queue and start the component, which will recreate the queue with auto delete

on the other hand, if this pr is approved, going to 0.11.4 will be easy because 0.11.3 queues will be auto deleted when the component shuts down for deploy, so there will be no problem recreating them without auto delete
instance queues remain auto delete, which i think is correct: https://github.com/nautiluslabsco/ergo/blob/34644265371a0d12b0292dd65cd0b893b423e626/ergo/amqp_invoker.py#L68

test failures look unrelated (the failures are from parts of the code i did not change)
i don't think the linting job has ever passed

well it passes locally on python 3.9.16 lol
% pytest -vv --timeout 60
======================================================================================================================================================================================================== test session starts =========================================================================================================================================================================================================
platform darwin -- Python 3.9.16, pytest-7.1.3, pluggy-1.0.0 -- /Users/xian/.pyenv/versions/ergo-dev-env/bin/python
cachedir: .pytest_cache
rootdir: /Users/xian/ergo-3rd-copy, configfile: setup.cfg
plugins: timeout-2.1.0, aiomisc-16.2.4
timeout: 60.0s
timeout method: signal
timeout func_only: False
collected 39 items

test/integration/test_http.py::test_product PASSED                                                                                [  2%]
test/integration/test_http.py::test_product__post_request PASSED                                                                                [  5%]
test/integration/test_http.py::test_return_data[return_dict] PASSED                                                                                [  7%]
test/integration/test_http.py::test_return_data[return_one_dict] PASSED                                                                                [ 10%]
test/integration/test_http.py::test_return_data[return_two_dicts] PASSED                                                                                [ 12%]
test/integration/test_http.py::test_return_data[return_none] PASSED                                                                                [ 15%]
test/integration/test_http.py::test_return_data[yield_one_dict] PASSED                                                                                [ 17%]
test/integration/test_http.py::test_return_data[yield_two_dicts] PASSED                                                                                [ 20%]
test/integration/test_amqp/test_amqp.py::test_product_amqp PASSED                                                                                [ 23%]
test/integration/test_amqp/test_amqp.py::test_product_class PASSED                                                                                [ 25%]
test/integration/test_amqp/test_amqp.py::test_product_instance PASSED                                                                                [ 28%]
test/integration/test_amqp/test_amqp.py::test_return_two_dicts PASSED                                                                                [ 30%]
test/integration/test_amqp/test_amqp.py::test_yield_two_dicts PASSED                                                                                [ 33%]
test/integration/test_amqp/test_amqp.py::test_error_path PASSED                                                                                [ 35%]
test/integration/test_amqp/test_amqp.py::test_make_six PASSED                                                                                [ 38%]
test/integration/test_amqp/test_argument_binding.py::test_bind_falsey_argument PASSED                                                                                [ 41%]
test/integration/test_amqp/test_argument_binding.py::test_bind_data_to_my_param PASSED                                                                                [ 43%]
test/integration/test_amqp/test_argument_binding.py::test_bind_data_index_foo_to_my_param PASSED                                                                                [ 46%]
test/integration/test_amqp/test_argument_binding.py::test_dont_bind_data PASSED                                                                                [ 48%]
test/integration/test_amqp/test_error_pubtopic.py::test_no_error_pubtopic PASSED                                                                                [ 51%]
test/integration/test_amqp/test_error_pubtopic.py::test_error_pubtopic PASSED                                                                                [ 53%]
test/integration/test_amqp/test_extra_error_info.py::test_extra_error_info PASSED                                                                                [ 56%]
test/integration/test_amqp/test_extra_error_info.py::test_extra_error_info_with_error_pubtopic PASSED                                                                                [ 58%]
test/integration/test_amqp/test_reply_to.py::test_shout PASSED                                                                                [ 61%]
test/integration/test_amqp/test_reply_to.py::test_reply_to_scope PASSED                                                                                [ 64%]
test/integration/test_amqp/test_reply_to.py::test_fibonacci PASSED                                                                                [ 66%]
test/integration/test_amqp/test_reply_to.py::test_traverse_tree PASSED                                                                                [ 69%]
test/integration/test_amqp/test_scope.py::test_simple_scope PASSED                                                                                [ 71%]
test/integration/test_amqp/test_scope.py::test_downstream_scope PASSED                                                                                [ 74%]
test/integration/test_amqp/test_scope.py::test_nested_scope PASSED                                                                                [ 76%]
test/integration/test_amqp/test_scope.py::test_closing_scope PASSED                                                                                [ 79%]
test/integration/test_amqp/test_scope.py::test_store_and_retrieve_scope_data PASSED                                                                                [ 82%]
test/integration/test_gateway/test_gateway.py::test_double PASSED                                                                                [ 84%]
test/integration/test_gateway/test_gateway.py::test_gateway_routing PASSED                                                                                [ 87%]
test/integration/test_gateway/test_gateway.py::test_yield_twice PASSED                                                                                [ 89%]
test/unit/test_cli.py::test_load_config PASSED                                                                                [ 92%]
test/unit/test_util.py::TestUtil::test_extract PASSED                                                                                [ 94%]
test/unit/test_util.py::TestUtil::test_stack PASSED                                                                                [ 97%]
test/unit/test_util.py::TestUtil::test_util PASSED                                                                                [100%]

======================================================================================================================================================================================================== 39 passed in 12.29s =========================================================================================================================================================================================================


Steam Deck...Could not find any non-steam apps

I have gotten this installed properly.  sgdb://boop/test works fine.
I am trying to install artwork using the "Apply with Boop" button but all I get is
SGDBoop Error <2>
Could not find any non-steam apps
I do have non-steam apps...not sure what to configure to get it to find the proper locations in steam on the Steam Deck.
Any thoughts, suggestions?
Thanks.

Solved! The shortcut.vbf file must have been corrupted. Deleting it made everything work

Fixed in v1.2.8. If it's still not working, please re-open the issue.


fix debug logging of undefined query params

If we pass { someparam: undefined } to got, someparam will not be passed at all in the querystring. When we log the params to console (for example when running npm run badge), this currently appears as ?someparam=undefined. This PR switches us to dropping these params completely, in line with the behaviour of got.

Messages

:book:
:sparkles: Thanks for your contribution to Shields, @chris48s!

  Generated by :no_entry_sign: dangerJS against a01f341cda060fd8f8ff5cafe6a52343a236f8ca

Not necessarily opposed to this, but curious as to how feasible/preferable it might be to adjust this in our logging (less common) vs. what I imagine is essentially duplicative processing of got's internal behavior that's happening at runtime for every request

We could define a custom version of logTrace just for when we log the request URL.
It has been a while since I looked at this but I think the reason why I thought stripping the undefined values and then passing the modified params object to both got and logTrace is this way we are passing the exact same object to both, rather than logging a slightly different thing than what we passed got. There's not a lot in it though.

Yeah good call. I'll leave this one to mature for a bit :cheese:

I've just pushed this to prod. I'll keep an eye on sentry/issue tracker over the next few days and plan to hold off doing another deploy until the weekend


Quick info on JSX element should show inferred type arguments

TypeScript Version:  3.2.0-dev.20181023
Search Terms:
Code
class C<T> extends React.Component<T> {}
const x = <C x={42} />;

Expected behavior:
Quick into at the use of C should show C<{ x: number }>.
Actual behavior:
Just shows class C<T>.

I think this would also fix https://github.com/Microsoft/TypeScript/issues/23716.


nixos-rebuild: follow symlink in --flake option

When invoked without the --flake option and the path /etc/nixos/flake.nix exists, it is equivalent to using the option --flake /etc/nixos/flake.nix.
In practice when there is a symlink in the path /etc/nixos/flake.nix (for instance /etc/nixos pointing to an other folder) the two invocation differ in behaviour:

the implicit invocation follows symlinks
the explicit invocation doesn't

This fixes this discrepancy by adding a readlink when the flake uri is a local path.
Description of changes

Things done

Built on platform(s)

[X] x86_64-linux
[ ] aarch64-linux
[ ] x86_64-darwin
[ ] aarch64-darwin

[ ] For non-Linux: Is sandbox = true set in nix.conf? (See Nix manual)
[ ] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[ ] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[X] Tested basic functionality of all binary files (usually in ./result/bin/)
22.11 Release Notes (or backporting 22.05 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module
[ ] (Release notes changes) Ran nixos/doc/manual/md-to-db.sh to update generated release notes

[X] Fits CONTRIBUTING.md.

This pull request has been mentioned on NixOS Discourse. There might be relevant details there:
https://discourse.nixos.org/t/prs-ready-for-review/3032/1918

I don't think the intention is to merge 3000 commits and to ping basically everyone, and since there's no way to un-ping people I will close this PR.


Indication whether a sciencemesh contact is accepted is needed

E.g. in my Reva contacts, I have:

We already accepted the invite links with Thirsa, when I click on her contact, it produces:

mostly because that invite requesst is already accepted:

There should be some check that prevents accepting already accepted contacts & clear visual indication, whether a contact still needs to be accepted, or is already accepted.

Yes! Good point. @navid-dada or @mrvahedi68 can you have a look at this?

this functionality is also added to nc-sciencemesh. I have no idea about what this feature should be. can you tell us some more details ?

this functionality is also added to nc-sciencemesh. I have no idea about what this feature should be. can you tell us some more details ?

just a quick mockup of how things could work

so, as I know, the contact flow is half-duplex. it means "einstein" created an invitation link and sends it to Marie. when Marie accepts the invitation link there is no contact item in Marie's contacts list. just there is one new item in the "Einstein" contacts list which refers to Marie. @michielbdejong, is it correct?

I think in this case Miroslav plays the role of Einstein and Thirsa plays the role of Marie.
It seems that Thirsa already accepted Miroslav's invite, Thirsa is in Miroslav's Contacts list.
It seems that clicking Thirsa in Miroslav's Contacts is triggering an attempt to resend the invite, which would obviously wrong then, if she is already a contact?

I think in this case Miroslav plays the role of Einstein and Thirsa plays the role of Marie. It seems that Thirsa already accepted Miroslav's invite, Thirsa is in Miroslav's Contacts list.
It seems that clicking Thirsa in Miroslav's Contacts is triggering an attempt to resend the invite, which would obviously wrong then, if she is already a contact?

It makes a POST to /index.php/apps/sciencemesh/contacts/accept endpoint to somehow 'accept the contact' - that's what got me confused, when both of us already accepted invites using the generated URL links. I can't think of a case, when a non-accepted contact may appear in my list (my reva IOP has no way of knowing, who may accept the invitation link I created, at which site, before it is accepted), is there any such case I'm not aware of?

No, this click handler just showed up there by accident. I think it was an accidental copy-paste from the template/js code of the pending invites view.
@mrvahedi68 are you working on removing it, both in oc-sciencemesh and nc-sciencemesh?

No, this click handler just showed up there by accident. I think it was an accidental copy-paste from the template/js code of the pending invites view.
@mrvahedi68 are you working on removing it, both in oc-sciencemesh and nc-sciencemesh?

I think @mrvahedi68 is not working on NC-sciencemesh. I will remove that part of the code. it will be done until tomorrow.

the issue is closed by @mrvahedi68 's commit.


[1.7.10]Game crashed after closing one book

When I closed one of the book from mariculture game crashed.
Crash report:https://pastebin.com/T06W86at
All the mods I'm using are the newest version.

1.7.10 is no longer supported.


[BUG] Unstable connectivity to guest cluster VIP

Describe the bug
Connections to the guest cluster VIP addresses (service type loadBalancer) are failing frequently (e.g. 1 out of 3 connection attempts fails). tcpdump shows that return packets from the VM interfaces are lost on the harvester-br0 interface.
To Reproduce

Install a 3 node harvester cluster with each physical server having two network interfaces (see config-create.yaml below)
First interface is configured as "harvester-mgmt" interface and connected to an access port on the network switch ("Management LAN", e.g. VLAN 10)
Second interface is configured as "harvester-vlan" interface and connected to a trunk port on the network switch.
Setup a "user network" in the physical network, e.g. VLAN 65, with a working DHCP service and ensure connectivity to this VLAN from the management LAN.
Configure harvester-vlan as the VLAN interface in Harvester settings
Create a VLAN network in Harvester, specifying the VLAN ID of the user network.
Configure a VIP Pool in Harvester, specifying a network range in the "Management LAN"
Provision an RKE2 cluster with at least 5 worker nodes and select the previously created VLAN network
Ensure that the worker node VMs are distributed across all 3 Harvester nodes (at least one worker on each physical node!)
Deploy nginx test pod in the guest cluster and configure a service type loadBalancer using IPAM->Pool
From another machine that has connectivity to the Management LAN, execute curl --connect-timeout 5 http://<VIP> 10 times in sequence

Expected behavior
All 10 curl commands succeed
Actual behavior
Multiple executions fail with time out. The number of failed attempts correlates with the number of guest cluster VMs scheduled on the Harvester node that announces the VIP.
Environment:

Harvester ISO version:  1.0.0
Baremetal

Additional context
Following the packet path with tcpdump shows that the curl command only works when the packets are DNAT'ed from the Harvester node owning the VIP ("VIP node") to another Harvester node. When the packets instead are DNAT'ed to a VM on the same node then the SYN-ACK returned from the VM is lost on the harvester-br0 so that the connection is never established.
Here is an example of failed connection. Test was running curl http://<VIP> from a machine connected to the harvester-mgmt LAN.
tcpdump on the guest VM veth interface veth87f82dfc on the Harvester node announcing the VIP (donna)
You can see the SYN packet from the curl client is arriving on the VM and the ACK is sent back. But it is not received on client-side, so repeated connection attempts occur.
Below, the <IP_ADDRESS> etc.  IP addresses are the IP addresses of the guest cluster VMs (on VLAN 65) and port 30424 is the node port for the loadBalancer service. We basically follow the packet after the destination has been rewritten (DNAT) from the VIP address to the VM addresses.
donna:/home/rancher # tcpdump -i veth87f82dfc host <IP_ADDRESS> or <IP_ADDRESS> or <IP_ADDRESS> or <IP_ADDRESS> and port 30424

listening on veth87f82dfc, link-type EN10MB (Ethernet), capture size 262144 bytes
02:03:11.423253 IP donna.demo.com.27644 > <IP_ADDRESS>.30424: Flags [S], seq<PHONE_NUMBER>, win 29200, options [mss 1460,sackOK,TS val<PHONE_NUMBER> ecr 0,nop,wscale 7], length 0
02:03:11.423534 IP <IP_ADDRESS>.30424 > donna.demo.com.27644: Flags [S.], seq 984631573, ack<PHONE_NUMBER>, win 64308, options [mss 1410,sackOK,TS val<PHONE_NUMBER> ecr<PHONE_NUMBER>,nop,wscale 7], length 0
02:03:12.419782 IP donna.demo.com.27644 > <IP_ADDRESS>.30424: Flags [S], seq<PHONE_NUMBER>, win 29200, options [mss 1460,sackOK,TS val<PHONE_NUMBER> ecr 0,nop,wscale 7], length 0
02:03:12.420106 IP <IP_ADDRESS>.30424 > donna.demo.com.27644: Flags [S.], seq 984631573, ack<PHONE_NUMBER>, win 64308, options [mss 1410,sackOK,TS val<PHONE_NUMBER> ecr<PHONE_NUMBER>,nop,wscale 7], length 0
02:03:13.426114 IP <IP_ADDRESS>.30424 > donna.demo.com.27644: Flags [S.], seq 984631573, ack<PHONE_NUMBER>, win 64308, options [mss 1410,sackOK,TS val<PHONE_NUMBER> ecr<PHONE_NUMBER>,nop,wscale 7], length 0
02:03:14.423689 IP donna.demo.com.27644 > <IP_ADDRESS>.30424: Flags [S], seq<PHONE_NUMBER>, win 29200, options [mss 1460,sackOK,TS val<PHONE_NUMBER> ecr 0,nop,wscale 7], length 0
02:03:14.423977 IP <IP_ADDRESS>.30424 > donna.demo.com.27644: Flags [S.], seq 984631573, ack<PHONE_NUMBER>, win 64308, options [mss 1410,sackOK,TS val<PHONE_NUMBER> ecr<PHONE_NUMBER>,nop,wscale 7], length 0
02:03:16.434151 IP <IP_ADDRESS>.30424 > donna.demo.com.27644: Flags [S.], seq 984631573, ack<PHONE_NUMBER>, win 64308, options [mss 1410,sackOK,TS val<PHONE_NUMBER> ecr<PHONE_NUMBER>,nop,wscale 7], length 0

On the same harvester node while listening on the harvester-mgmt and harvester-vlan interface we can only see the SYN packets from the external client but not the ACK from the VM. Same picture on the harvester-br0.
This indicates the packets leaving the guest VM are dropped somewhere in the Harvester node network stack.
donna:/home/rancher # tcpdump -i harvester-mgmt host <IP_ADDRESS> or <IP_ADDRESS> or <IP_ADDRESS> or <IP_ADDRESS> and port 30424

listening on harvester-mgmt, link-type EN10MB (Ethernet), capture size 262144 bytes

22:10:59.025061 IP donna.demo.com.20369 > <IP_ADDRESS>.30424: Flags [S], seq<PHONE_NUMBER>, win 29200, options [mss 1460,sackOK,TS val<PHONE_NUMBER> ecr 0,nop,wscale 7], length 0
22:11:00.022608 IP donna.demo.com.20369 > <IP_ADDRESS>.30424: Flags [S], seq<PHONE_NUMBER>, win 29200, options [mss 1460,sackOK,TS val<PHONE_NUMBER> ecr 0,nop,wscale 7], length 0
22:11:02.026642 IP donna.demo.com.20369 > <IP_ADDRESS>.30424: Flags [S], seq<PHONE_NUMBER>, win 29200, options [mss 1460,sackOK,TS val<PHONE_NUMBER> ecr 0,nop,wscale 7], length 0
22:11:06.034691 IP donna.demo.com.20369 > <IP_ADDRESS>.30424: Flags [S], seq<PHONE_NUMBER>, win 29200, options [mss 1460,sackOK,TS val<PHONE_NUMBER> ecr 0,nop,wscale 7], length 0

donna:/home/rancher # tcpdump -i harvester-vlan host <IP_ADDRESS> or <IP_ADDRESS> or <IP_ADDRESS> or <IP_ADDRESS> and port 30424

listening on harvester-vlan, link-type EN10MB (Ethernet), capture size 262144 bytes

22:05:23.799075 IP donna.demo.com.65287 > <IP_ADDRESS>.30424: Flags [S], seq 597501491, win 29200, options [mss 1460,sackOK,TS val<PHONE_NUMBER> ecr 0,nop,wscale 7], length 0
22:05:24.798942 IP donna.demo.com.65287 > <IP_ADDRESS>.30424: Flags [S], seq 597501491, win 29200, options [mss 1460,sackOK,TS val<PHONE_NUMBER> ecr 0,nop,wscale 7], length 0
22:05:26.803146 IP donna.demo.com.65287 > <IP_ADDRESS>.30424: Flags [S], seq 597501491, win 29200, options [mss 1460,sackOK,TS val<PHONE_NUMBER> ecr 0,nop,wscale 7], length 0
22:05:30.811129 IP donna.demo.com.65287 > <IP_ADDRESS>.30424: Flags [S], seq 597501491, win 29200, options [mss 1460,sackOK,TS val<PHONE_NUMBER> ecr 0,nop,wscale 7], length 0

VLAN configuration of the harvester-br0:
donna:/home/rancher # bridge vlan show
port	vlan ids
harvester-vlan	 1 PVID Egress Untagged
	 20
	 65
	 66
harvester-br0	 1 PVID Egress Untagged
vethf0888c84	 1 Egress Untagged
	 65 PVID Egress Untagged
vethe805d08c	 1 Egress Untagged
	 65 PVID Egress Untagged
veth87f82dfc	 1 Egress Untagged
	 65 PVID Egress Untagged

Create-config.yaml:
token: -REDACTED-
os:
  hostname: harvey.-REDACTED-.com
  ssh_authorized_keys:
  - ssh-rsa -REDACTED-
  password: -REDACTED-
install:
  mode: create
  networks:
    harvester-mgmt:       # (Mandatory) The management bond name.
      interfaces:
      - name: eno1
      - name: ens6f3
      ip: <IP_ADDRESS>
      subnet_mask: <IP_ADDRESS>
      default_route: true
      gateway: <IP_ADDRESS>
      method: static
      bond_options:
        mode: balance-tlb
        miimon: 100
    harvester-vlan:       # (Optional) The VLAN network bond name. If VLAN NIC names vary from
      interfaces:         # host to host, consider creating a bonding device. Users can then select
      - name: eno2        # `harvester-vlan` as the VLAN network NIC in the Harvester GUI.
      method: none
      bond_options:
        mode: balance-tlb
        miimon: 100
  device: /dev/sda
  iso_url: http://<IP_ADDRESS>/harvester/harvester-v0.3.0-amd64.iso
  vip: <IP_ADDRESS>       # The VIP to access the Harvester GUI. Make sure the IP is free to use.
  vip_mode: static        # Or dhcp, check configuration file for more information.

Additional information:
There is no problem pinging the VIP from the client in the same (or routed) network:
proxy23:/etc/haproxy # ping <IP_ADDRESS>
PING <IP_ADDRESS> (<IP_ADDRESS>) 56(84) bytes of data.
64 bytes from <IP_ADDRESS>: icmp_seq=1 ttl=63 time=0.671 ms
64 bytes from <IP_ADDRESS>: icmp_seq=2 ttl=63 time=1.05 ms
64 bytes from <IP_ADDRESS>: icmp_seq=3 ttl=63 time=0.949 ms
64 bytes from <IP_ADDRESS>: icmp_seq=4 ttl=63 time=1.13 ms
64 bytes from <IP_ADDRESS>: icmp_seq=5 ttl=63 time=0.810 ms
^C
--- <IP_ADDRESS> ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4030ms
rtt min/avg/max/mdev = 0.671/0.925/1.138/0.169 ms

Additional information:
There is no problem pinging the VIP from the client in the same (or routed) network:
proxy23:/etc/haproxy # ping <IP_ADDRESS>
PING <IP_ADDRESS> (<IP_ADDRESS>) 56(84) bytes of data.
64 bytes from <IP_ADDRESS>: icmp_seq=1 ttl=63 time=0.671 ms
64 bytes from <IP_ADDRESS>: icmp_seq=2 ttl=63 time=1.05 ms
64 bytes from <IP_ADDRESS>: icmp_seq=3 ttl=63 time=0.949 ms
64 bytes from <IP_ADDRESS>: icmp_seq=4 ttl=63 time=1.13 ms
64 bytes from <IP_ADDRESS>: icmp_seq=5 ttl=63 time=0.810 ms
^C
--- <IP_ADDRESS> ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4030ms
rtt min/avg/max/mdev = 0.671/0.925/1.138/0.169 ms

Does it ok to ping the host <IP_ADDRESS> or <IP_ADDRESS> or <IP_ADDRESS> or <IP_ADDRESS> from the harvester host?

Does it ok to ping the host <IP_ADDRESS> or <IP_ADDRESS> or <IP_ADDRESS> or <IP_ADDRESS> from the harvester host?

yes, pinging the VM IP addresses from harvester host works fine.

For testing:

Set up a Harvester with one host, enable VLAN, and create a VLAN network.
Import the Harvester into Rancher and create an RKE2 in the VLAN network with the Harvester cloud provider through the Harvester node driver.
Deploy an Nginx deployment and create the related load balancer service.
Access the service(using curl command) from the Harvester Host.

It needs more regression testing for the management and VLAN network. Thanks.

Tested in rancher with version da382a8 off of v2.6-head and Harvester master-1a861fc1-head
with following steps

For testing:

Set up a Harvester with one host, enable VLAN, and create a VLAN network.
Import the Harvester into Rancher and create an RKE2 in the VLAN network with the Harvester cloud provider through the Harvester node driver.
Deploy an Nginx deployment and create the related load balancer service.
Access the service(using curl command) from the Harvester Host.

Cause the modification affects the whole Harvester network, it needs more regression testing for the management and VLAN network. Thanks!


[Deprecated] Fortinet via Legacy Agent

Hi,
Added the CEF AMA solution so that we could replace the legacy agent connectors in Sentinel.  However, despite removing the LA extension from the Azure VM, the legacy agent still says it is connected and we can't delete it

Any suggestions please??
KR
Rob

Hi @roboftheblues, Thanks for flagging this issue, we will investigate this issue and get back to you with some updates by 19-03-2024. Thanks!

Hey @roboftheblues, We have addressed this issue in your raised issue- https://github.com/Azure/Azure-Sentinel/issues/10166 and shared our response over there.
So, closing this issue. If you still need support for this issue, feel free to re-open it any time. Thank you for your co-operation.


Implement non_forcing_is_a? in sorbet-runtime

Motivation

See the tests for now; docs will follow.
It uses autoload? to guard const_defined? in a loop to attempt to
resolve a constant. The idea is that if a constant is not yet loaded,
the is_a? check is necessarily false, and you don't need to force
the constant to load to arrive at that result. This makes it possible to
break up certain kinds of load-time / runtime dependencies.
This feature is backed by Sorbet statically, so even though the runtime
won't know whether a constant actually exists at runtime, Sorbet will be
able to step in and guarantee that there were no typos in the name. In
particular, the runtime returns false if both the constant doesn't
exist and if it might exist but we can't tell because it's not yet
loaded. Another option would have been to raise in cases when we were
sure that a constant didn't exist (because there wasn't even an autoload
registered for it), but I figured that would be more surprising
(makes it more load-order dependent).
I think at Stripe there are also some use cases to have a variant of
this that's backed by Module#< as well, for comparing class objects,
not instances of classes. We should feel free to implement that when the
need arrises.
Test plan

See included automated tests.

cc @nroman-stripe @zanker-stripe I'd love your eyes on this too

This looks reasonable to me. One thing I'm wondering about, this implementation is not cacheable, do you anticipate the namespace search being a problem in a hot path? (This is probably premature)

this implementation is not cacheable

Do you mean not currently cached, or fundamentally not cacheable?
I think we would like this code to be fast if possible. We plan to use it in prop setters.

Hmm thinking about this more, you could add a global cache of string klass name -> resolved value.
In my head I'd been thinking something if you did something like
RESOLVED_FOO = T.lazy_resolve('::Foo')
....
T. non_forcing_is_a?(obj, RESOLVED_FOO)

then the result of T.lazy_resolve('::Foo') that's trickier to work with but guarantees the cache is bounded.


Capture line loss

:rocket:

[x] Is your feature request essential for your project?

Describe the workflow you want to enable
I wish I could configure loss of transmission lines (ac & dc) in the optimization formulation. In the current implementation, transmission lines are lossless which sometimes limits our capability of modeling components in practice, especially when trying to come up with equivalent sub-system without inducing new components.
Describe your proposed implementation, if applicable
We will need to add constraints in model.jl by reading loss0 and loss1 fields from the branch table (both ac & dc). Note that the current data structure is inherited from MatPower. We could either follow their convention or not.
Additional context
We are also considering adding a new component called link which is supposed to be more general to be capable to capture losses in both transmission and energy conversion. link will be useful in hydrogen and CCUS modeling as well.

From reading and trying to understand the code, I think that multiplying the branch_map with the line efficiencies at the outgoing bus created here https://github.com/Breakthrough-Energy/REISE.jl/blob/2a691045b088893c619814ec8a728e9cdd33660d/src/model.jl#L33 and used here https://github.com/Breakthrough-Energy/REISE.jl/blob/2a691045b088893c619814ec8a728e9cdd33660d/src/model.jl#L219 could already be sufficient. For the analogous constraint in PyPSA, this is the only place where the line efficiencies are considered. Note however in order to keep it linear, the efficiency losses are only applied to one direction.


Support for single line mode

Hi,
Is there any chance support could be added for single-line mode? (meaning the dot token will match newlines as well when this flag is specified)
I can try my hand at adding this functionality if you'd like (any guidance you could offer would be very much appreciated!).

@int0x2e The current implementation always uses the single line mode, i.e., dot always matches anything.

Yeah, you're absolutely right. I'm very sorry for the trouble!
Thank you so much for the reply. I really love using sregex! :-) (we're using it as part of the replace-filter nginx module, which is also awesome!)
Have a great day :-)

Thanks! Glad you like them :)


Unchunk special case

When unchunking a ChunkedArray, often a shuffle is required, via a groupByKey. However, in special cases, no shuffle is actually required because all of the chunked dimensions have been moved to the keys to that there is really no chunking.
In fact, this is a very common case in Thunder Blocks.
This PR checks for this case and skips the groupByKey on unchunk when it can be avoided.

BOOM excited for the speed improvements! 🚀


Last Will and Testament

🚀 Feature Request
Does this client support Last Will and Testament?
I couldn't find any options for this.

Hi @SommerPh - LWT is planned for the next release which will be hopefully soon.  Once that is out, we'll update the documentation to reflect that as well.  I'll update here again once it's out.

Hi @SommerPh - Last will and testament support was just released in version 0.3.0 of the library.
https://www.nuget.org/packages/HiveMQtt/0.3.0
I'll close out this issue but if you have any troubles, please let us know by filing a new issue.  Thanks for your patience!


A new minimal profile

Summary of the new feature / enhancement
As a user that is troubleshooting issues I may want a very minimal profile that isn't my full profile, which may set things like host ui settings, prompt and colours to differentiate between sessions.
Proposed technical implementation details (optional)
This should be able to be called via a new -minprofile switch on the pwsh executable & be set like any other profile but only ever called when that switch is present

This would be an extension to the current noprofile option and could be used in conjunction with it
This also would be great to be added as an additional jumplist entry for those of us on windows as part of install, like I have previously requested.

Instead of -minprofile, perhaps it would make sense to have -profile <path>?

I like the idea, @SteveL-MSFT; it would be (loosely) analogous to bash --rcfile <path>.
The semantics would have to be clarified either way, though: is the specified file then the only profile that gets loaded,  or does it merely override $PROFILE.currentUserCurrentHost, meaning that all other profiles (if present) are loaded too, as usual?

@mklement0 good point, my thinking is that it's an override of $PROFILE.CurrentUserCurrentHost

Instead of -minprofile, perhaps it would make sense to have -profile <path>?

@SteveL-MSFT  - Personally I prefer to look at things with As well as in mind over instead of's because to me that feels more inclusive and may be overall easier on end users and usecases, though there are definitely times where an Instead of is required, but I don't think that is the case here.
So for me I think that's certainly an option to have both, though if we were to keep things as close to the current profile mechanisms that are in place (at least for now) then just adding additional Minimal options would IMO be the simplest way forward for now & would allow us to easily then expand on this by other means in future like how you've suggested.
Though looking into HostUtilities.cs it seems there may have even been an option for this that we could potentially more easily expose, that is If I have read the code right though I may not have done so am going away and re-reading it & thinking on it.

WG-Engine discussed this today.
Since you can get the desired functionality today by using pwsh -noe -c '. <path-to-minprofile.ps1>', we do not see a strong enough case for adding this feature.

Whilst I can see where the Engine WG are coming from, because that is relatively easy, I feel that for end users/administrators/developers/hobbists etc they should be able to define this in a way that is just as simple as it is for how we currently allocate the already available profiles. After all, PowerShell is all about optimising the users time and experience where best possible.
Now this may end up being things that as a wider discussion turns into the things needed in a minimal profile that will help in troubleshooting issues in this repo or in scripts/modules etc going forward.
I think this needs a verbal conversation across at least the Working Groups, but may be worthwhile being a point of topic for a future community call for wider input.


Make popclean work more like it used to.

See #6800.

Hey @bakert,
Your changes look good to me!
View build log
TravisBuddy Request Identifier: faeafca0-0617-11ea-a6d4-35dac06c1dc7


displayed item in textfield is not the same as picked

How is it possible, for example ,if I picked row == 0 , displayed value in textfield is equal row == 7?

Is it fixed with the [self sendActionsForControlEvents:UIControlEventValueChanged]?


Soft keyboard pops up at any external hardware keyboard key press

Execute flutter run on the code sample see "Code sample" section below)
Connect an external hardware keyboard
Type something on the keyboard

Expected results: No flashing soft keyboard
Actual results: Flashing soft keyboard that triggers MediaQuery at every key press since the soft keyboard changes the screen size
Here's a video that shows the problem:
https://user-images.githubusercontent.com/6929765/161416206-79e1a7da-26a9-4a7a-9063-ac5208b98248.mp4

Code sample
import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter TextField issue',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyScreen(title: 'Flutter TextField issue'),
    );
  }
}

class MyScreen extends StatefulWidget {
  const MyScreen({Key? key, required this.title}) : super(key: key);

  final String title;

  @override
  State<MyScreen> createState() => _MyScreenState();
}

class _MyScreenState extends State<MyScreen> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: const TextField(),
    );
  }
}

Logs
Launching lib\main.dart on LG H930 in debug mode...
Running Gradle task 'assembleDebug'...
√  Built build\app\outputs\flutter-apk\app-debug.apk.
Installing build\app\outputs\flutter-apk\app.apk...
Debug service listening on ws://<IP_ADDRESS>:55538/uzRFe4MR3Ug=/ws
Syncing files to device LG H930...
I/OpenGLRenderer( 9828): Initialized EGL, version 1.4
D/OpenGLRenderer( 9828): Swap behavior 2
D/vndksupport( 9828): Loading<EMAIL_ADDRESS>from current namespace instead of sphal namespace.
D/vndksupport( 9828): Loading /vendor/lib64/hw/gralloc.msm8998.so from current namespace instead of sphal namespace.
I/Timeline( 9828): Timeline: Activity_idle id: android.os.BinderProxy@be7ba98 time:1094793584
I/ViewRootImpl( 9828): ViewRoot's Touch Event : ACTION_DOWN
I/ViewRootImpl( 9828): ViewRoot's Touch Event : ACTION_UP
I/AssistStructure( 9828): Flattened final assist data: 784 bytes, containing 1 windows, 3 views
E/SpannableStringBuilder( 9828): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
E/SpannableStringBuilder( 9828): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
E/SpannableStringBuilder( 9828): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
E/SpannableStringBuilder( 9828): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
W/e.flutter_issu( 9828): Accessing hidden method Landroid/view/View;->getAccessibilityViewId()I (light greylist, reflection)
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_D, scanCode=32, metaState=0, flags=0x8, repeatCount=0, eventTime=1094796046, downTime=1094796046, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
E/SpannableStringBuilder( 9828): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
E/SpannableStringBuilder( 9828): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
E/SpannableStringBuilder( 9828): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
E/SpannableStringBuilder( 9828): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_UP, keyCode=KEYCODE_D, scanCode=32, metaState=0, flags=0x8, repeatCount=0, eventTime=1094796099, downTime=1094796046, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_S, scanCode=31, metaState=0, flags=0x8, repeatCount=0, eventTime=1094796645, downTime=1094796645, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_UP, keyCode=KEYCODE_S, scanCode=31, metaState=0, flags=0x8, repeatCount=0, eventTime=1094796774, downTime=1094796645, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_D, scanCode=32, metaState=0, flags=0x8, repeatCount=0, eventTime=1094797110, downTime=1094797110, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_UP, keyCode=KEYCODE_D, scanCode=32, metaState=0, flags=0x8, repeatCount=0, eventTime=1094797197, downTime=1094797110, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_S, scanCode=31, metaState=0, flags=0x8, repeatCount=0, eventTime=1094797587, downTime=1094797587, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_UP, keyCode=KEYCODE_S, scanCode=31, metaState=0, flags=0x8, repeatCount=0, eventTime=1094797719, downTime=1094797587, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_D, scanCode=32, metaState=0, flags=0x8, repeatCount=0, eventTime=1094797994, downTime=1094797994, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_UP, keyCode=KEYCODE_D, scanCode=32, metaState=0, flags=0x8, repeatCount=0, eventTime=1094798064, downTime=1094797994, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_S, scanCode=31, metaState=0, flags=0x8, repeatCount=0, eventTime=1094798335, downTime=1094798335, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_UP, keyCode=KEYCODE_S, scanCode=31, metaState=0, flags=0x8, repeatCount=0, eventTime=1094798408, downTime=1094798335, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_D, scanCode=32, metaState=0, flags=0x8, repeatCount=0, eventTime=1094798681, downTime=1094798681, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_UP, keyCode=KEYCODE_D, scanCode=32, metaState=0, flags=0x8, repeatCount=0, eventTime=1094798724, downTime=1094798681, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_DEL, scanCode=14, metaState=0, flags=0x8, repeatCount=0, eventTime=1094800390, downTime=1094800390, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_UP, keyCode=KEYCODE_DEL, scanCode=14, metaState=0, flags=0x8, repeatCount=0, eventTime=1094800554, downTime=1094800390, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_DEL, scanCode=14, metaState=0, flags=0x8, repeatCount=0, eventTime=1094800616, downTime=1094800616, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_UP, keyCode=KEYCODE_DEL, scanCode=14, metaState=0, flags=0x8, repeatCount=0, eventTime=1094800674, downTime=1094800616, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_DEL, scanCode=14, metaState=0, flags=0x8, repeatCount=0, eventTime=1094800734, downTime=1094800734, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_UP, keyCode=KEYCODE_DEL, scanCode=14, metaState=0, flags=0x8, repeatCount=0, eventTime=1094800794, downTime=1094800734, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_DEL, scanCode=14, metaState=0, flags=0x8, repeatCount=0, eventTime=1094800885, downTime=1094800885, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_UP, keyCode=KEYCODE_DEL, scanCode=14, metaState=0, flags=0x8, repeatCount=0, eventTime=1094800928, downTime=1094800885, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_DEL, scanCode=14, metaState=0, flags=0x8, repeatCount=0, eventTime=1094801140, downTime=1094801140, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_UP, keyCode=KEYCODE_DEL, scanCode=14, metaState=0, flags=0x8, repeatCount=0, eventTime=1094801184, downTime=1094801140, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_DEL, scanCode=14, metaState=0, flags=0x8, repeatCount=0, eventTime=1094801258, downTime=1094801258, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_UP, keyCode=KEYCODE_DEL, scanCode=14, metaState=0, flags=0x8, repeatCount=0, eventTime=1094801335, downTime=1094801258, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_DEL, scanCode=14, metaState=0, flags=0x8, repeatCount=0, eventTime=1094801379, downTime=1094801379, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
E/SpannableStringBuilder( 9828): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
I/chatty  ( 9828): uid=10569(com.example.flutter_issue) identical 4 lines
E/SpannableStringBuilder( 9828): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_UP, keyCode=KEYCODE_DEL, scanCode=14, metaState=0, flags=0x8, repeatCount=0, eventTime=1094801438, downTime=1094801379, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
E/SpannableStringBuilder( 9828): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
E/SpannableStringBuilder( 9828): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
I/OpenGLRenderer( 9828): Initialized EGL, version 1.4
D/OpenGLRenderer( 9828): Swap behavior 2
I/Timeline( 9828): Timeline: Activity_idle id: android.os.BinderProxy@be7ba98 time:1094826858
E/SpannableStringBuilder( 9828): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
E/SpannableStringBuilder( 9828): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
I/Timeline( 9828): Timeline: Activity_idle id: android.os.BinderProxy@be7ba98 time:1094829902
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_SHIFT_LEFT, scanCode=42, metaState=META_SHIFT_ON|META_SHIFT_LEFT_ON, flags=0x8, repeatCount=0, eventTime=1094836364, downTime=1094836364, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
E/SpannableStringBuilder( 9828): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
I/chatty  ( 9828): uid=10569(com.example.flutter_issue) identical 2 lines
E/SpannableStringBuilder( 9828): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_T, scanCode=20, metaState=META_SHIFT_ON|META_SHIFT_LEFT_ON, flags=0x8, repeatCount=0, eventTime=1094836662, downTime=1094836662, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_UP, keyCode=KEYCODE_T, scanCode=20, metaState=META_SHIFT_ON|META_SHIFT_LEFT_ON, flags=0x8, repeatCount=0, eventTime=1094836733, downTime=1094836662, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_UP, keyCode=KEYCODE_SHIFT_LEFT, scanCode=42, metaState=0, flags=0x8, repeatCount=0, eventTime=1094836854, downTime=1094836662, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_R, scanCode=19, metaState=0, flags=0x8, repeatCount=0, eventTime=1094837219, downTime=1094837219, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_UP, keyCode=KEYCODE_R, scanCode=19, metaState=0, flags=0x8, repeatCount=0, eventTime=1094837273, downTime=1094837219, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_Y, scanCode=21, metaState=0, flags=0x8, repeatCount=0, eventTime=1094837743, downTime=1094837743, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_UP, keyCode=KEYCODE_Y, scanCode=21, metaState=0, flags=0x8, repeatCount=0, eventTime=1094837844, downTime=1094837743, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_SPACE, scanCode=57, metaState=0, flags=0x8, repeatCount=0, eventTime=1094838387, downTime=1094838387, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_UP, keyCode=KEYCODE_SPACE, scanCode=57, metaState=0, flags=0x8, repeatCount=0, eventTime=1094838459, downTime=1094838387, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
E/SpannableStringBuilder( 9828): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
E/SpannableStringBuilder( 9828): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
E/SpannableStringBuilder( 9828): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
E/SpannableStringBuilder( 9828): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
E/SpannableStringBuilder( 9828): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
E/SpannableStringBuilder( 9828): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_T, scanCode=20, metaState=0, flags=0x8, repeatCount=0, eventTime=1094838731, downTime=1094838731, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
E/SpannableStringBuilder( 9828): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
I/chatty  ( 9828): uid=10569(com.example.flutter_issue) identical 2 lines
E/SpannableStringBuilder( 9828): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_UP, keyCode=KEYCODE_T, scanCode=20, metaState=0, flags=0x8, repeatCount=0, eventTime=1094838788, downTime=1094838731, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_O, scanCode=24, metaState=0, flags=0x8, repeatCount=0, eventTime=1094839167, downTime=1094839167, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_UP, keyCode=KEYCODE_O, scanCode=24, metaState=0, flags=0x8, repeatCount=0, eventTime=1094839299, downTime=1094839167, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_SPACE, scanCode=57, metaState=0, flags=0x8, repeatCount=0, eventTime=1094839649, downTime=1094839649, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_UP, keyCode=KEYCODE_SPACE, scanCode=57, metaState=0, flags=0x8, repeatCount=0, eventTime=1094839705, downTime=1094839649, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
E/SpannableStringBuilder( 9828): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
E/SpannableStringBuilder( 9828): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
E/SpannableStringBuilder( 9828): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
E/SpannableStringBuilder( 9828): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
E/SpannableStringBuilder( 9828): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
E/SpannableStringBuilder( 9828): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_I, scanCode=23, metaState=0, flags=0x8, repeatCount=0, eventTime=1094840007, downTime=1094840007, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
E/SpannableStringBuilder( 9828): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
I/chatty  ( 9828): uid=10569(com.example.flutter_issue) identical 2 lines
E/SpannableStringBuilder( 9828): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_UP, keyCode=KEYCODE_I, scanCode=23, metaState=0, flags=0x8, repeatCount=0, eventTime=1094840064, downTime=1094840007, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_N, scanCode=49, metaState=0, flags=0x8, repeatCount=0, eventTime=1094840274, downTime=1094840274, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_UP, keyCode=KEYCODE_N, scanCode=49, metaState=0, flags=0x8, repeatCount=0, eventTime=1094840334, downTime=1094840274, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_S, scanCode=31, metaState=0, flags=0x8, repeatCount=0, eventTime=1094840591, downTime=1094840591, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_UP, keyCode=KEYCODE_S, scanCode=31, metaState=0, flags=0x8, repeatCount=0, eventTime=1094840679, downTime=1094840591, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_E, scanCode=18, metaState=0, flags=0x8, repeatCount=0, eventTime=1094840849, downTime=1094840849, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_UP, keyCode=KEYCODE_E, scanCode=18, metaState=0, flags=0x8, repeatCount=0, eventTime=1094840903, downTime=1094840849, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_R, scanCode=19, metaState=0, flags=0x8, repeatCount=0, eventTime=1094841071, downTime=1094841071, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_UP, keyCode=KEYCODE_R, scanCode=19, metaState=0, flags=0x8, repeatCount=0, eventTime=1094841143, downTime=1094841071, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_T, scanCode=20, metaState=0, flags=0x8, repeatCount=0, eventTime=1094841326, downTime=1094841326, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_UP, keyCode=KEYCODE_T, scanCode=20, metaState=0, flags=0x8, repeatCount=0, eventTime=1094841369, downTime=1094841326, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_SPACE, scanCode=57, metaState=0, flags=0x8, repeatCount=0, eventTime=1094841550, downTime=1094841550, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_UP, keyCode=KEYCODE_SPACE, scanCode=57, metaState=0, flags=0x8, repeatCount=0, eventTime=1094841623, downTime=1094841550, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
E/SpannableStringBuilder( 9828): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
E/SpannableStringBuilder( 9828): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
E/SpannableStringBuilder( 9828): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
E/SpannableStringBuilder( 9828): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
E/SpannableStringBuilder( 9828): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
E/SpannableStringBuilder( 9828): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_S, scanCode=31, metaState=0, flags=0x8, repeatCount=0, eventTime=1094841881, downTime=1094841881, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
E/SpannableStringBuilder( 9828): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
I/chatty  ( 9828): uid=10569(com.example.flutter_issue) identical 2 lines
E/SpannableStringBuilder( 9828): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_UP, keyCode=KEYCODE_S, scanCode=31, metaState=0, flags=0x8, repeatCount=0, eventTime=1094841971, downTime=1094841881, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_O, scanCode=24, metaState=0, flags=0x8, repeatCount=0, eventTime=1094842181, downTime=1094842181, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_UP, keyCode=KEYCODE_O, scanCode=24, metaState=0, flags=0x8, repeatCount=0, eventTime=1094842224, downTime=1094842181, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_M, scanCode=50, metaState=0, flags=0x8, repeatCount=0, eventTime=1094842467, downTime=1094842467, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_UP, keyCode=KEYCODE_M, scanCode=50, metaState=0, flags=0x8, repeatCount=0, eventTime=1094842539, downTime=1094842467, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_E, scanCode=18, metaState=0, flags=0x8, repeatCount=0, eventTime=1094842720, downTime=1094842720, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_UP, keyCode=KEYCODE_E, scanCode=18, metaState=0, flags=0x8, repeatCount=0, eventTime=1094842779, downTime=1094842720, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_SPACE, scanCode=57, metaState=0, flags=0x8, repeatCount=0, eventTime=1094842945, downTime=1094842945, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_UP, keyCode=KEYCODE_SPACE, scanCode=57, metaState=0, flags=0x8, repeatCount=0, eventTime=1094842973, downTime=1094842945, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
E/SpannableStringBuilder( 9828): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
E/SpannableStringBuilder( 9828): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
E/SpannableStringBuilder( 9828): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
E/SpannableStringBuilder( 9828): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
E/SpannableStringBuilder( 9828): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
E/SpannableStringBuilder( 9828): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_T, scanCode=20, metaState=0, flags=0x8, repeatCount=0, eventTime=1094843291, downTime=1094843291, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
E/SpannableStringBuilder( 9828): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
E/SpannableStringBuilder( 9828): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
E/SpannableStringBuilder( 9828): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
E/SpannableStringBuilder( 9828): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_UP, keyCode=KEYCODE_T, scanCode=20, metaState=0, flags=0x8, repeatCount=0, eventTime=1094843350, downTime=1094843291, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_E, scanCode=18, metaState=0, flags=0x8, repeatCount=0, eventTime=1094843515, downTime=1094843515, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_UP, keyCode=KEYCODE_E, scanCode=18, metaState=0, flags=0x8, repeatCount=0, eventTime=1094843573, downTime=1094843515, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_X, scanCode=45, metaState=0, flags=0x8, repeatCount=0, eventTime=1094843755, downTime=1094843755, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_UP, keyCode=KEYCODE_X, scanCode=45, metaState=0, flags=0x8, repeatCount=0, eventTime=1094843813, downTime=1094843755, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_T, scanCode=20, metaState=0, flags=0x8, repeatCount=0, eventTime=1094843903, downTime=1094843903, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]
I/ViewRootImpl( 9828): ViewRoot's KeyEvent { action=ACTION_UP, keyCode=KEYCODE_T, scanCode=20, metaState=0, flags=0x8, repeatCount=0, eventTime=1094843964, downTime=1094843903, deviceId=18, source=0x101 } to DecorView@faa983c[MainActivity]

[√] Flutter (Channel stable, 2.10.4, on Microsoft Windows [Versione 10.0.19042.1586], locale it-IT)
    • Flutter version 2.10.4 at C:\flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision c860cba910 (9 days ago), 2022-03-25 00:23:12 -0500
    • Engine revision 57d3bac3dd
    • Dart version 2.16.2
    • DevTools version 2.9.2

[√] Android toolchain - develop for Android devices (Android SDK version 30.0.3)
    • Android SDK at C:\Users\Alessandro\AppData\Local\Android\sdk
    • Platform android-31, build-tools 30.0.3
    • Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java
    • Java version OpenJDK Runtime Environment (build 11.0.11+9-b60-7590822)
    • All Android licenses accepted.

[√] Chrome - develop for the web
    • Chrome at C:\Program Files\Google\Chrome\Application\chrome.exe

[√] Visual Studio - develop for Windows (Visual Studio Community 2019 16.10.3)
    • Visual Studio at C:\Program Files (x86)\Microsoft Visual Studio\2019\Community
    • Visual Studio Community 2019 version 16.10.31424.327
    • Windows 10 SDK version 10.0.19041.0

[√] Android Studio (version 2021.1)
    • Android Studio at C:\Program Files\Android\Android Studio
    • Flutter plugin can be installed from:
       https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
       https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.11+9-b60-7590822)

[√] VS Code (version 1.62.2)
    • VS Code at C:\Users\Alessandro\AppData\Local\Programs\Microsoft VS Code
    • Flutter extension version 3.25.0

[√] Connected device (4 available)
    • LG H930 (mobile)  • LGH9308e11f266 • android-arm64  • Android 9 (API 28)
    • Windows (desktop) • windows        • windows-x64    • Microsoft Windows [Versione 10.0.19042.1586]
    • Chrome (web)      • chrome         • web-javascript • Google Chrome 100.0.4896.60
    • Edge (web)        • edge           • web-javascript • Microsoft Edge 99.0.1150.46

[√] HTTP Host Availability
    • All required HTTP hosts are available

• No issues found!
``
</details>

Sorry... I even searched for it without luck. So you say it has been open since November 2020? It's almost two years... :(

I'm not sure it is the same issue... in that one @TahaTesser says that this behavior can be turned off with the switch "Show virtual keyboard" in the device settings. But that settings is already turned off in my device, yet the behavior is the wrong one you can see in the video.

@aleripe
Check also this similar issue https://github.com/flutter/flutter/issues/51478

@darshankawar
There is no solution on that issue and seems quite different from mine. I don't use any RawKeyboardListener, I just write on a TextField using an external keyboard.

@aleripe
Thanks for the feedback. I looked at the linked issues again and yes, they seem to be different than your use case. They could be related but not similar.  The linked issue makes use of focus and rawKeyboardListener which you are not using.
Also, the UI behavior is completely different wherein your use case, the soft keyboard keeps dancing everytime we input from external keyboard.
Reopening and labeling. There was a similar issue that I replicated which matches your case which was closed as a duplicate of the linked issue which, again, doesn't make use of focus or rawKeyboardListener .
The repro is in https://github.com/flutter/flutter/issues/95697#issuecomment-1000106601

/cc @LongCatIsLooong

cc @dkwingsmt

This problem has been around for a few years and is happening on most Android devices.
Turning on the option to hide the soft keyboard when connecting the hardware keyboard in the device settings can solve the problem, but the user has to set the above setting by himself.
I think it would be better if this issue was dealt with more seriously.

Just FYI: It seems that this is a bug in Android that the on screen keyboard pops on when you press a key on a keyboard. This also happens in a native app. The flashing is a differnt story.
Possible workaround
By the way when you change the input type to number this does not happen and as long you are not filtering the input you can add any text to the input field, so this could be a workaround.

Related Android Bug: https://issuetracker.google.com/issues/300236999

A similar issue https://github.com/flutter/flutter/issues/70546 was fixed recently by https://github.com/flutter/engine/pull/49829.
@aleripe Thank you for checking if this is still reproducible for you on master (the fix is only on master for the moment).

@bleroux can you quickly check my sample code here with the current master?
https://gist.github.com/rekire/0ab11b3c770fcba750db66183bd18aff

@rekire Your sample code shows that the behavior is not similar depending on the keyboard type (as you pointed out it might be related to an Android issue, it could also be specific to some IMEs implementation or perhaps Flutter needs to set a particular flag). For this code sample, https://github.com/flutter/engine/pull/49829 won't help that much as soon as the text field is focused (on your code sample the text field is explicitly focused when clicking on the icon which changes thee keyboard type).
Nonetheless, I don't think this is related to the flashing keyboard issue there and it will be more actionnable to discuss this on another issue (maybe a new one, ping me if you create one). There are a several open issues related to soft keyboard popping up. In order to make progress, it would be great to make each issue as narrow as possible (code sample, devices, flutter version, etc). Thank you for your help on this.
Looking again at @aleripe video from  https://github.com/flutter/flutter/issues/101259#issue-1190841585 and at https://github.com/flutter/flutter/issues/95697#issuecomment-1000106601, this flashing issue seems to be specific to Samsung devices.
I will update the label and title, if someone can reproduce this issue (flashing keyboard) on a non-Samsung device we will change again the title and labels.

@rekire Your sample code shows that the behavior is not similar depending on the keyboard type (as you pointed out it might be related to an Android issue, it could also be specific to some IMEs implementation or perhaps Flutter needs to set a particular flag). For this code sample, flutter/engine#49829 won't help that much as soon as the text field is focused (on your code sample the text field is explicitly focused when clicking on the icon which changes thee keyboard type).
Nonetheless, I don't think this is related to the flashing keyboard issue there and it will be more actionnable to discuss this on another issue (maybe a new one, ping me if you create one). There are a several open issues related to soft keyboard popping up. In order to make progress, it would be great to make each issue as narrow as possible (code sample, devices, flutter version, etc). Thank you for your help on this.
Looking again at @aleripe video from #101259 (comment) and at #95697 (comment), this flashing issue seems to be specific to Samsung devices (and per #133736 (comment) specific to Samsung IME). I will update the label and title, if someone can reproduce this issue (flashing keyboard) on a non-Samsung device we will change again the title and labels.

Hi, my video was recorder on an LG V30. So definitely not a Samsung related issue.

@bleroux when I find some time I'll create a new issue for that in this case. I thought that my issue would be related. I'm mostly confused about the fact that Google closed my issue as "Won't Fix (Intended Behavior)", WTF Google. I tried already in the past to fix the error and digged for that quiet deep in the flutter engine to understand what's going on.
By the way my work around is to implement a custom IME, that works surprisingly quiet well. So I can control now where the keyboard will be displayed.

Hi, my video was recorded on an LG V30. So definitely not a Samsung related issue.

@aleripe Thanks for your feedback 👍
Can you check which keyboard app is used on your phone?
(A screenshot similar to https://github.com/flutter/flutter/issues/133736#issuecomment-1701786380 might help).
It might also be interesting to know if the flashing happens when using another IME.

Hi, my video was recorded on an LG V30. So definitely not a Samsung related issue.

@aleripe Thanks for your feedback 👍 Can you check which keyboard app is used on your phone? (A screenshot similar to #133736 (comment) might help). It might also be interesting to know if the flashing happens when using another IME.

I had tried with the stock LG keyboard and with SwiftKey at the time I recorded that video. I'll have another check with my updated app later.


Removed duplicate float class for input field

Just found an extra float declaration in the newsletter subscription component.

Added this patch manually. Thanks for catching this.


Fix invisible pec-log

The issue got introduce with golden-layout - the library which allows dragging panels around.
As initially the element holding the list is 0x0, we need to tell the list to resize itself when the panel becomes active. Somehow the list doesn't catch it itself.

Good question... I think so. The rest of tabs I think is drawn with regular DOM, the iron-list is special in that it only draws what is visible on the screen, not the entire collection. So it thought that the container is 0px x 0px, so it doesn't need to draw. Other panels just draw their stuff without such smart logic.


stations.yaml issue while scrolling

Hi Greg,
I have discovered a small problem in the stations.yaml. I have not yet verified it in detail.
However, it seems that my AVR cannot be scrolled to the end of a collection of radio stations if one of the stations in the list is not currently broadcasting.
There is no way to determine beforehand in the station list whether the link is broken. I had 2 such cases in my station list, after removing from the list it was possible to scroll to the end again.
I didn't see that as application issue. But was interested to see that.

I have never experienced this behavior with my AVRs. Sometimes it happens that when browsing the contents of Radio-browser stations, some of them do not broadcast or broadcast in an unsupported format, but this never causes the problems you described. I can continue browsing the station list without any problems. Strange behavior ... :thinking:
You can place a sample of such a file here and I will be able to check it.

@TheBossME
Does this behavior still occur? Isn't this related to this https://github.com/coffeegreg/YTuner/issues/11 even though this issue concerns to stations.yaml and not radio-browser stations.

Fixed


lastIndexOf seems buggy

Scala:
val vec = Vector(1,2,3,1,2,3)    //> vec  : scala.collection.immutable.Vector[Int] = Vector(1, 2, 3, 1, 2, 3)
val vec2 = Vector(1,2,3)         //> vec2  : scala.collection.immutable.Vector[Int] = Vector(1, 2, 3)
vec.lastIndexOfSlice(vec2)       //> res5: Int = 3
vec.lastIndexOfSlice(vec2, 2)    //> res6: Int = 0

Javaslang:
Vector<Integer> vec = Vector.of(1,2,3,1,2,3);
Vector<Integer> vec2 = Vector.of(1,2,3);
vec.lastIndexOfSlice(vec2);      // 3
vec.lastIndexOfSlice(vec2, 2);   // 3

Hi Martti, thank you for your finding!
Btw - Great project javactic

Thanks! Official release Javactic once Javaslang 2 is out!

Why not add it as a Javaslang-module?

What does that mean technically?

If @danieldietrich agrees, we could move the project into the javaslang organisation and add you as a team member to a group which can mantain the javaslang-javatic repo.

Generally a good idea!
My vision is the following:
Projects asked for from the outside, like adapters for existing, popular frameworks, should be included. It helps people to integrate Javaslang in their environments. javaslang-jackson is an example for supporting JSON marshalling/unmarshalling.
In order to include projects we should wait a while until they emerged from the incubation phase.
Please do not underestimate the maintenance factor for a project. It would be no good marketing strategy to have an organization where many projects are not maintained any more.
So for now I added...
awesome-javaslang
to create a list of awesome Javaslang projects. Please add your projects!
@ruslansennov I added javaslang-jackson. It would be great to have to minimal code snippets/examples for searialization/deserialization (e.g. of a List.of(1, 2, 3) or something simple)
/cc @ggalmazor (jfry), @RobWin (circuit-breaker), @mvh77 (javactic)


Cutting v0.3.0 release

What this PR does / why we need it:
Which issue(s) this PR fixes (optional, in fixes #<issue number>(, fixes #<issue_number>, ...) format, will close the issue(s) when PR gets merged):
Fixes #
Special notes for your reviewer:

Please confirm that if this PR changes any image versions, then that's the sole change this PR makes.

Release note:

This change is

@ellis-bigelow I noticed you also updated the SDK version, that's great. Just confirm, will you release SDK 0.3 in Pypi  or need me to refresh that in Pypi? Thanks.

@ellis-bigelow I noticed you also updated the SDK version, that's great. Just confirm, will you release SDK 0.3 in Pypi or need me to refresh that in Pypi? Thanks.

I'm planning on doing the refresh as soon as this release is cut. At the same time I add the git tag. Alternatively, you could do it, which would be quite helpful!

Alternatively, you could do it, which would be quite helpful!

@ellis-bigelow OK, I will refresh the SDK package in Pypi once the PR merged. Thanks.
/cc @animeshsingh

/lgtm

/approve

/lgtm

/retest


Timezone localization in unit tests is tied to PST

lang-tests.js expects to see 'zz' localize to 'PST', which fails in other timezones.
I’ve been trying to figure a way round this without introducing extra untested logic or crazy mock-dates, but so far have drawn a blank, so posting it up for discussion…

Yeah, I think the only way to test the issue is to replicate the code for getting the timezone. And that doesn't seem like a good test at all.
Maybe I could store a hash of timezones and match the getTimezoneOffset to them. Something like the following link?
http://blog.redfin.com/devblog/2007/08/getting_the_time_zone_from_a_web_browser.html

Hmm, after looking into the timezone information here http://www.iana.org/time-zones, it looks like this may be a sub-optimal solution, as the number of lines in the files for 2011 timezone information is over 15000 lines.
The North America file is over 3k lines itself.
Although, as it is for unit tests, the hash of timezones may be the best solution, as it's not that critical to the codebase.

Maybe a naive regex would be enough for this unit test? Something like:
var b = moment(new Date(2010, 1, 14, 15, 25, 50, 125));
ok(b.format('zz').match(/[A-Z]{3,4}/), 'zz becomes timeszone code');

Adjusted appropriately for different locales, this might be enough to verify that something in the ballpark of a timezone code is being returned.
What do you think?

I’ve submitted a pull request on this one with my adaptations to the tests.


When I send IBC packets at endblock handle, the relayer cannot work normally

Crate
relayer
relayer-cli

Summary of Bug
I want to connect src with dst. src sends IBC packets to dst at ABCI Endblock, that code look like this
// EndBlocker updates the current price
func EndBlocker(ctx sdk.Context, k keeper.Keeper) {
	// ... do something
       k.channelKeeper.SendPacket(ctx, channelCap, packet);
}

In the relayer log, you can see the following information
DEBUG [src:oracle/channel-0 -> dst] recv packets to send out to dst of the ones with commitments on source src: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 (first 10 shown here; total=23)
Jul 23 15:42:01.857
INFO [src:oracle/channel-0 -> dst] found unprocessed SendPacket events for [] (first 10 shown here; total=0)

The relayer can query the comments in SRC that are not acked, as described in the first log
However, the relayer cannot found unprocessed sendpacket events according to the sequence corresponding to the commitments
I read the relayer code, https://github.com/informalsystems/ibc-rs/blob/master/relayer/src/link/relay_path.rs#L836
events_result = self.src_chain().query_txs(query)?;

This line of code is to query the corresponding transaction information according to the information of commitments, and extract IBC event from the transaction information.
because my IBC packet is sent at endblock, this line of code will return empty events
so the relayer cannot forward IBC packets normally
I think this is a bug because the IBC send_packet events may not exist in Tx or in beginblock / endblock (NewBlock)

Version
0.6.0

Steps to Reproduce

Acceptance Criteria

For Admin Use

[ ] Not duplicate issue
[ ] Appropriate labels applied
[ ] Appropriate milestone (priority) applied
[ ] Appropriate contributors tagged
[ ] Contributor assigned/self-assigned

Hi,
Thanks for documenting this issue and for your patience!

This line of code is to query the corresponding transaction information according to the information of commitments, and extract IBC event from the transaction information.

That's correct. Hermes uses the Tendermint ABCI tx_search to query each packet (by its source and destination port/channel id and its seq. nr.) obtain packet information.

because my IBC packet is sent at endblock, this line of code will return empty events

I think I understand. Do you happen to know what is the correct method for querying packet information for packets sent at endblock?
A couple of follow-up questions:

what chain binary are you running, is this gaiad, and what version?
how do you produce the IBC packets exactly (which binary and what command)?

Hi, thanks for your reply.
for question 1: I'm running bandchain(master branch)
for question 2: the bandchain send_packet at Endblock, see https://github.com/bandprotocol/chain/blob/e867db8042236e43f34340cc1954e7e5034848ed/x/oracle/keeper/result.go#L85
my solution:

extract send_packet event from NewBlock event  https://github.com/lyqingye/ibc-rs/blob/master/relayer/src/event/rpc.rs#L31
call block_search after tx_search, extract send_packet event from begin/end block  https://github.com/lyqingye/ibc-rs/blob/master/relayer/src/chain/cosmos.rs#L1503

I don't know if my modification is correct, but it works normally（ 😄）
If there is a problem with this modification, I hope you can point it out，because I'm a beginner

This is pretty advanced (I wouldn't say you're a beginner hehe!). Thank you for the pointers in the code, that helps a lot.
What we need to do is to simply adapt Hermes following your indications. Concretely, we need to merge your modifications in two places: in rpc.rs and in cosmos.rs.
I have two more questions for you:

Is there any documentation on the OracleRequest event type? To make sure we can test and maintain Hermes in the future, we need to understand why are SendMsg packets typed like that. Your help is greatly appreciated.
Is this the chain binary you're running?

Thank you for paying attention to this issue.
for question1: the OracleRequest event type is my Transaction action type, like cross-chain Transfer Transaction, when this transaction is executed, it will generate an ibc packet.
All in all, currently hermes cannot extract packets from a custom transaction, so I captured the custom event type when building the event
for question2: no
I found a solution to solve a similar problem，I reused the previous code and extracted the packet directly from the events of transaction result. that looks like a code cleanup.
https://github.com/lyqingye/ibc-rs/blob/master/relayer/src/event/rpc.rs#L56

@adizere This has not actually been solved with #1172. I just tested it out and it doesn't work. The packet that is created inside the EndBlock is never send back to the original chain.

@RiccardoM I think it may be an oversight on my part! I will double-check again the linked PR and the original description of the issue. But I will probably open a separate issue to track your problem.
In the meantime, do you have a simple way to reproduce the issue you're seeing? I'm curious about your setup, and that may help me solve it faster as well. Any pointers for me to reproduce this would be greatly appreciated!

@adizere Sorry for the late reply. Here is how I am reproducing it.
The two chains that I am using are:

Desmos
Band Protocol

Setup
Desmos
To setup Desmos I:

Clone the Desmos repository
Checkout the riccardo/upgrade-band branch.
Initialize a local testnet using this script:

Desmos init script
#!/bin/bash
shopt -s expand_aliases

echo "===> Deleting previous data"
rm -r -f $HOME/.desmos

echo "===> Initializing chain"
desmos init desmos-localnet --chain-id desmos-localnet

echo "===> Editing genesis.json"
sed -i 's/stake/udaric/g' $HOME/.desmos/config/genesis.json
sed -i 's/"voting_period": "172800s"/"voting_period": "120s"/g' ~/.desmos/config/genesis.json
sed -i 's/max_subscriptions_per_client = 5/max_subscriptions_per_client = 20/g' ~/.desmos/config/config.toml

sed -i 's/pruning = "default"/pruning = "custom"/g' ~/.desmos/config/app.toml
sed -i 's/pruning-keep-recent = "0"/pruning-keep-recent = "362880"/g' ~/.desmos/config/app.toml
sed -i 's/pruning-interval = "0"/pruning-interval = "100"/g' ~/.desmos/config/app.toml

echo "===> Creating genesis accounts"
desmos add-genesis-account jack<PHONE_NUMBER>00000000000udaric

# Relayer
desmos add-genesis-account desmos1jp47h8v943y8vw2298ahatj4vll9uw97w5mxgp 1000000udaric

echo "===> Collecting genesis trasanctions"
desmos gentx jack<PHONE_NUMBER>udaric --chain-id desmos-localnet
desmos collect-gentxs

echo "===> Starting chain"
desmos start

Band protocol
For Band Protocol, I am connecting to their running testnet named Band Laozi 4.
I am using our own RPC node to connect there (below is the address).
Relayer
To make it work properly with Band Protcol, we need Hermes to support Secp256k1. For this reason I currently use a custom branch that I forked from the romac/update-tendermint-rs. This branch can be found here: desmos-labs/ibc-rs@riccardo/band-protocol. This branch contains also some custom changes:

Upgraded the Cosmos compatibility to v0.44 (since Band and Desmos are using that version)
Enabled the secp256k1 feature on the relayer and relayer-cli packages.

Finally, here is my ~/.hermes/config.toml file:

 Hermes config file
[global]
strategy = 'all'
log_level = 'debug'

[telemetry]
enabled = false
host = '<IP_ADDRESS>'
port = 3001

[[chains]]
id = 'desmos-localnet'
rpc_addr = 'http://<IP_ADDRESS>:26657'
grpc_addr = 'http://<IP_ADDRESS>:9090'
websocket_addr = 'ws://localhost:26657/websocket'
rpc_timeout = '10s'
account_prefix = 'desmos'
key_name = 'desmos'
store_prefix = 'ibc'
max_gas = 2000000
gas_price = { price = 0.001, denom = 'udaric' }
gas_adjustment = 0.1
clock_drift = '5s'
trusting_period = '14days'
# Address: desmos1jp47h8v943y8vw2298ahatj4vll9uw97w5mxgp

[[chains]]
id = 'band-laozi-testnet4'
rpc_addr = 'https://rpc-laozi.band.forbole.com:443'
grpc_addr = 'https://grpc-laozi.band.forbole.com:443'
websocket_addr = 'wss://ws-laozi.band.forbole.com'
rpc_timeout = '10s'
account_prefix = 'band'
key_name = 'band'
store_prefix = 'ibc'
max_gas = 2000000
gas_price = { price = 0.001, denom = 'uband' }
gas_adjustment = 0.1
clock_drift = '5s'
trusting_period = '14days'
# Address: band1g3cuu5nk7392p496se96wx9h4sghx20n3r47ty

Performing transactions
Creating a channel
To create a channel between the two chains I run the following command:
hermes create channel desmos-localnet band-laozi-testnet4 \
  --port-a ibc-profiles \
  --port-b oracle \
  --order unordered \
  --version bandchain-1

Sending a packet to Band Protocol
In order to create and send a packet to Band Protocol we use the Desmos feature of creating and verifying a profile. To do this you need to perform the following operations:
1.  Try linking that profile to an application:
desmos tx profiles link-app \
  ibc-profiles channel-0 \
  twitter ricmontagnin \
  7B226D6574686F64223A227477656574222C2276616C7565223A2231333932303333353835363735333137323532227D \
  --from jack --chain-id desmos-localnet --yes --broadcast-mode block

This will tell Band Protocol to start the verification procedure. It should ask Band Protocol to run an oracle script (#32) and once the script has a status reported, Band will create a packet inside the EndBlocker method which should be picked up and sent back to Desmos. Unfortunately, this packet is never picked up.
During the whole procedure, you can verify if the packets are sent/received properly by running the following command:
watch -n.5 'desmos q profiles app-links $(desmos keys show jack -a)'

You will see the app link's status be:

UNINITIALIZED_UNSPECIFIED  as soon as it is created
VERIFICATION_STARTED when the packet is sent to Band Protocol properly and the ack is received
VERIFICATION_FAILED when Band returns the new packet

The last one is never shown (since Hermes is not able to relay that packet)

Your details are very thourough, many thanks for that Riccardo! We're on it.

Thanks @adizere! If you need further details don't hesitate to message me on Discord. My username is Riccardo Montagnin#5414. I will provide you with all the support possible to help you identify and solve the issue 🙏

I was able to reproduce based on the instructions above with help from Riccardo and three additional caveats:

we need to create the two keys for chain desmos-localnet prior to running any add-genesis-account, as follows:

desmos keys add jack --keyring-backend test
desmos keys add desmos1jp47h8v943y8vw2298ahatj4vll9uw97w5mxgp --keyring-backend test

I used keyring-backend test throughout most of the instructions, e.g., it should be

desmos tx profiles save Jack --from jack --chain-id desmos-localnet --yes --keyring-backend test

instead of
desmos tx profiles save Jack --from jack --chain-id desmos-localnet --yes

and used directly a test keyring from Riccardo for running Hermes.

The current state of reproducing this issue is that my app's link status seems stuck at

state: APPLICATION_LINK_STATE_INITIALIZED_UNSPECIFIED

and after ~10 minutes is remained unchanged.
Any thoughts on why the state did not advance to VERIFICATION_FAILED?

@adizere The state does not advance to VERIFICATION_FAILED because Band Protocol creates packets inside their oracle module's EndBlocker method: https://github.com/bandprotocol/chain/blob/v2.3.1/x/oracle/abci.go#L21.
In particular, the call stack is the following:

ResolveRequest
either ResolveFailure or ResolveSuccess
SaveResult
SendPacket

This causes the packet to be inserted inside a block even if such block does not contain any transaction. Hermes is not able to pick it up because it only searches for transactions that contain an explicit SendPacket-triggering event.
Since this block does not contain any transaction, it is never picked up by Hermes. A possible solution to this is to use the new Tendermint endpoint (introduced in Cosmos v0.42.8): block_search. This is what the Confio Ts-Relayer also does, by searching for all blocks that contain that events in order to get all the packets.

Now that the problem has been identified, is there any progress on this? It's currently blocking all chain from interacting with Band Protocol properly

Hi Riccardo. Part of our team is having a workshop this week, we're also dealing with a few critical bugs and improvements, so we're a bit slower than usual. It will take a few more days until we have a PR open. Now that we know that this is blocking Band proto interactions, it will be next on our priority. Thank you for your understanding!

Just to summarize what we have so far:

detailed instructions to reproduce the problem, thanks to Riccardo:

https://github.com/informalsystems/ibc-rs/issues/1231#issuecomment-919900300
and some hints about the solution, thanks to Lyqingye:

https://github.com/lyqingye/ibc-rs/commit/19a814e19c810351f74026eb4f26dca97eeab46a

I think there are two important parts to the fix:

one part to make Hermes clear unrelayed packets/acks that appear in blocks — https://github.com/lyqingye/ibc-rs/commit/19a814e19c810351f74026eb4f26dca97eeab46a#diff-2a5a700c0b1975ad9d64941997[…]a8f1e9a2aba4abe7cf1f95R813-R820
one part to make Hermes correctly listen and react on NewBlock events (which can include packet data) — https://github.com/lyqingye/ibc-rs/commit/19a814e19c810351f74026eb4f26dca97eeab46a#diff-9b2c23c0313606287fdf4130d4[…]be46c25fa870cd337d48632dR31-R36

We're now investigating whether the logic in the fix above is sound, and making sure we're not missing anything.