ERC-20 token transfer example

./scripts/test.sh

🚀 Deployed contract on ZetaChain: 0xC976c932092ECcD8f328FfD85066C0c05ED54044
🚀 Deployed contract on EVM chain: 0x618fB9dbd2BD6eb968B4c1af36af6CB0b45310Ec
🚀 Deployed contract on BNB chain: 0xa779C1D17bC5230c07afdC51376CAC1cb3Dd5314

📮 User Address: 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266

🔗 Setting counterparty contracts...

🖼  Balance
---------------------------------------------
🟢 ZetaChain: 0
🔵 EVM Chain: 0
🟡 BNB Chain: 0
---------------------------------------------

Minted tokens: 0xC976c932092ECcD8f328FfD85066C0c05ED54044 on ZetaChain.

🖼  Balance
---------------------------------------------
🟢 ZetaChain: 10
🔵 EVM Chain: 0
🟡 BNB Chain: 0
---------------------------------------------

Transferring token: ZetaChain → Ethereum...
{"contractAddress":"0xC976c932092ECcD8f328FfD85066C0c05ED54044","transferTransactionHash":"0x7eeb932d45ea1ac283273a0dd8c45efe978a4f403df48baed72ec2c0bb64da80","sender":"0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266"}

🖼  Balance
---------------------------------------------
🟢 ZetaChain: 0
🔵 EVM Chain: 10
🟡 BNB Chain: 0
---------------------------------------------

Transferring token: Ethereum → BNB...
{"contractAddress":"0x618fB9dbd2BD6eb968B4c1af36af6CB0b45310Ec","transferTransactionHash":"0x5565a923a576bbb0a422e596c0cb10d7b9f9d0b558a0dc7455315fd1d89aac15","sender":"0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266"}

🖼  Balance
---------------------------------------------
🟢 ZetaChain: 0
🔵 EVM Chain: 0
🟡 BNB Chain: 10
---------------------------------------------

Transferring token: BNB → ZetaChain...
{"contractAddress":"0xa779C1D17bC5230c07afdC51376CAC1cb3Dd5314","transferTransactionHash":"0x64f92cbffb2a52153a4624be6734160f5c0ab362ae4a47a295b345bfc27f7326","sender":"0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266"}

🖼  Balance
---------------------------------------------
🟢 ZetaChain: 10
🔵 EVM Chain: 0
🟡 BNB Chain: 0
---------------------------------------------

Depends on https://github.com/zeta-chain/localnet/pull/52

Summary by CodeRabbit
Release Notes

New Features

Introduced cross-chain token transfer functionality with two new contracts: Connected and Universal.
Added tasks for deploying contracts, minting NFTs, and transferring tokens across chains.
New README.md section detailing compatibility with localnet version v4.0.0-rc*.

Configuration Changes

New configuration files added: .gitignore, .eslintignore, foundry.toml, hardhat.config.ts, tsconfig.json, and LICENSE.
Updated package.json to include scripts for testing and linting.

Documentation

Enhanced documentation in README.md to include new features and usage instructions.

In this PR I've also modified the NFT example (events and parameter order) to make the two tutorials more consistent.


[$1000] There is a delay of 1-2 seconds when a new workspace is created in the Android app.

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:

Open the "Settings" of the app.
Tap on "Workspaces".
Select "New workspace".
Notice the app almost freezes when the "New workspace" button is pressed for couple of seconds.

Expected Result
There should not be any delay, and the app should function smoothly like web.
Actual Result
The app freezes or experiences a delay of 1-2 seconds when the "New workspace" button is pressed.
Workaround:
unknown
Platforms:

Which of our officially supported platforms is this issue occurring on?

[x] Android / native Offline and Online
[x] Android / Chrome Offline and Online
[x] iOS / native Offline and Online
[x] iOS / Safari Offline and Online
[x] MacOS / Chrome / Safari Offline and Online
[x] MacOS / Desktop Offline and Online

Version Number: 1.2.94-0
Reproducible in staging?: y
Reproducible in production?: y
If this was caught during regression testing, add the test name, ID and link from TestRail:
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/43996225/229895085-7d308e86-cfac-4fd2-add0-75177d0c238f.mp4
https://user-images.githubusercontent.com/43996225/229895377-88435974-047b-4a15-a0e0-60efb547e4d8.mp4
Expensify/Expensify Issue URL:
Issue reported by: @usmantariq96
Slack conversation: https://expensify.slack.com/archives/C049HHMV9SM/p1680610152510499
View all open jobs on GitHub
Upwork Automation - Do Not Edit

Upwork Job URL: https://www.upwork.com/jobs/~0174b5420e1b80f716
Upwork Job ID:<PHONE_NUMBER>341436928
Last Price Increase: 2023-05-22

Bug0 Triage Checklist (Main S/O)

