Use Non-Breaking-Space in Docs' method arguments

This PR replaces the normal spaces within the arguments with Non-Breaking-Spaces.
Similarly to #65248, this ensures that when the width limit is reached, the argument's name, type and default value remain on the same line, improving readability.
Unfortunately, I am not sure of a way to separate the first parameter's name from the parenthesis. Is there a breaking character with almost 0 width out there? Not sure, probably? Either way, that'd be the theoretical solution to fix even the smaller possible width.

Before
After

Unfortunately, I am not sure of a way to separate the first parameter's name from the parenthesis. Is there a breaking character with almost 0 width out there? Not sure, probably? Either way, that'd be the theoretical solution to fix even the smaller possible width.

I'm pretty sure there's one, @bruvzg would know.

This looks pretty good to me. Another thing which could improve readability IMO is to indent the continuation lines, like we do in C++ code with clang-format (though probably with less indentation as we don't want to add too much dead space if the wrapping already happens due to constrained width, maybe just 4 spaces).
Also, what happens if a "name: type = default_value" group is wider than the max width? (E.g. add_mesh from your first example with the width of the third example.)

U+200B ZERO WIDTH SPACE

Thanks! This will come very in handy, perhaps both it and non-breakable-space should be a constant definition...

This looks pretty good to me. Another thing which could improve readability IMO is to indent the continuation lines, like we do in C++ code with clang-format (though probably with less indentation as we don't want to add too much dead space if the wrapping already happens due to constrained width, maybe just 4 spaces).

This would require knowing how long the argument list is going to be, which... I suppose can be done? Although, I'm not sure if it's worth the effort, unless it was a fixed number (say, 4+ arguments), but that may end up being annoying on some occasions.

Also, what happens if a "name: type = default_value" group is wider than the max width? (E.g. add_mesh from your first example with the width of the third example.)

It starts getting messed up again, sometimes a bit more messed up due of the non-breaking. It's like one big word being split.

Perhaps it's worth to only unify argument name and type, while default value could go to a new line, but only if the RichTextLabel's width is very small? The code for this check could get really smelly due of the way things seem to be organised now.
Meanwhile, here's example 3 with a Zero Width Space after "(". Neat!

Perhaps it's worth to only unify argument name and type, while default value could go to a new line, but only if the RichTextLabel's width is very small? The code for this check could get really smelly due of the way things seem to be organised now.
Meanwhile, here's example 3 with a Zero Width Space after "(". Neat!

Actually in PR review meeting we then discussed a potential problem, which is that the unbreakable space characters might end up in the clipboard when copying text from the docs.
We'd need to find a way to make sure that those characters don't end up in the user clipboard to prevent from them then finding their way in the script editor. Any idea whether we can pre-processor selection contents on copy @bruvzg?


Remove unsed method encodeTags().

Q
A

Is bugfix?
✔

New feature?
❌

Breaks BC?
❌

👍


doc:user flows in Release 23.09 decentralized architecture

Description
This draw.io user flows describes the interactions between the Tractus-X components in the new release 23.09. The the data space components evolves from centralized to federated and decentralised characteristics. This makes the data spaces more resilient, sovereign and scalable, but in the other hand it's harder to discover and control the components in a global network.
BPMN diagram:

Onboarding a new participant (draw.io Scenario 0)

Sequence diagrams:

Inital Registration of a data provider (draw.io Scenario 1)
Provision Digital Twin (draw.io Scenario 2)
Discover and Request Digital Twin (draw.io Scenario 3)

We want to discuss this user flows with the Catena-X participants. In the next step we will deliver a mark-down documentation and link these diagrams.
Please use draw.io https://app.diagrams.net and open these GitHub files, if you have access rights to the repos.
Please leave your comments to the PR.

Thanks for the diagrams... File extension of onboarding-registration should be "drawio", instead of "draw.io".

@ma3u please find my feedback below:
Inital Registration of a data provider (draw.io Scenario 1)

I dont like the naming "Initial Registration" => actually this chart shows 2 topics

For CX Members in the role of an data provider: the digital twin registration process (btw have a look at my images below - created them last week and would personally prefer those more....eventhrough it not draw.io)
For CSP-B/CSP-A: the discovery finder registration process

The step to register at the OSP need to get changed

#1 the connector registration is not a OSP service; its a CSP-A/B service
#2 the company needs to register the connector; not the OSP
#3 I strongly suggest to take out the company registration from this chart - this should get separated - otherwise its confusing

Onboarding a new participant (draw.io Scenario 4)

I suggest to change the title 'Initial IDP Registration' is wrong; its the 'CX Member Registration Process'
the "IDP" section is wrong - its quite a lot now to document this - but it needs updates - lets do this next week
remove "BPN Discovery" from the section 'Portal Registration' - the lookup is not on the BPN Discovery; its done via the Golden Record
Its not clear why the process of the registration stops after the "look-up" of the BPNL
'request DID' to be removed
MIW process needs to get removed from this section as well => I miss the coverage of the actual approval process - did you check the portal documentation for this? Its quite detailed in the asset repo
in the section "Onboarding process":

I think there is a spelling mistake - first box is saying "app request" while this is actually the "registration process"
"Create BPNL Record" => this is only needed if there is no BPN existing yet, can you please update your image
"Use Case Document" and "Use Case Credential" to be removed - this is a complete different process
"Participant Credential" is currently only stored in the portal; not in the holder wallet
"Compliance Credential" is currently only stored in the portal; not in the holder wallet
"Send Email with technical user to customer" needs to get removed; thats wrongly placed

@thomas-henn I guess this belongs to your team, right?

@florianrusch-zf  not really belong to the sldt team. As @jjeroch mentioned, it would make sense to move the PR to other repository.

@ma3u  - do you think that the Digital Twin Kit could be a suitable new home for this content?

Arno:
For the Data Discovery screnarios we could add to the Digital Twin KIT: @thomas-henn What do you think?
Which Repo / KIT is the right for the on-boarding BPMN 2.0 flow?

I am particularly interested in the onboarding / registration flow. Are there any plans to update / correct this as per Julia's Feedback?

Arno:
For the Data Discovery screnarios we could add to the Digital Twin KIT: @thomas-henn What do you think?
Which Repo / KIT is the right for the on-boarding BPMN 2.0 flow?

Data discovery scenarios are (I think comprehensively) covered here [1]. @ma3u  - if you have suggestions, feature requests or the like, feel free to open a ticket in https://github.com/eclipse-tractusx/eclipse-tractusx.github.io


Loggable and Versioned Annotations

Do these annotations work on their own at the moment?  Just following through the event listener, it seems that in order to create a log entry, the entity must be in the config manager and the entity must be marked as auditable:
https://github.com/orocrm/platform/blob/master/src/Oro/Bundle/DataAuditBundle/Loggable/LoggableManager.php#L263
https://github.com/orocrm/platform/blob/master/src/Oro/Bundle/DataAuditBundle/Loggable/LoggableManager.php#L492

Is the @Versioned annotation still not supported ?

Hi dima-welance, unfortunately, no.


Getting started templates not working

I used getting started with Blazor guidelines from here to configure environment. I'm not able to run any template either from Visual Studio Enterprise 2017 (Version: 15.7.1) or command line.
Template: Blazor
Created project in VS by selecting Blazor template, noticed SDK version 2.1.300 in global.json. When running this project with Ctrl-F5, opens up browser, displays 'Loading...' for few sec and then blank page.
After that tried command line option, which displays another error:
CSC : error CS1617: Invalid option '7.3' for /langversion. Use '/langversion:?' to list supported values. [C:\Users\abhimanyu\BlazorApp1\BlazorApp1.csproj]
The build failed. Please fix the build errors and run again.
Template: Blazor (ASP.NET Core hosted)
Created project in VS by selecting Blazor (ASP.NET Core hosted) template. When running this project with Ctrl-F5, this displays error:

Any help on this ?

dotnet --info output under the project root?

And which version of Blazor extension are you using?

@SIkebe here's the output of dotnet --info:
C:\Users\abhimanyu\BlazorApp1>dotnet --info
.NET Command Line Tools (2.1.300-preview1-008174)
Product Information:
Version:            2.1.300-preview1-008174
Commit SHA-1 hash:  b8df89a54f
Runtime Environment:
OS Name:     Windows
OS Version:  10.0.17134
OS Platform: Windows
RID:         win10-x64
Base Path:   C:\Program Files\dotnet\sdk\2.1.300-preview1-008174\
Microsoft .NET Core Shared Framework Host
Version  : 2.1.0-preview1-26216-03
Build    : f2c3216183d20416568a4bbf5bb7d153e826f153

@SIkebe Blazor extension version

@itorian dotnet core SDK 2.1.300-preview1-008174 does not meet the requirement.
You need 2.1.300 RTM if you want to try blazor 0.4.0.
https://blogs.msdn.microsoft.com/webdev/2018/06/07/blazor-0-4-0-experimental-release-now-available/

Blazor 0.3.0 requires dotnet core SDK 2.1.300-preview2-008533 or later.
https://blogs.msdn.microsoft.com/webdev/2018/05/02/blazor-0-3-0-experimental-release-now-available/

Resolved. Thank you so much.


Add Defaults.Toggle

@hank121314 Would you be able to review?

@hank121314 Would you be able to review?

Yes !It seems to work fine.


Add scalafmt

Add scalafmt and consistently format the project.

Is the goal to maintain the existing formatting as much as possible, or to just establish some ground rules? Would we rather look to some larger established project for a consensus configuration or try to craft one that minimally impacts the existing source?
I think it might not be hard to maintain the existing formatting, with a few exceptions (scalafmt doesn't like spaces between scalatest matcher functions - there's probably a way to work around it but I haven't pushed back that hard).

I'm willing to put a little bit of time in here when I can..

I believe our preference is to use more or less the default scalafmt settings, with perhaps a tweak here and there (align = more is a personal favorite). We aren't really trying to align with the current code style, but without looking at the possible changesets it's hard to say definitively.
By the way, we just got access to the actual scaldi repository, so we'll be moving efforts back there, hopefully within the next few weeks. If you want to go ahead and work on it here that's cool too.

Oh, that's good to know, because I was just getting ready to port our code over to use these artifacts. I'll play around a little bit with the scalafmt here and maybe submit a PR to the original repository once we're both ready.

There shouldn't be much work to switch besides changing the dependency coordinates, so it should be easy.
You can target either one... just make sure to have a separate commit for the conf file vs. the formatting changes applied by the config file. That will make it easier for me to merge things around.

Is the goal to maintain the existing formatting as much as possible, or to just establish some ground rules?

the goal (as I see it) is to have consistent formatting throughout the project, and also to improve certain formatting patterns in the repo (e.g. excessively long lines that are hard to read)


PTT Triggered by DATA with cat control (V drop from 3.3v to 1.5v on PTT line when serial data is being sent to radio)

Sorry for yet another issue to respond to!  It works well. I can use it like a digirig with audio and PTT, and I can also do cat control and programming. However, I cant do cat control and audio in and out at the same time. If I have both cables plugged in at once, it constantly toggles PTT over and over again for very short intervals (same speed as the TX of data).

Is this expected behavior? Is it possible to do something like CAT control while also using the soundcard and PTT features of the AIOC perhaps by adding another component in my wiring or by rearranging the wires some?

Probing with the multimeter, PTT isnt shorted when TXing serial data, but when it's not transmitting serial data (to the radio) the voltage is 3.3 volts across PTT. When it transmits, the voltage drops to 1.5v. Perhaps a capacitor could help with that?

Wanted to add, this happens on both the standard and virtual ptt firmware.

Tested this on a few more radios (FT-100d, 878d, Xiegu G90) and am having the same issue. When any data communication goes on, it triggers PTT.

Sorry to bug ya! Just wanted to add some activity here in case this issue got lost in the inbox. You're likely just busy with things which I totally get. @skuep

Not lost at all! Just a bit swamped with work and health currently. I am planning to look into it this or next weekend.

Gotchya, thanks so much, Simon! I certainly get that.

Sorry for yet another issue to respond to!  It works well. I can use it like a digirig with audio and PTT, and I can also do cat control and programming. However, I cant do cat control and audio in and out at the same time. If I have both cables plugged in at once, it constantly toggles PTT over and over again for very short intervals (same speed as the TX of data).

Okay, so we are now getting into the hacky territory? :-) That's not a HT right? That's a "real" radio, that you can remotely control (CAT) and has audio in/out. I like this, and I think the AIOC should be able to work with something like this. The AIOC has been designed with HT's in mind, so that means the serial port and PTT can only work exclusively (because they are on the same pad essentially).

Is this expected behavior? Is it possible to do something like CAT control while also using the soundcard and PTT features of the AIOC perhaps by adding another component in my wiring or by rearranging the wires some?

If I understand you correctly, that is the (current) expected behaviour. Due to the PTT line being connected to the TXD (Radio RXD) line, the firmware will clear any PTT when it receives a "write serial data" command from the PC. That alone should probably be an issue or is it? I mean, if the radio only sends serial data during transmit silence (PTT off) it should be fine, right?
However, the second (your) problem is, that the PTT and Radio-RXD are shorted on the AIOC. Thus, each time the PC sends some data, the PTT pin state will change!
Currently, I can see the following solution:

Remove R13, this will remove the PTT from the serial line. The problem should be gone, but you won't have any PTT anymore
Connect your PTT wire directly to one of the pads of where R13 (see image) was

For a better solution, I could offer you the PTT2 pin (see image). That would require some firmware changes to make it configurable, that the AIOC uses PTT2 pin instead of PTT(1). Since I have configurability of the AIOC planned for the near future (using a simple python tool), this could be a good solution.

All good ideas. Currently leaving PTT disconnected is my solution, since CAT control can work to trigger PTT, although I'd like to have the ability to hotswap between rig control ptt and AIOC's ptt without having to flip a switch or solder or something (as some apps dont support rig control).
Removing R13 and connecting to that PTT pad in red, that would isolate PTT from the rest? That sounds like a good temporary solution.
The firmware to use PTT2 would be excellent down the road once the python script is done more.
As far as MIC ground connected there, that's what is expected for the official kenwood jack connection standard. I think it works because it gets shorted when PTT is triggered, which it always would be for most MIC input... hmmm
For reference, I based this on:

and

I think I had one customer wire it to the same ground as speaker and it also worked, so that might be better for compatibility.
Thanks so much for your help!

I think issue https://github.com/skuep/AIOC/issues/30 is already a good start. You can consolidate your feature request proposal regarding configurability of PTT2 in that issue.
I am sorry that I have not yet gotten around to do it. Unfortunately until mid of September I am still not able to, due to work travel. Thanks for your offer anyway but I think I would rather remain independent :-)

I think issue #30 is already a good start. You can consolidate your feature request proposal regarding configurability of PTT2 in that issue.
I am sorry that I have not yet gotten around to do it. Unfortunately until mid of September I am still not able to, due to work travel. Thanks for your offer anyway but I think I would rather remain independent :-)

