publisher: Behavior of "OpcSamplingInterval" in pn.json

Describe the bug
Not sure if this is a bug or desired behavior. When setting the OpcSamplingInterval to a value lower than the OpcPublishingInterval, the module only emits a single value, even if there is more than one change of the value within the time specified in OpcPublishingInterval.
The structure of the output allows multiple values for the same NodeId, that's why i assumed that it will output multiple values when setup as discribed above.
To Reproduce
Steps to reproduce the behavior:

Setup a pn.json with one node, set the OpcSamplingInterval to a smaller value than the OpcPublishingInterval
Run the publisher module
Check the output

Expected behavior
When setting the OpcSamplingInterval to a value lower than the OpcPublishingInterval and there are multiple changes for the configured node within the time of OpcPublishingInterval, the publisher module should send more than one value for the configured node to the ouput.
Configuration
Content of the pn.json:
[
  {
    "EndpointUrl": "opc.tcp://uademo.prosysopc.com:53530/OPCUA/SimulationServer",
    "UseSecurity": false,
    "OpcNodes": [
      {
        "Id": "ns=3;i=1001",
        "OpcSamplingInterval": 2000,
        "OpcPublishingInterval": 10000,
        "DisplayName": "Counter",
        "HeartbeatInterval": 20
      }
    ]
  }
]

Content of the debug.template.json:
{
  "$schema-template": "2.0.0",
  "modulesContent": {
    "$edgeAgent": {
      "properties.desired": {
        "schemaVersion": "1.1",
        "runtime": {
          "type": "docker",
          "settings": {
            "minDockerVersion": "v1.25",
            "loggingOptions": "",
            "registryCredentials": {
              "crstdpeiot": {
                "username": "xxx",
                "password": "xxx",
                "address": "xxx"
              }
            }
          }
        },
        "systemModules": {
          "edgeAgent": {
            "type": "docker",
            "settings": {
              "image": "mcr.microsoft.com/azureiotedge-agent:1.3",
              "createOptions": {}
            }
          },
          "edgeHub": {
            "type": "docker",
            "status": "running",
            "restartPolicy": "always",
            "settings": {
              "image": "mcr.microsoft.com/azureiotedge-hub:1.3",
              "createOptions": {
                "HostConfig": {
                  "PortBindings": {
                    "5671/tcp": [
                      {
                        "HostPort": "5671"
                      }
                    ],
                    "8883/tcp": [
                      {
                        "HostPort": "8883"
                      }
                    ],
                    "443/tcp": [
                      {
                        "HostPort": "443"
                      }
                    ]
                  }
                }
              }
            }
          }
        },
        "modules": {
          "publisher": {
            "settings": {
              "image": "mcr.microsoft.com/iotedge/opc-publisher:2.8",
              "createOptions": {
                "Hostname": "publisher",
                "Cmd": [
                  "--pf=/appdata/pn.json",
                  "--di=60",
                  "--me=Json",
                  "--mm=PubSub",
                  "--tm",
                  "--aa",
                  "--si=2",
                  "--ms=262144",
                  "--BypassCertVerification=true",
                  "--ll=debug"
                ],
                "HostConfig": {
                  "Binds": [
                    "C:\\temp\\publisher:/appdata"
                  ]
                }
              }
            },
            "type": "docker",
            "version": "1.0",
            "status": "running",
            "restartPolicy": "always"
          }
        }
      }
    },
    "$edgeHub": {
      "properties.desired": {
        "schemaVersion": "1.1",
        "routes": {
          "PublisherToLogger": "FROM /messages/modules/publisher/* INTO $upstream"
        },
        "storeAndForwardConfiguration": {
          "timeToLiveSecs": 7200
        }
      }
    }
  }
}

Desktop (please complete the following information):

OS: Windows 11, Ubuntu 20.04
Browser -
Version: 2.8

Thx for your feedback!

@JoshouaDPE FYI

@codeminic @JoshouaDPE
What you describe is as expected using your configuration.
The behavior is described in more detail in the OPC UA specification.
To achieve what you are looking for you need to set the QueueSize parameter in the node configuration. I think this is missing in the documentation of the OPC Publisher configuration on docs.microsoft.com and on github, but i need to validate when the team is back from vacation.
See this file for the configuration for a node via the configuration file. This would do exactly what you are looking for. Can you validate if this is working as you expect and let me know here?
The command line parameter to change the default setting of the QueueSize (default is 1) is DefaultQueueSize=VALUE documented here.

@hansgschossmann explicitly setting the the QueueSize to a higher value worked, thanks!

good to hear. you are welcome. keeping it open to fix the doc.


bug: could not find wasi in os

Hi. A bug occurred during build for wasm using wasm-pack.
Platform: Apple Silicon
Rustc Version: 1.83.0-nightly (363ae4188 2024-09-24)
Package Version: v0.2.2
Full error log:
[INFO]: 🎯  Checking for the Wasm target...
[INFO]: 🌀  Compiling to Wasm...
   Compiling ****** v0.1.0 (******)
error[E0433]: failed to resolve: could not find `wasi` in `os`
  --> src/******:7:1
   |
7  | muddy_init!();
   | ^^^^^^^^^^^^^ could not find `wasi` in `os`
   |
note: found an item that was configured out
  --> ******/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/src/rust/library/std/src/os/mod.rs:45:9
   |
45 | pub mod wasi {}
   |         ^^^^
note: the item is gated here
  --> ******/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/src/rust/library/std/src/os/mod.rs:37:1
   |
37 | / #[cfg(all(
38 | |     doc,
39 | |     any(
40 | |         all(target_arch = "wasm32", not(target_os = "wasi")),
41 | |         all(target_vendor = "fortanix", target_env = "sgx")
42 | |     )
43 | | ))]
   | |___^
note: found an item that was configured out
  --> ******/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/src/rust/library/std/src/os/mod.rs:87:9
   |
87 | pub mod wasi;
   |         ^^^^
note: the item is gated here
  --> ******/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/src/rust/library/std/src/os/mod.rs:86:1
   |
86 | #[cfg(any(target_os = "wasi", doc))]
   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   = note: this error originates in the macro `muddy_init` (in Nightly builds, run with -Z macro-backtrace for more info)

Guess it's related to #19 and #2.

Hello!
Thanks for this. I've haven't tested this crate in a wasm environment yet, so I'm not surprised by these errors. I'll have to figure this out first, and I'll probably make a new release to support wasm, if possible.


Adding event type for ethers

Hello!
Thanks for the great project!
It seems that typechain does not output the event type when it is generated by specifying ethers-v4 as the target.
This is inconvenient because I don't know the type when implementing the event handler.
Sample Code
pragma solidity ^0.6.4;
pragma experimental ABIEncoderV2;
contract Test {
  event TestEvent(address sender, string message);
  function test() public {
    emit TestEvent(msg.sender, 'test Message!');
  }
}

Output Result
interface TestInterface extends Interface {
  events: {
    TestEvent: TypedEventDescription<{
      encodeTopics([sender, message]: [null, null]): string[];  **// type is null**
    }>;
  };
}

export class Test extends Contract {
  filters: {
    TestEvent(sender: null, message: null): EventFilter;  **// type is null**
  };
}

Expected Behavior
It would be helpful if you could output something like the following
export type TestEvent = [string, string]
If struct type is used...
export type TestEvent = [string, { id: string, name: string }]

When web3 is specified, the type seems to be output.
export type TestEvent = ContractEventLog<{ // type exported
  sender: string;
  message: string;
  0: string;
  1: string;
}>;