[ ] This "bug" occurs on a supported platform (ensure Platforms in OP are ✅)
[ ] This bug is not a duplicate report (check E/App issues and #expensify-bugs)

If it is, comment with a link to the original report, close the issue and add any novel details to the original issue instead

[ ] This bug is reproducible using the reproduction steps in the OP. S/O

If the reproduction steps are clear and you're unable to reproduce the bug, check with the reporter and QA first, then close the issue.
If the reproduction steps aren't clear and you determine the correct steps, please update the OP.

[ ] This issue is filled out as thoroughly and clearly as possible

Pay special attention to the title, results, platforms where the bug occurs, and if the bug happens on staging/production.

[ ] I have reviewed and subscribed to the linked Slack conversation to ensure Slack/Github stay in sync

@usmantariq96 I tested this on a pixel 6 pro, and my delay isn't as slow as in your video. I agree there is a 0.5 second delay, and not as quick as web, but I wonder if hardware matters here?

assigning @Christinadobrzyn to watch over this while I am OOO!

I am not sure, tested it on Realme 3.

📣 @usmantariq96! 📣
Hey, it seems we don’t have your contributor details yet! You'll only have to do this once, and this is how we'll hire you on Upwork.
Please follow these steps:

Get the email address used to login to your Expensify account. If you don't already have an Expensify account, create one here. If you have multiple accounts (e.g. one for testing), please use your main account email.
Get the link to your Upwork profile. It's necessary because we only pay via Upwork. You can access it by logging in, and then clicking on your name. It'll look like this. If you don't already have an account, sign up for one here.
Copy the format below and paste it in a comment on this issue. Replace the placeholder text with your actual details.

Format:
Contributor details
Your Expensify account email: <REPLACE EMAIL HERE>
Upwork Profile Link: <REPLACE LINK HERE>

I can replicate this in all our platforms some of the platforms have less of a delay than others (from what I can generally tell). I wonder if this is an expected behaviour. Asking the team here - 291788

Puneet mentioned this might be part of a bigger API command update. Not sure if this should be closed in favour of a different GH
cc @iwiznia @flodnv

@NicMendonca, @Christinadobrzyn Uh oh! This issue is overdue by 2 days. Don't forget to update your issues!

Based on this convo - https://expensify.slack.com/archives/C049HHMV9SM/p1681225595834389?thread_ts=1680610152.510499&cid=C049HHMV9SM
Testing this offline has the same delayed behaviour when creating a workspace. So going to add the external label for some help on this.

Unable to auto-create job on Upwork. The BZ team member should create it manually for this issue. cc @thienlnam

Current assignees @NicMendonca and @Christinadobrzyn are eligible for the External assigner, not assigning anyone new.

Triggered auto assignment to @marcochavezf (External), see https://stackoverflow.com/c/expensify/questions/7972 for more details.

Job added to Upwork: https://www.upwork.com/jobs/~0174b5420e1b80f716

Current assignees @NicMendonca and @Christinadobrzyn are eligible for the External assigner, not assigning anyone new.

Current assignee @thesahindia is eligible for the External assigner, not assigning anyone new.

Current assignee @marcochavezf is eligible for the External assigner, not assigning anyone new.

Hi, I'm Olimpia from Callstack - expert contributor group - I'll be happy to work on this issue.

📣 @OlimpiaZurek You have been assigned to this job by @mountiny!
Please apply to this job in Upwork and leave a comment on the Github issue letting us know when we can expect a PR to be ready for review 🧑💻
Keep in mind: Code of Conduct | Contributing 📖

Update: I started investigating this issue today. I did some performance profiling and found some possible improvements to speed things up. I will continue tomorrow.

@marcochavezf, @OlimpiaZurek, @NicMendonca, @Christinadobrzyn, @thesahindia Whoops! This issue is 2 days overdue. Let's get this updated quick!

Update: I'm still investigating this issue and working on a proposal

@marcochavezf @OlimpiaZurek @NicMendonca @Christinadobrzyn @thesahindia this issue was created 2 weeks ago. Are we close to approving a proposal? If not, what's blocking us from getting this issue assigned? Don't hesitate to create a thread in #expensify-open-source to align faster in real time. Thanks!

Update: I'm finalizing the proposal . I will post it on Monday as tomorrow we are having Upskilling Day, which means my Team and I will not be working on the project.

@marcochavezf, @OlimpiaZurek, @NicMendonca, @thesahindia Whoops! This issue is 2 days overdue. Let's get this updated quick!

Thanks @OlimpiaZurek 👌

Proposal
Please re-state the problem that we are trying to solve in this issue.
The app freezes for a few seconds after pressing the "New Workspace" button.
What is the root cause of that problem?
When a new workspace is being created, the Policy.createWorkspace() function is invoked, leading to the execution of two functions: SidebarUtils.getOrderedReportIDs() and SidebarUtils.getOptionData(). These functions are essential for rendering the options within the <OptionRowLHN /> component, which is utilized by the <SidebarLinks /> component. Consequently, the <OptionRowLHN /> and <SidebarLinks /> components need to be re-rendered, which results in a slight delay when clicking on the "New workspace" button.
What changes do you think we should make in order to solve the problem?
When a user clicks the “New workspace” button in the context of a <Flatlist />, the app must perform several operations, including updating the list data, re-rendering the list view, and possibly performing additional layout calculations. These operations can be particularly taxing on older and slower devices that have limited processing power and memory.
Several performance improvements should be made to address this issue and make the click button work faster.  First of all, I would suggest replacing FlatList with FlashList. Thanks to this, the items with <OptionRowLHN /> will render faster and smoother, and we will avoid long delays during clicking “New workspaces” button.
Also to prevent unnecessary re-rendering, I would suggest adding the React.memo and React.useMemo HOCs to the components consumed by <OptionRowLHN /> and <SidebarLinks />.  By reducing the number of re-renderings, we can improve the overall performance of the sidebar screen and provide a smoother user experience.
Performance when creating new workspace without Components improvements:
As you can see in the screenshots below, using FlashList can reduce the number of re-renderings and most importantly reduce the rendering time of each element.

Performance when creating new workspace without Components improvements:

What alternative solutions did you explore? (Optional)
Additionally, I would suggest refactoring these two methods SidebarUtils.getOrderedReportIDs() and SidebarUtils.getOptionData().  There seem to be relatively large and complex functions, and they have a lot of logic. I would consider simplifying the logic by breaking the functions into smaller, more manageable functions.

I will take it!

📣 @s77rt You have been assigned to this job by @marcochavezf!
Please apply to this job in Upwork and leave a comment on the Github issue letting us know when we can expect a PR to be ready for review 🧑💻
Keep in mind: Code of Conduct | Contributing 📖

Assigning @s77rt as C+

@marcochavezf Thank you!

@OlimpiaZurek Thanks for the proposal. I will review asap!

I will be off for a few days (due to public holidays in Poland). I'll be back on Thursday and continue working on this issue.

@OlimpiaZurek Thanks for the proposal. Can you please elaborate on how SidebarUtils.getOrderedReportIDs() and SidebarUtils.getOptionData() are the offending functions?
Although your RCA makes sense in general, I'm not sure it's complete. There is indeed a lot of work going on when re-rendering components but the delay is very noticeable only on the workspace creation button. Something I found interesting and worth investigating is the behavior of react-native-onyx, onyx method to be specific. If you change the onyx method from SET to MERGE on the optimisticData you will get a faster feedback. Looks that onyx set method is blocking while onyx merge method is not. I'm not sure if any should be blocking/non-blocking, so I'm gonna ask on Slack.
Of course even if we make SET a non-blocking method, the re-rendering time would still be the same but the user may not notice the huge lag.
So I guess the plan is:

Ask whether onyx set method should be non-blocking (or if merge is non-blocking by accident)
Try to reduce the number of re-renders and/or render time

Melvin, it's not overdue, I was holding to post till Monday to get some :eyes: on the post.
Today is Monday (and 1st May), Slack looks like :desert: yet I posted :grin:.
https://expensify.slack.com/archives/C01GTK53T8Q/p1682938682704609

I believe the remaining items we need to address are:

Further explain how SidebarUtils.getOrderedReportIDs() and SidebarUtils.getOptionData() are causing issues
Examine the possibility of using MERGE instead of SET, as discussed in the Slack conversation

As for the FlashList, I remember Margelo is working on a new list called WishList, if I recall correctly. So, I'm unsure if replacing FlashList right now would be the best long-term strategy.
Is there a way to resolve this issue without replacing the FlashList?

When a user clicks the “New workspace” button in the context of a , the app must perform several operations, including updating the list data, re-rendering the list view, and possibly performing additional layout calculations.

@marcochavezf @s77rt @OlimpiaZurek @NicMendonca this issue is now 4 weeks old and preventing us from maintaining WAQ, can you:

Decide whether any proposals currently meet our guidelines and can be approved as-is today
If no proposals meet that standard, please take this issue internal and treat it as one of your highest priorities
If you have any questions, don't hesitate to start a discussion in #expensify-open-source

Thanks!

@marcochavezf @s77rt @OlimpiaZurek @NicMendonca this issue is now 4 weeks old and preventing us from maintaining WAQ. This should now be your highest priority. Please post below what your plan is to get a PR in review ASAP. Thanks!

@marcochavezf Please reapply External label.

Current assignee @NicMendonca is eligible for the External assigner, not assigning anyone new.

Current assignee @marcochavezf is eligible for the External assigner, not assigning anyone new.

At first glance, these functions seem to do a significant amount of work, including multiple calls to other functions and libraries, iterations, and conditional logic.  In addition, these functions seem to do most of the text processing, including concatenation, translation, and formatting. If the input is very large and the functions are called frequently, this can cause significant slowdowns.
Since functions are called frequently, you might want to consider memoizing the results to avoid redundant calculations. Finally, it is possible that some of the lodash functions used in this function can be replaced with native JavaScript equivalents to improve performance.
I considered refactoring these two functions as optional and complementary to my main suggestion which is to reduce the number of re-renders and reduce the render time. Replacing FlatList with FlashList or  change SET to MERGE method seem to be enough to resolve this issue .

I replaced SET with onyx's MERGED method and indeed the feedback is faster and the latency is not noticeable. But there is one thing to consider. After changing this method, I noticed one thing that can cause regression. After adding a new workspace and going to the workspace screen, we see the Page not found screen for a few seconds because the policy is an empty object before the data arrives.

https://user-images.githubusercontent.com/19835085/236212169-73caf919-ff21-4168-87fa-90e28369959e.mov
We could fix this by adding a loading indicator while waiting for data. This would be a better solution from the user experience point of view than saying that the page was not found.

In my opinion there is no other good way to reduce number of re-renders and reduce the render time without replacing the FlatList with Flashlist.
We could solve this issue by replacing SET with the MERGE method, but as I mentioned this causes a small problem described in point 2.

@OlimpiaZurek Can we go with the MERGE solution? How can we know if the workspace is loading or does not exist?

We can use the MERGE solution, but as I mentioned before, this will cause a regression problem (see the recording from my previous comment) and the page not found will be displayed for a few seconds. The reason for this is that workspaces (policy) is empty object before the data arrives. At the moment we are checking if the policy object is empty (whether the workspace exists)  and based on that the FullPageNotFoundView wrapper component is displayed:
https://github.com/Expensify/App/blob/7e957aff8962152b4dc7a2f7ae87403f06ab7bc7/src/pages/workspace/WorkspaceInitialPage.js#L135
This was different with the SET method, which is blocking and the component starts rendering when data arrives, unlike the MERGE method, which is non-blocking.
We can fix this by replacing FullPageNotFoundView with a loading indicator when creating a new workspace. Can you confirm if we want to use this solution? If so, I will prepare a PR.

@OlimpiaZurek Yes, I think we want to use MERGE here (cc @marcochavezf can you confirm the same). However my question is how can we tell if an empty policy object mean that the policy indeed does not exist or if t's being created?

Oh interesting, @OlimpiaZurek could you point out where the empty object is set? According to our offline philosophy this should be in theory an Optimistic Without Feedback action and we should create the policy object upfront and revert it if the server request failed for some reason or just merge the values that came from the server.

Not overdue. Still discussing proposal.

@marcochavezf The empty object is set inside withPolicy HOC . This is the default value for the policy: https://github.com/Expensify/App/blob/ab9171f953603bb8e4e061f5582a4b7cab3d4a43/src/pages/workspace/withPolicy.js#L65 For some reason when MERGE is used there is some "delay" in the withPolicy component and an empty object is set first and then the policy property is updated based on the policyID coming from the route. When using SET, the policy object is populated immediately.
@s77rt  I was thinking of adding and passing an extra prop when creating new workspaces to distinguish whether a policy does not exist or is being created.

@OlimpiaZurek I'm not sure we want to do it that way, feels kinda a workaround, but not totally opposed to the idea. Can you please elaborate on how we can achieve that? After making the API call we simply navigate to the workspace page (no props to pass). Or are you suggesting to add a url parameter?

@OlimpiaZurek I'm not sure we want to do it that way, feels kinda a workaround, but not totally opposed to the idea. Can you please elaborate on how we can achieve that? After making the API call we simply navigate to the workspace page (no props to pass). Or are you suggesting to add a url parameter?

I was thinking of adding a url parameter. I'm still investigating it and trying to find a better solution.

@OlimpiaZurek Thank you! Looking forward for your updates :rocket:

Daily update: I think I found a solution and am testing it now. If all goes well, I'll post a new proposal tomorrow.

Proposal
Please re-state the problem that we are trying to solve in this issue.
The app freezes for a few seconds after pressing the "New Workspace" button.
What is the root cause of that problem?
The root cause of that problem is the use of the SET method on the optmisticData used in the Policy.createWorkspace() function.  As pointed out in this comment: https://github.com/Expensify/App/issues/16935#issuecomment-1528311867 onyx set method is blocking while onyx merge method is not, which is expected behavior (slack thread: https://expensify.slack.com/archives/C01GTK53T8Q/p1682938682704609).
What changes do you think we should make in order to solve the problem?
To solve this problem, we should replace the SET method with the MERGE method. This will make the feedback faster and the app won't freeze when you press the "New Workspace" button.
Since the merge method is non-blocking and the app is able to handle other tasks, when we press the "New Workspace" button, we make an API call and also go to the new workspace screen. Then when rendering the withPolicy HOC , the policy object is empty for a few seconds because after making the API call we have to wait before the state is updated with the merged values.
As the <WorkspaceInitialPage /> component contains logic that displays <FullPageNotFoundView>  when thepolicy object is empty, replacing MERGE with SET may result in regression:
https://github.com/Expensify/App/assets/19835085/12d11de2-1f2e-4e5f-8d71-829f0dd04f01
We could solve this by adding a loading state that would betrue when creating a new workspace, and then we could display <FullPageNotFoundView />  not only when the policy object is empty, but also when the isLoading property is false.
We can achieve this by adding new commands the the API:

add setWorkspaceLoading  method to set isLoading state to true right away after API call:

function setWorkspaceLoading(isLoading) {
    Onyx.merge(ONYXKEYS.IS_LOADING_WORSKPACE_DATA, isLoading);
}

And then inside component:
  onPress() {
        // Show loader right away, as optimisticData might be set only later in case multiple calls are in the queue
        Policy.setWorkspaceLoading(true);
        Policy.createWorkspace();
    }

add openWorkspace method to useEffect inside  'withPolicy" HOC to set isLoading state to false

function openWorkspaceView() {
    const onyxData = {
        successData: [
            {
                onyxMethod: CONST.ONYX.METHOD.MERGE,
                key: ONYXKEYS.IS_LOADING_WORSKPACE_DATA,
                value: false,
            },
        ],
        failureData: [
            {
                onyxMethod: CONST.ONYX.METHOD.MERGE,
                key: ONYXKEYS.IS_LOADING_WORSKPACE_DATA,
                value: false,
            },
        ],
    };

    API.read('OpenWorkspaceView', {}, onyxData);
}

This prevents the Page Not Found screen from appearing when creating a new workspace.
I would also suggest displaying a loading indicator to provide visual feedback that a request is being processed or content is being loaded. Because this short delay before updating the state with merged values may not be visible on faster devices, it may be visible on older and slower devices.

@OlimpiaZurek Thanks for the update. Although the solution may work I feel it's over-engineered. Can we keep only one call createWorkspace and move the loading value to be inside the policy object and not in another onyx key.
Please note that the design must be offline first. The isLoading indicator should only be used to wait for the optimistic data to merge and not for the API server response.

@OlimpiaZurek I understand. I think we can use SET to set the isLoading for policy object. But then we will be mixing SET and MERGE which is not ideal either.
I don't think we have reached a good solution yet. Do you think we can fix this in another way?

I will try to find another solution to fix it. Thanks.

@OlimpiaZurek I think it's accepted as we will be waiting for the optimistic data (and not the API response).
If you think we can fix that and keep using SET method then that's okay as well. This approach would require active optimisation i.e. make components re-render faster.

I’ve been trying to find an alternative solution to display the loading indicator while using MERGE. But so far I haven't found any reasonable one.
Maybe is worth considering optimizing  SET method inside react-native-onyx ?  It doesn't seem to be performant (especially on mobile devices) and causes some issues.  Having SET method more efficient, optimization such as make component re-render faster and a new list component (either FlashList or a new one that is being prepared) could bring satisfying results.

@OlimpiaZurek I'm okay going either way. I have also noticed that we have some places where we actually use SET to avoid the problem that we are facing with MERGE i.e. to have the workspace ready after clicking the button and not show the not found page.
@marcochavezf Do we have any plans for migration to FlashList/WishList ?

Not overdue. @marcochavezf ^

Maybe is worth considering optimizing SET method inside react-native-onyx ? It doesn't seem to be performant (especially on mobile devices) and causes some issues. Having SET method more efficient, optimization such as make component re-render faster and a new list component (either FlashList or a new one that is being prepared) could bring satisfying results.

That makes sense to me as well. Since we've exhausted the options of using MERGE, I think it's a greate idea to explore ways to optimize the SET function in react-native-onyx.

Do we have any plans for migration to FlashList/WishList ?

Yes, this is the tracking issue for the WishList project and integration.

@marcochavezf

I think it's a great idea to explore ways to optimize the SET function in react-native-onyx.

That would be great as well. But I think what @OlimpiaZurek meant is to optimise the components that get rendered after SET takes effect (and not SET method itself).

Both approaches are :+1:

Going OOO until June 5th so assigning a buddy to this GH to watch over the issue. I'll pick it back up when I am back from OOO if this is still open.

I was actually thinking of combining two approaches: optimizing the components and exploring possible improvements to the SET method in react-native-onyx.
Nevertheless, since the new list component is in development and the list is a key element when it comes to improving performance, maybe we should consider putting this issue on hold until the Wishlist is ready?
In the meantime, we could raise the issue inside react-native-onyx and see if there are any ideas to make  the SET method more performant.

@OlimpiaZurek Thanks for the quick follow up. I think holding for WishList makes sense here but it's not clear how much would that actually help. @marcochavezf What do you think? Should we hold this and re-evaluate the performance later?

@marcochavezf ^

In the meantime, we could raise the issue inside react-native-onyx and see if there are any ideas to make the SET method more performant.

That makes sense, but since this GH is related to making the app more formant when creating a workspace, let's re-use it for the SET analysis.

Not overdue. Waiting for an update from @OlimpiaZurek regarding the optimisation of Onyx's SET method.

Hi I'm Piotr from Callstack - expert contributor group - will start investigation in this area

It's best practice to only have one contributor assigned to an issue, that way there's no confusion regarding payment.
@OlimpiaZurek are you still wanting to be assigned this?  Or are you fine with @Piotrfj  taking it over?

Hey @mallenexpensify - sorry for the confusion, @OlimpiaZurek had to go to another Callstack project :( so please assign this issue to @Piotrfj

Assigned the job to @Piotrfj and removed @OlimpiaZurek

I believe @Piotrfj is working on a PR?

Hmm I don't think so. We didn't align on a solution yet. Hopefully we will get done with this soon.

Ah thanks for the insights @s77rt - feel free to add an update here when we have one!

Hi @Piotrfj, I'm guessing you're getting up to speed with the discussion on this issue. If you've got any questions or doubts, let us know :) The short version is that we'd want to analyze the Onyx function SET since it adds some overhead when a workspace is created on Android.

Update: lately I've been working on some other issue, so there is no real progress on this one

Do you think we can move this to a weekly label @marcochavezf?

@TomaszFrackowiak and @Piotrfj , this issue has been open for two months and we've already reassigned it due to lack of progress.  Will Callstack be able to prioritize this issue to get it fixed promptly?  Thanks

@mallenexpensify Started working on this issue after the other one, I'm currently investigating the source of it.

Update: Today I was working on some other issue, so no progress on that one

Thanks for the daily updates @Piotrfj

@Piotrfj Any updates here?

@Piotrfj Thanks for the proposal. Can you elaborate on how you will achieve the two proposed solutions. We looked for a similar approach but didn't land on a good solution yet.

@s77rt Sure, the loading indicator on the button is quite simple, it would be controlled by simple "isLoading" flag or something like that, that would be turn on when button is clicked. The second solution is kind of a hack, I manipulated the call stack by wrapping the API call with setTimeout with value 0. In my opition the first solution with loading indicator on the button is nicer. We can see that behavior in many other apps.

@Piotrfj Can you explain further how to unset the loading indicator in case of a failure.

@Piotrfj Oh I think you meant to set the loading spinner in button indefinitely? given that we will always navigate to another page afterwards (even in the case of failure). I guess that would work, this won't fix the delay though but gives the user a visual feedback. Can you confirm whether the spinner would actually spin or be frozen?

@s77rt Yes, it would not fix the delay, the delay occurs because of onyx operation, forcing the navigation would also lead to some problem (the data would not be ready). The spinner should work just fine, there are no frame drops and when I've tried to replace the text with indicator it worked just fine (no lags or frozen stuff). All I have to do now is to add the logic to show the indicator conditionally if you accept the proposal.

@Piotrfj Can you please attach a video for the results?

@s77rt Alright, going to work on that today

Here is how it could work:
https://github.com/Expensify/App/assets/41384305/3231348d-2787-408f-ab5c-7d8ced007050

@Piotrfj Thanks

@marcochavezf What do you think? should we just move with adding a user feedback not to have the app feel frozen? Or we still need to fix the delay (loading spinner still takes some time)

Oh interesting, I think the spinner in the button is a new UI pattern that's not used in other parts of the app, we should discuss it widely in the open-source channel to get opinions about it. The alternative solution sounds interesting and I think at some point we should explore why the Onyx set function is not performant, but as discussed here, we should use merge in this case because we're creating a new workspace chat.
@Piotrfj said and after reading some of the previous proposals, I think the solution would be to use merge instead of set, as stated here, but without using a loading indicator, because we're creating the workspace optimistically (with pattern B for offline creation). So, in theory, we should be able to display the workspace right after the user clicks on "New workspace" without waiting for server response, but for some reason, we're not loading the workspace instantly even with merge. Probably something is missing in the optimistic data here or maybe we're not synching correctly the new workspace chat data in the UI.

@Piotrfj Any updates here?

nudge - @Piotrfj - any updates?

Proposal
Please re-state the problem that we are trying to solve in this issue.
The problem we are trying to solve is the occurring delay between clicking the button to create a new workspace and actual workspace view.
What is the root cause of that problem?
Time expensive onyx operation that is blocking the navigation.
What changes do you think we should make in order to solve the problem?
Proposed before solution with loading indicator was rejected, so current solution is to change onyx method from set to merge, which is not blocking the navigation action. On top of that it turned out that offline and online workspace creation is different, in the offline mode we see an indicator when we are redirected to the workspace page, and in online we see for a moment page with "nothing is here" content. That can be fixed by turning on the loading flag in optimistic data.
What alternative solutions did you explore?
N/A
This is how it looks right now:
https://github.com/Expensify/App/assets/41384305/67e0ca82-6267-4af7-b5cc-0b8638f3801e

@Piotrfj Thanks for the update.

That can be fixed by turning on the loading flag in optimistic data

Can you please explain when the loader is unset? Please keep in mind that the loader should not relay on the API response.

It is being unset in the onyx successData and failureData just like in other places, works fine after testing.

@Piotrfj This is against our offline pattern

When the user is online, the feature should just look like it succeeds immediately

The user should be navigated to the workspace right away without waiting for the server response

I will take a look at this behavior at monday, I will be OOO tomorrow.

@Piotrfj is working on this

@s77rt So, I've took a look, and from what i see, the user is being navigated without waiting for the server response. Current behavior is that, the loading screen is being shown if the flag is true and the policy is empty. We theoretically could check just if the policy is empty, or unset the flag manually (outside of the response part) just after the policy is present.

@Piotrfj

Current behavior is that, the loading screen is being shown if the flag is true and the policy is empty.

Can you please add the source of that? I don't see any loading screen in <WorkspaceInitialPage />. Or were you referring to your solution here?

We theoretically could check just if the policy is empty

Yes that would be correct.

unset the flag manually (outside of the response part) just after the policy is present

Yes that would work. I'm sure we were working on such solution but didn't land anywhere
It all comes to the when? When to set the loading flag and when to unset it? (without relaying on server response - this should be managed locally since we want to wait for the data to reach our indexed db (onyx) and not the server)

@Piotrfj I think that would a cause a regression, we won't be able to differentiate between a policy that is being created and a policy that does not exist; if you try to access a policy that does not exist you will get an infinite loader.

@s77rt Oh, right, that could cause some issues, I think I will implement it with manual unset then. Is that acceptable for you?

@Piotrfj That could work but it depends on when to unset the flag.

I'm going to be ooo until July 31st so going to unassign and assign a new teammate.
At this time, we're working on a fix. I'll take this over when I'm back if it's still open.

I noticed that withPolicyAndFullscreenLoading.js was introduced in this PR, and I think that's against our offline philosophy because we create all the needed data on the client-side and we just send it to the server (in theory we don't need to wait for the response). If I understand correctly, we're showing the loading screen because we're just waiting for the local data to be inserted into Onyx, correct? @Piotrfj @s77rt

@marcochavezf withPolicyAndFullscreenLoading was introduced to cover the case where you access a page but the App is still loading and onyx data is not present. This does not wait for server response explicitly, it will only do so if we have no data in onyx. This does not break our offline philosophy. -- So far this component has not much to do with our issue here.

we're showing the loading screen because we're just waiting for the local data to be inserted into Onyx, correct?

That's what we are actually trying to do, it's not the current behaviour.

Today Im OOO, will jump back to this task tomorrow

Not overdue. Looking forward to @Piotrfj's update.

@Piotrfj Any updates here?

@Piotrfj Thanks for the update.

I would suggest to just change the SET method to MERGE and handle loading flag in onyx request/response.

What loading flag are you referring to? A new flag or isLoadingReportData. Even if we do so, won't we navigate to the page before that flag is set? (in that case we will get the not found view)

@s77rt We could make sure that the flag is set by setting it manually and let it be unset in success/failure data, however I did not encounter any issue you are suggesting (on the video the flag is handled in onyx only).

@Piotrfj Do you mean use SET for setting/unsetting the flag and MERGE for the rest? Because if we use MERGE for the flag then this will be batched and not take effect right away, so we may end up navigating to that page where the flag is not set yet and in that case we will get the not found view. - This may be a race condition though.

@s77rt either that or set it manually outside of api call. Im not sure if we should mix SET and MERGE in one operation, looks like that was the issue in this case.
However after just changing the method to SET in optimistic data it worked just as fine in terms of delays.

@Piotrfj We can't do that outside api call, can we? We still need a way to reset the flag Other than that, I think we can move ahead with the proposed solution.

@s77rt I will make a PR with whole Proposal today

@Piotrfj Thanks for the update.

The flag will be turned off on offline mode manually

Why would we need to do that?

back from ooo - thanks for handling this @sakluger - I can take it off your plate

Thanks @Christinadobrzyn! Unassigning myself.

@s77rt Thats because of offline mode, the success and failure data does not take effect and the flag stays on

@Piotrfj Ah I think this may not go with our Offline First UI. I think those loader flags are only used for Online-Only flows. Creating a workspace is not one of them. Sorry for the back and forth but I think we may need another solution.

@Piotrfj I understand that. I know this is getting lengthy and tricky. For the most part I'm okay with the solution but it's the way we clear the flag that concerns me. Can we find a way to unset the flag regardless of network status? Onyx methods (set and merge) seem to return a promise, can we make use of that? Set the flag on createWorkspace and unset it in that set promise callback.

@s77rt The flag is cleared right now regardless of the network status.
In the case that you suggested we would unset the flag before onyx data is present (tried that).
We need some way to unset the flag when the data is present. So my idea was to catch the moment when the data is present and component is ready to be displayed, so either unset the flag in the withPolicyAndFullscreenLoading hoc, or (as it is implemented right now in my PR) in the component itself as a simple useEffect.
Right now its hard for me to think of any other solution that would cover the offline case.
Let me know your opinion about that.

@Piotrfj I was in the middle of writing a Slack thread to discuss this, then I noticed that even the loader solution (as is) is not reliable. Very often I get the "Hmm... it's not here page" (I think this is especially the case with HT accounts). We do navigate to the workspace page without waiting for any Onyx operations.
https://github.com/Expensify/App/assets/16493223/21a43b78-93ab-469e-8563-0bb22f3a942b

@s77rt Oh, I did not encounter this behavior even once, weird. I will investigate a little further.

@s77rt Wrote to you on slack

@Piotrfj Any updates here?

@s77rt looking again on this issue today, just wrote u on slack

Just checking in on this - do we have an update or the slack thread to follow?

@Christinadobrzyn No. I think @Piotrfj is working on another proposal now.

Proposal
Please re-state the problem that we are trying to solve in this issue.
The problem we are trying to solve is the occurring delay between clicking the button to create a new workspace and actual workspace view.
What is the root cause of that problem?
Time expensive onyx operation and mix of MERGE/SET methods, that are blocking the navigation.
What changes do you think we should make in order to solve the problem?
Change onyx method from set to merge, which is not blocking the navigation action.
On top of that add the loading flag (it’s already handled by existing code, we just need to set and unset it in the right place and time). The flag will be turned on in createWorkspace function inside Policy.js file just before API call. Turning off the flag is not so simple, because we need to handle the offline mode, so we cannot rely on any response and onyx success/failure data.
I’ve created a context that stores current policyID, the ID will be set when new policy id is created. Flag will be turned off as soon as id of the generated policy in onyx will match our generated policyID that is stored in context. I propose this solution because we cannot rely on navigation params, because as we navigate we still get the old policy object and the old policyID in navigation params - as seen on the screenshot.

This is the state of logs after I’ve created new workspace when couple of workspaces were created just before in a row.
The flag will be turned off on offline mode manually inside WorkspaceInitialPage component through the new function inside Policy.js created just to turn off the flag.
What alternative solutions did you explore?
N/A

@Piotrfj Thanks for the update. I'm afraid the solution is looking too workaround-ish. I have created a Slack thread https://expensify.slack.com/archives/C01GTK53T8Q/p1692625881742349 to see how we can move forward. cc @marcochavezf

Thanks for posting in Slack to get some other input @s77rt. Feel free to provide update when you can. @marcochavezf not sure if you might have some other suggestions to help move this along?

No updates in Slack thread yet.

Testing this again, i think this might be resolved. There is a slight delay when creating a New Workspace on the Android app because I'm using Browserstack but I don't think this large delay exists anymore.
@s77rt or @Piotrfj would you be able to check on your side?
https://github.com/Expensify/App/assets/51066321/2ae58d40-5d92-4e8c-9d73-0b1ec1e370ae

There seems still a lag
https://github.com/Expensify/App/assets/16493223/a5d76705-443b-4429-b894-7b6898d1487b

No advancement here. I bumped the slack thread for the next moves

Sounds like @mountiny suggested this could be part of newdot-performance. So I'm wondering if we should put this on hold? @s77rt?

I am not sure if we should put it on hold or just add it to the project list. @mountiny may be the better person to answer this.

Added it to the project

I see this GH has been added to - https://github.com/orgs/Expensify/projects/71/views/1
Does that mean we can close this for now or move it to Monthly since we're tracking in the project GH? @mountiny

No we should not close this until its completed.
We will start with the project next week and hopefully get someone to profile this flow to identify better what the bottleneck is. I will make this weekly

Bumped to $2000 to get 👀  (I have another issue held on this)

Active slack convo here.

Bumped the convo to get opinions about creating the policy object value

Bumped the convo to get opinions about creating the policy object value

Proposal:
Utilize a Policy draft to initialize the initial Workspace screen.
Problem:
Currently, there are several issues when a new workspace is created:
We perform updates on Policy, Policy Members, and other components such as reportActions and reports. These updates trigger multiple Left Hand Navigation (LHN) rerenders, along with loading reports and messages due to the reportActions.
There are two navigation steps involved: first, we wait for data to be processed in Onyx, then navigate to the newly created Report, followed by another navigation to reach the new Workspace Screen.
The combination of frequent rerenders and multiple navigations results in a significant delay in loading the new workspace screen, taking nearly 2 seconds.
Solution:
To address these issues, we propose the following solutions:

Introduce two new keys, “policyDrafts” and “policyMembersDraft,” to store essential information required by the Workspace Init Screen. This information will be readily available as soon as the screen loads.
Perform all normal saving operations and initiate the request to create the workspace concurrently when the screen is loaded and using the draft.
Avoid navigating to the newly created Report, as this can cause screen jumping and disrupt the user experience and since the last created workspace is already placed at the top of the Left Hand Navigation (LHN) the user will see it, this modification will result in a smoother transition to the Workspace Init Screen, significantly reducing the load time to just 80ms.

This represents a remarkable improvement, reducing the loading time by a factor of 25x.
Original

With Drafts

Result
https://github.com/Expensify/App/assets/1676818/09ce7945-230e-4a15-a7a0-fccd99a74e75

@gedu Thanks for the proposal. As discussed in Slack. Let's get this done 🚀
🎀 👀 🎀 C+ reviewed
Link to proposal

hi @marcochavezf can you review https://github.com/Expensify/App/issues/16935#issuecomment-1753122161 when you have a moment?

The PR that introduced the bug has been identified: I think this existed for a while that there is no specific PR that caused the lag but it was due to the App getting bigger and adding more onyx subscriptions for workspaces.
The offending PR has been commented on: n/a
A discussion in #expensify-bugs has been started: i think we had few threads regarding this issue already. Nothing that we can add to the checklist here
Determine if we should create a regression test for this bug: I'm not sure if we add regression tests for performance related issues. cc @Christinadobrzyn

Asking QA about a regression test for this - https://expensify.slack.com/archives/C9YU7BX5M/p1698170976258769

Regression Test Proposal

Go to Settings > Workspaces
Press New workspace button
Verify you are redirected to the workspace page instantly (action should take no more than 1 sec)

cc @Christinadobrzyn

Thanks @s77rt! Created regression test GH
Payouts due based on old payment structure:
Issue Reporter: $250 @usmantariq96 (paying in Upwork)
Contributor: $2000 @gedu (contractor - not paid in Upwork)
Contributor+: $2000 @s77rt (paid in Upwork)
Eligible for 50% #urgency bonus? No - looks like the PR was created on Oct 11th and was merged on Oct 16th - let me know if that's not correct
@s77rt upwork job is here - payment sent
@usmantariq96 upwork job is here - can you please apply to it?

@Christinadobrzyn applied.
Thanks

@Christinadobrzyn I think urgency bonus may still apply here. @gedu was assigned on Oct 11th at 8:58pm. PR was merged on Oct 16th at 7:52pm. This is still within the 3 business days period with 14th and 15th excluded (weekend).
As for the communication in the PR, it's not something that we would keep the issue open for. It can be closed.

Ah yes, thank you for catching that @s77rt! The speed bonus is '3 business days' not just 3 days.
I added a bonus to the payment schedule (I paid you the bonus through Upwork)- https://github.com/Expensify/App/issues/16935#issuecomment-1781485433
closing this!


Add memory scheduling

A new pass is required to reduce the total memory footprint and improve the cache locality.
The static memory planner is required to get the total memory size and the map to each tensor during the compilation stage.
The pass is extensible to support different event based ticker and planner.


Assign Issue to Project and Milestone

It would be a nice feature if we could assign the new issue to a Project and Milestone by name. A good API may be if the user could specify two new inputs:
project
milestone

Good idea, @isaacanthony! 💡

+1!!
It would be great to be able to specify the column in the project too!

+1!!
It would be great to be able to specify the column in the project too!

@isaacanthony, @eekdageek: this feature is now available 🥳.
You're welcome to test on the release/v3 branch before the v3 release is available next week. See more here: https://github.com/imjohnbo/issue-bot/pull/33.

@cvsmith ☝


fix issue 2968 by adding pragma(framework)

For dmd PR: https://github.com/dlang/dmd/pull/10615

The DMD PR has been closed in favor of linkerDirectives

Just wished I had this again. linkerDirective only works on Windows. framework is a Mac feature.

linkerDirective only works on Windows

That's purely a DMD limitation. pragma({lib,linkerDirective}) work as embedded Mach-O linker directives with LDC, on Windows and Mac.

Alas, extern(Objective-C) doesn't work on ldc, so we're at a useless intersection.

I don't see how that's related - just saying that there's no object-file limitation to make the existing pragmas work with DMD for Mac too, which cover framework use cases and more.

it is related cuz the end goal here requires both, so there's no solution outside patching one or both compilers.
It isn't a difficult patch, but it is hard to realize one's IVY using D when something that was written 14 years ago never got merged cuz "just use this other thing" and said other thing is also broken.


chore: dependencies version consistency

Fixes #2028

Thanks for this work @richardgreg
I must apologize for an oversight on my part as it seems you would need elevated permissions to be able to run this workflow accurately, which is why you are getting this error
I will take over the PR from here, merging your changes into one of my branches. Thanks for all of your work!

Hi @richardgreg feel free to look through our good first issues and see if there's anything that piques your interest.


Cheaper wakeup of epoll_wait

Motivation:
At the moment for wakeup epoll_wait we need to basically do two JNI calls:

eventfd_write
eventfd_read

Modifications:

use eventfd_write with 0L so we not increase the counter
not use eventfd_read to consume as we not need to because EPOLLET will only wakeup one time anyway.

Result:
One jni call less for performing the wakeup.

@trustin please review

Please address the comments. Also, there seem to be 2 test failures. Could you please fix them first?


A developer can install new code to an existing canister

The CLI can deploy a compiled WebAssembly file to a running network and immediately run all state migrations. The default location of the WebAssembly file(s) to migrate can be added to the config.
$ dfx migrate
[100%] Deploying to local DFINITY network... Done.
[100%] Migrating canister state to latest version (23a7f1bfda0bd578fcf52c5d27c6dd8b85044804)... Done.

$ dfx migrate -w ./bin/produce-exchange_1.3.2.wasm
Err: Canister is already running latest version

Fixed in #2139.


Docker compose obsoleted a tag and changed command

docker-compose.yaml version tag has been obsoleted.
"docker-compose" command has changed to "docker compose", as it is now a part of docker and not a separate package.

GitHub doesn't seem to link pull-request #92 with this. So now you know where to look.


cleanup numerical operations

Should be defined as a single instruction

== : (U8 , U8) -> U64;

was a mess and segfaulting...


Open device settings fails on pre-Oreo devices

Describe the bug
Clicking on "Open device settings" button in settings on pre-Oreo device shows a message that this action can't be performed

Expected behaviour
Clicking on the button should open the app settings
Steps to reproduce the issue

enable tracking
click Settings -> Notifications
click on Open device settings

Technical details
pre-Oreo Android device
Possible Fix
set correct intent action
Additional context

I would like to fix this and will provide a PR soon.

Closing the issue as the corresponding PR was merged.


Fix data-library.yaml for ecology

Just some cleanup to the data-libray.yaml files for the ecology topic (found while trying to use some kind of https://github.com/usegalaxy-eu/shared-data for galaxy.genouest.org)

Thanks

There is still a problem with 2 other types of data:

ibd which is part of a composite datatype, I wonder if there would be a way to represent a composite library dataset in data-library.yaml?
raw: maybe it should be changed to raw_pepxml or thermo.raw? I don't know these proteomic formats

raw: maybe it should be changed to raw_pepxml or thermo.raw? I don't know these proteomic formats

It is thermo.raw ... just consulted my proteomics expert.

Let's comment this out for now. Can you create an issue for that? Thanks.


WIP: Neato config flow

Breaking Change:
Currently work in progress, but I don't expect anything to break.

Description:
This PR adds config_flow to the neato integration.
Related issue (if applicable): fixes #
Pull request with documentation for home-assistant.io (if applicable): home-assistant/home-assistant.io#<home-assistant.io PR number goes here>
Checklist:

[ ] The code change is tested and works locally.
[ ] Local tests pass with tox. Your PR cannot be merged unless tests pass
[ ] There is no commented out code in this PR.
[ ] I have followed the development checklist

If user exposed functionality or configuration variables are added/changed:

[ ] Documentation added/updated in home-assistant.io

If the code communicates with devices, web services, or third-party tools:

[ ] The manifest file has all fields filled out correctly. Update and include derived files by running python3 -m script.hassfest.
[ ] New or updated dependencies have been added to requirements_all.txt by running python3 -m script.gen_requirements_all.
[ ] Untested files have been added to .coveragerc.

If the code does not interact with devices:

[ ] Tests have been added to verify that the new code works.

I'm not entirely sure what I'm doing, so please give me hints if I'm obviously doing something wrong :see_no_evil:

@dshokouhi Oh no. I wasn't aware that you were working on it. I don't know your branch either. How far are you? Does it make sense that we work together?

@Santobert I got ti to work on importing config and setting up the flow.  The tests I am not sure of and I think there may be somethings missing.  Feel free to snoop around here :)
https://github.com/dshokouhi/hass-neato-custom-component/tree/config_flow

@dshokouhi Great, Thank you. May I ask why do you work on a custom component instead of the official integration?

I always do custom components first to test with end users before I update to HA.  I did this for testing neato fixes in the past so just keeping up the habit :)