All totally understandable, and no rush. Just figured if it helped I wouldnt mind throwing support your way with no strings or expectations. I pray work and travel goes well!

Have you had another go at the feature? Would be interesting to know if changing to the PTT2 setting works using the HID Python script.

I have not, missed your comment on the phython script! I'll have to take a look and figure out how to use it in the coming weeks!

Good news, the next hardware revision will have a split-pad for the PTT1/RX signal so you can actually use both signals separately, if you're not using the K1 layout.
Also, PTT1 and PTT2 will be input-capable as well.

I will close this issue for now. I will let everyone know when the next hardware revision arrives.

Hi @skuep,
Picking up on this project again. Trying to refresh my memory on some of this.
Where can I download the second hardware revision? Id like to take advantage of the split ptt and serial pads on my next big order.
I also hope to customize the design a bit to add some resistors and bring the output serial voltage down to 3.3v on an optional pad.


Failed to get frame when use dds with docker after the machine restart

Thank you for the great work!
I had face this bug when try to restart machine. It seem the dds could not load previous dataset had saved before.
2023-11-09 09:07:56,428 INFO [django.server] "GET /api/v1/datasets?page_num=1&page_size=50 HTTP/1.1" 200 433
2023-11-09 09:07:56,441 ERROR [django.request] Internal Server Error: /files/local_files/b/1/-1_-1/image_png//dds/datasets/test_data_ann/sub1/2.png
Traceback (most recent call last):
  File "/usr/local/lib/python3.10/site-packages/redis/connection.py", line 624, in connect
    sock = self.retry.call_with_retry(
  File "/usr/local/lib/python3.10/site-packages/redis/retry.py", line 46, in call_with_retry
    return do()
  File "/usr/local/lib/python3.10/site-packages/redis/connection.py", line 625, in <lambda>
    lambda: self._connect(), lambda error: self.disconnect(error)
  File "/usr/local/lib/python3.10/site-packages/redis/connection.py", line 658, in _connect
    for res in socket.getaddrinfo(
  File "/usr/local/lib/python3.10/socket.py", line 955, in getaddrinfo
    for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.10/site-packages/django/core/handlers/exception.py", line 56, in inner
    response = get_response(request)
  File "/usr/local/lib/python3.10/site-packages/django/core/handlers/base.py", line 197, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/dds/source/./deepdataspace/server/resources/files/local_file.py", line 65, in read_file
    if not Redis.sismember(RedisKey.DatasetImageDirs, file_dir):
  File "/usr/local/lib/python3.10/site-packages/redis/commands/core.py", line 3340, in sismember
    return self.execute_command("SISMEMBER", name, value)
  File "/usr/local/lib/python3.10/site-packages/redis/client.py", line 1255, in execute_command
    conn = self.connection or pool.get_connection(command_name, **options)
  File "/usr/local/lib/python3.10/site-packages/redis/connection.py", line 1427, in get_connection
    connection.connect()
  File "/usr/local/lib/python3.10/site-packages/redis/connection.py", line 630, in connect
    raise ConnectionError(self._error_message(e))
redis.exceptions.ConnectionError: Error -3 connecting to redis:6379. Temporary failure in name resolution.
2023-11-09 09:07:56,441 ERROR [django.request] Internal Server Error: /files/local_files/b/1/-1_-1/image_png//dds/datasets/test_data_ann/sub1/2.png
Traceback (most recent call last):
  File "/usr/local/lib/python3.10/site-packages/redis/connection.py", line 624, in connect
    sock = self.retry.call_with_retry(
  File "/usr/local/lib/python3.10/site-packages/redis/retry.py", line 46, in call_with_retry
    return do()
  File "/usr/local/lib/python3.10/site-packages/redis/connection.py", line 625, in <lambda>
    lambda: self._connect(), lambda error: self.disconnect(error)
  File "/usr/local/lib/python3.10/site-packages/redis/connection.py", line 658, in _connect
    for res in socket.getaddrinfo(
  File "/usr/local/lib/python3.10/socket.py", line 955, in getaddrinfo
    for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Hi @ledinhtri97 , sorry for the late response.
It's a redis connection error.
Can you give me the full start up logs here?

Hi @ledinhtri97, we're temporarily closing this issue due to inactivity. However, please don't hesitate to reach out to us if you encounter any further problems or have questions in the future.


Trim bloat from assembly JARs

Our JAR sizes have grown almost uncontrollably over time. We should use a tool to shrink them by removing classes that are never in fact used.

A little clarification. Please feel free to correct me if this isn't correct.
We are looking to minimize the sizes of the following jars we publish from the Quasar source.
quasar-repl-assembly-<version#>.jar
quasar-web-assembly-<version#>.jar
sparkcore.jar

In my first pass at this issue, I experimented with sbt-proguard. Using a basic config for sbt-proguard I managed to get the web assembly jar minimized from 159M to 3.8M.
-rw-r--r--  1 nicandroflores  staff   3.8M May  9 23:10 /github/quasar/target/scala-2.11/proguard/root_2.11-17.0.0.jar

-rw-r--r--  1 nicandroflores  staff   159M May  9 15:18 /quasar/.targets/web/scala-2.11/quasar-web-assembly-17.0.0.jar

There still a bit more work to get sbt-proguard fully incorporated into our build, but this looks promising.

Wow! Will be impressed if we can get it that low. Hugely important work!


Updated Bouy dependency

Fix to #31

Coverage remained the same at 100.0% when pulling e71b0d2e49de14d339e3775f8207e906db10d0fa on 31-Dependency-error-after-Buoy-changed-repo-schema into a2f2a2975f56d27746fed34730a8626d3d5e7329 on master.


Completely hide SVG icons to screen readers

Summary of proposed changes
SVG icons should be ignored by screen readers since they have complimentary labels (aria-label or plyr__sr-only). The current « presentation » role simply makes the element behave like a « span » which is incorrect, aria-hidden prevents screen readers from taking care of these elements at all.
Checklist

[x] Use develop as the base branch
[x] Exclude the gulp build (/dist changes) from the PR
[x] Test on supported browsers

Cheers 👍


(troposphere.serverless) add support for container-based Serverless::Function and add missing props

Heyo -- This is similar to #1846, except this is adding container-based lambda support for Serverless::Function as well. I've also filled in some properties I found missing based on the current spec of the AWS::Serverless::Function resource.
Please let me know if there are any adjustments needed!

Manually committed. Fixed black/lint formatting issue. Thanks!


Add heatwave options

Pull Request Checklist:

[x] This PR addresses an already opened issue (for bug fixes / features)
[x] Tests for the changes have been added (for bug fixes / features)
[x] Docs have been added / updated (for bug fixes / features)
[ ] HISTORY.rst has been updated

After merging to master and before closing the branch:

[ ] bumpversion (minor / major / patch) has been called on master branch
[ ] Tags have been pushed

What kind of change does this PR introduce?

This adds options to the 3 main heat waves indices  so that the definition used by the INSPQ can be computed. Instead of searching for N consecutive days where temperatures are above thresholds, they look for days where the length-N running mean is above thresholds.
Furthermore, they use a weighted mean, so now, window can be a sequence of floats. Checks are made to be sure this option is only used with the "mean" mode and that the weights sum to 1.
Atmos indices were modified with dynamic descriptions and long names to fit what mode was used. and tests were added by transforming the previous tests to parametrized tests (as suggested by #52) that also try to follow #303.  Also, this fixes an overlooked bug from #293: heat_wave_total_length wasn't accessible through atmos and had no tests.

Does this PR introduce a breaking change?

Nope.

Other information:

I chose the names "consecutive" for the default behaviour and "mean" for the added one. Y'all agree?

Pull Request Test Coverage Report for Build 1320

39 of 39 (100.0%)  changed or added relevant lines in 1 file are covered.
No unchanged relevant lines lost coverage.
Overall coverage increased (+0.2%) to 91.526%

Totals

Change from base Build 1319:
0.2%

Covered Lines:
3262

Relevant Lines:
3564

💛  - Coveralls

@aulemahal You gotta run black on the tests as well. Do you use pre-commit?

So, I discussed with the INSPQ Experts and they do the following:
They take the 3-day running mean and define heatwave as when this exceed the thresholds. But the whole 3-day window is part of the heatwave.
Also, the weighted mean is only for forecasts.
As this is quite different from what we already have and is quite specific to the INSPQ, @tlogan2000  and I suggest that we drop this PR.

@aulemahal This PR will be the last to go in before we bump the xarray version. I still have a few things to do to fix the doc build on ReadTheDocs and seeing that this PR doesn't rely on newest xarray, I think we can add this in before necessary changes are finalized.

I agree that this is getting very specific and we can close for now... We will keep the code and use it for specific project in quesiton but won't add it to the overall xclim library for now


Error when opening %talk: Cannot convert undefined or null to object

TypeError: Cannot convert undefined or null to object
    at Function.entries (<anonymous>)
    at p (https://REDACTED/apps/talk/assets/index.7d0a0b17.js:48:14580)
    at a (https://REDACTED/apps/talk/assets/index.7d0a0b17.js:48:122772)
    at https://REDACTED/apps/talk/assets/index.7d0a0b17.js:48:124934
    at Object.js [as useMemo] (https://REDACTED/apps/talk/assets/react-beautiful-dnd.a94a7f90.js:19:57536)
    at f.useMemo (https://REDACTED/apps/talk/assets/@tlon/sigil-js.4fa95bd4.js:12:5789)
    at yf (https://REDACTED/apps/talk/assets/index.7d0a0b17.js:48:124922)
    at Ko (https://REDACTED/apps/talk/assets/react-beautiful-dnd.a94a7f90.js:19:52865)
    at eo (https://REDACTED/apps/talk/assets/react-beautiful-dnd.a94a7f90.js:19:62311)
    at ea (https://REDACTED/apps/talk/assets/react-beautiful-dnd.a94a7f90.js:23:9576)

Never mind, I think I just had to hard-refresh after the big update


Set the interacting flag on pointerdrag instead of pointerdown

Fixes #9449.

I just verified that pointerdown still stops an animation. Thanks for the review!


Trigger ML when we touch core

Merging, as since the CI is running, it means there was no syntax mistake in this PR


Restore load history correctly

Right now the load history is locked at 2 games. If you load a game that loads a 2nd game that loads the 3rd game, the 1st game is reloaded when hitting escape. Need to make sure the back logic is going through the history correctly.

I need to rebuild the load history from two lists for storing the path and the metadata to some type of collection that can store both data at the same time.


Unicon hangs when parsing Juniper's username@hostname prompt if line is too long.

Problem details
I noticed that the longer the hostname of the Juniper device the longer it takes for pyATS to connect to the device.
If the username@hostname prompt line crosses some critical length the connection just hangs.
For example, the code below
#imports and var definitions omitted

dev = Connection(hostname=device,
                 start=['ssh <IP_ADDRESS>',],
                 credentials={'default': {'username': user, 'password': password}},
                 os=os_type)

dev.connect()

hangs after getting this prompt:
--- JUNOS 18.4R3.3 built 2019-12-21 00:01:46 UTC
<EMAIL_ADDRESS>
Initial investigation
Debugging showed that the code calls the following function to evaluate the prompt in the buffer and to find the hostname:
unicon.eal.backend.pty_backend.Spawn.match_buffer(pat_list, search_size=None)

as documented here: https://pubhub.devnetcloud.com/media/unicon/docs/api/unicon.eal.backend.html#unicon.eal.backend.pty_backend.RawSpawn.match_buffer
The pat_list has the following regexes (in my version at least, but the same idea in the latest one as it still hangs):
pat_list = [
   re.compile('^.*?% (Bad passwords|Access denied|Authentication failed)', re.DOTALL),
   re.compile('^.*Login incorrect', re.DOTALL),
   re.compile('^.*[Ll]ogin: ?$', re.DOTALL),
   re.compile('^.*User Access Verification', re.DOTALL),
   re.compile('^.*[Pp]assword: ?$', re.DOTALL),
   re.compile('Escape character is .*\\n', re.DOTALL),
   re.compile('^.*RETURN to get started', re.DOTALL),
   re.compile('Are you sure you want to continue connecting \\(yes/no(/\\[fingerprint\\])?\\)', re.DOTALL),
   re.compile('^.*(Connection refused|Connection reset by peer|Broken pipe|Network is down|closed by remote host)', re.DOTALL),
   re.compile('Received disconnect from .*:', re.DOTALL),
   re.compile('Hit Enter to proceed:', re.DOTALL),
   re.compile('^(.*?)Press Ctrl\\+x to Exit the session', re.DOTALL),
   re.compile('^(.*?)Connected.', re.DOTALL),
   re.compile('^.*?%\\w+(-\\w+)?-\\d+-\\w+.*$', re.DOTALL),
   re.compile('Exit with uncommitted changes?', re.DOTALL),
   ####################### RELEVANT ONES ##################
   re.compile('^(.*?)([-\\.\\w]+@((?P<hostname00>([^# \\t\\n\\r\\f\\v]+)))+(-RE[01])?[\\%\\#])\\s*$', re.DOTALL),
   re.compile('^(.*?)([-\\.\\w]+@((?P<hostname00>([^# \\t\\n\\r\\f\\v]+)))+(-RE[01])?>)\\s*$', re.DOTALL),
   re.compile('^(.*)?((?P<hostname00>([^# \\t\\n\\r\\f\\v]+)))(-RE[01])?\\:\\~ *\\#\\s?$|^%\\s*$', re.DOTALL)
]

As far as I understand the Juniper prompt then is evaluated against each regex in the pat_list list until it gets a match.
The prompt should have gotten a match on this one:
 re.compile('^(.*?)([-\\.\\w]+@((?P<hostname00>([^# \\t\\n\\r\\f\\v]+)))+(-RE[01])?>)\\s*$', re.DOTALL)

but it hangs on the previous one if the line user@host>  is too long:
re.compile('^(.*?)([-\\.\\w]+@((?P<hostname00>([^# \\t\\n\\r\\f\\v]+)))+(-RE[01])?[\\%\\#])\\s*$', re.DOTALL),

I'll be referring it further as the bad pattern.
Here's my validation on MacBook Pro Intel i7.
The code to measure buffer parsing time with Juniper prompt by the bad pattern with different hostnames length:
import re
from time import time

real_hostname = "hostname.region.fabric.company"
bad_pattern = re.compile('^(.*?)([-\\.\\w]+@((?P<hostname00>([^# \\t\\n\\r\\f\\v]+)))+(-RE[01])?[\\%\\#])\\s*$', re.DOTALL)

i = 1
effective_hostname = real_hostname[:i]

while i <= len(real_hostname):
    buffer = f"""--- JUNOS 18.4R3.3 built 2019-12-21 00:01:46 UTC
    username.surname@{effective_hostname}> """
    hostname_found = None
    start_time = time()
    result = bad_pattern.match(buffer)
    try: # we don't expect to find it but just in case...
        hostname_found = result.group("hostname00")
    except:
        pass
    end_time = time()
    duration = end_time - start_time
    print(f"== Time taken: {duration:.2f} sec, hostname_len: {len(effective_hostname)}, found_hostname: {hostname_found}, effc_hostname: {effective_hostname}")
    i+=1
    effective_hostname = real_hostname[:i]

The code starts with the single char hostname associated with the  effective_hostname var, creates the Juniper prompt with this hostname, parses it with the problematic regex, measures the time and go to the next iteration.
In the next iteration effective_hostname is incremented by one char and it goes until effective_hostname == real_hostname.
You can see that the longer hostname - the longer it takes to parse it. When the hostname length crosses some number of chars it looks like it hung:
% python3 measure.py
== Time taken: 0.00 sec, hostname_len: 1, found_hostname: None, effc_hostname: h
== Time taken: 0.00 sec, hostname_len: 2, found_hostname: None, effc_hostname: ho
== Time taken: 0.00 sec, hostname_len: 3, found_hostname: None, effc_hostname: hos
== Time taken: 0.00 sec, hostname_len: 4, found_hostname: None, effc_hostname: host
== Time taken: 0.00 sec, hostname_len: 5, found_hostname: None, effc_hostname: hostn
== Time taken: 0.00 sec, hostname_len: 6, found_hostname: None, effc_hostname: hostna
== Time taken: 0.00 sec, hostname_len: 7, found_hostname: None, effc_hostname: hostnam
== Time taken: 0.00 sec, hostname_len: 8, found_hostname: None, effc_hostname: hostname
== Time taken: 0.00 sec, hostname_len: 9, found_hostname: None, effc_hostname: hostname.
== Time taken: 0.01 sec, hostname_len: 10, found_hostname: None, effc_hostname: hostname.r
== Time taken: 0.01 sec, hostname_len: 11, found_hostname: None, effc_hostname: hostname.re
== Time taken: 0.02 sec, hostname_len: 12, found_hostname: None, effc_hostname: hostname.reg
== Time taken: 0.05 sec, hostname_len: 13, found_hostname: None, effc_hostname: hostname.regi
== Time taken: 0.09 sec, hostname_len: 14, found_hostname: None, effc_hostname: hostname.regio
== Time taken: 0.14 sec, hostname_len: 15, found_hostname: None, effc_hostname: hostname.region
== Time taken: 0.30 sec, hostname_len: 16, found_hostname: None, effc_hostname: hostname.region.
== Time taken: 0.53 sec, hostname_len: 17, found_hostname: None, effc_hostname: hostname.region.f
== Time taken: 1.02 sec, hostname_len: 18, found_hostname: None, effc_hostname: hostname.region.fa
== Time taken: 2.03 sec, hostname_len: 19, found_hostname: None, effc_hostname: hostname.region.fab
== Time taken: 4.06 sec, hostname_len: 20, found_hostname: None, effc_hostname: hostname.region.fabr
== Time taken: 8.61 sec, hostname_len: 21, found_hostname: None, effc_hostname: hostname.region.fabri
== Time taken: 16.83 sec, hostname_len: 22, found_hostname: None, effc_hostname: hostname.region.fabric
== Time taken: 33.43 sec, hostname_len: 23, found_hostname: None, effc_hostname: hostname.region.fabric.
== Time taken: 68.39 sec, hostname_len: 24, found_hostname: None, effc_hostname: hostname.region.fabric.c
== Time taken: 138.42 sec, hostname_len: 25, found_hostname: None, effc_hostname: hostname.region.fabric.co
== Time taken: 270.14 sec, hostname_len: 26, found_hostname: None, effc_hostname: hostname.region.fabric.com
== Time taken: 682.55 sec, hostname_len: 27, found_hostname: None, effc_hostname: hostname.region.fabric.comp
== Time taken: 1361.34 sec, hostname_len: 28, found_hostname: None, effc_hostname: hostname.region.fabric.compa
== Time taken: 2730.51 sec, hostname_len: 29, found_hostname: None, effc_hostname: hostname.region.fabric.compan
== Time taken: 5441.28 sec, hostname_len: 30, found_hostname: None, effc_hostname: hostname.region.fabric.company

It took more than 90 mins to parse the Juniper prompt with 30 characters long hostname!
We use long hostnames in our Juniper devices and we're having troubles using pyATS for our needs. I'd really appreciate if someone would have a look and fix it or provide a workaround.
Thanks in advance!

Hi dudeov,
Thanks for reaching out support team.
I'm working on this issue and will get back to you asap.

Hi dudeov,
This issue was fixed with latest version of 23.6 . Please check with latest version of pyats.

Hi @dudeov ,
Please confirm did you check with latest version of pyATS.

I updated pyATS 23.1 --> 23.6 and it just stopped working. It just tears down the connection and exits the script:
% python connect_directly.py

2023-07-04 17:41:25,611: %UNICON-INFO: +++ hostname.region.fabric.company logfile /tmp/hostname_region_fabric_company-20230704T174125610.log +++

2023-07-04 17:41:25,612: %UNICON-INFO: +++ Unicon plugin junos (unicon.plugins.junos) +++

2023-07-04 17:41:28,000: %UNICON-INFO: +++ connection to spawn: ssh -l username.surname <IP_ADDRESS>, id:<PHONE_NUMBER> +++

2023-07-04 17:41:28,001: %UNICON-INFO: connection to hostname.region.fabric.company
<EMAIL_ADDRESS>Password:
--- JUNOS 19.4R3.11 built 2020-10-08 21:58:24 UTC
<EMAIL_ADDRESS>
2023-07-04 17:41:30,481: %UNICON-INFO: +++ initializing handle +++

2023-07-04 17:41:30,647: %UNICON-INFO: +++ hostname.region.fabric.company: executing command 'set cli screen-length 0' +++
set cli screen-length 0
Screen length set to 0

<EMAIL_ADDRESS>
2023-07-04 17:41:31,055: %UNICON-INFO: +++ hostname.region.fabric.company: executing command 'set cli screen-width 0' +++
set cli screen-width 0
Screen width set to 0

<EMAIL_ADDRESS>
%

Hi @dudeov ,
Please share the full log. It will easy to debug.

Hi ,
Can you please share the log with enabling the debug true.

Sorry for the delayed responses.
Here's the log with the debug flag set.
(U!master)[~/workplace/genie]
% python connect_directly.py

2023-07-13 11:50:18,696: %UNICON-INFO: +++ t2.net.cfn001.eng.pdx.wd logfile /tmp/t2_net_cfn001_eng_pdx_wd-20230713T115018695.log +++

2023-07-13 11:50:18,697: %UNICON-INFO: +++ Unicon plugin junos (unicon.plugins.junos) +++

2023-07-13 11:50:18,697: %UNICON-DEBUG: +++ initializing context +++

2023-07-13 11:50:18,697: %UNICON-DEBUG: +++ initializing state_machine +++

2023-07-13 11:50:18,697: %UNICON-DEBUG: +++ initializing services +++

2023-07-13 11:50:18,698: %UNICON-DEBUG: adding service  send   :  <unicon.plugins.generic.service_implementation.Send object at 0x1065317c0>

2023-07-13 11:50:18,698: %UNICON-DEBUG: adding service  sendline   :  <unicon.plugins.generic.service_implementation.Sendline object at 0x1065318e0>

2023-07-13 11:50:18,698: %UNICON-DEBUG: adding service  transmit   :  <unicon.plugins.generic.service_implementation.Send object at 0x106531850>

2023-07-13 11:50:18,698: %UNICON-DEBUG: adding service  receive   :  <unicon.plugins.generic.service_implementation.ReceiveService object at 0x106531940>

2023-07-13 11:50:18,698: %UNICON-DEBUG: adding service  receive_buffer   :  <unicon.plugins.generic.service_implementation.ReceiveBufferService object at 0x1065319a0>

2023-07-13 11:50:18,698: %UNICON-DEBUG: adding service  expect   :  <unicon.plugins.generic.service_implementation.Expect object at 0x1065319d0>

2023-07-13 11:50:18,699: %UNICON-DEBUG: adding service  execute   :  <unicon.plugins.generic.service_implementation.Execute object at 0x106531a00>

2023-07-13 11:50:18,699: %UNICON-DEBUG: adding service  config   :  <unicon.plugins.generic.service_implementation.Config object at 0x106531a30>

2023-07-13 11:50:18,699: %UNICON-DEBUG: adding service  configure   :  <unicon.plugins.junos.service_implementation.Configure object at 0x106531a90>

2023-07-13 11:50:18,699: %UNICON-DEBUG: adding service  enable   :  <unicon.plugins.generic.service_implementation.Enable object at 0x106531970>

2023-07-13 11:50:18,700: %UNICON-DEBUG: adding service  disable   :  <unicon.plugins.generic.service_implementation.Disable object at 0x106531c70>

2023-07-13 11:50:18,700: %UNICON-DEBUG: adding service  reload   :  <unicon.plugins.generic.service_implementation.Reload object at 0x106531dc0>

2023-07-13 11:50:18,701: %UNICON-DEBUG: adding service  ping   :  <unicon.plugins.generic.service_implementation.Ping object at 0x106531e20>

2023-07-13 11:50:18,701: %UNICON-DEBUG: adding service  traceroute   :  <unicon.plugins.generic.service_implementation.Traceroute object at 0x106543430>

2023-07-13 11:50:18,701: %UNICON-DEBUG: adding service  copy   :  <unicon.plugins.generic.service_implementation.Copy object at 0x1065434f0>

2023-07-13 11:50:18,702: %UNICON-DEBUG: adding service  log_user   :  <unicon.plugins.generic.service_implementation.LogUser object at 0x106543ee0>

2023-07-13 11:50:18,702: %UNICON-DEBUG: adding service  log_file   :  <unicon.plugins.generic.service_implementation.LogFile object at 0x106549220>

2023-07-13 11:50:18,702: %UNICON-DEBUG: adding service  expect_log   :  <unicon.plugins.generic.service_implementation.ExpectLogging object at 0x1065498e0>

2023-07-13 11:50:18,702: %UNICON-DEBUG: adding service  attach   :  <unicon.plugins.generic.service_implementation.AttachModuleService object at 0x106549940>

2023-07-13 11:50:18,702: %UNICON-DEBUG: adding service  switchto   :  <unicon.plugins.generic.service_implementation.Switchto object at 0x106549970>

2023-07-13 11:50:18,703: %UNICON-DEBUG: adding service  guestshell   :  <unicon.plugins.generic.service_implementation.GuestshellService object at 0x1065499a0>

2023-07-13 11:50:18,703: %UNICON-DEBUG: adding service  bash_console   :  <unicon.plugins.junos.service_implementation.BashService object at 0x1065499d0>

2023-07-13 11:50:18,704: %UNICON-DEBUG: spawn session 'ssh -l juniper <IP_ADDRESS>' is being launched.

2023-07-13 11:50:18,706: %UNICON-DEBUG: Subprocess 18105 launched as 'ssh -l juniper <IP_ADDRESS>'

2023-07-13 11:50:21,261: %UNICON-DEBUG: <<< Unicon Got (target=t2.net.cfn001.eng.pdx.wd):: '\r'

2023-07-13 11:50:21,261: %UNICON-DEBUG: *** Pattern List (target=t2.net.cfn001.eng.pdx.wd)::

2023-07-13 11:50:21,262: %UNICON-DEBUG:         '.+'

2023-07-13 11:50:21,262: %UNICON-DEBUG:

2023-07-13 11:50:21,262: %UNICON-DEBUG: *** Pattern Matched (target=t2.net.cfn001.eng.pdx.wd):: '.+'

2023-07-13 11:50:21,263: %UNICON-DEBUG: <unicon.eal.MatchMode mode_id=0, mode_name='search multi-line re.S'>

2023-07-13 11:50:21,263: %UNICON-DEBUG:

2023-07-13 11:50:21,264: %UNICON-INFO: +++ connection to spawn: ssh -l juniper <IP_ADDRESS>, id:<PHONE_NUMBER> +++

2023-07-13 11:50:21,264: %UNICON-INFO: connection to t2.net.cfn001.eng.pdx.wd
<EMAIL_ADDRESS>Password:

2023-07-13 11:50:21,267: %UNICON-DEBUG: <<< Unicon Got (target=t2.net.cfn001.eng.pdx.wd<EMAIL_ADDRESS>Password:'

2023-07-13 11:50:21,267: %UNICON-DEBUG: *** Pattern List (target=t2.net.cfn001.eng.pdx.wd)::

2023-07-13 11:50:21,267: %UNICON-DEBUG:         '.+$'

2023-07-13 11:50:21,267: %UNICON-DEBUG:

2023-07-13 11:50:21,268: %UNICON-DEBUG: *** Pattern Matched (target=t2.net.cfn001.eng.pdx.wd):: '.+$'

2023-07-13 11:50:21,268: %UNICON-DEBUG: <unicon.eal.MatchMode mode_id=0, mode_name='search multi-line re.S'>

2023-07-13 11:50:21,269: %UNICON-DEBUG:

2023-07-13 11:50:21,297: %UNICON-DEBUG: Statement matched: '[pattern='^.*[Pp]assword: ?$', action=password_handler, args=None, loop_continue=True, continue_timer=False, trim_buffer=True]'

2023-07-13 11:50:21,297: %UNICON-DEBUG: >>> Unicon Sending (target=t2.net.cfn001.eng.pdx.wd):: 'Juniper123!\r'

Last login: Thu Jul 13 11:43:47 2023 from <IP_ADDRESS>
--- JUNOS 19.4R3.11 built 2020-10-08 21:58:24 UTC
# commit confirmed will be rolled back in 26 minutes
<EMAIL_ADDRESS>
2023-07-13 11:50:24,596: %UNICON-DEBUG: <<< Unicon Got (target=t2.net.cfn001.eng.pdx.wd):: '\r\nLast login: Thu Jul 13 11:43:47 2023 from <IP_ADDRESS>\r\r\n--- JUNOS 19.4R3.11 built 2020-10-08 21:58:24 UTC\r\n# commit confirmed will be rolled back in 26<EMAIL_ADDRESS>'

2023-07-13 11:50:24,597: %UNICON-DEBUG: *** Pattern List (target=t2.net.cfn001.eng.pdx.wd)::

2023-07-13 11:50:24,598: %UNICON-DEBUG:         '^.*?% (Bad passwords|Access denied|Authentication failed)'

2023-07-13 11:50:24,598: %UNICON-DEBUG:         '^.*Login incorrect'

2023-07-13 11:50:24,599: %UNICON-DEBUG:         '^.*[Ll]ogin: ?$'

2023-07-13 11:50:24,599: %UNICON-DEBUG:         '^.*User Access Verification'

2023-07-13 11:50:24,599: %UNICON-DEBUG:         '^.*[Pp]assword: ?$'

2023-07-13 11:50:24,600: %UNICON-DEBUG:         'Escape character is .*\\n'

2023-07-13 11:50:24,600: %UNICON-DEBUG:         '^.*RETURN to get started'

2023-07-13 11:50:24,601: %UNICON-DEBUG:         'Are you sure you want to continue connecting \\(yes/no(/\\[fingerprint\\])?\\)'

2023-07-13 11:50:24,601: %UNICON-DEBUG:         '^.*(Connection refused|Connection reset by peer|Broken pipe|Network is down|closed by remote host)'

2023-07-13 11:50:24,601: %UNICON-DEBUG:         'Received disconnect from .*:'

2023-07-13 11:50:24,602: %UNICON-DEBUG:         'Hit Enter to proceed:'

2023-07-13 11:50:24,602: %UNICON-DEBUG:         '^(.*?)Press Ctrl\\+x to Exit the session'

2023-07-13 11:50:24,602: %UNICON-DEBUG:         '^(.*?)Connected.'

2023-07-13 11:50:24,603: %UNICON-DEBUG:         '^.*?(%\\w+(-\\S+)?-\\d+-\\w+|Guestshell destroyed successfully|%Error opening tftp:\\/\\/255\\.255\\.255\\.255).*$'

2023-07-13 11:50:24,603: %UNICON-DEBUG:         '^.*?Press any key to continue\\..*?$'

2023-07-13 11:50:24,604: %UNICON-DEBUG:         '^.*[Pp]ermission denied'

2023-07-13 11:50:24,604: %UNICON-DEBUG:         'Exit with uncommitted changes?'

2023-07-13 11:50:24,605: %UNICON-DEBUG:         '^(.*?)([-\\.\\w]+@((?P<hostname00>([^# \\t\\n\\r\\f\\v\\(\\)]+)))(-[RrEe01])?[\\%\\#])\\s*$'

2023-07-13 11:50:24,605: %UNICON-DEBUG:         '^(.*?)([-\\.\\w]+@((?P<hostname00>([^# \\t\\n\\r\\f\\v\\(\\)]+)))(-[RrEe01])?>)\\s*$'

2023-07-13 11:50:24,605: %UNICON-DEBUG:         '^(.*)?((?P<hostname00>([^# \\t\\n\\r\\f\\v\\(\\)]+)))(-[RrEe01])?\\:\\~ *\\#\\s?$|^%\\s*$'

2023-07-13 11:50:24,606: %UNICON-DEBUG:

2023-07-13 11:50:24,606: %UNICON-DEBUG: *** Pattern Matched (target=t2.net.cfn001.eng.pdx.wd):: '^(.*?)([-\\.\\w]+@((?P<hostname00>([^# \\t\\n\\r\\f\\v\\(\\)]+)))(-[RrEe01])?>)\\s*$'

2023-07-13 11:50:24,607: %UNICON-DEBUG: <unicon.eal.MatchMode mode_id=0, mode_name='search multi-line re.S'>

2023-07-13 11:50:24,607: %UNICON-DEBUG: *** Match Groups:: ('\r\nLast login: Thu Jul 13 11:43:47 2023 from <IP_ADDRESS>\r\r\n--- JUNOS 19.4R3.11 built 2020-10-08 21:58:24 UTC\r\n# commit confirmed will be rolled back in 26 minutes\r\n'<EMAIL_ADDRESS>'t2.net.cfn001.eng.pdx.wd', 't2.net.cfn001.eng.pdx.wd', 't2.net.cfn001.eng.pdx.wd', None)

2023-07-13 11:50:24,608: %UNICON-DEBUG: Statement matched: '[pattern='^(.*?)([-\.\w]+@((?P<hostname00>([^# \t\n\r\f\v\(\)]+)))(-[RrEe01])?>)\s*$', action=update_cur_state, args={'transition': <unicon.statemachine.statetransition.AnyStateTransition object at 0x106549df0>, 'state': enable}, loop_continue=False, continue_timer=False, trim_buffer=True]'

2023-07-13 11:50:24,610: %UNICON-DEBUG: Learned hostname(s) : 't2.net.cfn001.eng.pdx.wd'.

2023-07-13 11:50:24,610: %UNICON-INFO: +++ initializing handle +++

2023-07-13 11:50:24,678: %UNICON-DEBUG: >>> Unicon Sending (target=t2.net.cfn001.eng.pdx.wd):: ''

2023-07-13 11:50:24,761: %UNICON-INFO: +++ t2.net.cfn001.eng.pdx.wd: executing command 'set cli screen-length 0' +++

2023-07-13 11:50:24,762: %UNICON-DEBUG: >>> Unicon Sending (target=t2.net.cfn001.eng.pdx.wd):: 'set cli screen-length 0\r'
set cli screen-length 0
Screen length set to 0

# commit confirmed will be rolled back in 26 minutes
<EMAIL_ADDRESS>
2023-07-13 11:50:24,950: %UNICON-DEBUG: <<< Unicon Got (target=t2.net.cfn001.eng.pdx.wd):: 'set cli screen-length 0 \r\nScreen length set to 0\r\n\r\n# commit confirmed will be rolled back in 26<EMAIL_ADDRESS>'

2023-07-13 11:50:24,950: %UNICON-DEBUG: *** Pattern List (target=t2.net.cfn001.eng.pdx.wd)::

2023-07-13 11:50:24,950: %UNICON-DEBUG:         '^.*\\[confirm\\]\\s*\\[y/n\\].*$'

2023-07-13 11:50:24,950: %UNICON-DEBUG:         '^.*\\[confirm(\\(y/n\\))?\\].*$'

2023-07-13 11:50:24,951: %UNICON-DEBUG:         '^.*\\[yes[/,][Nn][Oo]\\]\\s?:?\\s*$'

2023-07-13 11:50:24,951: %UNICON-DEBUG:         '^.*?(%\\w+(-\\S+)?-\\d+-\\w+|Guestshell destroyed successfully|%Error opening tftp:\\/\\/255\\.255\\.255\\.255).*$'

2023-07-13 11:50:24,951: %UNICON-DEBUG:         '^(.*?)([-\\.\\w]+@(t2.net.cfn001.eng.pdx.wd)(-[RrEe01])?>)\\s*$'

2023-07-13 11:50:24,951: %UNICON-DEBUG:         '^(.*)?(t2.net.cfn001.eng.pdx.wd)(-[RrEe01])?\\:\\~ *\\#\\s?$|^%\\s*$'

2023-07-13 11:50:24,951: %UNICON-DEBUG:         '^(.*?)([-\\.\\w]+@(t2.net.cfn001.eng.pdx.wd)(-[RrEe01])?[\\%\\#])\\s*$'

2023-07-13 11:50:24,952: %UNICON-DEBUG:

2023-07-13 11:50:24,952: %UNICON-DEBUG: *** Pattern Matched (target=t2.net.cfn001.eng.pdx.wd):: '^(.*?)([-\\.\\w]+@(t2.net.cfn001.eng.pdx.wd)(-[RrEe01])?>)\\s*$'

2023-07-13 11:50:24,952: %UNICON-DEBUG: <unicon.eal.MatchMode mode_id=1, mode_name='search only last line'>

2023-07-13 11:50:24,953: %UNICON-DEBUG: *** Match Groups:: (''<EMAIL_ADDRESS>'t2.net.cfn001.eng.pdx.wd', None)

2023-07-13 11:50:24,953: %UNICON-DEBUG: Statement matched: '[pattern='^(.*?)([-\.\w]+@(t2.net.cfn001.eng.pdx.wd)(-[RrEe01])?>)\s*$', action=None, args=None, loop_continue=False, continue_timer=False, trim_buffer=True]'

2023-07-13 11:50:25,026: %UNICON-DEBUG: Statement matched: '[pattern='^(.*?)([-\.\w]+@(t2.net.cfn001.eng.pdx.wd)(-[RrEe01])?>)\s*$', action=None, args=None, loop_continue=False, continue_timer=False, trim_buffer=True]'

2023-07-13 11:50:25,099: %UNICON-DEBUG: >>> Unicon Sending (target=t2.net.cfn001.eng.pdx.wd):: ''

2023-07-13 11:50:25,181: %UNICON-INFO: +++ t2.net.cfn001.eng.pdx.wd: executing command 'set cli screen-width 0' +++

2023-07-13 11:50:25,181: %UNICON-DEBUG: >>> Unicon Sending (target=t2.net.cfn001.eng.pdx.wd):: 'set cli screen-width 0\r'
set cli screen-width 0
Screen width set to 0

# commit confirmed will be rolled back in 26 minutes
<EMAIL_ADDRESS>
2023-07-13 11:50:25,361: %UNICON-DEBUG: <<< Unicon Got (target=t2.net.cfn001.eng.pdx.wd):: 'set cli screen-width 0 \r\nScreen width set to 0\r\n\r\n# commit confirmed will be rolled back in 26<EMAIL_ADDRESS>'

2023-07-13 11:50:25,362: %UNICON-DEBUG: *** Pattern List (target=t2.net.cfn001.eng.pdx.wd)::

2023-07-13 11:50:25,362: %UNICON-DEBUG:         '^.*\\[confirm\\]\\s*\\[y/n\\].*$'

2023-07-13 11:50:25,362: %UNICON-DEBUG:         '^.*\\[confirm(\\(y/n\\))?\\].*$'

2023-07-13 11:50:25,363: %UNICON-DEBUG:         '^.*\\[yes[/,][Nn][Oo]\\]\\s?:?\\s*$'

2023-07-13 11:50:25,363: %UNICON-DEBUG:         '^.*?(%\\w+(-\\S+)?-\\d+-\\w+|Guestshell destroyed successfully|%Error opening tftp:\\/\\/255\\.255\\.255\\.255).*$'

2023-07-13 11:50:25,363: %UNICON-DEBUG:         '^(.*?)([-\\.\\w]+@(t2.net.cfn001.eng.pdx.wd)(-[RrEe01])?>)\\s*$'

2023-07-13 11:50:25,364: %UNICON-DEBUG:         '^(.*)?(t2.net.cfn001.eng.pdx.wd)(-[RrEe01])?\\:\\~ *\\#\\s?$|^%\\s*$'

2023-07-13 11:50:25,364: %UNICON-DEBUG:         '^(.*?)([-\\.\\w]+@(t2.net.cfn001.eng.pdx.wd)(-[RrEe01])?[\\%\\#])\\s*$'

2023-07-13 11:50:25,364: %UNICON-DEBUG:

2023-07-13 11:50:25,364: %UNICON-DEBUG: *** Pattern Matched (target=t2.net.cfn001.eng.pdx.wd):: '^(.*?)([-\\.\\w]+@(t2.net.cfn001.eng.pdx.wd)(-[RrEe01])?>)\\s*$'

2023-07-13 11:50:25,365: %UNICON-DEBUG: <unicon.eal.MatchMode mode_id=1, mode_name='search only last line'>

2023-07-13 11:50:25,365: %UNICON-DEBUG: *** Match Groups:: (''<EMAIL_ADDRESS>'t2.net.cfn001.eng.pdx.wd', None)

2023-07-13 11:50:25,365: %UNICON-DEBUG: Statement matched: '[pattern='^(.*?)([-\.\w]+@(t2.net.cfn001.eng.pdx.wd)(-[RrEe01])?>)\s*$', action=None, args=None, loop_continue=False, continue_timer=False, trim_buffer=True]'

2023-07-13 11:50:25,440: %UNICON-DEBUG: Statement matched: '[pattern='^(.*?)([-\.\w]+@(t2.net.cfn001.eng.pdx.wd)(-[RrEe01])?>)\s*$', action=None, args=None, loop_continue=False, continue_timer=False, trim_buffer=True]'
(U!master)[~/workplace/genie]
% pip freeze
aiofiles==23.1.0
aiohttp==3.8.4
aiohttp-swagger==1.0.16
aiosignal==1.3.1
ansible==7.3.0
ansible-core==2.14.3
async-lru==2.0.2
async-timeout==4.0.2
attrs==22.2.0
bcrypt==4.0.1
certifi==2022.12.7
cffi==1.15.1
chardet==4.0.0
charset-normalizer==3.0.1
cryptography==39.0.1
dill==0.3.6
distro==1.8.0
frozenlist==1.3.3
genie==23.6
genie.libs.clean==23.6
genie.libs.conf==23.6
genie.libs.filetransferutils==23.6
genie.libs.health==23.6
genie.libs.ops==23.6
genie.libs.parser==23.6
genie.libs.sdk==23.6
gitdb==4.0.10
GitPython==3.1.31
grpcio==1.51.3
idna==3.4
Jinja2==3.1.2
jsonpickle==3.0.1
junit-xml==1.9
lxml==4.9.2
MarkupSafe==2.1.2
multidict==6.0.4
ncclient==0.6.13
netaddr==0.8.0
packaging==23.0
paramiko==3.0.0
pathspec==0.11.0
prettytable==3.6.0
protobuf==3.20.3
psutil==5.9.2
pyats==23.6
pyats.aereport==23.6
pyats.aetest==23.6
pyats.async==23.6
pyats.connections==23.6
pyats.datastructures==23.6
pyats.easypy==23.6
pyats.kleenex==23.6
pyats.log==23.6
pyats.reporter==23.6
pyats.results==23.6
pyats.tcl==23.6
pyats.topology==23.6
pyats.utils==23.6
pycparser==2.21
pyftpdlib==1.5.7
PyNaCl==1.5.0
python-engineio==3.14.2
python-socketio==4.6.1
PyYAML==6.0
requests==2.28.2
resolvelib==0.8.1
ruamel.yaml==0.17.21
ruamel.yaml.clib==0.2.7
six==1.16.0
smmap==5.0.0
tftpy==0.8.0
tqdm==4.64.1
typing_extensions==4.5.0
unicon==23.6.1
unicon.plugins==23.6.1
urllib3==1.26.14
wcwidth==0.2.6
xlrd==2.0.1
XlsxWriter==3.0.8
xlwt==1.3.0
xmltodict==0.13.0
yamllint==1.29.0
yang.connector==23.1
yarl==1.8.2
(U!master)[~/workplace/genie]
%

Hi ,
Please confirm me in connect_directly.py script, what is the next steps script is doing after connection to the hostname.

It's just a testing script. It opens up the connection and doesn't do nothing then keeping the connection open. At least it's not supposed to close it. With the previous versions of pyATS it was just slow but after the connection was opened it remained open.

Hi @dudeov ,
I tried in my end, it's working good not stopping at any where. Kindly check and let me know.

I'm terribly sorry. The issue was on my side. Your fix works perfectly fine. Thanks so much for you work!


Use PIS to gather inputs for Genetics pipeline

As a developer I was an easy to use way to gather all of the files necessary for the Genetics pipeline.
Background
Currently the inputs needed by the genetics pipeline are prepared using a very rough bash script. This is not easy to configure and is very difficult to rerun only a portion of the inputs.
This capability should be built into PIS in the same way as other inputs.
An overview of the location of the majority of the input/output locations can be found in the documentation. Consider the most recent release as a guide to the output structure desired (gs://genetics-portal-dev-data/22.01.2/inputs).
The inputs directory should have the structure:
lut/
v2d/
v2g/
variant-annotation/

This does not show the summary statistics as they are not used in the pipeline, but we do need them for later processing. The should be moved by PIS into the outputs directory under sa. See gs://genetics-portal-dev-data/22.01.2/outputs for an example.
Acceptance tests

After running the appropriate stages of PIS all of the inputs required for running the genetics pipeline are present in a google storage bucket.
After running the appropriate stages of PIS all of the static inputs required for preparing the CH and ES images are available in a google storage bucket.

The next is a log of all the inputs @JarrodBaker required in the latest genetics release:
Preparing to copy genetics resources
copy static files from previous release
Copy [gs://genetics-portal-dev-data/21.10/inputs/lut/biofeature_labels.json]() to [gs://genetics-portal-dev-data/22.02.4/inputs/lut]()
Copy [gs://genetics-portal-dev-data/21.10/inputs/lut/vep_consequences.tsv]() to [gs://genetics-portal-dev-data/22.02.4/inputs/lut]()
Copy [gs://genetics-portal-dev-data/21.10/inputs/lut/v2g_scoring_source_weights.141021.json]() to [gs://genetics-portal-dev-data/22.02.4/inputs/lut]()
Add date versioned LUT inputs
Copy [gs://genetics-portal-dev-staging/lut/biofeature_labels/220105/biofeature_labels.w_composites.json]() to [gs://genetics-portal-dev-data/22.02.4/inputs/lut/biofeature_lut_220105.w_composites.json]()
Add versioned v2d inputs
Copy [gs://genetics-portal-dev-staging/v2d/220210/studies.parquet]() to [gs://genetics-portal-dev-data/22.02.4/inputs/v2d/studies.parquet]()
Copy [gs://genetics-portal-dev-staging/v2d/220210/ld_analysis_input.tsv]() to [gs://genetics-portal-dev-data/22.02.4/inputs/v2d/ld_analysis_input.tsv]()
Copy [gs://genetics-portal-dev-staging/v2d/220210/locus_overlap.parquet]() to [gs://genetics-portal-dev-data/22.02.4/inputs/v2d/locus_overlap.parquet]()
Copy [gs://genetics-portal-dev-staging/v2d/220210/trait_efo-2021-02-14.parquet]() to [gs://genetics-portal-dev-data/22.02.4/inputs/v2d/trait_efo-2021-02-14.parquet]()
Copy [gs://genetics-portal-dev-staging/v2d/220210/finemapping.parquet]() to [gs://genetics-portal-dev-data/22.02.4/inputs/v2d/finemapping.parquet]()
Copy [gs://genetics-portal-dev-staging/v2d/220210/toploci_betas_fixed.parquet]() to [gs://genetics-portal-dev-data/22.02.4/inputs/v2d/toploci_betas_fixed.parquet]()
Copy [gs://genetics-portal-dev-staging/v2d/220210/ld.parquet]() to [gs://genetics-portal-dev-data/22.02.4/inputs/v2d/ld.parquet]()
Add colocation files to v2d inputs
Copy [gs://genetics-portal-dev-staging/coloc/220127/coloc_processed_w_betas_fixed.parquet]() to [gs://genetics-portal-dev-data/22.02.4/inputs/v2d]()
Add versioned v2g inputs
Copy [gs://genetics-portal-dev-staging/v2g/interval]() to [gs://genetics-portal-dev-data/22.02.4/inputs/v2g/interval]()
Copy [gs://genetics-portal-dev-staging/v2g/qtl/220105]() [gs://genetics-portal-dev-data/22.02.4/inputs/v2g/qtl/]()
Add variant annotations from previous release
copy [gs://genetics-portal-dev-data/21.10/inputs/variant-annotation/190129]() to [gs://genetics-portal-dev-data/22.02.4/inputs/variant-annotation]()
COPY STATIC INPUTS: SUMSTATS AND CREDSET
Copy sumstats -- not used in pipeline, only for clickhouse
Copy [gs://genetics-portal-dev-sumstats/filtered/pvalue_0.005/gwas/220208]() to [gs://genetics-portal-dev-data/22.02.4/outputs/sa/gwas]()
Copy [gs://genetics-portal-dev-sumstats/filtered/pvalue_0.005/molecular_trait/220105]() to [gs://genetics-portal-dev-data/22.02.4/outputs/sa/molecular_trait]()
Copy credset -- not used in pipeline
Copy [gs://genetics-portal-dev-staging/finemapping/220113_merged/credset/*]() to [gs://genetics-portal-dev-data/22.02.4/outputs/v2d_credset/]()
Done downloading
gsutil ls [gs://genetics-portal-dev-data/22.02.4/inputs]()

The new implementation does not need to be backwards compatible. @opentargets/be-team is also flexible to propose how the inputs should look like: structure, filename, timestamps, etc.
@mbdebian could you help with this?

We're closing this ticket for the time being (it might be revisited in the future).
The justification for having PIS is to create a snapshot of the inputs to the ETL at the time of the release. Since we rely on many external data providers for inputs, and these are not always versioned, it is necessary for us to keep a copy to ensure reproducibility of the platform. In the case of genetics, we control the universe of inputs, so there is not the same need to create a snapshot of the data.
In future the BE team will liaise with the data team to select the correct input files for the data joining (ETL) step.


Left side view of binary tree in Java

💥 Proposal
Print the left side view of a binary tree. I will solve this problem using Java.
Have you read the Contributing Guidelines on Pull Requests?
Yes

/assign


collection association creates infinite loop when published to socket with socket.io-redis

Not sure if this is really a waterline issue per se, but it does rear its head when using Sails on a deployment that relies on socket.io-redis to maintain socket info.
If I've got two models along the lines of:
Foo -
attributes: {
dat: { type:'string' },
bars: { collection: 'Bar', via: 'foo' }
}
Bar -
attributes: {
stuff: { type: 'string' },
foo: { model: 'Bar' }
}
Using two models like this, the following case showed up.
Foo.findOne(id).populate('bars').exec(function(err, foo) {
Foo.publishCreate(foo);
}
This worked fine with a basic dev setup using memory to maintain sockets.  But when deployed (in this case to Heroku) with sockets maintained by socket.io-redis, this resulted in a stack overflow.
The error comes from the "msgpack" module embedded in socket.io-redis in the method "sizeof".
The following lines (465 and 466 in msgpack.js) are the root cause:
if('function' === typeof value.toJSON)
return sizeof(value.toJSON())
I honestly don't know if this is worth pursuing, but I put it out there as something that happened just in case someone else might stumble into it as well, because it was amazingly frustrating to debug.
My workaround was to not populate the associated collection in the object I used for publishCreate.  This meant having to make a second call to populate that data later, but better that than crashing my server.

Sounds as though this is the same issue as #891, so I'm going to close this out, and we can carry-on the conversation over there!  If you expect it's a different issue for some reason, we can reopen this.


2023

Started website for 2023.
Please check dates, affiliation, etc.
Live preview at:
https://smtcomp.jhoenicke.de/2023/
TODO:

[ ] News items for call for benchmarks/preliminary call for solver

I added the call for benchmarks/solvers and did a few tweaks.
@bobot  @mbromber, can you have a look if everything is okay?


Interval string representation is broken

using LibPQ: Connection, execute, prepare, Interval
using Dates
conn = Connection("dbname = postgres")

stmt = prepare(conn, "INSERT INTO test VALUES(\$1);")
execute(stmt, (Interval(now() - Second(3), now(), false, true),))

[error | LibPQ]: InvalidDatetimeFormat: ERROR:  invalid input syntax for type interval: "(2020-10-15T16:08:49.821, 2020-10-15T16:08:52.821]"

The Julia type called Interval and the PostgreSQL type called interval do not match. The Julia Interval matches PostgreSQL range types, while the PostgreSQL interval matches Julia Period/CompoundPeriod types.

Oh sorry, let me update the issue here.
using LibPQ: Connection, execute, prepare, Interval, load!, prepare
using Dates
conn = Connection("dbname = postgres")
execute(conn, "CREATE TEMPORARY TABLE libpqjl_test (x tsrange);")
x = Interval(floor(now() - Second(3), Second),
             floor(now(), Second),
             false,
             true)
stmt = prepare(conn, "INSERT INTO libpqjl_test VALUES(\$1);")
execute(stmt, (x,))
load!([(x = x,)], conn, "INSERT INTO test VALUES(\$1);")

The issue is the same with load! not stringifying correctly. I believe #203 will fix this as well but wanted to confirm. This can also be part of the tests.


MAINT, CI: remove appveyor

we've been able to rely on Azure pipelines consistenly
for Windows testing for quite some time now and the Appveyor
CI entry serves little purpose now, so remove the associated
files/references

also, it is starting to become a maintenance burden:
https://github.com/scipy/scipy/pull/13669#issuecomment-795011450

we may also need to delete a webhook IIRC if this does
not suffice for deactivation

You can deactivate(edit)/delete the webhook in settings/Webhook if you have permissions.

Thanks Chuck, I've deleted the Appveyor webhook. CI is green (with no appveyor entry) and Ralf has more or less approved this in the connected PR so I'll go ahead and self-merge.


[BUG] Replica Auto Balance repeatedly delete the local replica and trigger rebuilding

Describe the bug
Replica Auto Balance repeatedly delete the local replica and trigger rebuilding
To Reproduce
Steps to reproduce the behavior:

Install Longhorn 1.3.2
Set Replica Auto Balance to best-effort
Create a volume of 1 replica with data-locality set to best-effort
Attach the volume to a node that doesn't have any replica
Observer that Longhorn start rebuilding a local replica
If we are lucky, the new local replica has a name alphabetically smaller than the old replica. So Longhorn delete it
The cycle repeats again

Expected behavior
Longhorn shouldn't repeatedly deleted the newly rebuilt local replica
Log or Support bundle
longhorn-support-bundle_7761b134-b8e6-4ce4-b178-1048f894641c_2022-10-21T00-14-13Z.zip
Environment

Longhorn version: Longhorn v1.3.2

Additional context
It seems that we don't respect the local replica here https://github.com/longhorn/longhorn-manager/blob/c4e7942684cc1f8ece900854d09126a7b1f8c0b6/controller/volume_controller.go#L931-L958

cc @longhorn/qa

The reproducing steps are clear, we should be able to validate with automation e2e.
Replacing the manual-test-plan label with automation-e2e.

The reproducing steps are clear, we can validate with automation e2e.
Replacing the manual-test-plan label with automation-e2e.

Sounds good :+1: !

@c3y1huang is this a day one issue?

@c3y1huang is this a day one issue?

Yes.

Verified on master-head 20221026

longhorn master-head (777bc5b)
longhorn-manager master-head (76468fa)

The test steps
Ref #4761 (To Reproduce)
Result Passed


Support for "All versions and delete mode" with Change Feed Processor

Is your feature request related to a problem? Please describe.
We have a requirement to use the "All versions and delete mode" feature of the change feed. However, this feature is not currently supported in the SDK through Change Feed Processor. The lack of this feature is a significant limitation for us, as we need to track and process every version of a document, including deletions, for synchronization purposes.
Describe the solution you'd like
We would like the "All versions and delete mode" to be supported with the Change Feed Processor. This would allow us to fully utilize the change feed capabilities of Cosmos DB and ensure that our application can maintain a comprehensive record of all changes within our Cosmos DB containers.
Describe alternatives you've considered
We can't use the Java SDK.  Using the Change feed pull method means reimplementing a lot of features that Change feed processor already has like lease, polling, parallelize across multiple threads and machines.

Additional context

We have included this recently in the preview package.
https://github.com/Azure/azure-cosmos-dotnet-v3/releases/tag/3.40.0-preview.0


[docs] Accessibility Docs: finish missing pages/sections/content

Missing sections / content to add:

[ ] Assistive tech page
[x] Content: Audio/Video
[x] Resources page

A few more resources to add, too (per Mark and Adam):

Google A11ycasts
TetraLogical A11y Quick Tests
Web Accessibility Perspective Videos
OCR Video Series


Designer not updating when actions are changed

Load the designer https://adaptivecards.io/designer/
Select or add an Action
Change the title of the action

Observe the new title is not reflected in the design surface

Fix is here: https://github.com/Microsoft/AdaptiveCards/pull/2035

Fixed


Is their any method that i can place  any object on neck and ears in AR android studio?

There is no method


Passing fp16 buffers

I was curious what the state of passing in fp16 buffers was in Cust? I'm not trying to do anything fancy, just pass in fp16 to an existing PTX function not written in Rust. Can this be done currently with half or similar libraries? Do I need to encode this myself?

You can do this with half, or you can to_bits() it into u16, or pass it as a byte slice, the kernel launching does not check if parameter types are right, so it doesn't really care what the input is, as long as it turns into the expected bytes.

If any one else is curious, I ended up doing it with newtype.
#[derive(Default, Clone, Copy, Debug)]
struct F16(f16);
unsafe impl DeviceCopy for F16 {}
...
let t: [F16; OUT] = [F16(f16::from_f32(0.0)); OUT];
t.as_dbuf()?,

Works great!


Score displayed at the end of a session has bugs(Linux)

This is what is shown at the end.
Yes I type blazing fast( B) ) but certainly not that fast!
This needs to be looked into. The bug only happens on Linux

A recent PR fixed this issue. Closing


COM Ports?

Why does the device expose three COM ports? That's not described in the docs. What's the purpose of each COM Port?

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

ID: de08ad95-5a5b-7d0d-860c-f9eb2e20c25e
Version Independent ID: 496bd01d-da35-136d-cfec-c5b4c5479bab
Content: Azure Sphere installation and device setup
Content Source: AzureSphere/articles/install/install.md
Product: azure-sphere
GitHub Login: @pennyo
Microsoft Alias: azurespheredocs

Look here.

More info here: https://docs.microsoft.com/en-us/azure-sphere/hardware/mt3620-hardware-designers
We will now proceed to close this thread. If there are further questions regarding this matter, please tag me in your reply. We will gladly continue the discussion and we will reopen the issue.


Foreach with two variables should not report 2405

foreach(curr, amount in to_subtract) {...}

This reports a 2405 diagnostic but should not.

Probably related:

which is valid in fluff:
3 C
2 B
1 A
Complete (0.44 ms)```


A52 risk reduction

Several people have reported A52 errors over time caused by SMB attempting to bolus while the pump bolus wizard is open, and in at least one case this resulted in OpenAPS being unable to read some boluses from pump history.  In order to minimize this risk, the recommended method for using SMBs is to enter carbs via NS and easy bolus any desired up-front insulin (generally less than the full amount that would be recommended by the bolus wizard) and then let SMB fill in the rest as it is safe to do so.  For situations where the bolus wizard is preferred, such as for carb entry by inexperienced caregivers, or for offline use, we feel that it is safer for OpenAPS to disable SMBs and fall back to AMA until the next meal.
For anyone who does not wish to follow this recommendation, and wants to use the pump bolus wizard with SMB despite the increased risk of A52 errors, this change adds support for a non-displayed preference defaulting to false. Anyone who wishes to explicitly acknowledge their increased risk tolerance can add that preference, with a value of true, to retain the old behavior.
Once this is merged:

Using the pump bolus wizard to enter carbs will prevent SMBs from being enabled for COB as long as those carbs are active.
Using the pump bolus wizard will prevent SMBs from being enabled for up to 6 hours by the "after carbs" or "always" preferences.
If anyone wants to get around that, they can add A52_risk_enable (with the capital A) to preferences and set it to "true" to acknowledge and intentionally use that approach, which we know leads to increased A52 errors.

(just updated that comment w/ more context ^, so for anyone who got this via email, please see the updated version via https://github.com/openaps/oref0/pull/749 online)

Can you clarify - short of it being a pain in the butt (we've had 1 A52 error) what is the explicit risk from it?  I believe Mike cleared it right away, though I was not here to know what he did specifically.

Most of the time an A52 is just annoying, but per https://github.com/openaps/oref0/pull/702 it can also do something to the pumphistory such that OpenAPS fails to properly read new insulin dosing events.

And since then she's seen another (less serious) instance where some IOB was missing after an A52 (but new records were being parsed correctly).

@mgranberryto and @hilarykoch - given your experiences per #702, do you think this is a good approach?

Is there a safe approach to identifying whether the bolus wizard is open?  I am assuming not.  I use the bolus wizard as my preferred carb logging mechanism and I'd probably disable this check myself.  Would it be acceptable to send a string of ESC presses before sending an SMB instead?

kind of off topic, but the new Explorer pi Hat, have we developed something to do a Bolus wizard in that? Cause that would give us the best of both worlds. Cause I do like the bolus wizard, and I use it in cases where I don't have network, and need to enter in carbs. Yes it's a risk, I have had the A52 error once. But if we get that ability in the new Explorer Hat. That would be sweet.

We just started testing out @mgranberryto's ESC ESC ESC idea in https://github.com/openaps/oref0/compare/dev...a52-esc and it's working well so far.
I am reluctant to allow offline on-rig entry of anything other than local-only temptargets.  If we enter carbs into the rig, then we have to deal with merging them and more importantly syncing them back up to NS.  I think I'd rather have people use the bolus wizard and AMA (or SMB if they accept the risks of using it offline) when they can't enter carbs via NS.

It's working super well, offline too (currently) . Assuming it remains good
through flight and getting back online in a couple hours, will then open
the PR for testing. But so far so good. Props @mgranberryto for the great
idea!
On Wed, Oct 25, 2017 at 3:58 PM John Benjamin<EMAIL_ADDRESS>wrote:

wow, that's a great idea!
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/openaps/oref0/pull/749#issuecomment-339499575, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AHH0hT588G9ZmvYrUHEHKuG7erBVGD6Aks5sv70cgaJpZM4QGbaD
.

--
Dana Lewis | http://OpenAPS.org | http://DIYPS.org http://diyps.org |
@DanaMLewis http://www.twitter.com/danamlewis |
http://www.linkedin.com/in/danalewis
"Doing something for someone else is more important than anything you would
do for yourself."

We had the same idea a long while back, but didn't implement it because we didn't think A52 errors were a big deal (plainly they are) and weren't sure that ESC ESC ESC would always play nicely with whatever people might be doing on the pump.  But as @danamlewis pointed out while testing it, that might actually serve as a safety check on someone leaving the pump in the prime screen after rewinding (which blocks insulin delivery).  We'll have to test that separately though.
But that's really all for another PR we haven't opened yet.
I still think it would be a good idea to encourage people to enter carbs via NS and easy bolus if they want to kick-start things, rather than using the bolus wizard and (usually) doing a full meal bolus.  People who use the bolus wizard tend to complain about the SMB zero-temping right after the meal entry counteracting their bolus, and the later SMBs being too late to "catch up".  I think those users would be better served by just using bolus wizard + AMA, not SMB.  For people who actually want to use SMB, it works better to avoid the bolus wizard (and its bolus-for-everything defaults), enter carbs another way (via phone/watch), do a partial bolus (which easy bolus encourages), and let SMB fill in the rest.  So I'm still in favor of merging this PR as well.

In all honesty, I think the Easy Bolus feature isn't a realistic option for most kids. In my case, I think my son may just be old enough to manage it. Part of the issue is that most kids do have different carb ratios, but even without them, requiring a kid to do the math to estimate the bolus and then input it in NS is too much. Moreover, I'm not sure without Fiasp, I'd even recommend it. But my son is a bit older, our circumstances are unusual, we just switched to one carb ratio, and started on Fiasp, so I'm going to give Easy Bolus a go. For those wanting to use SMBs and Bolus Wizard, I think the best way to determine if an SMB is being issued is to to look at the OpenAPS pill. Generally, we've been able to determine the likelihood of one being administered by doing this. Our second "mishap" was me forgetting to look. And in a few cases, it's been clear an SMB is being issued because my son has gone to bolus and the ACT button won't respond. In that case, I think the best option is to not do anything and let it disappear on its own, wait for the SMB to finish and then bolus. For those wishing to bolus through Bolus Wizard and use SMBs (and I can't imagine OpenAPS now without SMBs), I think basically acknowledging the risk and knowing how to handle the outcome is essential. For me personally, I'd love it if there were a way to disable SMBs for four hours and disable MaxIOB (set to 0) for four hours automatically if an A52 error occurred. I have no way of knowing if this would even be possible. :)

I don't completely disagree with you.
where the fun comes in, is when you are not as well controlled at others, and sometimes even SMB does not catch up with your blood sugars fast enough. So you have a 300+ BG and then you are eating a meal. How much insulin should you take, is the biggest favor of using the Wizard. I do that, just to see what it's suggesting, I know it's not taking in account the extra basal insulin, but I want a round about number. then based on what I'm eating, I will drop the amount the wizard is suggesting (normally be half) and give myself that amount. The whole point of the bolus wizard is to make that easy calculation. yes it is better to use the easy bolus to give yourself a dose, but that easy to make calculation is what is helpful.

@hilarykoch Based on what we saw after your A52 error, I don't think we can trust anything we see in the pumphistory afterward.  I think the safety checks we added in #702 protect against the worst-case outcome (ongoing SMBs that don't register) and basically turn off the loop (set neutral basal) until it can see what it's doing again.  I believe it will also still try to set zero temps when needed for minGuardBG, which is basically the same outcome as setting maxIOB to zero.
With regards to kids doing math, I am actually proposing a more radical solution: don't make them calculate the bolus at all.  Give them some basic guidelines about how much to bolus for meals (maybe something that usually ends up being 25-50% of the meal) and then let SMB start filling in the rest like it does in no-bolus mode.  Or just go all the way and do no-bolus (carb announcement only).  I think most people will actually get better outcomes (fewer post-prandial lows without long sustained highs) on Fiasp with less human dose-calculating rather than more, by relying more on OpenAPS.

@Bender1061 that is exactly the situation where I don't want people using the bolus wizard with SMBs.  I understand that you know how to take the bolus wizard input as just another data point, and factor in all the high temp insulin, but most people don't think critically enough about bolus wizard recommendations, and just take the easy way out of accepting it as-is or with slight modification.  When they do that, SMB as often as not ends up counteracting their actions, which makes them think it doesn't work very well (despite the fact that they'd be better off just letting SMB do its thing without overriding it).  Maybe I'm biased by the squeakiest wheels on Facebook, but it seems that setting up the default behavior to nudge people away from that trap would be good.

Well I guess as long as we can still use it, I'm OK with having to turn it on in Preferences. I already keep a couple of the ones that are not there by default. (like the always SMB, which is the best thing in the world by the way)

@Bender1061 I'm wondering if the bolus wizard through NS would accomplish the same thing you are suggesting. I honestly haven't really used it, so I'll let others respond, but I would hope that the NS IOB would be more accurate than the pump. @scottleibrand I'm with you with regards to a ball park with Fiasp. I mean the ultimate goal for my son would be exactly that. Enter carbs and eat. SO much closer to where we all want to be, right? Less math, fewer calculations, definitely less of a commitment to a big bolus that OpenAPS can back off of if necessary. My question is more about how much SMB can be administered? Even with Fiasp, I'd still want to make sure that it can issue SMBs large enough/fast enough to make up for not bolusing. Without Fiasp, I don't think any of this would be advisable.

@scottleibrand The ESC ESC ESC option... What happens if an SMB is being issued at that exact moment?

@hilarykoch Check out the eSMB section of https://github.com/openaps/oref0/pull/707 for details on maxSMBBasalMinutes.
If one rig is doing an SMB and the other rig tries to (and gets past all the already-bolusing safety checks because they're happening at exactly the same time), the pump will usually only accept and act on one of the two simultaneous bolus requests.  We have only seen two rigs able to deliver SMBs back-to-back when they're tiny, like 0.1U or 0.2U, and with the insulinReq/2 round-down changes recently, that still won't result in more than insulinReq delivered.  I don't think the ESC ESC ESC changes that at all, because pressing ESC during bolus delivery just alternates you between the bolusing and the STATUS screen.  To cancel an in-progress bolus you have to suspend the pump.

@scottleibrand My 6 year old daughter is too young to bolus without caregiver involvement.  My concern is there is a whole bureaucratic apparatus that goes into having diabetes care provided to a young child at school.  We have to draft a care plan (which is both a medical and legal document because it is incorporated into her section 504 plan).  We then need that plan to be approved from a medical perspective by the doctor and approved by the school nursing staff.  It then gets approved a second time as a legal document as part of the 504 plan approval.  My wife and both take off a week of work at the beginning of each school year to train her school caregivers based on the approved plan, which includes making a training manual to conduct the training and for reference throughout the school year.  Counting carbs and using the bolus wizard was a significant part of this training.  This is a significant investment of time and energy on our part and on the part of her school care team.  Frankly, they still make mistakes and I would be reluctant to have to retrain then on a different method potentially leading to more mistakes.
I'm not necessarily opposed to the suggestions you and Dana have made for this PR, I'm just trying to give an example of why it is not necessarily easy to make even seemingly simple changes to how caregivers provide care in certain contexts.  Safety is, of course, everyone's top priority.  Maybe retraining retraining turns out to be the best option.  I just want to convey that that option is not without its own difficulties and risks.

@bdr1177 Totally understood.  I'm not suggesting non-family caregivers should learn a new approach.  Rather, I'm suggesting that we should let them use the bolus wizard and avoid SMB'ing for those meals.  That should result in more conservative dosing at school, which seems like a benefit to me.

I inclined to agree with Hilary that for kids, the use of the bolus wizard may be more critical. There are secondary (largely unskilled at least in our case) caregivers in the school setting, there is a reality of bolus and eating being a coexisting event(no option for delay), and the reality that for an 11year old, the use of NS bolus wizard is more prone to entry error due to need for keying in the results. Also, for those of us not using Fiasp, we can not go without bolus. Indeed, even with all the features turned on and use of eating soon, we still have to be very exact with our carb counting otherwise the outcome is not ideal.
All that said, we’ve not used the NS wizard and certainly don’t mean to dismiss something without trying And safety does have to come first. It just seems like it is more complicated for individuals who are not 100% responsible for their own care.

@JELCRAWFORD do you have any comments on disabling SMB after use of the bolus wizard by default?

@scottleibrand Yes, maybe that is best all things considered. I do hate to lose the benefit of SMBs at school. We’ve found it to be really helpful for controlling bg rises, even though it usually amounts to only 0.1-0.2 units for most meals.

@bdr1177 well, you can always turn on the new preference if you want.  :)

Of course we will be sad to not have smb at school, it has been very useful. But we are sad not to have a unicorn too. Doesn’t mean we get it...

@JELCRAWFORD Yes, I understand that is the reality. If we can’t use it safely we won’t. Just trying to think through this together with everyone here.

Well, with the ESC ESC ESC thing, I think the risk of using SMBs for people savvy enough to be commenting on this thread is probably pretty low.  So I won't shed any tears (unicorn, crocodile, or human) if y'all decide to accept the A52_risk in preferences.  :-)  I'm mostly just trying to get perspective from people who actually use the bolus wizard whether we're moving in the right direction as far as the defaults for people who aren't as familiar with SMB and would be less inclined to make that decision for themselves.

just pondering - is there any way to disable smb's for the period of time a child might be in the care of a caregiver (still sad to see it go at school, but thinking safest options here).  I'm inclined to agree that the risks are relatively low for many of us that are commenting here, so being able to customize the disable (rather than a 6 hr window) might be preferable.  I have less worry about an A52 error if the boy is with us.  Theoretically, at least, we know what we're doing.  Which is more than I can reliably say about school based helpers, even when they mean well - at school, the KISS principle is definitely necessary.

@scottleibrand In short, yes, I think we're on the right track. Folks who are reading this thread, trust me, you do NOT want a child to handle an A52 error at school. Scott knows this first hand, because he spent in excess of two hours on the phone with me making sure my son was ok. I LOVE SMBs and chances are good that if Easy Bolus doesn't work for us, we'll take the risk, but my son is with me pretty much all the time and I feel confident, I could handle it now. As I did again the other day, but still messaged with Dana just to make sure. :)

@JELCRAWFORD Couldn't you just disable them through preferences before heading to school?

@hilarykoch - you mean change it in the rig every day?  I know it is simple (at least for my husband), but the added step each morning and each afternoon might be enough to push us over the edge :)  I'm just happy each day that we get everyone to school on time, have no emerg visits (younger boy) and have our entire rig at school along with the low kit...  homework making it is optional :)  So yes, I assume we could do it manually, I was wondering about something more automated...

@JELCRAWFORD Unfortunately, I do. I know it would be ideal to have a buttons for these things in NS, but I know we're not there yet. I do find using the terminal app on my phone great for doing quick edits, but I hear you, a big pain. My son has only been homeschooled for a year, so I totally get the added extras like health plans, packing kits, snacks and lunches with carb info, etc. I can truly empathize. And I LOVE, LOVE, LOVE SMBs. I just know that our mishap was enough to make me realize that if it had happened, and I hadn't been around, and I hadn't reached out for help, it could have been pretty disastrous.

A cron job would work for alternating between sets of preferences, but it might be better to just check the alarm history for an A52 error before disabling SMB.  I doubt it will happen very often at all with the ESC ESC ESC hack.

All things considered, disabling SMB with bolus wizard by default does sound to me like the best approach. That eliminates the risk for most people who generally won’t change the default and the downside of losing SMBs is outweighed by the safety concerns. Even as closely as my wife and I watch things during school hours the risk seems high enough that I don’t think we’ll override that default.

Still thinking - for those of us who may consider disabling the safety measure if no SMB /w bolus wizard is default - would it not also be an added layer of security to schedule a high temp target (ie 101 or whatever the threshold is) in the 10 minutes surrounding the mealtime bolus (thinking school where the mealtimes are pretty consistent) which, In addition to escape-escape-escape would effectively prevent an smb?  I’m thinking, at least for us, it might be easier to train the boy to look for the high temp before bolus than to enter carbs/insulin differently, at least at this point.

@JELCRAWFORD yes, that would be a good idea too for pre-set schedules.

@mgranberryto since the A52 messes up the pumphistory, I wouldn't want to rely on seeing the A52 itself in the history.  And the disabling SMB is less about reacting to an A52, and more about preventing them (and training people away from less than ideal behaviors).  But agreed, with the ESC hack they'll be much less likely, and other considerations like losing rig connectivity after a meal with a 120m zero temp running start to dominate.  (That also points in favor of disabling SMB by default at school and in other less-than-ideal situations where SMB is more likely problematic.)

For us as well it would be difficult to re-train my son not to use bolus wizard at school and I would hate to lose the option of SMB at school.  We have thus far not encountered A52 errors but are aware of the issue and potential hazards.   Given that there is a preferences choice that we can use to enable/override it for ourselves I'm fine with the idea of disabling SMB by default.  As others have said, so long as those of us who are already using it successfully and understand the issue can continue to do so this seems the safest solution for other potentially less sophisticated users.

With the safety checks in #702 is is possible to quantify the risks?  Also, if SMB is enabled only with COB would that nullify or reduce the risk, since COB wouldn't appear until after using the bolus wizard?

After #702 @hilarykoch had another A52 and still missed some bolus entries, so IOB was off, which still could've cause a low (albeit mitigated by the zero temping as it saw the negative deviations from the insulin it didn't know about).  She set a high temp target and set maxIOB to 0 to prevent that.  Yes, only having enableSMB_with_COB would make the first bolus wizard entry safe, but any subsequent stacked carbs would still run the risk.  With https://github.com/openaps/oref0/pull/753 I think the overall risk level of A52s will be fairly low, but we'll need to observe it in the real world to confirm that.

With stacked carbs I was just thinking the risk would be relatively low assuming that one is less likely to add carbs when bg is rising rapidly, which is when smb is most common. But that is an assumption that won’t always hold.

Ok, I think we're agreed on the approach: any volunteers to test this branch before we merge it to dev?  I also merged in the a52-esc stuff (#753) to the a52-risk branch so you can test both together.

We can test since we're still using bolus wizard.  I won't be able to pull until tomorrow evening but we can have a school day on Friday.

Thanks.  To test: cd ~/src/oref0 && git fetch && git checkout a52-risk && git pull && npm run global-install

I’m in the same boat as @jbwittmer. We can test but not till tomorrow night.

Too much complexity, and not for this PR, but if someone needs settings to change at given times (or given locations), in general one might want to add some kind of multiple profile feature.  Then gated on some kind of calendar and/or other information.
IMHO, that is still better than hand-editing settings each day at 07:00 AM or something.
(I DO wish certain other system components, like the Dexcom / Dexcom share receiver, had such profiles already.)

Looks like I'm late to this party.  I suppose you could use HotButton or the like to disable SMB or set a high-temp prior to bolusing, then reverse the changes afterward.

@JELCRAWFORD @hilarykoch @jmcrawford @mhaeberli For "multiple profile" support that uses a different set of preferences from 7 AM to 3PM, the following additions to the crontab will help.
0 7 * * * ( cd /root/myopenaps ; cp preferences.morning.json preferences.json ; openaps report invoke settings/pumpprofile.json settings/profile.json )
0 15 * * * ( cd /root/myopenaps ; cp preferences.main.json preferences.json ; openaps report invoke settings/pumpprofile.json settings/profile.json  )

There are some cases like a rig being powered down across one of the time boundaries that will lead to settings not being changed, but it is less likely to be forgotten than 2 manual daily changes.

@mhaeberli I think much of a "profile with overrides" feature would be fairly trivial to implement.  Can you create an issue where the community can talk about what we think we need?  I'd be happy to work on the feature, but my personal need for something like that is very limited.

@jbwittmer Just another sort of words of caution... We had heard about others having the A52 error and had had months and months of no issues. But when it happened, it really could have been disastrous had I not been there. In fact, @scottleibrand was the one who caught the excess delivery of insulin before I had. I wouldn't want to give up SMBs either, but I can not express how dangerous it could be if it were to happen without an adult present who could step in, so my best advice would be to at least give your son some sort of training that if it were ever to happen, to consider disconnecting pump immediately until an adult with OpenAPS knowledge could step in to help.

@hilarykoch Thank you for the advice.  In truth I've been thinking about this a lot the last 24 hours and making a fundamental reevaluation of our risk tolerance for this issue and our habits.     In truth there are several areas where we could likely make improvements in our habits to maximize the benefits and safety from OpenAPS and this may be just the impetus we need to make some changes.
@scottleibrand we've been running a52-risk branch about 24 hours so far and no problems yet.

@jbwittmer @scottleibrand We’ve also been running the a52-risk branch since yesterday with no problems. I set A52_risk_enable to true since I’ve been with my daughter the whole time and closely monitoring. We’ve had several SMBs after using bolus wizard, so that setting seems to be working as intended. We haven’t had any A52 errors, but we also never had them in the past and we don’t often add carbs after an initial meal bolus.

5 days now on branch with no problems.  OK with me to merge to dev.

We've also been running this branch for about 5 days with no problems.  I agree with @jbwittmer that this is ready to merge.

Updated the PR description and ready to merge to dev if no objections.

Dana gave a verbal 👍 to merging this.   :-)

For anyone who's been testing this branch, please git checkout dev && git pull to update to the latest dev with this branch merged in.


cache: fix null pointer access when cachemanager.Disable is true

Filesystem.cacheMgr is null when cacheManager.Disable is configured to be true, thus cause null pointer access. Fix it by always create the cacheMgr object no matter cacheManager.Disable is true or false.

Why not check if the cacheMgr is nil?
It seems WithEnableStargz and referrerMgr,  also have the same problem.

Why not check if the cacheMgr is nil? It seems stargzResolver and referrerMgr also have the same problem.

With the evolution of nydus-snapshotter, cache manager becomes mandatory instead optional now. On the other hand, stargzResolver and referrerMgr are optional.


Can't move cursor to insert after closing tags

Jodit Version:  3.5.2
Browser: FF
OS:  Windows
Is React App:  True
Code

this is a test

Expected behavior:
I would like to insert text immediately after the word "test", and would like to move the cursor after the closing ,  and  tags so that the text I add doesn't pick up the formatting.
Actual behavior:
I can not move the cursor to after the closing tags. And text typed is inserted within the tags. I would like to be able to use the right arrow key to move the insertion point to after the closing tags

Just enter ctrl + B or click on Bold button, it is expected behavior


Accessibility fixes

This PR accomplishes the following:

Changes labels in questions for legend when the question either:

doesn't have any fields (just text information)
has checkboxes or radio buttons
has multiple subfields which are grouped and have their own individual labels

Adds better labels to be listened to by screen readers

Buttons with "+" for example
Remove links without any context of which item is going to be removed
Question titles which were not being read in an understandable, fluid setence

Grouping or fields belonging to one question
Fixes some  JS issues

Expandable content were making the page scroll all the way up when clicked
Buttons to add rows (award, subsidiaries, roles, etc) were also making the page jump

Fixes colour contrast in multiple places where it was an issue for WCAG 2.0 level AA
Changes select2 library to NOT use b tag as its up/down arrow
Skip to main content fixed. Was not the first focusable element in page, and it should be
Fixes focus ring on logo and QAE title
Remove extra textarea that was placed hidden

Need to fix one issue before I re-open.


Chat box option button is overlapping with scroll to top button.

Description
Chat box option button is overlapping scroll to top button, I would like to fix this bug

Screenshots
No response

@Anikalp1 Go for it!

Hey, I want to work on this issue .
Kindly assign this to me.

@SauravMukherjee44 thank you, I will be raising PR for this very soon