export interface Test extends BaseContract {
  events: {
    TestEvent(cb?: Callback<TestEvent>): EventEmitter;  // type is specified
    TestEvent(options?: EventOptions, cb?: Callback<TestEvent>): EventEmitter;

    allEvents(options?: EventOptions, cb?: Callback<EventLog>): EventEmitter;
  };

Hey @Nekonaughey, can you try using ethers v5? The new target is currently on beta (https://github.com/ethereum-ts/TypeChain/pull/250)

I’ve tried the new ethers-v5 target and no event types are generated. It would be great if the target would support it.

ATM the events in ethers v5 go like this:
const filter = contractInstance.filters.Transfer('0x000000000', null, null); // current target supports inputs to this
const logs = await window.nrtManagerInstance.queryFilter(filter);
const parsedLogs = logs.map((log) => window.nrtManagerInstance.interface.parseLog(log)); // this is where we need typings

// then
const event = parsedLogs.args as {from: string, to: string, value: BigNumber}

I would be very much helpful, since currently I have to manually do this :(
@krzkaczor Can you suggest any way in which this is acheivable? I'd love to get this supported in automated mode instead of my manual additions of typings to events.

@Nekonaughey

If I specify the target as web3, event types seems to be output.

yeah, web3 target was written with this in mind. I guess this wasn't migrated to ethers target.
@zemse I think that the question is should we simply extra current types to a named type like:
export type TestEvent = [string, string]
or we should create interfaces as you suggested ie:
interface SomeEvent {
from: string,
to: string,
value: BigNumber
}

I think latter will be more useful but I am not sure which case is more common... Can you chip in folks?

I’d prefer the latter approach with named event parameters. Since events are only consumed by users of the bindings it will be a lot less error-prone to do event.from compared to event[0].

The second one is definitely useful in most cases, but I remember that I preferred event[0] in one situation (I don't remember exactly) but maybe the order was more obvious to me than random parameter naming of event args by some dev, since that is not standardised. For example value, amount, tokens used as param name for event[2] of ERC20 Transfer event in various ABIs.
The ethers args object in parsedLog contains both event[0] as well as event.from.
interface SomeEvent {
  from: string,
  to: string,
  value: BigNumber,
  0: string,
  1: string,
  2: BigNumber
}

Though it doesn't look compact, it should make devs in both situations happy.
Also as a matter of fact, events can be without param names.
event A(address, uint256);

Is there any progress on this PR? Would like to know how I could potentially contribute. Event typing is pretty important.

Is there any progress on this PR? Would like to know how I could potentially contribute. Event typing is pretty important.

I haven't got to make any progress on this. I can do this next week or else if you'd like to do then you can have a look at this https://github.com/ethereum-ts/TypeChain/issues/303#issuecomment-729030874

I haven't got to make any progress on this. I can do this next week or else if you'd like to do then you can have a look at this https://github.com/ethereum-ts/TypeChain/issues/303#issuecomment-729030874


Mitogen does not support Ansible 2.8 Python interpreter detection

Running Debian 9 locally with Ansible 2.8.1 with Python 3. Controlling a Ubuntu 18.04 server.
I followed the instructions here: https://networkgenomics.com/ansible/
Of course it didn't work for 2.8.X, so I switched it out for master. Now I'm getting this:
TASK [Gathering Facts] ************************************************************************************************************************
fatal: [<IP_ADDRESS>]: UNREACHABLE! => {"changed": false, "msg": "EOF on stream; last 300 bytes received: 'bash: /usr/bin/python: No such file or directory\\n'", "unreachable": true}

Oddly enough, /usr/bin/python does exist but it's a symlink to python2.7.
I think it should be trying /usr/bin/python3. Ansible works just fine without mitogen enabled.
I think there's something about a ansible_python_interpreter that I can set, but seems like this should work by default.
What can I try/test? I'm new to both Ansible and Mitogen, so not very familiar with either yet.
Thank you!

Hi there,
This is probably something to do with the new "Python interpreter discovery" feature in Ansible 2.8. Mitogen currently lacks support for it.
As a workaround, you can specify ansible_python_interpreter=/usr/bin/python3 for just that machine, or for its group, or simply on the command line using ansible -e ansible_python_interpreter=...
Sorry for the hassle! Interpreter discovery is simultaneously a simple feature and fairly painful, because to solve it requires implementing raw: module support, which Mitogen has always lacked. Coming soon!

Thank you, that works!
Actually ended up setting that yesterday because Ansible was doing Python 2 on one host and Python 3 on another.
Do you want me to close this out or leave it open for now?

All behavioural differences are bugs, so it stays open :)  Thanks for reporting!

No problem, sounds good!

Any news on this?

@dw I got a different error with Ansible 2.8.5 and Mitogen 0.2.8:
fatal: [machine]: UNREACHABLE! => {"changed": false, "msg": "EOF on stream; last 100 lines received:\nusername@{machineIP}'s password: ", "unreachable": true}
task:
- name: pull down docker binaries
  get_url:
    url: https://download.docker.com/linux/static/stable/x86_64/docker-{{ docker_version }}.tgz
    dest: /usr/local/share
    mode: 0644
  vars:
    ansible_python_interpreter: source /opt/rh/rh-python36/enable && python

In this case a machine's default system python was super old so we needed to use a user-installed python instead. This works just fine without mitogen.

I believe I discovered my issue. It's due to how the ssh command is set up when ansible_python_interpreter is more than just a python path:
[mux  96418] 17:02:52.927805 D mitogen.parent: command line for Connection(None): ssh -o "LogLevel ERROR" -l {login_name} -o "Compression yes" -o "ServerAliveInterval 30" -o "ServerAliveCountMax 10" -o "StrictHostKeyChecking no" -o "UserKnownHostsFile /dev/null" -o "GlobalKnownHostsFile /dev/null" -o ForwardAgent=yes {IP_ADDR} source /opt/rh/rh-python36/enable '&&' python -c "'import codecs,os,sys;_=codecs.decode;exec(_(_(\"eNqFkUFPwzAMhc/...

This is different than what ansible does in this situation:
8
SSH: EXEC sshpass -d41 ssh -vvv -o ForwardAgent=yes -o StrictHostKeyChecking=no -o 'User="{username}"' -o ConnectTimeout={IP_ADDR} '/bin/sh -c '"'"'sudo -H -S  -p "[sudo via ansible, key=SOMEKEY] password:" -u root /bin/sh -c '"'"'"'"'"'"'"'"'echo BECOME-SUCCESS-{SOMEKEY} ; source /opt/rh/rh-python36/enable && python'"'"'"'"'"'"'"'"' && sleep 0'"'"''

I'll try and submit a PR to fix

Will be working on the fix here: https://github.com/dw/mitogen/pull/658. Might be going down the rabbit hole a bit but I'm determined 😅

My fix is ready

I've made a PR here: https://github.com/dw/mitogen/pull/658 can those affected please try my patch and see if it fixes things for you?


Feature cleanUpPrimitivesAndSubParts has trouble with part 2444

Describe the bug
When cleanUpPrimitivesAndSubParts is set to true when creating the InstructionsManager, and the model contains the part 2444.dat, all steps where the part is present in the PLI do not get rendered at all.  In addition, behaviour beyond the fist step containing the part gets sluggish and sometimes hard to predict. Jumping to a particular step by typing the number in the box does not work any more.
To Reproduce

Make a model containing 2444.dat e.g. in the fourth step
Step through instructions

Expected behavior
Normal behaviour
Device (please complete the following information):
Windows 10, Android 10
firefox, chrome, android webview
Additional context
It helps to simply set the option to false.

I have added a test model (models/test_issue_45.ldr) where the issue does not appear. Can you please check and see if the issue persists?

With the fix for issue #48 , this issue has been fixed as well.


Changed location of the installation assets.

Modified location of the install assets to match with the official jupyter documentation
http://jupyter-client.readthedocs.io/en/latest/kernels.html.

Thank you. Looks good to me.


feat(TDI-39100): Integrate Couchbase component

What is the current behavior? (You can also link to an open issue here)

Couchbaselabs developed initial implementation of components in theirs repository (forked from Talend's repository)

What is the new behavior?

Initial implementation of Couchbase components integrated into Talend's component set

Please check if the PR fulfills these requirements

[X] The commit message follows Talend standard
[ ] Tests for the changes have been added (for bug fixes / features)
[ ] Docs have been added / updated (for bug fixes / features) ?
[ ] The code coverage on new code >75%
[X] The new code does not introduce new technical issues (sonar / eslint)

What kind of change does this PR introduce?

[ ] Bugfix
[X] Feature
[ ] Code style update (formatting, local variables)
[ ] Refactoring (no functional changes, no api changes)
[ ] Build / CI related changes

Does this PR introduce a breaking change?

[ ] Yes
[ ] No

If this PR contains a breaking change, please describe the impact and migration path for existing applications: ...
 Do we need these features in this component?

Pull request test result: success :star:

Pull request test result: success :star:

Pull request test result: success :star:

Thanks for fixes. I have reviewed it again. It is ok.
However, I'm not approving for the moment:

We are waiting fixes from partner.
During review I may forget about some aspects. I think we need to define "Definition of done" document with all acceptance criteria for new components as it is very hard to fix bugs, when we already integrate a component.
I'll try to work on this document and invite other components developers to join. We will need to do a final review accordingly to this document.

Pull request test result: success :star:
Sonar results

Pull request test result: failure :x:

Pull request test result: failure :x:

Pull request test result: failure :x:

Pull request test result: failure :x:

Pull request test result: success :star:
Sonar results

Pull request test result: failure :x:

Pull request test result: failure :x:

This branch is not used anymore


Capitalization typo in nuspec

The nuspec lists TopShelf dependency with a capital S. This causes some issues when other add on packages, Topshelf.Serilog for example, have a dependency on the same version of Topshelf with a lowercase s
   <dependencies>
      <dependency id="Autofac" version="[4.0.0,5.0.0)" />
      <dependency id="TopShelf" version="[4.0.1,5.0.0)" />
    </dependencies>

Hi Philip,
I'm sorry for the late reply, I was on vacation. Thank you for the issue and the fix.

As I remember Topshelf was renamed from TopShelf few years ago. I didn't change the name then.
Pushed the fix as 3.1.1 https://www.nuget.org/packages/Topshelf.Autofac/3.1.1


Is "append" to index an option

I am looking through both docs, code, and test usage, and perhaps I am missing something, but it appears the options are A. Index does not exist, and on a single run of elasticsearch_loader, you can load an entire index or B. Index does exist and you specified --delete therefore the existing index will be deleted.  When you try to run elasticsearch loader on an index that already exists, but do not specify --delete, it fails with error: elasticsearch.exceptions.RequestError: TransportError(400, u'index_already_exists_exception')
Thus, my request, if possible, is "append" to existing index.

Sure, this should be the default behaviur, maybe are you passing index-settings-file when you trying to update the existing index?

Ah, I am AM doing that! I didn't know that is what is causing that... perhaps a note in the help screen or readme that states that the index settings only needs to be provided when first creating the index.
Alternatively, if the index is exists, and --delete is NOT specified, perhaps we ignore the index-settings file and pass a warning to the user that since the index exists the settings are ignored. (or perhaps we grab the current settings and if they don't match what is passed, we fail out, otherwise, just append as is?) Lots of options with different levels of complexity, but thanks for pointing out my base mistake.


Add presets for granular control over font widths, weight and slant in Heading component

With Mona Sans, we can now offer granular control over typographic visual appearance.
E.g.

Could Heading support some 'presets' or official variants at a system / library level?
Should we provide a clean API to allow users to experiment more easily with the font?
What is the recommended approach for leveraging in Primer Brand?

Closed by https://github.com/primer/brand/pull/186
Slant customisation not required for time being.

legend ⚡ @rezrah !


Font Awesome CSS fails to load due to incorrect MIME type.

Please only submit reproducible issues.
If you're not sure if it's a real bug or if it's just you, please open a topic on the forum: https://forum.magicmirror.builders/category/15/bug-hunt
Problems installing or configuring your MagicMirror? Check out: https://forum.magicmirror.builders/category/10/troubleshooting
When submitting a new issue, please supply the following information:
Platform: Place your platform here... give us your web browser/Electron version and your hardware (Raspberry Pi 2/3, Windows, Mac, Linux, System V UNIX).
Raspberry Pi 3
Node Version: Make sure it's version 0.12.13 or later.
v9.11.12
MagicMirror Version: Now that the versions have split, tell us if you are using the PHP version (v1) or the newer JavaScript version (v2).
JavaScript (v2)
Description: Provide a detailed description about the issue and include specific details to help us understand the problem. Adding screenshots will help describing the problem.
The Font Awesome stylesheet is not loading properly due to MIME type errors. I looked at the requests in chrome:
Refused to apply style from<EMAIL_ADDRESS>because its MIME type ('text/html') is not a supported stylesheet MIME type, and strict MIME checking is enabled.

This also throws the same error for<EMAIL_ADDRESS>Steps to Reproduce: List the step by step process to reproduce the issue.
I enabled icons and fired up Chromium at localhost:8080 to inspect the console's error messages.
Expected Results: Describe what you expected to see.
I expected the style sheet to load so the icons would appear.
Actual Results: Describe what you actually saw.
See above description.
Configuration: What does the used config.js file look like? Don't forget to remove any sensitive information!
Here's the calendar config portion from my config.js file
{
	module: "calendar",
	position: "middle_center",
	classes: "daytime_scheduler",
	header: "From your calendar",
	config: {
		maximumEntries: 8,
		showEnd: true,
		displaySymbol: true,
		wrapEvents: false,
		maxTitleLength: 10,
		calendars: [
			/*{
				symbol: 'calendar',
				url: "webcal://www.calendarlabs.com/templates/ical/US-Holidays.ics"
			},*/
			{
				symbol: 'calendar',
				url: "..."
			}/*,
			{
				symbol: "calendar",
				url: "..."
			},
			{
				symbol: "calendar",
				url: "..."
			}*/
		],
		titleReplace: {
			"De verjaardag van ": "",
			"'s birthday": ""
		},
		excludedEvents: [

		]
	}
}

Additional Notes: Provide any other relevant notes not previously mentioned. This is optional.

Also just got hit with this after upgrading. CSS files failing to render with the following error messages in my console:
The resource from<EMAIL_ADDRESS>was blocked due to MIME type (“text/html”) mismatch (X-Content-Type-Options: nosniff).[Learn More] localhost:8080
The resource from<EMAIL_ADDRESS>was blocked due to MIME type (“text/html”) mismatch (X-Content-Type-Options: nosniff).[Learn More] localhost:8080
Error on loading stylesheet: vendor/css/font-awesome.css

Updating - went back through steps and realized I did not issue:
npm install after upgrading.
Once issues, this error disappeared.


Made download button in notes section responsive and solved navbar issue

PR Fixes:

Fixing the non-responsive download button in the Notes section.

Resolves #357
Resolves #370
Checklist before requesting a review
I have performed a self-review of my code.
I assure there is no similar/duplicate pull request regarding the same issue.
Issue Description
The download button in the Notes section is not responsive. It overlaps with the content on smaller screens, making it difficult for users to access.
To Reproduce

Open the website on a smaller screen (e.g., mobile device or browser window resized to a smaller size).
Navigate to the Notes section.
Observe the download button overlapping with the content.

Expected Behavior
The download button should be positioned in a way that it does not interfere with the main content and is easily accessible on all screen sizes, maintaining the overall responsive design of the website.
Screenshots or GIFs

Non-responsive button:
Responsive button:
-Navbar issue

https://github.com/code100x/cms/assets/83893659/955d051f-9633-4bcd-a19d-888aae537f07
-Navbar Solution
https://github.com/code100x/cms/assets/83893659/72ece692-3c0d-4e79-b0d5-9771bef8bbfa
Info

Browser: Chrome
Version: 89.0.4389.82

Additional Context
The website is designed to be responsive, and the majority of the elements on the page adapt well to different screen sizes. However, the download button in the Notes section seems to be an outlier, and it needs to be addressed to ensure a consistent and optimal user experience across all devices.

Hello @hkirat , I've submitted a pull request and would appreciate your review whenever you get a chance. Thank you!

@noobpiyush closing this, app bar is fixed, raise pr for the download button


Initial Size is not taken into account

Hello,
I'm using LiteDB with parameter Initial Size in connection string.
File is created with a size different from expected one. As if this parameter is not precised.
Thank you for your answer.
Regards
Driss

Same #799 - fixed on master branch, will be available in v4.1


Unexpected panic: thread finalization was missed

Unfortunately, this one is way more vague than my previous report. I've yet to figure out exactly how I manged to cause it or to reproduce it reliably. I actually stumbled across #44 while trying to repro this one. The best I can do is provide a description of what I'm attempting in the hopes that some of the details might be relevant. I don't have a stack trace on hand, but the panic is coming from this expect.
I'm working on building a bevy integration. Scripts are loaded module-style and are expected to return a table of functions, which is stashed and stored in a bevy resource which associates it with the AssetId it was loaded from. Since piccolo is !Send, it relies heavily on thread-locals. The Lua environment, a StashedExecutor, and the StashedTables loaded from the compiled scripts are all kept in thread-local data. If the lua system detects that either the StashedTable for a particular asset is missing, or the timestamp for the table is older than that of the most recent asset reload, the module is re-evaluated. On every Update, for each loaded script, it looks up the update method in its table and executes it.
The StashedExecutor is created once alongside the Lua environment and kept around for all operations. Loading a script from the compiled asset (a CompiledPrototype) is done by creating a FunctionPrototype, then a Closure, and finally a Function with which the Executor is restarted, then stepped to completion. The Table result is then taken and stashed. When running the "update" function, the function is looked up from the table, used to restart the executor, and then Lua::execute is used to drive execution.
It seems like the panic was happening shortly after I had edited the script and seen it reload, but not immeditely. My suspicion is that the Executor got left in an odd state after one or more load or execution failures on one thread, but not all threads, so the panic is somewhat nondeterministic as bevy schedules the system to different threads. But it should be reproducible if I can figure out what the conditions actually are, since I'm not using unsafe anywhere and things should be deterministic within each individual thread.

This has to be a bug in the finalization logic in Lua, and there must be pointers being swept without Finalizers::finalize being called, I'm looking into it.

Just so you know what to look for, (naively at least) Executor should have nothing at all to do with this.
The logic is this: Every Thread that is created is registered in a list, and then just before that Thread is collected, Thread::reset is called on it. The reason we do this is so that we can keep upvalue references to threads weakly, and if a thread were to be garbage collected anyway, the upvalue just automatically becomes closed. This is similar to what PUC-Rio Lua and its many forks do.
Do you happen to be panicking and then catching those panics anywhere? Do you happen to call Lua::gc_collect manually? Neither of these things is wrong at all I'm just trying to narrow it down.

Can you do an experiment for me and see if this commit fixes the problem? a6d2d83008fb62a4dbb1e663da1c1914b536c4ff
I made this commit somewhat confident that I understood what might be happening and I think I actually... don't understand, and now I'm wondering if I need to revert that commit.
My working theory is that there is a Thread that is somehow not "dead" (in the gc-arena sense), but after another thread is reset, it becomes dead somehow. This shouldn't happen though... because the only things that lose Gc ownership are uhh... already dead threads which can't keep another thread alive. All of the upvalues that the thread holds strengthen their ownership of something, not loosen it, so I just don't get it.
If you can possibly try to reproduce the issue and then try to reproduce the issue again with a6d2d83008fb62a4dbb1e663da1c1914b536c4ff and see if it helps, that would be amazing.

oops, closed on accident

Oh I'm stupid, I know what the problem is.
The problem was not the logic before, it was that after finalization, the arena is still in the marking phase, which means that the user can come in and make a Thread dead before the next sweep cycle 🤦♀
What needs to happen is that finalization and proceeding to the sweeping phase must happen as one unit of work, and it isn't.

Okay, I think 1cdbca46b20748e93980e5f2efe53de9c927a2e4 is the actual fix here, and in fact I don't even think the previous commit would have fixed the issue except maybe accidentally (as it's a sort of race condition).
The one downside is that (for now) it means that piccolo is using a gc-arena branch again, until https://github.com/kyren/gc-arena/pull/96 is merged.

Well, I switched computers yesterday and after fiddling with various things for several hours, I never actually saw it again :sweat_smile:
I should have the previous state of my code on my other machine though, at which point I was seeing the panic semi-regularly. I'll go grab it and try to repro, and then give your fix a try.

Yep, that fixes it! I also managed to reliably reproduce it with this:
use piccolo::{
    compiler::interning::BasicInterner,
    *,
};

const SOURCE: &'static str = r#"
local module = {}

function module.update_global()
  print("Hello, lua!")
end

-- typo: causes a module evaluation error
return moule
"#;

fn main() {
    let mut lua = Lua::full();

    // Does't matter if the script is pre-compiled or Closure::load'ed - both result in the panic.
    let mut interner = BasicInterner::default();
    let parsed = compiler::parse_chunk(SOURCE.as_bytes(), &mut interner).expect("parsed");
    let compiled = compiler::compile_chunk(&parsed, &mut interner).expect("compiled");

    let mut tries = 50;
    let _module = loop {
        if tries == 0 {
            println!("giving up!");
            return;
        }
        tries -= 1;

        let module = lua.try_enter(|ctx| {
            let fn_proto = FunctionPrototype::from_compiled_map_strings(
                &ctx,
                String::from_slice(&ctx, "<source>"),
                &compiled,
                |s| String::from_slice(&ctx, s.as_ref()),
            );
            let closure = Closure::new(&ctx, fn_proto, Some(ctx.globals()))?;

            let exec = Executor::start(ctx, closure.into(), ());
            loop {
                let mut fuel = Fuel::with(4096);

                if exec.step(ctx, &mut fuel) {
                    break;
                }
            }

            let module = exec.take_result::<Table>(ctx)??;
            Ok(ctx.stash(module))
        });

        match module {
            Ok(m) => break m,
            Err(e) => {
                println!("error loading script: {e}");
                continue;
            }
        }
    };

    println!("loaded successfully!");
}

I was actually wrong about the state of my project when I was seeing the panic - I wasn't stashing the executor and was actually creating a new one every time for script loading. Using a stashed one actually hid the issue, which is why I wasn't seeing it yesterday.

Great work btw, these are really really good finds, keep em coming if you got em!


Streaming API does not allow access to the HTTP status or the headers from the callback

The current streaming API takes a callback function with two parameters:
  typedef function<void(boost::iterator_range<char const*> const&,
                        system::error_code const&)> body_callback_function_type;

This means that from within the body handler, there is no way to know what the HTTP status code was for the underlying request or what the headers were (most importantly the "Transfer-Encoding" header), even though the status code and the headers are parsed before the callback is invoked.
One workaround is to use the callback to simply assemble the body bytes, and then actually parse it after the request completes. This, however, won't work for hanging gets, where the data is coming in incrementally.
I'd like to augment the API to allow the callback to access the underlying http_async_protocol_handler fields (including the promises and is_chunk_encoding), most likely via the underlying response object. There is a way to make it backward compatible by overloading on a 2-parameter callback.
@deanberris, would you entertain a PR with such a change?

Hi @igorpeshansky,
Async client support for chunked transfer encoding has been added to the master branch. See #720.
You still have to set the remove_chunk_markers option to get rid of the encoding bits enclosing each chunk. I pushed it to the master branch only because it is rather a large change.
If I knew in advance that there were still so many commits going into the 0.13 release, I would have pushed to 0.13 branch as well.

Hi @igorpeshansky -- Yes, please send a PR through for an overload of the streaming body handler.
@umennel -- If you can get the chunked transfer encoding from master cherry-picked and/or ported to 0.13-release, then that would be great too.


Features/dit Forward modeling using DIT+LPF

The first PR for DIT. See Issue #88 for more details.
I think, at least, we can now use DIT for forward modelling.
Before going to the reverse modelling, I'd like to merge this branch to the develop.
updated source files

src/spec/dit.py : main module for DIT
src/plot/ditplot : for plotting
src/spec/rttransfer.py just updated about nugrid.

ipynb
There are several ipynb for test.

Hybrid Cross Section using lpf and dit.ipynb (this computes the cross section)
Forward modeling using the Hybrid Cross Section.ipynb (forward modelling using CO)
Forward modeling using the Hybrid Cross Section for methane.ipynb  (forward modelling using CH4)

notes
Currently, DIT uses the linear nu grid (ESLIN,  evenly spaced in linear scale) because we use FFT. So, for the hybrid model, we also use ESLIN even for LPF (direct computation of voigt using lpf.py). To apply the response, we need to convert it to ESLOG ( evenly spaced in log scale). jnp.interp is used for that purpose.
memory issue and plan
Using my laptop (~7GB CUDA memory), I could run the hybrid model for Nline =10,000. I've not tested it using A100 though. Probably, the memory issue remains for some cases. Also, I have not checked the auto-diff yet. But, I'd like to postpone them to the next branches.

Thanks!


Use HTTP/2 for CONNECT inbounds

Problem Description
I noticed that my Edge browser is sending CONNECT requests to mitmproxy via HTTP 1.1. There is a new TCP connection for each such request.
Proposal
Wonder whether it is possible for CONNECT requests to be based on HTTP/2. This way, client like browser only maintains a single connection to mitmproxy that bears all CONNECT requests. This should be more efficient. Or is this something to be done on client side instead of mitmproxy?
Alternatives
N/A
Additional context
N/A

We don't support HTTP/2 proxy mode yet. I've started preliminary work two years ago here, but haven't gotten around to work on this since then.

Marking this as a release blocker as I want to check why HTTP/3 doesn't suffer from the same issues.

The HTTP version used between client and proxy should be orthogonal to the version used between proxy and remote site, right? Something I find weird is that the former seems to follow the latter. I'm really curious about why is this under the hood. I'm new to computer networking stuff. Sorry if the question is dumb.

With mitmproxy it's relatively complicated because we talk 1) the HTTP proxy protocol (HTTP CONNECT) with the client (here we only support HTTP/1), but then we also intercept the inner connection (here we support both HTTP/1 and HTTP/2).


Immutable.fromJS bug with no classes objects with custom constructor property

As said in #1050, the Immutable.fromJS current implementation to plain objects conversion, does not work as expected with objects with a custom constructor property. In reality the implementation just returns the same object passed as argument.
I fixed it changing the test for plains objects. Now it tests if the prototype of the object it's the same of Object.prototype (if the object has a different prototype it means that it is a class instance). Also, I added some tests cases for the solved problem.
I din't tested the performance impact, it will be more slow than the current implementation for sure.

JSPerf points that the new implementation is about 45% slower compared to the current implementation
Https://jsperf.com/plain-object-predicate

Thanks for investigating this. Ideally we could find a more performant implementation. ~1/2 as fast is a very high cost for this edge case

Even that the new implementation is slower than the current one, it is quite fast (in practical terms the difference is just some milliseconds).
The performance test is floating between browsers, but the most modern implementations are really optimized.
JSPerf test: https://jsperf.com/plain-object-check

Couldn't you check value.constructor === Object || value.constructor === undefined first and return early, falling back to checking the prototype only if it returns false? Then you would avoid the additional performance cost for most cases.

@simonkberg yes however there are many cases where isPlainObject() is handling the uncommon case and it will be very common for non-plain-objects to fall through and hit the slow path.
@augusto-moura milliseconds matter in aggregate! This function is one called very frequently, so I don't think a 25x slowdown will be acceptable. We need to find another approach with a less punishing performance cost.

@leebyron , it looks like you fixed it by this commit recently:
https://github.com/facebook/immutable-js/commit/2bff0cf0c13e6ec9f2bbfe2c48aec3740d4f552e
So, now there is no need for this PR

I don't think that rev will fix this particular issue. Objects with custom or other-realm prototypes still are not converted

I tested adding a condition for only when the object has a own constructor pass by the proptotype check, so the slow path will only hit when necessary, still 10x slower than the current implementation. Imho, in terms of performance, the "constructor is equal to" it's unbeatable.
JSPerf: https://jsperf.com/plain-object-check/6 (for some reason jsperf messed up with the order of test cases)


web:  Flutter2.0.6   flutter run -d chrome

A fallback font was registered but we cannot retrieve the typeface for it.
A fallback font was registered but we cannot retrieve the typeface for it.
A fallback font was registered but we cannot retrieve the typeface for it.
A fallback font was registered but we cannot retrieve the typeface for it.
A fallback font was registered but we cannot retrieve the typeface for it.
A fallback font was registered but we cannot retrieve the typeface for it.
A fallback font was registered but we cannot retrieve the typeface for it.
A fallback font was registered but we cannot retrieve the typeface for it.
A fallback font was registered but we cannot retrieve the typeface for it.
A fallback font was registered but we cannot retrieve the typeface for it.
Failed to load font Roboto at https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Me5WZLCzYlKw.ttf
正常情况：

@ylrs
Can you provide flutter doctor -v, pubspec.yaml and complete minimal reproducible code sample that shows this issue ?
Thanks.

Without additional information, we are unfortunately not sure how to resolve this issue.
We are therefore reluctantly going to close this bug for now.
Please don't hesitate to comment on the bug if you have any more information for us; we will reopen it right away!
Thanks for your contribution.
Could everyone who still has this problem please file a new issue with the exact description of what happens, logs, and the output of flutter doctor -v.
All system setups can be slightly different, so it's always better to open new issues and reference related issues.


Application closing at startup (3.0.0, x64) under Win7 x64

Hello.
There's a bug. Inasmuch as this app has some really odd PE name:
Google%20Play%20Music%20Desktop%20Player.exe
There's no way to work with this properly under user profile (after loading a library, app suddenly minimizes to tray and the exits). Under admin it's fine (maybe cause of quotation of app path, thus %20, which is space symbol in percent encoding, might bring some pain on a system like Windows). Btw, the workaround is pretty simple: just rename a copy of PE without %20 symbol, like gpmdp.exe.
Hope this helps.

I'm sorry but that doesn't make much sense.  You shouldn't be launching that app.  You should be launching "Update.exe" with the correct parameters.  It should be making you desktop shortcuts and start menu shortcuts.  Use those

This is how it looks:
%LOCALAPPDATA%\GPMDP_3\Update.exe --processStart Google%20Play%20Music%20Desktop%20Player.exe
And it closes just fine, as I explained it. Even with quotation of PE. Small names works correctly. I could record a video, it you like.

Please do, because I really don't understand what you mean :+1:

Here it is. Sorry, I was kinda nervous: https://youtu.be/x-U85HNjcNE

OK, thanks for the video that was really clear and now I know what the issue is.
It is almost certainly to do with the language of your system being set to Russian.  Quite possibly due to how "%" signs are handled.  I'm going to pass this issue on to electron-packager as I believe it is an issue that they should be fixing.  (The %20 symbols are ridiculous, I would never put them there

Good to know. Thanks! Nice program, btw.

Electron bug so closing (forgot to do this)


Implement Command in libtock_unittest::fake::Kernel.

This Command implementation will be used by the unit tests for libtock_platform::Syscalls::command(). This implementation includes support for expected system calls, but not fake drivers. I will add fake driver support in the future.

bors r+

Explanation of the build failure:
This PR removed ExpectedSyscall's implementation of PartialEq. That implementation was used by the tests added in #307. When I removed PartialEq, I incorrectly thought I had added it to support #308, so I tested that this PR worked when merged with #308. This caused me to miss the incompatibility with #307.
I don't think ExpectedSyscall should implement PartialEq. ExpectedSyscalls shouldn't be compared directly outside the one test case, and the semantics are a bit funny. In particular, it is unclear whether we should compare CommandReturns by register value (in which case two Success responses could compare different) or by semantic meaning (in which case two CommandReturns with different register values would compare equal).
Therefore, to resolve the conflict, I changed the expected syscall queue test to use std::matches! to compare the returned ExpectedSyscall values.

bors r+


Typescript as supported language for schema output

Our team uses Grafana Cloud as our main monitoring platform and is looking to scale by investing in IaC. While Grafonnet(jsonnet) is the official IaC library, I was wondering whether the team would consider supporting Typescript?
Reasons for why Typescript support can help:

Most of the developers developing in our code base's expertise is in front-end. Typescript support will make it easier for developers to provision dashboards via code.
I have found a couple open API schema to TS converters (openapi-typescript  etc.) so it potentially is self-service to generate the TS types. However maintaining the TS types would be the issue as re-generating is required with any schema update in Grafana.

Hey!
Generating Typescript output is something we're indeed interested in :)
It won't be done using grok though, as we decided to abandon this experiment.
Instead of grok, we're using cog to generate both types and builder libraries in a range of languages, including Typescript. You can find a preview of these generated outputs in grafana-foundation-sdk

This is awesome news! Upon a quick scan the new sdk has everything we need, I will definitely try them out.


[SU-75] Limit width of data tab sidebar

This limits the width of the data tab's sidebar based on the browser's window width. This ensures that part of the main content and the sidebar's drag handle are always visible. It also fulfills UX's request for the sidebar width to be limited to 1200px.
Before
https://user-images.githubusercontent.com/1156625/161556097-e5e66616-e7d0-470e-a781-77c05a7c23da.mov
After
https://user-images.githubusercontent.com/1156625/161556115-dd087d8c-69ec-408b-8fbb-1e32876d8aaa.mov

Removed the ref that was used to cache window.innerWidth. I couldn't tell much of a difference between performance profiles with and without it. In either case, most of the time was used by scripting, not rendering.


Fix up issues with doc strings and doc string generator tool

This adds a few missing strings to follow_me.h and improves the rendering handling of the docs generator script.

Coverage remained the same at 16.972% when pulling fd32d0a85bbbee38bd2b4dc366bcf84c5fcf8e3c on hamishwillee:docs_fixes into 353e4fd04406df2acfbe4273657bbc774e300e84 on dronecore:develop.

Coverage remained the same at 16.972% when pulling 6c7fe7af7e6993de6ab04af23ae4a6447a6382a2 on hamishwillee:docs_fixes into 353e4fd04406df2acfbe4273657bbc774e300e84 on dronecore:develop.

@hamishwillee, Thanks for the doc-related changes in follow_me.h


Dynamic composition

-----Dynamic composition using view model only
It looks like there is no way to compose a viewmodel that implements getViewStrategy() and initialized from a different viewmodel. This was possible in DurandalJs 2.1.0 using knockout container less binding like below:
<div data-bind="foreach: sections">
     <!-- ko compose: $data--><!--/ko -->
</div> <!-- $data is an instance of viewmodel that implements getView() -->

Below is the Aurelia code that I'm trying to make work:
//myfirstwidget.js
export class FirstWidget {
	constructor(heading){
		this.heading = heading; //'yay';
	}
	getViewStrategy(){
    	   return './myfirstwidget.html';
  	}
}

//welcome.js
import {FirstWidget} from './widgets/firstWidget/myfirstwidget';
@useView('./welcomePage.html')
export class Welcome {
  constructor(){
     this.widget = new FirstWidget('this is my heading');
     console.log(this.widget.heading);
  }
}

//welcomePage.html
<template>
      <compose view-model="widget" containerless></compose>
</template>

You need view-model.bind="widget"


How to specify id and alterid in plugin_opts?

My VPS provider requires id and alterid. But I can't find any instruction to specify them in plugin_opts.

id and alterid are part of vmess protocol.
Given v2ray-plugin works as a SIP003 plugin of shadowsocks for transport obfuscating only, you don't need to specify any of them in the plugin_opts.

I misunderstood the target scenario of this plugin. This plugin is used to enable v2ray transport between shadowsocks client and server. It can't be used to connect to a v2ray server with v2ray plugin enabled shadowsocks client.


Replace the default example with auction ?

This change is

I think we shouldn't be replacing the default tutorial, especially since tutorial part2 builds on top of it.
Maybe this can be another tutorial part instead?

Reviewed 1 of 23 files at r1.
Review status: 1 of 23 files reviewed at latest revision, all discussions resolved.

agent-auction/generator.json, line 3 at r1 (raw file):

{
  "name": "agent-auction",
  "version": "0.1.0",

This is probably 0.3.0 right?
Overall I think this example should be redone from scratch with an agent generated with the most recent strat version as many things have changed

Comments from Reviewable

This has been stalled for too long. I'm closing the PR.

Review status: 1 of 23 files reviewed at latest revision, 1 unresolved discussion.

Comments from Reviewable


Fixing bug with TestableResponseFactory (#64)

Fixes https://github.com/elastic/elastic-transport-net/issues/64

Adding required fields for ApiCallDetails to be considered "successfull"
Adding TestableResponseFactory unit tests
Updating README with an example of using TestableResponseFactory

Thanks for submitting this PR, @obtuse-whoosh. Appreciate the contribution.


Do not emit agentRemove event

Socket will get removed from the agent anyway after destroy() - see this README section.

SGTM


KAFKA-6131: Use atomic putIfAbsent to create txn marker queues

The PR has been tested with PR #4122

I made a pass over the PR. LGTM. Will merge after @ijuma 's comments are addressed.

@guozhangwang It's OK to merge this as it is and @rajinisivaram can do a follow up for my nits. Assuming this is all that is blocking the next RC.

@hachikuji @ijuma @guozhangwang Thank you for the reviews. Have addressed the comments.

Merging to trunk and 1.0. Will also try 0.11.0 if it merges cleanly.

Btw, Scala 2.12 has the right behaviour:
  override def getOrElseUpdate(key: A, op: =>B): B = get(key) match {
    case Some(v) => v
    case None =>
      val v = op
      putIfAbsent(key, v) match {
        case Some(nv) => nv
        case None => v
      }
  }

https://github.com/scala/scala/blob/2.12.x/src/library/scala/collection/concurrent/Map.scala#L90
But not Scala 2.11:
https://github.com/scala/scala/blob/2.11.x/src/library/scala/collection/concurrent/Map.scala#L90

But not Scala 2.11:
https://github.com/scala/scala/blob/2.11.x/src/library/scala/collection/concurrent/Map.scala#L90

I think you mean this?
https://github.com/scala/scala/blob/2.11.x/src/library/scala/collection/mutable/MapLike.scala

@guozhangwang I just meant that there was no override for Scala 2.11 while there is for Scala 2.12.
Btw, I submitted a follow-up with a clean-up:
https://github.com/apache/kafka/pull/4142

@guozhangwang I just meant that there was no override for Scala 2.11 while there is for Scala 2.12.
Btw, I submitted a follow-up with a clean-up:

Great


Where's the Byte data type?

In the documentation it says that the eta equivalent for byte is Byte. I can't find the Byte type anywhere, should it be Word8 in the documentation?

It doesn't exist just yet, I need to implement some primops to make it work. Will make this the issue to track that.


Added a glfwGetVulkanResultString

This adds a public glfwGetVulkanResultString function, improves the already existing internal _glfwGetVulkanResultString function by adding all official error code descriptions and updating the internal VkResult enum to the Vulkan 1.3 definition
The internal function is just exposed by this patch, but preserved to not break the internal API.

Thank you for this PR but I will not merge this. As I see it utility function like this should not be in a library a slow-moving as GLFW currently is and would be better as a stand-alone library, possibly in header-only form. That way it could be useful to people that create their windows in other ways as well. GLFW takes care of (most? some?) platform-specific aspects of using Vulkan but platform-independent things like this do not need to be tied to it.


[opentitantool] Add support for 'emulator' commands

Introduction of new command 'emulator' to opentitantool.
Now all backends supporting 'EMULATOR' capability can be controlled using emulator sub-commands.
Short description of 'emulator' sub commands:
'state' - Return current state of Emulator in human readable form.
'stop' - Stop Emulator sub-process
'start' - Start Emulator sub-process with provided arguments.
Example:
$ opentitantool --interface=ti50Emulator state

$ opentitantool --interface=ti50Emulator start \
    --apps-list=test_app --flash-list=/data/bank1.img,/data/bank2.img ...

$ opentitantool --interface=ti50Emulator stop

Part of the issues: #10217
Signed-off-by: Michał Mazurek<EMAIL_ADDRESS>

@cfrantz
Chris, would you like to comment on this PR ?
For my part, I am not going to add anything else here. Can we merge it?


JSON_REAL_PRECISION not working with 2.10 and macOS

JSON_REAL_PRECISION is ignored on macOS and v2.10 or v2.11 (haven't tried any earlier ones).
json_pack_ex(&error,JSON_REAL_PRECISION(1),"{s:f, s:s?, s:s?, s:i,s:s}","value",dValue,"units",units,"format",format,"expiry",expiry,"timestamp",ts)
When given 22.4 for dValue gives the output of:
{"expiry":60,"format":"%.1f","timestamp":"2018-03-17T11:43:22","units":null,"value":22.399999618530273}
I notice this was discussed in issue #219 and the problem identified by another user but the ticket was closed and clearly not resolved. This is a major issue.

OK so very, very red face - this is because I passed the flag to the wrong call. Obviously json_pack_ex creates the internal rep. The flag needs to go to json_dumps.


Breaking changes in<EMAIL_ADDRESS>

Firstly, thanks for this fantastic template. However, there are some breaking changes to the structure of the @shopify/cli-kit package introduced in it's 3.40.0 (minor?) version which are preventing the app from starting for npm users (since you only have a pnpm-lock.yml in the template).
error - Failed to load next.config.mjs, see more info here https://nextjs.org/docs/messages/next-config-error
Error [ERR_MODULE_NOT_FOUND]: Cannot find module<EMAIL_ADDRESS>imported from /Users/REDACTED/shopify-node-app-starter/next.config.mjs
    at new NodeError (node:internal/errors:387:5)
    at finalizeResolution (node:internal/modules/esm/resolve:330:11)
    at moduleResolve (node:internal/modules/esm/resolve:907:10)
    at defaultResolve (node:internal/modules/esm/resolve:1115:11)
    at nextResolve (node:internal/modules/esm/loader:163:28)
    at ESMLoader.resolve (node:internal/modules/esm/loader:841:30)
    at ESMLoader.getModuleJob (node:internal/modules/esm/loader:424:18)
    at ModuleWrap.<anonymous> (node:internal/modules/esm/module_job:76:40)
    at link (node:internal/modules/esm/module_job:75:36) {
  code: 'ERR_MODULE_NOT_FOUND'

My workaround was simply to specify the 3.13.0 version locally, but hopefully this issue will help others in a similar situation.

likewise, appreciate all your work !

Use "@shopify/cli-kit": "3.13.1",  just you need to remove ^ from cli-kit and Run npm i


[BUG]:In the home tab, the navbar is not properly padded.

Description
In the home tab, the navbar is not properly padded.
Its UI can be improved.
Steps to Reproduce
1)Go to the main section.
2)Click on the home tab navbar.
3)You can see the error in the navbar.
Expected Behavior
The padding should be set properly to enhance user experience.
Actual Behavior
No response
Screenshots

Additional Information
Please assign this issue to me and add level, gssoc-ext, hacktober fest labels.
What browser are you seeing the problem on?

[ ] Firefox
[ ] Chrome
[X] Safari
[ ] Microsoft Edge

Checklist

[X] I have checked the existing issues
[X] I have read the Contributing Guidelines
[X] I want to work on this issue. (optional)

this issue was assigned before, and he is working on it, you can check in issues section.
So i am closing this issue.
Please understand.


Codec buffer limit error during reconstruction

Hi @edyoshikun @talonchandler @ziw-liu ,
I'm running into the error below on using recorder CLI to reconstruct my zebrafish datasets.

(recordernew) [deepika.sundarraman@gpu-sm01-13 fish_1]$ recOrder reconstruct -i ./label_free_initial.zarr/0/0/0 -c /hpc/projects/balla_group/imaging/zebrafish_infection/falcon/20231117_caax_mpeg_gfp_coro1a_mcherry_9dpf/fish_1/birefringence-and-phase.yml -o ./reconstruction.zarr
Generating transfer functions and storing in transfer_function_birefringence-and-phase.zarr

Generating birefringence transfer function with settings:
swing: 0.1

Generating phase transfer function with settings:
wavelength_illumination: 0.532
yx_pixel_size: 0.209
z_pixel_size: 2.0
z_padding: 0
index_of_refraction_media: 1.3
numerical_aperture_detection: 0.75
numerical_aperture_illumination: 0.2
invert_phase_contrast: false

/home/deepika.sundarraman/.conda/envs/recordernew/lib/python3.9/site-packages/waveorder/optics.py:321: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).
  * torch.tensor(z_position_list)[:, None, None]
/home/deepika.sundarraman/.conda/envs/recordernew/lib/python3.9/site-packages/waveorder/optics.py:370: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).
  * torch.tensor(z_position_list)[:, None, None]
Traceback (most recent call last):
  File "/home/deepika.sundarraman/.conda/envs/recordernew/bin/recOrder", line 8, in <module>
    sys.exit(cli())
  File "/home/deepika.sundarraman/.conda/envs/recordernew/lib/python3.9/site-packages/click/core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
  File "/home/deepika.sundarraman/.conda/envs/recordernew/lib/python3.9/site-packages/click/core.py", line 1078, in main
    rv = self.invoke(ctx)
  File "/home/deepika.sundarraman/.conda/envs/recordernew/lib/python3.9/site-packages/click/core.py", line 1688, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/home/deepika.sundarraman/.conda/envs/recordernew/lib/python3.9/site-packages/click/core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/home/deepika.sundarraman/.conda/envs/recordernew/lib/python3.9/site-packages/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
  File "/home/deepika.sundarraman/Documents/Githubs/recOrder/recOrder/cli/reconstruct.py", line 48, in reconstruct
    compute_transfer_function_cli(
  File "/home/deepika.sundarraman/Documents/Githubs/recOrder/recOrder/cli/compute_transfer_function.py", line 184, in compute_transfer_function_cli
    generate_and_save_phase_transfer_function(
  File "/home/deepika.sundarraman/Documents/Githubs/recOrder/recOrder/cli/compute_transfer_function.py", line 101, in generate_and_save_phase_transfer_function
    dataset[
  File "/home/deepika.sundarraman/.conda/envs/recordernew/lib/python3.9/site-packages/iohub/ngff.py", line 617, in __setitem__
    self.create_image(key, value)
  File "/home/deepika.sundarraman/.conda/envs/recordernew/lib/python3.9/site-packages/iohub/ngff.py", line 666, in create_image
    self._group.array(
  File "/home/deepika.sundarraman/.local/lib/python3.9/site-packages/zarr/hierarchy.py", line 1187, in array
    return self._write_op(self._array_nosync, name, data, **kwargs)
  File "/home/deepika.sundarraman/.local/lib/python3.9/site-packages/zarr/hierarchy.py", line 895, in _write_op
    return f(*args, **kwargs)
  File "/home/deepika.sundarraman/.local/lib/python3.9/site-packages/zarr/hierarchy.py", line 1193, in _array_nosync
    return array(data, store=self._store, path=path, chunk_store=self._chunk_store,
  File "/home/deepika.sundarraman/.local/lib/python3.9/site-packages/zarr/creation.py", line 397, in array
    z[...] = data
  File "/home/deepika.sundarraman/.local/lib/python3.9/site-packages/zarr/core.py", line 1388, in __setitem__
    self.set_basic_selection(pure_selection, value, fields=fields)
  File "/home/deepika.sundarraman/.local/lib/python3.9/site-packages/zarr/core.py", line 1483, in set_basic_selection
    return self._set_basic_selection_nd(selection, value, fields=fields)
  File "/home/deepika.sundarraman/.local/lib/python3.9/site-packages/zarr/core.py", line 1787, in _set_basic_selection_nd
    self._set_selection(indexer, value, fields=fields)
  File "/home/deepika.sundarraman/.local/lib/python3.9/site-packages/zarr/core.py", line 1839, in _set_selection
    self._chunk_setitem(chunk_coords, chunk_selection, chunk_value, fields=fields)
  File "/home/deepika.sundarraman/.local/lib/python3.9/site-packages/zarr/core.py", line 2106, in _chunk_setitem
    self._chunk_setitem_nosync(chunk_coords, chunk_selection, value,
  File "/home/deepika.sundarraman/.local/lib/python3.9/site-packages/zarr/core.py", line 2117, in _chunk_setitem_nosync
    self.chunk_store[ckey] = self._encode_chunk(cdata)
  File "/home/deepika.sundarraman/.local/lib/python3.9/site-packages/zarr/core.py", line 2244, in _encode_chunk
    cdata = self._compressor.encode(chunk)
  File "numcodecs/blosc.pyx", line 559, in numcodecs.blosc.Blosc.encode
  File "/home/deepika.sundarraman/.local/lib/python3.9/site-packages/numcodecs/compat.py", line 155, in ensure_contiguous_ndarray
    ensure_contiguous_ndarray_like(
  File "/home/deepika.sundarraman/.local/lib/python3.9/site-packages/numcodecs/compat.py", line 121, in ensure_contiguous_ndarray_like
    raise ValueError(msg)
ValueError: Codec does not support buffers of ><PHONE_NUMBER> bytes

The parameters I'm using, if relevant are:

Operating system: HPC
Python version: 3.9.18
Python environment (command line, IDE, Jupyter notebook, etc): command line

Thanks @dsundarraman.
@edyoshikun you said that you think this might be related to a fix that you made to the mantis repo. Was it this PR? https://github.com/czbiohub-sf/mantis/pull/97
@edyoshikun could I request your help with unifying the create_empty_zarr functions between recOrder and mantis?


Parity compatibility

@jorisbontje:

https://github.com/ethcore/parity-makerotc-rs

[x] Parity client triggers isSynching frequently. https://github.com/ethcore/parity/issues/1110
[x] Parity client keeps syncing. https://github.com/ethcore/parity/issues/1179
[ ] Add parity instructions to documentation and network status UI

(ported from  Parity compatibility #120 )

Is this still an issue?
Nowadays I use Metamask with a parity node behind and runs correctly.


Support PrimaryLanguageOverride from unpackaged apps

when calling the following code from an unpackaged app, it throws an error. This is needed to be able to use x:Uid localization in XAML and control the language it picks.
App::App()
{
    ...
    Windows::Globalization::ApplicationLanguages::PrimaryLanguageOverride(...)
    ...
}

Hi @shelllet, this API isn't intended to work from an unpackaged context.

Additionally, we've started a list of APIs like this that don't work from unpackaged apps that we need to either (1) document better with warnings so you know before you try using it, or (2) add new WinAppSDK APIs that work for unpackaged apps: #1702

So what Api should I call to set the defualt language?

@axelandrejs how should unpackaged apps set their default language for resolving resources and XAML localization?

MRTCore determines the default language using Windows::Globalization::ApplicationLanguages::Languages (https://github.com/microsoft/WindowsAppSDK/blob/main/dev/MRTCore/mrt/Microsoft.Windows.ApplicationModel.Resources/src/ResourceContext.cpp#L106-L113)

@huichen123 yes, and how should unpackaged apps change the default language for their app? As shelllet asked, in a packaged app, developers can call ApplicationLanguages::PrimaryLanguageOverride('en-us') to override the default language, but that API doesn't work for unpackaged apps. How should unpackaged apps override the default language when using MRT Core?
Many apps (including my own) allow the user to pick their own language independent from the OS language.

Before PrimaryLanguageOverride is fixed, you may have to pass in a ResourceContext, and set its Language qualifier value to the desired value.

Before PrimaryLanguageOverride is fixed, you may have to pass in a ResourceContext, and set its Language qualifier value to the desired value.

Will these unpackaged API be fixed before GA version? This breaks x:Uid localization and seems to have no workaround.

sorry, it will not be fixed for GA.

Re-opening this, as it's something we should implement at least someday so that unpackaged apps can use XAML x:Uid localization and control the language the app uses.
Tagging it as a bug too, this definitely is somewhere between bug and "feature", but since the overall scenario of localizing your unpackaged app with control over the language doesn't work, I'll add the bug tag.

Hi @andrewleader
any news?
can we expect this feature/bugfix in WASDK 1.1/preview/experimental?

@huichen123 is the owner of this feature/bug and maybe can speak toward whether this would be in 1.1.
And FYI Mahdi, I moved to a different project in Microsoft, the right person to contact with general WinAppSDK questions would be marb2000. Thanks!

@huichen123  Hi! Any news on this? Convenient globalization is an indispensable feature for unpackaged apps to use WinAppSDK. 😋

Windows.Globalization.ApplicationLanguages was designed for packaged app. Instead of inventing local settings for unpackaged app, it might be easier WinUI can take ResourceManager/ResourceContext from app. @evelynwu-msft ?

Agreed with this. Language is not the only interesting setting here. EG, what about scale or theme? The way to set these is via the context, so that context should be exposed.

Hello, is there any update on when will this be implemented? Currently, there is no easy way to localize the strings in XAML for an unpackaged app, which is very frustrating😞

As a workaround, I have a NuGet package that also works with unpackaged apps. It's uses the general Resources.resw strings, so you should be able to switch back when the WinUI team comes with a solution 😎

I am hitting this issue when attempting to support language changes from an unpackaged XAML islands (non-WinUI 3) app. The API works as expected when the app is packaged. What should I do? I don't think system XAML uses MRTCore.

Is anyone working on this?

any news?
@evelynwu-msft
we are in 1.4-preview1 and we cant change app language!

good news
https://github.com/microsoft/WindowsAppSDK/pull/4181

Doesn't solve my problem :(

I am hitting this issue when attempting to support language changes from an unpackaged XAML islands (non-WinUI 3) app. The API works as expected when the app is packaged. What should I do? I don't think system XAML uses MRTCore.

@sylveon Can you provide a sample app? Thanks.

Any app using system XAML islands will fail when trying to use Windows::Globalization::ApplicationLanguages::PrimaryLanguageOverride without being packaged. WASDK cannot solve this without a complete migration to WinUI 3, which is non-trivial.

@duncanmacmichael i tested with v1.6-exp2 and now we can use
Microsoft.Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = "fa-IR";
and everything is working fine, and i think this issue can be closed

Thanks, @ghost1372!
Closing as fixed in 1.6.240701003-experimental2 via microsoft/WindowsAppSDK#4523.

I'm using 1.6.240701003-experimental2 in my unpackaged app and it still doesn't work.
It causes a COMException with message 'No such interface supported'

@TheVoidSeeker
You can see the localization in action in this video.

I'm using 1.6.240701003-experimental2 in my unpackaged app and it still doesn't work.
It causes a COMException with message 'No such interface supported'

Show your codes, because i am using in unpackaged without issues

After repairing my Visual Studio installation and cleaning all intermediate and output files, it now works without code changes.
Not sure what was happening there.
I did Clean & Rebuild of the project several times yesterday, but still always got the mentioned error.
I'm very glad that it finally works, as this is a very important use case for our customers.
Thanks a lot for your work!


Update active-directory-accessmanagement-groups-settings-cmdlets.md

Typo in the script

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

@RobdeJong : Thanks for your contribution to the Azure documentation! The author, @curtand, has been notified to review your proposed change.

#sign-off


docs(readme): add badges

Adds dependencies and dev-dependencies badges similarly to Angular CLI's README.

I kind of feel like this is badge overload to the point where it's just adding too much noise to the page. Happy to hear a counter argument, though.

I hear ya. I don't feel particularly strong about them. It can get a bit cluttered if you add too many.


(Suggestion) maybe can add an virtual touch keyboard under the touchbar without iPad huge display screen being wasted.

Closed as duplicate of #7


B2 Storage Connector needs accountId changed to keyId and b2_list_bucket request fixed.

Due to changes made by B2 Cloud storage you cannot use your accountId for the b2_authorize_account request.  In it's place you must use the keyId generated when you generate your authorization key.  However, when you use the b2_list_buckets request, you must still use the accountId or you get an "accountId invalid" error.

Alternatively since b2_authorize_account returns the accountId you could store it and use it for the b2_list_buckets request.

@clgillis thanks. Are you interested in contributing a fix?

Looking at the code it doesn't look like that hard of a fix(famous last words).  If I can get it working again I'll submit a patch.

@mpl  I have implemented a fix and have starting syncing about 5gb of data up to B2 Cloud as a test.  Code changes can be found at https://github.com/clgillis/b2

@clgillis thanks. But if/when you want us to review it, please send it as a gerrit CL, as per the contributing instruction: https://perkeep.org/code#contributing

Roger that.  I put in a PR to the original vendor.  Might be easier to have them submit.  We'll see.

@mpl  - If I were to submit for code review do you prefer that I submit my own fork for the b2 change or just modify the current vendor's code?  We are talking six lines of diff for the fix.  Please advise.

@clgillis ah, I hadn't understood at first that the fix was for the B2 lib rather than for our B2 blobserver implementation.
Modifying the vendored copy is out of the question, especially since we're moving to using Go modules, which don't even need the vendor dir. So if it came to that, yes you should fork. But I'm pretty confident @FiloSottile will eventually address your PR, so you won't have to do that. If it takes too long, I'll see if @bradfitz or I can help with reviewing it.

@mpl - Ok that was the answer I expected but just wanted to make sure.  As I mentioned before the PR has been submitted to @FiloSottile B2.  Thanks again for the help.

Just as an update.  It has been over a year and @FiloSottile has not looked at the PR or fixed the login issue for his B2 library.  So far my fix is still working.


REST modules sendPOST doesn't have any way to set body

Simple curl to test login
curl 'http://pi.docker/security/login' --data<EMAIL_ADDRESS>--data 'password=20password18'
Currently this is impossible to do from the REST module because you can only set "$params" from the  send functions. As far as I can tell those $params are just GET params too which append to the url. So I'm unable to do something like the below to mimic curl:
$this->sendPOST(
    '/security/login',
    ['email' =><EMAIL_ADDRESS>'password' => '20password18']
);

Are you sure?
It should be working correctly.
Which framework module or PhpBrowser do you use?

Sorry you're absolutely correct, it was caused by a typo in the email addresses, intellignt vs intelligent.
For some reason using ?XDEBUG_SESSION_START doesn't work through codeception so I was struggling to debug the reason.


Update UAssetAPI and fixes for new version

Created project and solution files to allow building UAssetSnippet from source
Added UAssetAPI submodule
Added .gitignore
Updated python files for new UAssetAPI and UAssetSnippet versions

Made imports in System.py explicit, so that we have an immediate warning/error if a module or part of it is missing

Still needs to be tested with a full run


[$500] [Bug] Keyboard being open/closed changes position of ToS - reported by @gadhiyamanan

If you haven’t already, check out our contributing guidelines for onboarding and email<EMAIL_ADDRESS>to request to join our Slack channel!

Action Performed (part 1):

Open login page on a fresh install OR after clearing app data
Tap on phone/email input

Expected Result (part 1):

The login input should be fully in view, and the login page should not be scrollable.
The By logging in, you agree to... text should be visible.

Actual result (part 1):

The page becomes scrollable, and you can scroll the login input out of view or nearly out of view
The By logging in, you agree to... text is not visible, unless you scroll down.

Action Performed (part 2):
Enter some input into the login form.
Expected Result (part 2):
Nothing else about the UI should change except for the next character showing up in the form input.
Actual result (part 2):

The page is still scrollable, but you can no longer scroll the text input out of view
The By logging in, you agree to... text becomes visible.

Workaround:
None
Platform:

Where is this issue occurring?

Android

Version Number:  1.2.4-0
Reproducible in staging?: need repro
Reproducible in production?: need repro
Email or phone of affected tester (no customers):
Logs: https://stackoverflow.com/c/expensify/questions/4856
Notes/Photos/Videos: Any additional supporting documentation
https://user-images.githubusercontent.com/43995119/192204242-cf8f89c3-f782-4620-920f-1a87872f2842.mp4
https://user-images.githubusercontent.com/43995119/192204246-13e4dec9-0802-455c-936e-749e466288c9.mp4
Expensify/Expensify Issue URL:
Issue reported by: @gadhiyamanan
Slack conversation: https://expensify.slack.com/archives/C01GTK53T8Q/p1661843853973199
View all open jobs on GitHub

I'm on iOS, so I'm unable to reproduce. That said, can you clarify exactly what you mean by "instruction goes up?" I'm not following what the issue is here. Thank you!

@JmillsExpensify here instruction means By logging in, you agree to the... , when you click on the phone field there is a large gap between the continue button and the instruction. after typing any word, space will remove
it's reproduced on android

Ok thanks. Still unable to reproduce since I don't have an android device. That said, I have a suspicion that this is yet another symptom of our keyboard implementation. @roryabraham do you mind confirming if you think my hunch is right? If so, I'll update the issue title, put this issue on hold, and add it to the main tracker.

Okay, I was able to reproduce this, going to update the OP to add some additional details then I agree we should add it to the keyboard tracking issue (cc @tgolen)

Thanks @roryabraham! I'll handle adding to the keyboard tracking issue.

Added clarification and consistent reproduction steps, removed the Needs Reproduction label.

Also for transparency I was testing with a physical Pixel 4a

Thanks @roryabraham.

Still on hold.

Still on hold.

Still on hold for the related keyboard initiative.

This is no longer on hold and can have proposals created for it with the new code.

Alright cool. Given how many issues we have related to the keyboard, I'm going to start this issue at $500.

Upwork job is here: https://www.upwork.com/jobs/~0164d0286c2126643f. All proposals welcome!

Upwork job is here: https://www.upwork.com/jobs/~0164d0286c2126643f. All proposals welcome!

I just checked this job description on Upwork carefully and it seems like we should change the layout of that page.

Upwork job is here: https://www.upwork.com/jobs/~0164d0286c2126643f. All proposals welcome!

I have read the issue, I think we need to add keyboardDidShow event for android, When the event is emitted we will set the height of the layout based on the keyboard opened or closed.

Make sure you're following our guidelines for posting proposals. Neither of those post qualify as a proposal that we can evaluate and approve.

Proposal: KeyboardAvoidingView does not work for all android keyboards, and interacts differently with iOS and Android. Since behavior is only wrong on Android, I would set the behavior specifically for Android.
Also, looking at your  android/app/src/main/AndroidManifest.xml, option android:windowSoftInputMode is set to
adjustResize, meaning whenever the keyboard is opened, components are resized to fit everything on the screen. That behavior can be a bit flaky, and setting adjustNothing and implementing custom behavior could be more beneficial in the long run.

@ivanmiklec If you haven’t already, check out contributing guidelines.
Please check out Expected Results in issue description.

whenever the keyboard is opened, components are resized to fit everything on the screen.

We are using this feature in many screens.

implementing custom behavior could be more beneficial in the long run.

What are the changes you are proposing?
I believe there should be a simple solution to this issue.

Still waiting for proposals.

Waiting for proposals

We've hit the 7 day mark since the last price increase, so I'm going to increase the Upwork job to $1,000. We're still looking for a solid proposal!

Waiting for proposal.

@gadhiyamanan can you please check this issue one more time from the latest main branch? for me, this issue happening in the play store build but not in the latest main branch

Unfortunately don't have a way to test Android at the moment, so I'll have to rely on someone else jumping in to help confirm if this is still reproducible.

Was able to reproduce.
https://user-images.githubusercontent.com/25876548/201616289-71883ebd-894c-4b76-918d-fdd11b7f3840.mov

Thanks @sobitneupane! Question how did you feel about the testing steps split up the way they currently are, essentially the two expected/actual results? Was that clear for you?

Then separately, it's been a week, so time to update the price of this issue. Now we're at $2,000. Upwork job is here: https://www.upwork.com/jobs/~0164d0286c2126643f.

Question how did you feel about the testing steps split up the way they currently are, essentially the two expected/actual results? Was that clear for you?

Yes. it was clear.
But reproduction steps for "Action Performed (part 1):" was quite different for me. I reproduced it with following testing steps:
Action Performed (part 1):

Open login page on a fresh install OR after clearing app data
Enter email/phone number. > Continue
Close the keyboard and press on Go back to go to login page

Ok, cool. Thanks for confirming! I will update part 1 to make sure it's in sync with the steps/results of our latest test.

Still waiting on proposals. Ideally we have Margelo or an internal engineer take this over since we're still struggling to get proposals.

Gonna look into this one

Help wanted label should be removed and not waiting for external proposal?

is this still reproducible?

I'm going to put this on a temporary HOLD because I made some refactorings in https://github.com/Expensify/App/pull/12848 which will change any proposals in this issue. Once my PR is merged, then the new code can be re-evaluated. I believe the issue still remains in Android due to differences in how the screen height changes in regards to the keyboard being opened (Android changes the size of the page, iOS just moves the contents out of view).
I personally think either behavior is fine though and we don't need it to be 100% the same in both iOS and Android, as long as the user can access the link for TOS, and the entire login form is in view, then I think that's all that matters.

@s77rt here's it still happening on iOS Chrome, the ToS text and the Expensify logo should move upwards to avoid the keyboard and stay in view:
Staging
https://user-images.githubusercontent.com/31285285/203090559-f5c060a1-fc81-4cce-8a5b-0f5c266e2e65.MP4
Prod
https://user-images.githubusercontent.com/31285285/203090511-504ab4c6-75ad-4bc5-9413-5bb603fc25a7.MP4

@tgolen Thanks for letting me know! I actually have a branch locally that fixes the issue which is why I removed the Help Wanted label. The diff for my branch is similar to what you have for https://github.com/Expensify/App/pull/12848 😆 so they would totally conflict and I agree we should HOLD
I just checked out your branch and this issue seems to still be reproducible there, so this issue should definitely remain open.

@tgolen Thanks for letting me know! I actually have a branch locally that fixes the issue which is why I removed the Help Wanted label. The diff for my branch touches the same files as https://github.com/Expensify/App/pull/12848 😆 so they would totally conflict and I agree we should HOLD
I just checked out your branch and this issue seems to still be reproducible there, so this issue should definitely remain open.

Still waiting on the linked PR.

Still waiting for the linked PR to be merged.

The linked PR is looking to be merged this week 🤞

Looks like that linked PR is in the final stages of review.

Linked PR should hopefully be merged today.

For ease of access @JmillsExpensify is referring to https://github.com/Expensify/App/pull/12848 above!
Looks like it was just merged 🚀 excited to get working on this

I've removed the HOLD on this and I'm unassigning myself since it sounds like Jasper is excited to do this 👍

Woo! Thanks for driving this forward.

Finally done with the testing on https://github.com/Expensify/App/issues/12573, taking a look into this one now

Quick update on this one, thanks for your patience, was dealing with emulator issues last week. Just wanted to give a current state of the union:

 Android - This issue seems to have been fixed in Tim's PR
https://user-images.githubusercontent.com/31285285/206932009-460df5ae-8642-44e5-8167-27dcd5771be7.mov
https://user-images.githubusercontent.com/31285285/206932016-27b62716-f628-46ef-b860-057729cb4692.mov

iOS - KAV is broken
https://user-images.githubusercontent.com/31285285/206932042-26b677cf-3b09-464d-8f0c-0e24fbf14bbf.mov
https://user-images.githubusercontent.com/31285285/206932045-21522b6c-f073-4a5f-b3c3-50f5b6d5f7ce.mov

Mobile Safari - KAV is broken
https://user-images.githubusercontent.com/31285285/206932114-476668ac-3dc9-4e39-9f53-29bec36c7f1f.mov
https://user-images.githubusercontent.com/31285285/206932117-b3401cd8-10ea-4d10-a913-f6b850f5b136.mov

Mobile Chrome - Interestingly, it appears to work on the login form, but not the password form
https://user-images.githubusercontent.com/31285285/206932196-a47f0f5c-79bc-48ac-9629-1a958bda5f42.mov
https://user-images.githubusercontent.com/31285285/206932189-1ea13dd0-d035-4326-b8b0-00611378ba7f.mov

I'm realizing now that the withKeyboardState HOC doesn't actually work on Mobile Safari. When I log props.isShown (which is passed down to children from withKeyboardState), it's always false, regardless of whether the keyboard is open or not.
I'm considering using this state variable to create some spacing underneath the ToS, similar to what Tim did in his PR.

Reaching out for some help on this one since I've exhausted all my possible ideas. Thread here!

@jasperhuangg I think it's a good sense that you picked up on the problem with props.isShown for mobile web. I recently discussed this over in another issue, you can see my main comment here, but you might need to read some of the context around it.
There was a fix for mobileWeb in the initial proposal for that issue:

checking (prevProps.windowHeight < this.props.windowHeight) in componendDidUpdate in BaseOptionsSelector.js

I felt like it was a hack to leave it there and suggested moving that fix into withKeyboardState so that withKeyboardState would have better support for mobileWeb. The contributor did not want to do that, and so we agreed to just not implement the "hack" in BaseOptionsSelector.js for that issue.
I still think that adding mobileWeb support into withKeyboardState is the best solution, so maybe you can explore that more? I think we need to do a little bit more research on it, but the idea is to use screen size detection on mobileWeb to try and guess when the software keyboard might be active. So, something like this:

If the screen matches isSmallScreenWidth which comes from withWindowDimensions
then listen for screen resize event
if the height goes from taller to shorter, then assume the keyboard just opened
if the height goes from shorter to taller, then assume the keyboard just closed

To test out my theory, I went to SigninPageContent.js and placed this log at the top of the render method:
console.log('!!!', props.isShown, props.windowHeight);

What I found is that on iOS, when the keyboard is shown/dismissed, the props.isShown works, but the problem is that the window height does not ever change. So, that's not going to work.

I also attempted to use the reanimated hook that was originally the thought behind the proposal in https://github.com/Expensify/App/issues/10273 but I also found it does not work for mobile safari.
So, basically, my conclusion is that for mobile safari, we just can't really provide good keyboard support and the best fallback is letting the view be scrollable, and let inputs be blurrable, so someone can still get to the content.
I also found that with iOS native, adding a KAV to the SigninPageContent.js in the right spot does help slightly. You can see in this screenshot how the terms are starting to be visible. Sorry for the colors. It really helps to identify which components are stretching and flexing properly. It's interesting that even with a KAV, the height of the window still isn't adjusting properly for iOS.

@tgolen Thanks for taking the time to help out here. Just updated the OP like you asked.

I also found that with iOS native, adding a KAV to the SigninPageContent.js in the right spot does help slightly. You can see in this screenshot how the terms are starting to be visible.

Wow interesting, when you say "right spot" what do you mean? It looks like the margin above the Terms and Licenses matches the height of the cutoff portion below. And no worries about the colors haha, my simulator is literally a rainbow when working on these types of issues too 😆

What I found is that on iOS, when the keyboard is shown/dismissed, the props.isShown works, but the problem is that the window height does not ever change. So, that's not going to work.

You mentioned updating withKeyboardState to work for iOS mobile using the window dimensions approach. I just tried the same litmus test you used, and it appears that the window height also doesn't change on Mobile Safari. That makes sense, considering how the entire view is still scrollable.

So, basically, my conclusion is that for mobile safari, we just can't really provide good keyboard support and the best fallback is letting the view be scrollable, and let inputs be blurrable, so someone can still get to the content.

Gotcha, so to clarify, for now the main focus should be trying to get it to work on iOS native and on the password page on Mobile Chrome?
Since this issue is so platform specific, my question is this: ideally, we'd want an over-arching solution that can work for all platforms, but at this point, would it be wrong to consider splitting the login/password forms into different components for each platform?

You can see here where I've added it. If you don't put it in the right spot in the view hierarchy, then you get a bunch of funky layout issues (like everything smooshed into 50 pixels at the top of the page, or the page not spanning the full vertical height).

ideally, we'd want an over-arching solution that can work for all platforms, but at this point, would it be wrong to consider splitting the login/password forms into different components for each platform?

I appreciate the thought, but I think that would be one of the worst solutions 😬 so I would want to avoid that at all costs.
I also find that isShown isn't working for mobile Chrome too (eg. it's always false), which doesn't surprise me a whole lot.
I think all that we should focus on right now are:

Getting the terms to display above the keyboard for both iOS and Android native on both login and password forms

I've updated my PR to achieve this, but some of the styles need cleaned up. I accomplish it by adding some margin to the bottom of the terms container when the keyboard is open. However, this has several drawbacks:

It makes the animation a little janky because the margin isn't added until the keyboard animation ends
Android doesn't show the extra margin as nicely as iOS does and leaves extra space below the terms (this could be fixed by only applying the 60px of margin to iOS)

iOS - shows the janky animation
https://user-images.githubusercontent.com/1228807/207158611-2251df1e-b7bf-43ea-a0de-9314bd001d97.mp4

Android - shows the extra margin at the bottom
https://user-images.githubusercontent.com/1228807/207158834-4904b217-2949-41c2-ad24-51b8c743710f.mp4

I appreciate the thought, but I think that would be one of the worst solutions 😬 so I would want to avoid that at all costs.

hehe yup, my brain went there, but it just felt soooo wrong 😆

I also find that isShown isn't working for mobile Chrome too (eg. it's always false), which doesn't surprise me a whole lot.

Yup, the withKeyboardState HOC doesn't work at all with any of the mobile web platforms, because React Native's Keyboard library it uses only works on native platforms :/

I've updated my PR to achieve this, but some of the styles need cleaned up. I accomplish it by adding some margin to the bottom of the terms container when the keyboard is open. However, this has several drawbacks:

Gotcha, thanks for clarifying. Sorry I haven't had the chance to dive into your PR, but my next steps are clear. I'll help you look into those styling issues today. Thanks for those screen recordings!

To clarify, Tim opened a PR earlier that included fixes for this issue on iOS Native. So on Tim's PR, the TermsAndLicenses component successfully avoids the keyboard on the following platforms:

iOS Native ✅
Android Native ✅
Mobile Chrome (login form ✅, working towards a fix for the password form)

We were unable to figure out a fix for Mobile Safari, and we have agreed to leave it for now. As long as the view is still scrollable and people can blur the text input, then the usability of the page is not really diminished.

For Mobile Chrome (on Android), the TermsAndLicenses component does actually shift up to avoid the keyboard. It turns out that there's just too many items occupying space on the screen for it to be shifted up enough for it to remain in view.
When I mean "too many items", compare these screenshots of the password form on the same Android emulator on both Android Native (right) and Mobile Chrome (left):

Notice how Mobile Chrome includes a nav bar and a password bar, all which occupy just enough height for the TermsAndLicenses component to get cut off by the keyboard.
We could conditionally reduce the margins/padding of everything on the screen to get it to fit, but since you can still scroll down to see the TermsAndLicenses, I think we should just do nothing here like we are for iOS Safari.

Totally agree! I definitely think we should keep the changes from your PR since we'll probably need them later on anyways when we add the footer. Thanks for keeping everyone on the same page and your help on this issue!

I'm checking off most of those as NA since this has been an issue ever since the page was built

Great thank you! I'll circle back on the regression test/payment once I return on Tuesday.

Alright, circling back on this issue for the payment. It's due tomorrow, so let's make sure all is in order before then. @sobitneupane I've just invited you to the Upwork job. Mind accepting?

@gadhiyamanan You're also eligible for the reporting bonus. Please apply to the Upwork job.

Thanks offer sent!
Also I closed the loop on the regression test, so I'm crossing that off above in the BZ checklist.

Summarizing how payments will shape out.

External issue reporter: @gadhiyamanan $250
Contributor+ (internal PR review): $1,000

Just realized that I didn't get around to paying this out before the Christmas holiday in the US, so I've just circled back and paid out both Contributors per the payments above. We already have a keyboard regression test is play, so I'm closing out this issue.


[INFRA] add auto labeller config and workflow

closes #1443

tested by:

merging this branch in my master
creating a dummy PR with the typical title from pre-commit CI [pre-commit.ci] pre-commit autoupdate

https://github.com/Remi-Gau/bids-specification/pull/15

Thanks @Remi-Gau