@balloob @MartinHjelmare I did some research and found that the life360 integration also deletes and recreates the outdated entries.
https://github.com/home-assistant/home-assistant/blob/2307cac942d4f5b1cef5bdf4a11d9baa5160791c/homeassistant/components/life360/__init__.py#L187
Personally, I think it's perfectly fine to do this. If a user changes things in configuration.yaml, he should expect that previous changes from the UI will be lost.

Not only will you lose changes from the UI, you also lose your entity ID customizations. This means that all your automations break, scripts break, scenes break. I can guarantee you that peope will be pissed ;)

Can be merged when build passes.

:tada:


uv pip compile generates requirements for faulty dependencies

Just for fun, I created a script that generates requirements.txt c using uv and pip-compile for the 577,502 dependencies that exist in pypi.
I'm not quite sure if this is a bug, but I can generate requirements for modules that I then can't install because of the bug
pip-compile doesn't allow me to do this right away, at the requirements.txt generation stage

disclaimer: I am not the author of the installed dependencies, install them at your own risk, preferably in an isolated environment

/# uv --version
uv 0.4.24
/# uv pip compile -v <(echo "10daysweb<=0.1.3")
DEBUG uv 0.4.24
DEBUG Starting Python discovery for a default Python
DEBUG Looking for exact match for request a default Python
DEBUG Searching for default Python interpreter in managed installations or system path
DEBUG Searching for managed installations at `/root/.local/share/uv/python`
DEBUG Found `cpython-3.12.7-linux-x86_64-gnu` at `/usr/local/bin/python` (search path)
DEBUG Using Python 3.12.7 interpreter at /usr/local/bin/python for builds
DEBUG Using request timeout of 30s
DEBUG Solving with installed Python version: 3.12.7
DEBUG Solving with target Python version: >=3.12.7
DEBUG Adding direct dependency: 10daysweb<=0.1.3
DEBUG Found stale response for: https://pypi.org/simple/10daysweb/
DEBUG Sending revalidation request for: https://pypi.org/simple/10daysweb/
DEBUG Found not-modified response for: https://pypi.org/simple/10daysweb/
DEBUG Searching for a compatible version of 10daysweb (<=0.1.3)
DEBUG Acquired lock for `/root/.cache/uv/sdists-v4/pypi/10daysweb/0.1.3`
DEBUG Found fresh response for: https://files.pythonhosted.org/packages/cd/f4/0da767e9a78143cdb40f5bc763fbfdbe016cc5832d5b7fddfd04a4689504/10daysweb-0.1.3.tar.gz
DEBUG No static `pyproject.toml` available for: 10daysweb==0.1.3 (MissingPyprojectToml)
DEBUG No static `PKG-INFO` available for: 10daysweb==0.1.3 (PkgInfo(UnsupportedMetadataVersion("1.2")))
DEBUG Found static `egg-info` for: 10daysweb==0.1.3
DEBUG Released lock at `/root/.cache/uv/sdists-v4/pypi/10daysweb/0.1.3/.lock`
DEBUG Selecting: 10daysweb==0.1.3 [compatible] (10daysweb-0.1.3.tar.gz)
DEBUG Adding transitive dependency for 10daysweb==0.1.3: httptools*
DEBUG Found stale response for: https://pypi.org/simple/httptools/
DEBUG Sending revalidation request for: https://pypi.org/simple/httptools/
DEBUG Found not-modified response for: https://pypi.org/simple/httptools/
DEBUG Searching for a compatible version of httptools (*)
DEBUG Selecting: httptools==0.6.4 [compatible] (httptools-0.6.4-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl)
DEBUG Found fresh response for: https://files.pythonhosted.org/packages/f7/d8/b644c44acc1368938317d76ac991c9bba1166311880bcc0ac297cb9d6bd7/httptools-0.6.4-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata
DEBUG Tried 2 versions: 10daysweb 1, httptools 1
DEBUG Split specific environment resolution took 0.042s
Resolved 2 packages in 48ms
# This file was autogenerated by uv via the following command:
#    uv pip compile /dev/fd/63
10daysweb==0.1.3
    # via -r dev/fd/63
httptools==0.6.4
    # via 10daysweb
/# uv pip install --system -v -r <(echo "10daysweb<=0.1.3")
DEBUG uv 0.4.24
DEBUG Searching for default Python interpreter in system path
DEBUG Found `cpython-3.12.7-linux-x86_64-gnu` at `/usr/local/bin/python` (search path)
Using Python 3.12.7 environment at /usr/local
DEBUG Acquired lock for `/usr/local`
DEBUG At least one requirement is not satisfied: 10daysweb<=0.1.3
DEBUG Using request timeout of 30s
DEBUG Solving with installed Python version: 3.12.7
DEBUG Solving with target Python version: >=3.12.7
DEBUG Adding direct dependency: 10daysweb<=0.1.3
DEBUG Found fresh response for: https://pypi.org/simple/10daysweb/
DEBUG Searching for a compatible version of 10daysweb (<=0.1.3)
DEBUG Selecting: 10daysweb==0.1.3 [compatible] (10daysweb-0.1.3.tar.gz)
DEBUG Acquired lock for `/root/.cache/uv/sdists-v4/pypi/10daysweb/0.1.3`
DEBUG Found fresh response for: https://files.pythonhosted.org/packages/cd/f4/0da767e9a78143cdb40f5bc763fbfdbe016cc5832d5b7fddfd04a4689504/10daysweb-0.1.3.tar.gz
DEBUG No static `pyproject.toml` available for: 10daysweb==0.1.3 (MissingPyprojectToml)
DEBUG No static `PKG-INFO` available for: 10daysweb==0.1.3 (PkgInfo(UnsupportedMetadataVersion("1.2")))
DEBUG Found static `egg-info` for: 10daysweb==0.1.3
DEBUG Released lock at `/root/.cache/uv/sdists-v4/pypi/10daysweb/0.1.3/.lock`
DEBUG Adding transitive dependency for 10daysweb==0.1.3: httptools*
DEBUG Found fresh response for: https://pypi.org/simple/httptools/
DEBUG Searching for a compatible version of httptools (*)
DEBUG Selecting: httptools==0.6.4 [compatible] (httptools-0.6.4-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl)
DEBUG Found fresh response for: https://files.pythonhosted.org/packages/f7/d8/b644c44acc1368938317d76ac991c9bba1166311880bcc0ac297cb9d6bd7/httptools-0.6.4-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata
DEBUG Tried 2 versions: 10daysweb 1, httptools 1
DEBUG Split specific environment resolution took 0.007s
Resolved 2 packages in 8ms
DEBUG Identified uncached distribution: 10daysweb==0.1.3
DEBUG Requirement already cached: httptools==0.6.4
DEBUG Unnecessary package: build==1.2.2.post1
DEBUG Unnecessary package: click==8.1.7
DEBUG Unnecessary package: packaging==24.1
DEBUG Preserving seed package: pip==24.2
DEBUG Unnecessary package: pip-tools==7.4.1
DEBUG Unnecessary package: pyproject-hooks==1.2.0
DEBUG Preserving seed package: setuptools==75.2.0
DEBUG Preserving seed package: wheel==0.44.0
DEBUG Acquired lock for `/root/.cache/uv/sdists-v4/pypi/10daysweb/0.1.3`
DEBUG Found fresh response for: https://files.pythonhosted.org/packages/cd/f4/0da767e9a78143cdb40f5bc763fbfdbe016cc5832d5b7fddfd04a4689504/10daysweb-0.1.3.tar.gz
DEBUG Building: 10daysweb==0.1.3
DEBUG Ignoring empty directory
DEBUG Resolving build requirements
DEBUG Solving with installed Python version: 3.12.7
DEBUG Solving with target Python version: >=3.12.7
DEBUG Adding direct dependency: setuptools>=40.8.0
DEBUG Found fresh response for: https://pypi.org/simple/setuptools/
DEBUG Searching for a compatible version of setuptools (>=40.8.0)
DEBUG Selecting: setuptools==75.2.0 [compatible] (setuptools-75.2.0-py3-none-any.whl)
DEBUG Found fresh response for: https://files.pythonhosted.org/packages/31/2d/90165d51ecd38f9a02c6832198c13a4e48652485e2ccf863ebb942c531b6/setuptools-75.2.0-py3-none-any.whl.metadata
DEBUG Tried 1 versions: setuptools 1
DEBUG Split specific environment resolution took 0.004s
DEBUG Installing in setuptools==75.2.0 in /root/.cache/uv/builds-v0/.tmp0P8klW
DEBUG Requirement already cached: setuptools==75.2.0
DEBUG Installing build requirement: setuptools==75.2.0
DEBUG Creating PEP 517 build environment
DEBUG Calling `setuptools.build_meta:__legacy__.get_requires_for_build_wheel()`
DEBUG Traceback (most recent call last):
DEBUG   File "<string>", line 14, in <module>
DEBUG   File "/root/.cache/uv/builds-v0/.tmp0P8klW/lib/python3.12/site-packages/setuptools/build_meta.py", line 332, in get_requires_for_build_wheel
DEBUG     return self._get_build_requires(config_settings, requirements=[])
DEBUG            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
DEBUG   File "/root/.cache/uv/builds-v0/.tmp0P8klW/lib/python3.12/site-packages/setuptools/build_meta.py", line 302, in _get_build_requires
DEBUG     self.run_setup()
DEBUG   File "/root/.cache/uv/builds-v0/.tmp0P8klW/lib/python3.12/site-packages/setuptools/build_meta.py", line 516, in run_setup
DEBUG     super().run_setup(setup_script=setup_script)
DEBUG   File "/root/.cache/uv/builds-v0/.tmp0P8klW/lib/python3.12/site-packages/setuptools/build_meta.py", line 318, in run_setup
DEBUG     exec(code, locals())
DEBUG   File "<string>", line 10, in <module>
DEBUG   File "<frozen codecs>", line 918, in open
DEBUG FileNotFoundError: [Errno 2] No such file or directory: '/root/.cache/uv/sdists-v4/pypi/10daysweb/0.1.3/OUxfaHy9DJ-vovkC1YVHz/10daysweb-0.1.3.tar.gz/readme.md'
DEBUG Released lock at `/root/.cache/uv/sdists-v4/pypi/10daysweb/0.1.3/.lock`
DEBUG Released lock at `/tmp/uv-1b696e695b7c17a7.lock`
error: Failed to prepare distributions
  Caused by: Failed to download and build `10daysweb==0.1.3`
  Caused by: Build backend failed to determine requirements with `build_wheel()` (exit status: 1)

[stderr]
Traceback (most recent call last):
  File "<string>", line 14, in <module>
  File "/root/.cache/uv/builds-v0/.tmp0P8klW/lib/python3.12/site-packages/setuptools/build_meta.py", line 332, in get_requires_for_build_wheel
    return self._get_build_requires(config_settings, requirements=[])
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/root/.cache/uv/builds-v0/.tmp0P8klW/lib/python3.12/site-packages/setuptools/build_meta.py", line 302, in _get_build_requires
    self.run_setup()
  File "/root/.cache/uv/builds-v0/.tmp0P8klW/lib/python3.12/site-packages/setuptools/build_meta.py", line 516, in run_setup
    super().run_setup(setup_script=setup_script)
  File "/root/.cache/uv/builds-v0/.tmp0P8klW/lib/python3.12/site-packages/setuptools/build_meta.py", line 318, in run_setup
    exec(code, locals())
  File "<string>", line 10, in <module>
  File "<frozen codecs>", line 918, in open
FileNotFoundError: [Errno 2] No such file or directory: '/root/.cache/uv/sdists-v4/pypi/10daysweb/0.1.3/OUxfaHy9DJ-vovkC1YVHz/10daysweb-0.1.3.tar.gz/readme.md'

/# pip-compile --version
pip-compile, version 7.4.1
/# pip-compile -v -r <(echo "10daysweb<=0.1.3") -o /dev/null
Using indexes:
  https://pypi.org/simple

                          ROUND 1
  Collecting 10daysweb<=0.1.3 (from -r /dev/fd/63 (line 1))
    Using cached 10daysweb-0.1.3.tar.gz (9.2 kB)
    Preparing metadata (setup.py) ... error
    error: subprocess-exited-with-error

    × python setup.py egg_info did not run successfully.
    │ exit code: 1
    ╰─> [8 lines of output]
        Traceback (most recent call last):
          File "<string>", line 2, in <module>
          File "<pip-setuptools-caller>", line 34, in <module>
          File "/tmp/pip-resolve-55x1h_6i/10daysweb_786e9b60557d4eb48a9ac4ef8db40b69/setup.py", line 10, in <module>
            with open(path.join(here, 'readme.md'), encoding='utf-8') as f:
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
          File "<frozen codecs>", line 918, in open
        FileNotFoundError: [Errno 2] No such file or directory: '/tmp/pip-resolve-55x1h_6i/10daysweb_786e9b60557d4eb48a9ac4ef8db40b69/readme.md'
        [end of output]

    note: This error originates from a subprocess, and is likely not a problem with pip.
Traceback (most recent call last):
  File "/usr/local/lib/python3.12/site-packages/pip/_internal/operations/build/metadata_legacy.py", line 64, in generate_metadata
    call_subprocess(
  File "/usr/local/lib/python3.12/site-packages/pip/_internal/utils/subprocess.py", line 209, in call_subprocess
    raise error
pip._internal.exceptions.InstallationSubprocessError: python setup.py egg_info exited with 1

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/local/bin/pip-compile", line 8, in <module>
    sys.exit(cli())
             ^^^^^
  File "/usr/local/lib/python3.12/site-packages/click/core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/click/core.py", line 1078, in main
    rv = self.invoke(ctx)
         ^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/click/core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/click/decorators.py", line 33, in new_func
    return f(get_current_context(), *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/piptools/scripts/compile.py", line 470, in cli
    results = resolver.resolve(max_rounds=max_rounds)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/piptools/resolver.py", line 604, in resolve
    is_resolved = self._do_resolve(
                  ^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/piptools/resolver.py", line 636, in _do_resolve
    resolver.resolve(
  File "/usr/local/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/resolver.py", line 95, in resolve
    result = self._result = resolver.resolve(
                            ^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/pip/_vendor/resolvelib/resolvers.py", line 546, in resolve
    state = resolution.resolve(requirements, max_rounds=max_rounds)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/pip/_vendor/resolvelib/resolvers.py", line 397, in resolve
    self._add_to_criteria(self.state.criteria, r, parent=None)
  File "/usr/local/lib/python3.12/site-packages/pip/_vendor/resolvelib/resolvers.py", line 173, in _add_to_criteria
    if not criterion.candidates:
           ^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/pip/_vendor/resolvelib/structs.py", line 156, in __bool__
    return bool(self._sequence)
           ^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py", line 174, in __bool__
    return any(self)
           ^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py", line 162, in <genexpr>
    return (c for c in iterator if id(c) not in self._incompatible_ids)
                       ^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py", line 53, in _iter_built
    candidate = func()
                ^^^^^^
  File "/usr/local/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/factory.py", line 186, in _make_candidate_from_link
    base: Optional[BaseCandidate] = self._make_base_candidate_from_link(
                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/factory.py", line 232, in _make_base_candidate_from_link
    self._link_candidate_cache[link] = LinkCandidate(
                                       ^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/candidates.py", line 303, in __init__
    super().__init__(
  File "/usr/local/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/candidates.py", line 158, in __init__
    self.dist = self._prepare()
                ^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/candidates.py", line 235, in _prepare
    dist = self._prepare_distribution()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/candidates.py", line 314, in _prepare_distribution
    return preparer.prepare_linked_requirement(self._ireq, parallel_builds=True)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/pip/_internal/operations/prepare.py", line 527, in prepare_linked_requirement
    return self._prepare_linked_requirement(req, parallel_builds)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/pip/_internal/operations/prepare.py", line 642, in _prepare_linked_requirement
    dist = _get_prepared_distribution(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/pip/_internal/operations/prepare.py", line 72, in _get_prepared_distribution
    abstract_dist.prepare_distribution_metadata(
  File "/usr/local/lib/python3.12/site-packages/pip/_internal/distributions/sdist.py", line 69, in prepare_distribution_metadata
    self.req.prepare_metadata()
  File "/usr/local/lib/python3.12/site-packages/pip/_internal/req/req_install.py", line 581, in prepare_metadata
    self.metadata_directory = generate_metadata_legacy(
                              ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/pip/_internal/operations/build/metadata_legacy.py", line 71, in generate_metadata
    raise MetadataGenerationFailed(package_details=details) from error
pip._internal.exceptions.MetadataGenerationFailed: metadata generation failed

It's possible to generate a resolution that includes a package that ultimately doesn't build on your machine. Resolution only requires extracting package metadata, but a package could fail to build for other reasons.


feat: migrate postdeployment to data http

Replaces compute engine and associated resources with a data "http" call to the Cloud Run API
Requires moving the logic from the metadata startup scripts to within the containers for placeholder, and a new container for init. Uses the same permissions, only the service account has renamed to reflect the usage.
Merge blocked on:

[ ] updating the containers.tf to reference the latest images (manually created:postjsscurl tagged images used while testing)
[ ] confirming functionality
[ ] removing any compute engine APIs/permissions based on removed resources (without removing infra-required APIs)

Lint issues:

[x] Warning: data "http" "execute_placeholder_job" is declared but not used (terraform_unused_declarations)
[x] Warning: data "http" "execute_init_job" is declared but not used (terraform_unused_declarations)
[x] Warning: variable "zone" is declared but not used (terraform_unused_declarations)

Build failures:

[ ] Cannot delete job 'placeholder-eca5' because there are 1 execution(s) of the job running. (started after reading data.http.execute_placeholder_job)
[ ] Cannot delete job 'init-eca5' because there are 1 execution(s) of the job running. (started after reading data.http.execute_init_job)

Closing in favor of #125


Aborted (core dumped)

Hello! You are doing a very cool project that helps ordinary users to solve the problem with the lack of memory in the video card. But unfortunately my neural network training ends up with an error.
Sometimes this error is:
F tensorflow/core/common_runtime/gpu/gpu_bfc_allocator.cc:136] Check failed: this->H2D_stream_->ok()
Aborted (core dumped)
Sometimes:
F tensorflow/core/common_runtime/gpu/gpu_bfc_allocator.cc:175] Check failed: this->D2H_stream_->ok()
Aborted (core dumped)
Sometimes errors appear immediately, sometimes in the middle of epoch.
I am using LMS with tensorflow 2.2.0.

Thanks for trying out LMS. LMS is not being actively maintained, hence the 2.2.0 version. It has been nearly 2 years since I ran a job with LMS, but I recall that those types of errors would come out during some types of out of memory errors.
Even with LMS enabled it is possible to run out of memory on the GPU in certain cases such as when the model requires too many active tensors, or individual operations have input and output tensors so large they cannot fit.
If you provide more error messages / output from your call I may be able to help more.

Thank you for the clarification! I am using a GeForce GTX 1060 3GB and this card probably has very little video memory. I saw that if I reduce the batch size, the error disappears. This is all that I can write to you, except for the above, nothing appears in the console.

Were you able to reason out why sometimes the error would come at the beginning of the process. Correct me if I am wrong if there's a large batch size then it would start the computation on the GPU and when a tensor is no longer in use it should be sent back to the host machine for storage. A lot like paging algorithm so it should not be problem to handle large batch sizes


PanSTARRS 1 DR2 TAP notebook

This notebook parallels the MAST API notebook provided by @rlwastro via https://panstarrs.stsci.edu/.
All of the use cases from the API notebook are run using the TAP interface and astroquery TAPPlus here, as we have already done in providing the Hubble Source Catalog v3 notebook (github.com/spacetelescope/notebooks/.../MAST/HSC/HSC_TAP). The format from the HSC notebook was used as a template.
The notebook contents have been tested side-by side but should be checked again by someone familiar with the astronomical data and methods.

There is an earlier commit with accidentally included data inside the notebook. I'm not confident in my git skills and am OK with this being squashed as per the contributing guidelines.

Hooray, it all worked!
Some backstory on the force push above: @theresadower and I just went through and did:

rebased on master
rebase -i to fix two commits where outputs were included in the notebook
rebase -i to merge the several in-github edits into one commit

and clearly it all worked fine after that.


is it possible to show only the garbage with the indication of the day's collection?

It is possible to show only the garbage with the indication of the day's collection?

What you show and do not show really depends on your lovelace config. I think you can use https://github.com/thomasloven/lovelace-state-switch?


Decompose changesets/cli into meaningful packages

The goal: make it easy for people to build their own utilities with minimum fuss.
Current new packages:
@changesets/[command]

programmatically run any of the changeset commands as a function if you have all the correct information.

Not appearing in this thread are utils that will need to be shared between packages, as we will likely split these when we come to them.

This change means commands need to be split between a single function that takes in info and does the action, and the bit that asks questions. Some of this logic is currently interleaved.


default command decorations are white instead of blue

I noticed this too, maybe from css var refractor?

Yeah but strange because at first glance, the code still looks correct to me


Incorrect documentation for jax.numpy.linalg.svd

The documentation shows that jax.numpy.linalg.svd accepts the keyword argument hermitian, like the numpy.linalg version. But the signature jax.numpy.linalg.svd(a, full_matrices=True, compute_uv=True) does not list this, and when one tries to use it an error is thrown.

Thanks for the report - documentation for numpy wrappers is automatically generated from the numpy docs. You'll see that the type signature at the top of the page shows the correct parameters, and Original docstring below indicates that the remainder of the documentation comes from the original numpy function. It's an imperfect solution, but prevents us from having to copy the content of all docstrings in the wrapped functions (which in terms of open source licensing requirements would be problematic).
What do you think? Is there something we could do to make that more clear?

Implementing the hermitian=True case looks pretty easy, I'll have a go at that.

That makes sense, and nothing really comes to mind for doing anything differently given the constraints you describe.
I was just reporting since my understanding was that the goal was two make the two APIs match as closely as possible.
Thanks for the quick fix @hawkinsp !


[Bug]: Fresh install on ARM64

Checklist

[X] I agree to follow the Code of Conduct that this project adheres to.
[X] I have searched the Issue Tracker for a bug that matches the one I want to file, without success.
[X] This issue is not related to Conduit Admin Panel.
[X] This issue is not related to Conduit CLI.

Conduit version
0.15.3
Describe the Bug
On a fresh install on ARM64 conduit deploy setup
/home/ubuntu/.conduit/bin/conduit: line 44: /home/ubuntu/.conduit/bin/node: No such file or directory

I can't seem to get node to fire up. Cheers, Dave
Expected Behavior
um, install
How to Reproduce
Follow install directions for ARM64
Additional Information
No response
Environment
Ubuntu 22.04 on Oracle Ampere server

Hello and thanks for reporting.
I can't tell how you originally installed the CLI, but could you try this: sh <(curl -s https://getconduit.dev/bootstrap).
It's going to install the latest CLI (under ~/.conduit), add it to your $PATH and run conduit deploy setup.

Great thanks

Could not automatically detect your system's architecture.

Could you share the output of uname -a

I opened a PR ConduitPlatform#459 that should resolve this.
You can test this with:
sh <(curl -s https://raw.githubusercontent.com/ConduitPlatform/Conduit/63b5c03479f5632b97cd02c6c94d16881aa195a5/docker/get-conduit.sh).
Let me know if that worked.

ah yes, it's aarch64 sorry about that. Still no luck with the script.

Could you share the complete output of uname -a?

Linux instance-20221203-1621 5.15.0-1025-oracle #31-Ubuntu SMP Fri Nov 25 17:03:15 UTC 2022 aarch64 aarch64 aarch64 GNU/Linux
[[ comparison is a bash thing I think. I get
/dev/fd/63: 5: [[: not found
/dev/fd/63: 11: [[: not found
/dev/fd/63: 13: [[: not found
Could not automatically detect your platform.
Please follow the installation instructions in https://getconduit.dev

when I run sh I get this is I run with bash
Downloading Conduit CLI...
Extracting Archive...
tar: This does not look like a tar archive

gzip: stdin: not in gzip format
tar: Child returned status 1
tar: Error is not recoverable: exiting now
chmod: cannot access '/home/ubuntu/.conduit/bin/conduit': No such file or directory

/dev/fd/63: line 75: /home/ubuntu/.conduit/bin/conduit: No such file or directory

Alright, that one should do it: sh <(curl -s https://raw.githubusercontent.com/ConduitPlatform/Conduit/0b35c252cc9b3eb9f6a0febb92a95b049df0ac41/docker/get-conduit.sh).

Cool - It downloaded that time. Just the node thing now:
ubuntu@instance-20221203-1621:~$ bash <(curl -s https://raw.githubusercontent.com/ConduitPlatform/Conduit/0b35c252cc9b3eb9f6a0febb92a95b049df0ac41/docker/get-conduit.sh)
Downloading Conduit CLI...
Extracting Archive...

/home/ubuntu/.conduit/bin/conduit: line 44: /home/ubuntu/.conduit/bin/node: No such file or directory

Node doesn't need to be installed on your system.
Can you share the output of ls -l ~/.conduit?

 The bundled node is available and executable.
What happens if you bring up a new terminal and execute conduit deploy setup --config?

/home/ubuntu/.conduit/bin/conduit: line 44: /home/ubuntu/.conduit/bin/node: No such file or directory

It's actually a 32bit arm binary on Linux (ELF 32-bit LSB executable, ARM, EABI5 version 1 (GNU/Linux)), but that shouldn't be an issue.
It's as if the binary isn't there in the first place.
You wouldn't happen to be overriding $HOME in your shell, right?
Can you try running the entrypoint like so:
~/.conduit/bin/node ~/.conduit/bin/run deploy setup

Interesting
ubuntu@instance-20221203-1621:~$ ~/.conduit/bin/node ~/.conduit/bin/run deploy setup
-bash: /home/ubuntu/.conduit/bin/node: No such file or directory
ubuntu@instance-20221203-1621:~$ echo $HOME
/home/ubuntu

I still can't wrap my head around how the file could be available, executable, with an unmodified $HOME and still have bash report No such file or directory.
Can you bring up a new terminal, share the output of echo $PATH and retry the last command from that term?
The one thing the oneliner curl to sh won't do is source the new $PATH in your existing env, but that shouldn't be related.

ubuntu@instance-20221203-1621:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/ubuntu/.conduit/bin
ubuntu@instance-20221203-1621:~$ ~/.conduit/bin/node ~/.conduit/bin/run deploy setup
-bash: /home/ubuntu/.conduit/bin/node: No such file or directory

I dropped onto another server (amd) installed fine. Going to start playing with it.

Hey @kubeworkz, thanks for taking the time to play around with Conduit, authentication should be available by default with the default setup. Is the container crashing with some error maybe? Also if you're running Conduit with postgres that could be the reason too (we have a migrations issue, that we'll patch this week).

Ah, OK. Yeah, I'm using Postgres. Awesome app btw. keep it goin'

Quick update: yep the authentication container is crashing:
 node dist/index.js
[2022-12-04 16:42:33] [INFO]: Waiting for Core...
[2022-12-04 16:42:33] [INFO]: Metrics server listening on: <IP_ADDRESS>:9094
[2022-12-04 16:42:33] [INFO]: Core connection established
[2022-12-04 16:42:33] [INFO]: gRPC server listening on 55162
[2022-12-04 16:42:33] [INFO]: The Bus is in the station...hehe
[2022-12-04 16:42:33] [ERROR]: Failed to initialize server
[2022-12-04 16:42:33] [ERROR]: /database.DatabaseProvider/findMany INTERNAL: column cnd_Token.userId does not exist ClientError: /database.DatabaseProvider/findMany INTERNAL: column cnd_Token.userId does not exist
    at wrapClientError (/app/node_modules/nice-grpc/lib/client/wrapClientError.js:9:16)
    at Object.callback (/app/node_modules/nice-grpc/lib/client/createUnaryMethod.js:31:66)
    at Object.onReceiveStatus (/app/node_modules/@grpc/grpc-js/build/src/client.js:189:36)
    at Object.onReceiveStatus (/app/node_modules/@grpc/grpc-js/build/src/client-interceptors.js:365:141)
    at Object.onReceiveStatus (/app/node_modules/@grpc/grpc-js/build/src/client-interceptors.js:328:181)
    at /app/node_modules/@grpc/grpc-js/build/src/call-stream.js:187:78
    at processTicksAndRejections (node:internal/process/task_queues:78:11)
error Command failed with exit code 255.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

Thanks for the support! Let's continue the chat over on discord. I'll close this issue for now


Remove uses of Arc::make_mut to avoid clones

Profiling revealed there to be a measurable number of clones coming out of TileStateMut::new, which was traceable to usage of Arc::make_mut. A characteristic of Arc::make_mut is that it will clone the inner data when a thread attempts to write to it. In theory, I have concerns that this could cause data inconsistencies, although that does not seem to have happened in practice in rav1e. However, the clones are avoidable, because each place where we use Arc::make_mut can be safely assumed to be independent--i.e. there is never more than one thread accessing the same portion of the data.
640x360 with 1 tile: 1.5% memory usage reduction
640x360 with 4 tiles: 4% memory usage reduction
1920x1080 with 4 tiles: 6% memory usage reduction
No measurable runtime improvement with 1 tile.
~1% runtime improvement with 4 tiles.

Coverage decreased (-0.05%) to 85.334% when pulling 73c1d1a7b4dc77b321d8b825bcbdeb6c429faaa7 on shssoichiro:remove-make--mut into cc49bc41fc7efbd4d497ef1e6a3f79d7ecf1b728 on xiph:master.

https://gist.github.com/lu-zero/ffc7152ab0aabc651f0fde3da42b4559 this fixes most of the problems
Still fail:
test_encode_decode::bitrate_dav1d
api::test::guess_frame_subtypes_assert
api::test::log_q_exp_overflow
api::test::max_quantizer_bounds_correctly
api::test::min_quantizer_bounds_correctly

All the tests pass for me when I apply these changes against master. However, I still see the significant increase in memory usage, because this is basically the same as not having an Arc there--it's cloning the inner contents.

You need 1 clone for the lookahead and 1 clone for the normal encoding in theory.

Closed for #2959


Update usage.rst

"i.e." is misleading because it means "in other words". In the context of this paragraph, "i.e." implies that "unexpected requests" are those that have a different URI.
I think a URI change is just one example of what could constitute an "unexpected" request. vcr does request matching based on method, port, body, etc.
So, I think "e.g." which means "for example" is the right phrase in this context.

Learned something new.  Thanks!


Hide secret_key resources in lambda module

That's another part of moving resources out of the top level code into appropriate modules :)

Two thoughts here:

can you elaborate on this ticket? I don't really know what we want to achieve here and probably anybody watching that from outside will deliver such ticket (forgetting that usually person from outside doesn't have access to our AWS infrastructure, do you @Maciek246 know, what @arturtamborski want to deliver here?)
assuming, that I understand, hiding SECRET_KEY inside lambda module will not work as we have two lambdas per almost every project (one for migrations, the second one for serverless API).

That's more complex than its worth, probably. The resource would have to be exposed from previous module so the next one could use the output variable which creates implied dependency ordering there to previously independent sections. Also, that's generally against the best practices when working with terraform code structure which I didn't knew about at that time.
Closing.


[6.x] MIX_FOLDER and MIX_FOLDERLESS .env variables

This solution for working with cookieless domain on a Laravel project.
Solving a pain with working a cookieless domain.
I can write tests if could add to core. 😀

Heya, this seems to break the test suite. Feel free to resubmit this with a thorough explanation why this is need and tests for the implementation.


Task_6_7_8_9_Completed

SourceCode/2023/oct2023/Basics/Praveenraja S V/Task_6/project.json
Score
Code Completion: 1
Execution: 1
Annotations and Comments: 0
Review
NoFile:

Your project is missing the required Automation Hub URL. Please add this information in the 'Project Settings'.
There's an unused package in your project - 'UiPath.UIAutomation.Activities'. Unused packages can slow down process execution, so please remove any that you're not using.

Main.xaml:

You haven't used any 'Log Message' activities in your 'Main' workflow. These should be used during development and after release. They help us to understand the flow path which is very useful for maintenance and, when an error occurs, to easily identify the source and the reason for it. Please add 'Log Message' activities where necessary.

Please attend to these points and resubmit your project.

SourceCode/2023/oct2023/Basics/Praveenraja S V/Task_7/project.json
File: NoFile
Your project needs to have an Automation Hub URL, you can input this through the 'Project Settings' part.
Also, there's an unused package in your code, UiPath.Testing.Activities. Removing this will help your porcess run faster.
The UiPath.UIAutomation.Activities package is also unused and should be eliminated for better efficiency.
File: Main.xaml
I've noticed there's no Log Message activity used in Main workflow. Incorporating these can be beneficial during not only development but also post-launch. It will aid in understanding the flow path, which will be important for maintenance. Plus, if an error crops up, it's easier to pinpoint the source and reason behind it with log messages.
Code Completion Score: 1.5 because of the unused packages and no automation hub url defined
Execution Score: 2 - No details available suggesting any runtime issues.
Annotations and Comments Score: 1 - Log message activity is missing which is important for understanding process flow.

SourceCode/2023/oct2023/Basics/Praveenraja S V/Task_8/project.json
Scores :
Code completion: 1.5
Execution: 1.5
Annotations and comments: 0.5
Files and code review comments:

NoFile

It seems you've missed defining an Automation Hub URL. Hop on over to the "Project Settings" and add the necessary info.
Found some unused packages ('UiPath.Testing.Activities' and 'UiPath.UIAutomation.Activities'). Trimming these would speed up your process execution.

Main.xaml

Remember to use Log Message in your workflow. This helps to understand the process better, makes maintenance easier and aids in spotting the source when you encounter errors.

Fix these and your code would hit the mark!

SourceCode/2023/oct2023/Basics/Praveenraja S V/Task_9/project.json
Comment posted for PR on file NoFile
Your organization requires your project to have an Automation Hub URL defined.
Fix: Plug the blank by adding the required URL in the 'Project Settings'. It's a quick fix.
Dependency package UiPath.UIAutomation.Activities is not used.
Fix: Clear out the waste and remove unnecessary packages. This can help your process run a little faster.
Comment posted for PR on file Main.xaml
Log Message not used in workflow Main.
Fix: Use Log Message in your workflow. It's your friend to trace what's happening in your code, finding issues will be simpler when they pop up.
Variable First_Name does not respect the set pattern ^(dt_)?([A-Z]|[a-z])+([0-9])*$
Fix: Keep a check on your variable names, make sure they follow the set pattern.
Variable Second_Name does not respect the set pattern ^(dt_)?([A-Z]|[a-z])+([0-9])*$
Fix: Keep a check on your variable names, make sure they follow the set pattern.
Performance Score:

Code Completion: 1.5/2
Execution: 1/

@PRAVEENRAJA1699
Task-6
Code verified.
Task-7
Code verified.
Task-8
Code verified.
Task-9
Code verified.


Connecting the Sandstorm version to the Android version

When connecting a rocket chat that is installed on a sandstorm from its own app-market with the android rocket chat app, it asks me to install a later version.
I am using a Google-Store free Android (copperhead) and Ubuntu Linux Firefox Browser where I access the latest version of sandstorm on a VPS. With Rocket chat open, I choose "share grain" and add this link to the adroid app when it asks for server link.
Your Rocket.Chat Server version: (e.g. 0.52.0)

Check our supported versions here: https://rocket.chat/docs/developer-guides/mobile-apps/supported-servers-versions/#supported-servers-versions


WIP: PayloadDecoder

Description & motivation 💭
Use the PayloadDecoder component to decode payloads and pass to the CodeBlock instead of decoding everything upfront.
Screenshots (if applicable) 📸
Design Considerations 🎨
Testing 🧪
How was this tested 👻

[ ] Manual testing
[ ] E2E tests added
[ ] Unit tests added

Steps for others to test: 🚶🏽♂🚶🏽♀
Checklists
Draft Checklist
Merge Checklist
Issue(s) closed
Docs
Any docs updates needed?

Need to figure out the mechanism to tell the PayloadDecoder to not decode something already decoded.


npm run build fails

Hello,
I've cloned this repo and ran npm install in the example directory. When running npm run build it fails with the following error
λ npm run build

><EMAIL_ADDRESS>build C:\git\vite-plugin-compression\example
> vite build

 > vite.config.ts:3:28: error: Could not resolve "../dist/index"
    3 │ import viteCompression from '../dist/index';
      ╵                             ~~~~~~~~~~~~~~~

failed to load config from C:\git\vite-plugin-compression\example\vite.config.ts
error during build:
Error: Build failed with 1 error:
vite.config.ts:3:28: error: Could not resolve "../dist/index"
    at failureErrorWithLog (C:\git\vite-plugin-compression\example\node_modules\esbuild\lib\main.js:1493:15)
    at C:\git\vite-plugin-compression\example\node_modules\esbuild\lib\main.js:1151:28
    at runOnEndCallbacks (C:\git\vite-plugin-compression\example\node_modules\esbuild\lib\main.js:941:63)
    at buildResponseToResult (C:\git\vite-plugin-compression\example\node_modules\esbuild\lib\main.js:1149:7)
    at C:\git\vite-plugin-compression\example\node_modules\esbuild\lib\main.js:1258:14
    at C:\git\vite-plugin-compression\example\node_modules\esbuild\lib\main.js:629:9
    at handleIncomingPacket (C:\git\vite-plugin-compression\example\node_modules\esbuild\lib\main.js:726:9)
    at Socket.readFromStdout (C:\git\vite-plugin-compression\example\node_modules\esbuild\lib\main.js:596:7)
    at Socket.emit (events.js:376:20)
    at addChunk (internal/streams/readable.js:309:12)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR<EMAIL_ADDRESS>build: `vite build `
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the<EMAIL_ADDRESS>build script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

Ah sorry ok I didnt realize I would have to install and build the parent directory also


Don't warn about pure Python socket when not using distributed mode

Currently the rpc package throws a warning always, so simply importing locust results in spurious output on command line. This is a bit annoying when creating CLI tools, when in fact there's no danger of degraded performance (that is, locust is only run locally).

This seems like an old issue as I'm no longer able to reproduce this. If that's not the case, can you paste the output you're seeing?


Set Hazelcast version back to LATEST.

I think it is better to put a particular version and not LATEST (or RELEASE). With LATEST a user will also be getting newest snapshots and with RELEASE he will be getting latest released software.
If you bind to a particular version, you know that someone that is checking out stabilizer or has checked it out a long time ago, still can build it. So using LATEST or RELEASE is just asking for problems for someone else than us building stabilizer.

LATEST /  RELEASE  should be good for us at the head of master.
when we release stabilizer out of a release branch, we can put in an explicit version.
or we stop doing our dev in master,  use a dev branch for our daily dev/ops using LATEST/RELEASE version of Hz,
and release out of a tagged, master where its uses some explicitly named Hz version.  and there the head of master represents the latest release.
currently head of master represents the edge of development.

If you want to use a specific HZ version, you override the one provided in your stabilizer.properties. I don't see the need for having LATEST/RELEASE.


feat(test): create and receive invitation

Added test for create and receive invitation

Signed-off-by: blu3beri<EMAIL_ADDRESS>

@blu3beri merge conflicts


Is there a plan to support yii2?

Is there a plan to support yii2?

@jefry86
yii2 supports classload(composer). In other word , pinpont-php-agent  supports yii2.
While, agent does not have out-of-box plugins for yii2.

@jefry86
yii2 supports classload(composer). In other word , pinpont-php-agent supports yii2.
While, agent does not have out-of-box plugins for yii2.

Do you have plans to develop out-of-box plugins for yii2?

OK, let me do some research !

It's done.
Use v0.2.3