SSL_connect SYSCALL returned=5 errno=0 state=SSLv2/v3 read server hello A

I have a Proxmox-Server that is using a valid let's encrypt certificate.
When trying to connect using vagrant-proxmox i often get the above mentioned error on the first try.
Trying again immediately afterwards is successful.

Do you connect every time to the same node? Maybe one node has not yet the new certificate. See https://pve.proxmox.com/wiki/HTTPS_Certificate_Configuration_(Version_4.x_and_newer)

It's the Same Node, i currently have only one for testing.

Issue closed due no response from reporter


Add generated tests to improve test coverage

Added generated tests to test arguments, arithmetics, assignments and bitwise logic.
JerryScript-DCO-1.0-Signed-off-by: Mate Dabis<EMAIL_ADDRESS>

Closing pull request, because of continuing test generating module in @repasics's repository on      generate_and_run_tests branch. By the way all issues in these files are solved.


Scrolling is not smooth on Android

Hello,
I have performance problems with the popup-card. On a Pixel 5 with Android 14 and a Pixel 3 with Android 12, the popup card is very jerky when scrolling. The animation when opening the popup-card is also jerky. The popup card jerks in the companion app as well as in the chrome browser. An old version (1.0.3) runs absolutely smoothly. On my iOS devices I have no stuttering at all with the latest version.

Hi and thanks for your feedback.
This issue should be fixed in the new 1.6.0-beta.2 🤞
https://github.com/Clooos/Bubble-Card/releases/tag/v1.6.0-beta.2

Unfortunately the problem still exists in 1.6.0-beta.2

You are not the first to stay on 1.0.3, I will take a closer look at that!

Have you tried to add bg_blur: 0, bg_opacity: 0 and shadow_opacity: 0 to your pop-ups? It seems that this is the major difference between 1.0.3 and 1.1.0 that could cause your issue.

It's not as smooth as version 1.0.3 but significantly better. I played around a bit with the three parameters and think it's because of the blur option. The other two options have shown no effect on scrolling. I suspect that with blur 0 the blur function is still active and has a negative effect on scrolling. I remember that I also had problems with a theme that used blur.
If you tell me which lines of code I should delete so that blur is completely deactivated, I would test it again.

You can fully disable it like that in YAML:
type: vertical-stack
cards:
  - type: custom:bubble-pop-up
    hash: '#your-pop-up'
    styles: |
      #root {
        backdrop-filter: none !important;
      }

PS: How can I use both versions in parallel to compare them better?

I have some ideas but it's way too complicated 😅

With this option it is just as smooth as in version 1.0.3. So it actually seems to be due to the blur effect. Do you have any idea why?

I really don't understand how you can have this issue on two high-end Android devices, there is maybe an issue with your devices because on my Android 14 phone it's really smooth (full 60fps).

I'll ask my friend with a Pixel 8 Pro if he can test the PopUp Card. I will then give feedback. Thank you for your help.
By the way, the PopUp Card is really great.

The same problem exists on the pixel 8 pro.

Then I guess that you have a pretty big config with many pop-ups? I will try to disable the blur when the pop-ups are closed, this should improve a lot that feature! 🤞

Unfortunately no, we only configured one single popup window.

Then it might be related to your theme? Do you have a custom one?

Yes we use a custom theme. I will try the standard theme.

Same problem with the standard theme :(

Then maybe a conflict with an other custom component? 😅

I'll take a screen capture tomorrow.

Thanks!

Could you try this version with the manual installation method?
Bubble Card v1.6.0-beta.3 test.zip

Still the same problem.

The optimized mode also does not work on Android devices. When I first load the page I see the pop-ups render.

I really don't understand how it's possible 😅 I've tested this version on a clean HA installation in a VM and everything works perfectly on iOS, Android, Safari, Chrome, Firefox... Even my personal setup is a complex one and it runs smoothly.
There should be some kind of conflict with an other custom card.
Could you also check if you have any errors in your logs?

Hi, could you try the last beta available on HACS?

Sorry for the late reply but I was very busy over the holidays.
Beta 3 (from HACS) has the same problems for me (jerky scrolling when blur is active and popup cards visible when the page is opened for the first time.
Here is a list of custom components:

Same behavior with beta 4. The rendering is also visible in the edge browser on win 11. It looks good on iOS. Is there a problem with the chrome engine?

I really don't know, I'm totally unable to replicate this issue. Without the ability to test your setup, I'm clueless right now 😅

Can you try with the latest beta?
https://github.com/Clooos/Bubble-Card/releases/tag/v1.6.0-beta.5

Hello, I have now carried out a few tests with the latest version. Unfortunately with little success. I've come to terms with the jerky scrolling and can live with the work around (deactivate blur).
The bigger problem now is rendering. I was able to speed up rendering significantly by uninstalling the layout card. But I still have to wait a few seconds for the page to finish rendering. Here's a video.
PS: You may be able to verify the problem with the layout card.
https://github.com/Clooos/Bubble-Card/assets/59173472/68d461db-ceac-4dc3-ab72-61e1354a8e19

Thanks for the detailed feedback, can you tell me on what Home Assistant version you are? Because this issue seems to be fixed in the latest versions. And if it's already the case, have you tried the optimized mode for the pop-ups?

I am on the latest version.

I tried both, regular mode and optimized mode.

Then I guess that there is some kind of conflict somewhere. The best way would be to create a new blank view and see what is causing this.

I have now created a completely new dashboard with a new view. Nevertheless, I still have the rendering problem. I used very simple cards.

Hi, could you tell me if it's fixed in the new v1.7.1? I've changed something related to your issue.
https://github.com/Clooos/Bubble-Card/releases/tag/v1.7.1

The problem is solved. Thank you for that. I still have a small suggestion for improvement: it would be nice to have an option to always open the pop-up at the top. If I open a pop-up and scroll down, then close it and then reopen it, the pop-up is still at the bottom position.

I've added this to my list, nice suggestion. I'm closing this since the original issue was fixed.


Namespace field in InstallReleaseRequest type object  should be optional as helm allow installing charts without namespace

Explanation:
I am trying to install a chart which has a namespace specified within its template file. In this case if I try to give  namespace in InstallReleaseRequest object also then helm  is throwing error of duplicate namespace.
Helm command allow us to install charts without having namespace parameter, in that case it will install helm release in "default" namespace.
I think microbean should also have similar behavior. We should have namespace field as optional in InstallReleaseRequest object.
Code Reference:
Tiller.class (line 5804)
public Tiller.InstallReleaseRequest.Builder setNamespace(String value) {
if (value == null) {
throw new NullPointerException();
} else {
this.namespace_ = value;
this.onChanged();
return this;
}
}

HI,
Can you please explain how it is generated and how can we handle this null condition?

The API classes that interact with Tiller are generated from Helm's protocol buffers source files: https://github.com/helm/helm/tree/master/_proto
The way they are generated uses protoc and the gRPC Java plugin: https://github.com/grpc/grpc-java#grpc-java---an-rpc-library-and-framework
In terms of which fields and methods and whatnot may be null or not within them, I'm honestly not sure off the top of my head.


Edited summary

Added the description of the class.

Docs Build status updates of commit 3756d8b:
:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

sharepoint-server/xml/Microsoft.SharePoint/SPDocumentLibrary.xml
:white_check_mark:Succeeded

For more details, please refer to the build report.
Note: If you changed an existing file name or deleted a file, broken links in other files to the deleted or renamed file are listed only in the full build report.


ObjectId support

[ ] find by ID (top right)
[ ] copy ObjectID should do "ObjectId("aasdfasdfasdfasdf")"
[ ] link on ObjectId should be able to find it

done


Add Crashpad Support on Windows

Pull request checklist:

[x] CHANGELOG.md was updated, if applicable

Description
This PR adds support for building with crashpad. Currently, only Windows is supported, though support for other platforms should only require minor modifications.
The behavior is as described in #4349. The only difference now is that it's using the crashpad fork from sentry (getsentry/crashpad, modifications). It's not enabled by default - you need to enable BUILD_WITH_CRASHPAD.
Build instructions
To get meaningful minidumps, you need to have debug symbols enabled. So you need to build in Debug or RelWithDebInfo.
Here, we're building in RelWithDebInfo mode.

Configure your build environment

In the case of conan, you need to tell it to build in RelWithDebInfo mode:conan install .. -s build_type=RelWithDebInfo -b missing -pr:b=default

Configure the project

cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DBUILD_WITH_CRASHPAD=On ..

Build chatterino

cmake --build .

Build crashpad_handler

cmake --build . --target crashpad_handler

Regarding 88827c423dc8fe6a07ce6e66cb5c82b5414ce450 and the build failure: https://stackoverflow.com/questions/5971332/redefinition-errors-in-winsock2-h tl;dr: you have to include winsock2.h before Windows.h. Crashpad includes Windows.h and websocketpp includes winsock2.h (for the client). It was easier to remove the include for websocketpp's client.


Cannot make a Hyper response body "readable"

Disclaimer: I've been learning Rust for a month by writing this tool for the PHP ecosystem, been struggling a lot on this particular PR so please excuse me if I make mistakes or misunderstand how Rust or Hyper work 😇

I'm trying to build an HTTP server that passes the entire request to a FastCGI subprocess.
Servers like Nginx or Apache use to pass content to FastCGI through its stdin stream, so it's basically a stream that moves from the HTTP request to the backend server.
The FastCGI implementation I use is this one which seems pretty good so far and allows to pass contents to the FastCGI's stdin stream.
The actual content I want to pass to the FastCGI process' stdin stream is an instance of Body from a hyper::Request<Body> object.
However, content can be passed only if they implement the std::io::Read trait.
I tried dozens of solutions to transform the Response's Body object into something that is Read-able. Many docs I found on the web explain to transform it into a Vec<u8> object using .concat2() but this method doesn't exist anymore.
It seems that Body is supposed to be a Stream (as stated in #2201 at least, and in the Body's implemented traits), I was hoping to find a solution, either with the existing API, or with some future feature if it's lacking in Hyper.
So, my question is: is there a way to make the Body implement std::io::Read, or did I miss something in particular?

Thanks a lot @seanmonstar for your help! It works like a charm ❤


Abstract the saturation variable index

Needs some benchmarks

Below are the benchmarks (first and last refer to the position of the saturation variable). Most of the differences are not very significant and go different ways except for QY where first is clearly better.

 It looks like JAK-STAT 1 also finishes with First

I think for the sake of completeness it would be interesting to run benchmarks where the saturation polynomial is factored

But that would require some tweaking in the MQS ideal. We can probably merge this with First for now

For the record, the original model which stimulated this discussion we the following:
ode = @ODEmodel(
    x0'(t) = - D0 * x0(t),
    x1'(t) = x0(t) - D1 * x1(t),
    x2'(t) = m1 * x1(t) - D2 * x2(t),
    x3'(t) = m2 * x2(t) - D3 * x3(t),
    x4'(t) = m3 * x3(t) - D4*x4(t),
    x02'(t) = - D02 * x02(t),
    x12'(t) = x02(t) - g12*x12(t) - (m12 + f1/(1 + z1(t))) * ( ((z2(t))^20)/(tau+(z2(t))^20) ) * x12(t),
    x22'(t) = (m12 + f1/(1 + z1(t))) * ( ((z2(t))^20)/(tau+(z2(t))^20) ) * x12(t) - D22 * x22(t),
    x32'(t) = m22 * x22(t) - D32 * x32(t),
    x42'(t) = m32 * x32(t) - D42 * x42(t),
    z1'(t) = n*z1(t)*(m22*x22(t) + (m32- D32)*x32(t)- D42*x42(t) + m2*x2(t) + (m3-D3)*x3(t) - D4*x4(t))/(x32(t)+x42(t)+x3(t)+x4(t)),
    z2'(t) = 1,
    X1'(t) = x1(t) + x12(t),
    y1(t) = x1(t) + x12(t),
    y2(t) = x2(t) + x22(t),
    y3(t) = x3(t) + x32(t),
    y4(t) = x4(t) + x42(t),
    Y1(t) = X1(t),
    Y2(t) = C2 - (X1(t)*g12/D22 + (x0(t)/D02 +x12(t) + x22(t))/D22 + x2(t)/D2 + (x1(t) + x0(t)/D0)*(D2*g12+m1*D22)/(D1*D2*D22) ),
    Y3(t) = C3 - (X1(t)*g12*m22/(D22*D32) + m22*(x0(t)/D02 + x12(t) + x22(t) + D22*x32(t)/m22)/(D22*D32) + m2*(x2(t) + x3(t)*D2/m2)/(D2*D3) + (x1(t) + x0(t)/D0)*(g12*m22*D2*D3+m1*m2*D22*D32)/(D1*D2*D3*D22*D32) ),
    Y4(t) = C4 - (m22*m32*(X1(t)*g12 + x0(t)/D02 + x12(t) + x22(t) + D22*x32(t)/m22 + D22*D32*x42(t)/(m22*m32))/(D22*D32*D42) + m3*(m2*x2(t)/D2 + x3(t) + D3*x4(t)/m3)/(D3*D4) + (x1(t) + x0(t)/D0)*(g12*m22*m32*D2*D3*D4+m1*m2*m3*D22*D32*D42)/(D1*D2*D3*D4*D22*D32*D42) ),
    Y5(t) = z2(t)
)

from this paper.
Here is also a mathematical rationale why putting the saturation variable first should be beneficial. Consider a subfield generated by
(a^3 - b^3) / (a^2 - b^2), (a^4 - b^4) / (a^2 - b^2), (a^5 - b^5) / (a^2 - b^2)
These functions are symmetric and in fact generate the field of all symmetric functions. The corresponding MQS ideal in Q(a, b)[A, B, t] is generated by
(A^4-B^4)*(a^2-b^2)-(A^2-B^2)*(a^4-b^4), (A^2-B^2)*(a^5-b^5)-(A^5-B^5)*(a^2-b^2), (A^3-B^3)*(a^2-b^2)-(A^2-B^2)*(a^3-b^3), t*(A^2-B^2)-1
Now if we compute the Groebner basis in degrevlex with A, B, t, we get:
2*B+(a^3-a^2*b-a*b^2+b^3)*t-a-b,  2*A+(-a^3+a^2*b+a*b^2-b^3)*t-a-b,  (a^4-2*a^2*b^2+b^4)*t^2-1
Here we see a complicated quadratic equation on t, and then A and B are expressed via t by complicated formulas. One would have to reconstruct at least to degree 3 to get the right generators. On the other hand, let us compute Groebner basis with t, A, B. It would be
A+B-a-b, 2*B+(a^3-a^2*b-a*b^2+b^3)*t-a-b, B^2+(-a-b)*B+a*b
Here the role of "pivotal" element is taken by B and it yields much simpler expressions. So the idea is that the true parameters have physical meaning, so they will likely yield simpler expressions compared to t which is, in a way, an artefact of the original (often horrible) generators.


[proxy] More flexible container name -> hostname derivation

Provides a new "--hostname=substitution" flag to WeaveProxy, where
'substitution' is a sed-style substitution command. 'substitution' will be
applied to container names at launch-time, as a means to control what hostnames will
be registered in WeaveDNS.
The substitution is implemented with
https://golang.org/pkg/regexp/#Regexp.ReplaceAllString . Thus, references to
regexp substitution groups should be prepended with a dollar sign.
For instance, if we provide "--hostname='/aws-[0-9]+-(.*)/my-app-$1/'", running
a container named 'aws-12798186823-foo' through WeaveProxy will lead to WeaveDNS
registering 'my-app-foo'.
Closes #1018

we'll need a few lines in the docs too, please.

@tomwilkie Sure, I considered it but it wasn't clear to me were to include it.  https://github.com/weaveworks/weave/tree/master/docs only seems to include architectural stuff.

OK, I found /site which I hadn't payed attention to until now. I will add something there first thing tomorrow.

@tomwilkie Done, I will squash the commit once the PR is good to go.

Rebased with master (and squashed the documentation commit) to make coveralls happy

You should fetch the coverage.txt from your branch and diff it with master to see where this -5% is coming from.

@tomwilkie Thanks, will do. I suspect it's coming from proxy/ not having any tests until now.

Alternatively, instead of requireing a sed-style regex in the for /foo/bar/, how about we just have --hostname-match=foo and --hostname-replacement=bar?  It would save us a bunch of code (using regexes to parse regexes...)  Default for --hostname-match should be (.*) and --hostname-replacement should be $1
Also, I wouldn't bother including this in the weave usage text; this feature is meant for integrators only.  Just include it in the site/ docs.

@tomwilkie I personally like the /regexp/substitution/ better, @rade also seems to agree https://github.com/weaveworks/weave/issues/1018
Also, I am not sure it makes sense not to document it in usage if it's in the docs. If we want it to be hidden from normal users then it shouldn't appear in the site.

@rade what do you think?  I suggested this as I'm not sure the parsing of the sed-style regexps is worth the extra code.

I pushed a commit which addressed all the code comments (except for @tomwikie 's  design remark). Also, I pushed a change to surround relevant regexps with ^ and $.
Please make sure to squash the changes before merging.

I'm not sure the parsing of the sed-style regexps is worth the extra code.

Agreed, and I am not sold on the UI benefits either.
So two options it is, with the defaults as you suggest. But I do think they should be documented in the usage.

OK, I will rework the PR to use those two options.

@rade @paulbellamy @tomwilkie please review

@tomwilkie It seems there are GCP quota problems in circleci https://circleci.com/gh/weaveworks/weave/1835

Yes I've just cleared out some stale VMs.  VMs aren't cleaned up if you
click cancel.
On Tue, Jul 14, 2015 at 4:15 PM, Alfonso Acosta<EMAIL_ADDRESS>wrote:

@tomwilkie https://github.com/tomwilkie It seems there are GCP quota
problems in circleci https://circleci.com/gh/weaveworks/weave/1835
—
Reply to this email directly or view it on GitHub
https://github.com/weaveworks/weave/pull/1126#issuecomment-121279065.

@rade Thanks. Out of curiosity, is there a reason why fix-commits are not squashed before merging? (Commits like ded3d6b40bdab5871b86731bd28cfdb0c3a67fe5 don't make any sense out of context) I added extra commits to make clear what was being changed, with the intention of squashing them before merging. Should I had kept amending instead?

I didn't realise you wanted to squash some commits. Better leave a note in the PR next time.

@rade Sorry, I was expecting the merger to check the commits before going ahead. This is probably not the forum for this discussion but, to avoid these situations, wouldn't it make sense to let the author merge the code himself after getting a "go ahead"?

I was expecting the merger to check the commits before going ahead.

I did. I'm not bothered by the non-squashed commits; There is enough context to trace them back to this PR.

This is probably not the forum for this discussion

Correct.

@rade ok, fair enough :)


Difference

output a number of file equal to the reference files or less.
Enable Exact intersection and normal intersection.

Corrected in c9473b


sync io.netcdf with upstream

Upstream is https://bitbucket.org/robertodealmeida/pupynere. See discussion on gh-3429.

Was done in gh-5228. Pupynere is no longer developed.


Utterances installation error appears when viewing comments.

URL
https://stremio-addons.netlify.app/mediafusion-elfhosted
Description

Error: utterances is not installed on danamag/stremio-addons-list. If you own this repo, install the app. Read more about this change in the PR.

Language of Content
English (en-GB)

https://github.com/danamag/stremio-addons-list/issues/737#event-15286496445

@danamag, did you not read the issue? There's no template except an add-on request. This isn't a request for an add-on.


Ensure correct SSH permissions check for private and restricted users

Repositories owned by private users and organisations and pulls by restricted users
need to have permissions checked. Previously Serv would simply assumed that if the
user could log in and the repository was not private then it would be visible.
Fix #17364
Signed-off-by: Andrew Thornton<EMAIL_ADDRESS>

-> #17373


Allow documentation for libraries with api-* prefix

My client has a lot of libraries, and we build Gulp tasks to document them, thanks to this library. However, we also have a lot of libraries that are named with this pattern: api-[name-of-endpoint].
While running our documentation tasks locally work fine, we are unable to publish any documentation for libraries that have that prefix, all *.css and *.js files are missing.
Here is an example:
BROKEN DOCS WITH api-* PREFIX
[Jenkins doc task root]/css/bootstrap.min.css

FUNCTIONAL DOCS
[Jenkins doc task root]/[functional-documented-lib-directory]/doclinks/1/css/bootstrap.min.css

From what I understand, the assets copied into the documentation directory go one directory higher than any directory starting with "api".
Looking at a generated index.html, I can see this at line 21:
rUrl = /(#!\/|api|index[^\.]*\.html).*$/,

This regex would seem to change the base URL, however it breaks in the current case.
Is there a way to add an exception, or to remove this part? Renaming our libraries is not a possible solution.
Thanks in advance for any guidance.

So it turns out the issue is that the current code is setting the default section as 'api'. By not providing a way to remove sections altogether, this is breaking page rendition on deployed documentations of libs with a 'api' prefix.
I have experimented and added an option to disregard sections, and this works with our libraries as we expect: https://github.com/jansensan/gulp-ngdocs/commit/3241020649d5aa3b4c0eca1797ce4b2689f09496
Is there a way currently in the code to achieve the same behavior? Or would making a PR with those changes work with you?


Hi,

Hi,
I have trained NER BERT model for my custom data.
1)Is BERT is capable to predict unseen data which is not present in Train Dataset and present in Test Dataset.
2)Is BERT is capable to predict phrasal keyword in NER or it simply identify only single tokens in NER.(for ex if SKILLS is label and Data science is predicted text ---- then {Data Science:SKILL},
Is it possible to detect 'Software Development Lifecycle'  as predicted text  as it is not a single token.)
Thanks,


Expensify Card - Expensify Card link opens editable details page when card is deactivated

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

Version Number: 9.0.46-1
Reproducible in staging?: Y
Reproducible in production?: N/A - new feature, doesn't exist in prod
If this was caught during regression testing, add the test name, ID and link from TestRail<EMAIL_ADDRESS>Issue reported by: Applause Internal Team
Action Performed:

Go to staging.new.expensify.com
[Admin] Asssign a virtual card to member.
[Admin] Go to Expensify Card.
[Admin] Click on the member with the virtual card in Step 2.
[Admin] Click Deactivate card.
[Admin] Deactivate the card.
[Admin] Go to workspace chat with the member in Step 2.
[Admin] Click on Expensify Card link.

Expected Result:
Not here page should show up.
Actual Result:
Expensify Card details page opens. Admin can edit the fields even though the card is already deactivated.
Workaround:
Unknown
Platforms:

[x] Android: Native
[x] Android: mWeb Chrome
[x] iOS: Native
[x] iOS: mWeb Safari
[x] MacOS: Chrome / Safari
[x] MacOS: Desktop

Screenshots/Videos
https://github.com/user-attachments/assets/36b55038-43f1-4edf-9185-e86ae9bd6e65

View all open jobs on GitHub

We think that this bug might be related to #wave-collect - Release 2

I will take over this one

@truph01 This bug happens after your PR is merged. Could you please take a look at this issue?

Hmm I don't think this is really a regression from https://github.com/Expensify/App/pull/50039. That PR just allows easier access to this route that was already missing access checks as in this proposal. So on production if you copy the link before deactivating the card and open it after you also can access the details.
I also don't think this is really a blocker, as it's not a particularly big deal if you can still edit the card details.

I think the solution here is that on the Card Details page, we need to look if the cardID from the route is available, if the card was deactivated, it was removed from onyx so it would not be there
@jjcoffee I think we need to treat it as a regression from that PR, because it enables this flow to be much more exposed
@daledah I believe this problem is for both pages - for admin and the wallet page for the user

@mountiny @DylanDylann I think this bug is not related to my PR, since it can be reproduced in production:
https://github.com/user-attachments/assets/cfd36b05-afae-443d-8670-91fad2b2fa74

@truph01 you are deeplinking, which is not a normal user flow.
After your PR, there is a link that takes you to this page, so I consider it as a consequence of the PR. Are you able to look into a fix please?

@mountiny @daledah Sure, I am investigating it now

@jjcoffee

To address the issue, I plan to update this:

https://github.com/Expensify/App/blob/41c0b9ddd5576cf216db63cfc0d40ef74995fadc/src/pages/workspace/expensifyCard/WorkspaceExpensifyCardDetailsPage.tsx#L74-L75
to:
    const isLoadingCard = isLoadingCardListFromOnyx || card?.isLoading;
    const shouldDisplayNotFoundPage = !isLoadingCard && !card?.cardID;

    if (isLoadingCard) {
        return <FullScreenLoadingIndicator />;
    }

    return (
        <AccessOrNotFoundWrapper
            shouldBeBlocked={shouldDisplayNotFoundPage}

The card?.isLoading === false is to check whether the card data is fetched successfully via API call:

https://github.com/Expensify/App/blob/41c0b9ddd5576cf216db63cfc0d40ef74995fadc/src/pages/workspace/expensifyCard/WorkspaceExpensifyCardDetailsPage.tsx#L60-L62
To set the isLoading value, this function should be updated to:

function openCardDetailsPage(cardID: number, workspaceAccountID?: string) {
    const authToken = NetworkStore.getAuthToken();
    const optimisticData: OnyxUpdate[] = [];
    const successData: OnyxUpdate[] = [];
    const failureData: OnyxUpdate[] = [];
    if (!authToken) {
        return;
    }
    if (workspaceAccountID) {
        optimisticData.push({
            onyxMethod: Onyx.METHOD.MERGE,
            key: `${ONYXKEYS.COLLECTION.WORKSPACE_CARDS_LIST}${workspaceAccountID}_${CONST.EXPENSIFY_CARD.BANK}`,
            value: {
                [cardID]: {
                    isLoading: true,
                },
            },
        });

        successData.push({
            onyxMethod: Onyx.METHOD.MERGE,
            key: `${ONYXKEYS.COLLECTION.WORKSPACE_CARDS_LIST}${workspaceAccountID}_${CONST.EXPENSIFY_CARD.BANK}`,
            value: {
                [cardID]: {
                    isLoading: false,
                },
            },
        });

        failureData.push({
            onyxMethod: Onyx.METHOD.MERGE,
            key: `${ONYXKEYS.COLLECTION.WORKSPACE_CARDS_LIST}${workspaceAccountID}_${CONST.EXPENSIFY_CARD.BANK}`,
            value: {
                [cardID]: {
                    isLoading: false,
                },
            },
        });
    }

    const parameters: OpenCardDetailsPageParams = {
        authToken,
        cardID,
    };

    API.read(READ_COMMANDS.OPEN_CARD_DETAILS_PAGE, parameters, {optimisticData, successData, failureData});
}

and update:
https://github.com/Expensify/App/blob/41c0b9ddd5576cf216db63cfc0d40ef74995fadc/src/pages/workspace/expensifyCard/WorkspaceExpensifyCardDetailsPage.tsx#L60-L62
to:
    const fetchCardDetails = useCallback(() => {
        if (!cardID || !workspaceAccountID) {
            return;
        }

        Card.openCardDetailsPage(Number(cardID), String(workspaceAccountID));
    }, [cardID, workspaceAccountID]);

All the changes work well:

https://github.com/user-attachments/assets/c042fc76-c0e4-4ce8-896b-10eb14c73527
Do you have any feedback about this approach?

I think this is good for now, but we should think through a better UX

you are deeplinking, which is not a normal user flow.

Using a deep link is simply the easiest way to reproduce the bug. Alternatively, you can reproduce the bug in production with the following steps::

Open the card detail page in two tabs.

Deactivate the card in tab 2.

There is no "not here page" in tab 1.

https://github.com/user-attachments/assets/059624a9-aef4-4f05-a5bd-1fbc6a71d24d

@truph01 I am not disagreeing with you, I am just noting that normal user would not run into this. People are not copying cardIDs and then composing the urls based on that.

@jjcoffee Please take a look at my comment above, then I open PR.

@truph01 can you please raise the PR?

I am implementing PR

@mountiny After applying my changes in PR, I encountered a few BE issues that blocked my testing. Here are the steps:

In device A, login as user A (member). In device B, login as user B (admin).
[User B]: Issue a new card to user A.
[User A]: Open the workspace chat. Observe that there is no "issued<EMAIL_ADDRESS>a virtual Expensify Card! The card can be used right away." message (Bug 1)
[User A]: Fresh the page. The message mentioned in step 3 appears.
[User A]: Click on the Expensify Card link in the message mentioned in step 3.
[User A]: Verify the Not Found page appears. (Bug 2)
[User A]: Clear cache and restart.
[User A]: Click on the Expensify Card link in the message mentioned in step 3.
[User A]: Verify the card detail is displayed properly.

Do you think we need to fix these bugs from BE side first?

Can you share video for bug 2 @truph01 ?

@allgandalf I updated the video for two bugs in above comment

the not found page will get triggered if a certain thing is missing right

It is because the cardsList data does not contain the data of the target cardID.

@truph01 we do push these changes using pusher so it just might be that there are some delays, I would not worry about it now as long as you can fix the bug in this issue

Had a discussion here, but TLDR is
Marking this as a non-blocker since it’s a flow that I don’t anticipate many people will run into on NewDot yet, and then we can follow up with a more complete fix once Vit and Joel are back online

Bumping for Melv. Looks like we're just waiting on @mountiny and @jjcoffee to come back

I think we are going to add a new report action when the card is deactivated, with that, I think we can just remove the link from the message when the card is not locally available in the cardList

@truph01 @jjcoffee could you please update the solution so the report action does not have a link in case the cardID is not locally stored in the cardList or in the cards_ (in case of admin)

I am investigating

could you please update the solution so the report action does not have a link in case the cardID is not locally stored in the cardList or in the cards_ (in case of admin)

@jjcoffee Can you pre-review my solution in this draft PR? Then I will add all videos then open PR.

@truph01 The approach looks good, please proceed!

PR is ready

I don't think any payment is due here as this was a regression fix.

Thanks, @jjcoffee! 👍

I think we'll still need the BZ Checklist completed. Can you complete that when you get a moment?

The PR that introduced the bug has been identified. Link to the PR: https://github.com/Expensify/App/pull/50039
The offending PR has been commented on, pointing out the bug it caused and why, so the author and reviewers can learn from the mistake. Link to comment: https://github.com/Expensify/App/pull/50039#issuecomment-2456572296
A discussion in #expensify-bugs has been started about whether any other steps should be taken (e.g. updating the PR review checklist) in order to catch this type of bug sooner. Link to discussion: N/A - more thorough testing was required
Determine if we should create a regression test for this bug. Yes
If we decide to create a regression test for the bug, please propose the regression test steps to ensure the same bug will not reach production again.

Regression Test Proposal

[Admin] Asssign a virtual card to member.
[Admin] Go to Expensify Card.
[Admin] Click on the member with the virtual card in Step 2.
[Admin] Click Deactivate card and deactivate the card.
[Admin] Go to workspace chat with the member in Step 2.
[Admin] Verify in the issue card message that the Expensify Card text is not a link.

Do we agree 👍 or 👎


Stray semicolon in code example

Stray semicolon in code example:
services.AddSignIn(Configuration, "AzureAd");
        .AddWebAppCallsProtectedWebApi(Configuration,
                                       initialScopes: new string[] { "user.read" })
        .AddInMemoryTokenCaches();

> ... , "AzureAd"); <-----

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

ID: f81a334a-eccc-b862-1a45-e58d151b8621
Version Independent ID: cee85377-c930-2e20-715d-004e5431a92f
Content: Configure a web app that calls web APIs - Microsoft identity platform
Content Source: articles/active-directory/develop/scenario-web-app-call-api-app-configuration.md
Service: active-directory
Sub-service: develop
GitHub Login: @jmprieur
Microsoft Alias: jmprieur

Thanks @guardrex for catching this.
I've prepared a PR to fix it.

Closing this out since a fix has been pushed :)


Question: alignment inside row/col

I have a structure

                       -- content ---

How would i go about aligning the content in the center of the page?

offset-l6. Please see the grid documentation.


Delete .github/workflows/qodana.yml

:white_check_mark: Build Sankhya-SDK-dotnet 3.0.80 completed (commit https://github.com/guibranco/Sankhya-SDK-dotnet/commit/c42b9181bb by @guibranco)


Fails to install gem on mswin64

gem install prism for mswin64 Ruby fails due to No such file or directory - make.
(Calling make during extconf.rb seems like an extremely bad idea to me.)
C:\Users\YusukeEndoh>.\ruby\local\bin\ruby -v
ruby 3.4.0dev (2024-12-03T06:49:57Z master f6b62d001a) +PRISM [x64-mswin64_140]

C:\Users\YusukeEndoh>.\ruby\local\bin\gem install prism
Building native extensions. This could take a while...
ERROR:  Error installing prism:
        ERROR: Failed to build gem native extension.

    current directory: C:/Users/YusukeEndoh/scoop/persist/ruby/gems/gems/prism-1.2.0/ext/prism
C:/Users/YusukeEndoh/ruby/local/bin/ruby.exe extconf.rb
checking for prism.h in C:/Users/YusukeEndoh/scoop/persist/ruby/gems/gems/prism-1.2.0/include... yes
checking for prism/extension.h in C:/Users/YusukeEndoh/scoop/persist/ruby/gems/gems/prism-1.2.0/ext... yes
checking for whether -fvisibility=hidden is accepted as CFLAGS... no
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

Provided configuration options:
        --with-opt-dir
        --with-opt-include=${opt-dir}/include
        --without-opt-include
        --with-opt-lib=${opt-dir}/lib
        --without-opt-lib
        --with-make-prog
        --srcdir=.
        --curdir
        --ruby=C:/Users/YusukeEndoh/ruby/local/bin/ruby
        --enable-build-debug
        --disable-build-debug
        --enable-build-minimal
        --disable-build-minimal
extconf.rb:51:in 'Kernel#system': No such file or directory - make (Errno::ENOENT)
        from extconf.rb:51:in 'block in Object#make'
        from extconf.rb:50:in 'Dir.chdir'
        from extconf.rb:50:in 'Object#make'
        from extconf.rb:136:in '<main>'
Running make build/libprism.a with {"SOEXT" => "dll", "MAKEDIRS" => "$(COMSPEC) /E:ON /C $(top_srcdir:/=\\)\\win32\\makedirs.bat", "RMALL" => "$(COMSPEC) /C $(top_srcdir:/=\\)\\win32\\rm.bat -f -r"}

To see why this extension failed to compile, please check the mkmf.log which can be found here:

  C:/Users/YusukeEndoh/scoop/persist/ruby/gems/extensions/x64-mswin64-140/3.4.0+1/prism-1.2.0/mkmf.log

extconf failed, exit code 1

Gem files will remain installed in C:/Users/YusukeEndoh/scoop/persist/ruby/gems/gems/prism-1.2.0 for inspection.
Results logged to C:/Users/YusukeEndoh/scoop/persist/ruby/gems/extensions/x64-mswin64-140/3.4.0+1/prism-1.2.0/gem_make.out

Do you have make installed? (if so, how would it get added to PATH?)
Or only nmake?
https://github.com/ruby/prism/blob/main/Makefile needs make/gmake, at least in the current state. It contains the logic to build libprism.

Calling make during extconf.rb seems like an extremely bad idea to me.

I think it is common and fine, here it is used to build libprism.so/dylib/dll, I think sqlite3 and nokogiri and plenty of other gems do the same when they need to build a regular dynamic library not linking to any Ruby API, and then an extension library linking to that library.
Note that we cannot just "flatten" all files for libprism in the extension easily, because the FFI backend and other cases needs a libprism.so/dylib/dll.

@eregon do we really need to call make in the CRuby case though? It feels like extconf.rb could just compile the C files on its own without building the .a file first.  I don't understand why this step is necessary (on CRuby anyway).

@flavorjones would probably have a little more context on this since he helped put this together. But it's my understanding that extconf's responsibility (in the current setup) is to compile the extension, whereas we rely on make to compile the static library. I think we could change it, truthfully I'm not sure of the implications.

AFAICT, we would have to copy the Prism source in to the ext folder when we compile the extension.  But I don't think that's a problem.

That's what I meant by "flatten" above. One concern is we would stop being in control of the cflags, which I think on its own is a non-trivial concern, it seems best to always compile prism non-extension C files with a consistent set of flags and a unique way to describe how to compile them (the Makefile at the root).
For example I think different flags like optimization levels or some -f flags could break Prism.
Different warnings flags could miss important warnings or cause compilation to fail if -Werror is added somehow.
Right now, no matter how Prism is used (C extension, FFI, in JRuby, in TruffleRuby, etc), it's always compiled with the same flags, I think this is valuable.
Note the libprism.a is also used by TruffleRuby, so we would not be able to remove that logic but we'd have yet another way to build Prism, which seems bad complexity-wise.

But I don't think that's a problem.

One consequence I can think of is in development one would see 2 copies of each .c file in their editor/IDE. That's a potential to waste some time editing the wrong file.
@mame Could you confirm on your system you only have nmake, no make or gmake?
If that's the case, indeed it's annoying and it might be worth the unfortunate workaround of copying the prism C files under ext/ in extconf.rb.
OTOH, I suspect other gems require make/gmake, so one might consider an environment without make to be incomplete to install gems with C extensions (in general).

For example I think different flags like optimization levels or some -f flags could break Prism.

This seems bad doesn't it?  It feels like Prism should work with any optimization level or -f flag.  If it doesn't, it seems like we should fix it.

Different warnings flags could miss important warnings or cause compilation to fail if -Werror is added somehow.

We should maintain a Makefile in Prism and test compilation with these different flags.

Note the libprism.a is also used by TruffleRuby, so we would not be able to remove that logic but we'd have yet another way to build Prism, which seems bad complexity-wise.

It seems like the Prism gem is treating the Prism C library (libprism.a) as if it's a "package that hasn't been installed yet", and is taking on the responsibility of compiling / installing that package on the user's system. In other words, we're taking on the complexity of knowing how to correctly install a C library on all systems.  This seems fraught to me (and is a problem that mkmf is designed to solve).
Is TruffleRuby using the .a file that gets built along side this gem?  Presumably you can install TruffleRuby without the Prism gem?

I don't have make or gmake because it is a pure Windows  with Visual C++. nmake is available. I followed this instruction to build ruby.
I agree with @tenderlove . Calling the make command on your own could require the reinvention of some parts of mkmf. It would waste your (and users') time.

Calling "make" from the extconf was intended to be a temporary solution to help transition the project from "just build a static archive" to "ship a static archive and a shared object file and also make a gem out of it".
There were a few different opinions on how to proceed, and it wasn't clear how TruffleRuby integration or CRuby integration was going to be implemented. My recollection is that once we had something working, we all moved onto more urgent tasks rather than argue about how to finish untangling it.

There were a few different opinions on how to proceed, and it wasn't clear how TruffleRuby integration or CRuby integration was going to be implemented.

I think my solution in #3289 continues to support CRuby and non-CRuby implementations correctly.  IMO we should think about the Prism repository as actually containing 2 different projects:

A Ruby parsing C library libprism
A Ruby gem that wraps the C library prism

I think the goals for libprism are as follows:

It can parse Ruby code and produce an AST
It is an independent, stand-alone parser (it has no dependences on CRuby, or hopefully any other library)

The second goal means that fully embedding the source of libprism in a gem (say a gem called "prism"), or even in a programming language runtime (say "CRuby") should be a supported / valid use cases.
Since libprism is a stand-alone C library which can be embedded for use in any project, it's important that we maintain a Makefile (or configure scripts, etc) so that people who want to build libprism can do so, and also so that we can run CI with different C compilers and different compilation flags.
Anyway, I don't think anything I've written above is contrary to anything anyone else here has said. But it's the mental framework I used for the changes in #3289, and why I think it's ok for the gem to stop producing an intermediate .a file, and just compile / link against the libprism C source files directly.


util: Added cli tool for gem5 resources

create_resource is functional but need polishing

Validate and Update resource are work in progress.

Change-Id: I6ec65ccef72257dd9ea6e5e83019306834be7367

Note: Cli will not work without the URI as an env variable

I think the direction you were heading in your old design was too haphazrd and was going to make it hard for you to maintain, expand, test, and improve going forward.
I pushed some patches which I hope will  show a slightly better approach. Nothing I've submitted is complete, or even what you may need to fully complete the task, but it just serves as an example/tutorial of a better way to do things.
I'd advise going through each commit one-by-one to see the development.
As a very high-level note I'll say that you should think about creating a design with is easy to extend without modification. If i want to create a new datasource I should be able to create a new class which implements an API, then just plug it in. If modification is necessary then the modification should only affect that one thing, in one place. If the schema changes I want to have just one place I change it in this tool, nothing more.

I'm not sure exactly what you were doing but I fixed the bugs Iw as running into with this workflow:
pip install -e . # Installs the tool.
gem5-resources-manager # Run the tool.

@Harshil2107 : I'll let you reopen this if you feel differently but I think we'll never get this in and should just close this and call it a dead end project (we can always change our mind later). If we didn't need it in the last 6 months, I doubt we'll ever need it.
You may want to see if there's anything here worth salvaging given your work on gem5-resources in the past few months. Probably not of all of it, but maybe some? It's up to you. If you still feel like this may be of use at some point but you won't work on it anytime soon, create an issue explaining the idea a bit and link to this so someone else could theoretically have a go

I moved away from needing a cli, as I feel that I only have 2 use cases that are prettry far away.
1: Just add of update one (or a few very different ones) resource for that the current resource manager works
2: To add or update a bunch of resources and in most cases these are unique among each change so I think just writing a script to create the JSON is faster.
I did push some helpful scripts to gem5/util if I was using the same ones a decent amount.


Deprecated dependency: cpprestsdk is now in maintenance mode

As of March 8th, cpprestsdk is in maintenance mode.
From the README:
cpprestsdk is in maintenance mode and we do not recommend its use in new projects. We will continue to fix critical bugs and address security issues.
There are currently about 700 open issues, and the last commit was on March 11th.
Given that the project appears essentially abandoned (and is unlikely to receive fixes for new compilers or boost releases), are there any plans to migrate to a different REST library?
This currently doesn't seem to be a pressing issue, but in the longer term the cpprestsdk dependency may cause compatibility problems.

That's a good question. Personally (and definitely not speaking for the current team at Sony), I think investigating options here is a good idea. At the point that cpprestsdk was selected, it provided the best balance of features and platform and compiler support. Other potential libraries were more bloated or immature. That has changed. However, there are obviously parts of the nmos-cpp design that are currently tied to the way that cpprestsdk provides these features.
I agree that in the short term, there are few concerns, nmos-cpp is fairly stable and both it and cpprestsdk have weathered a series of evolutions of platform and compiler already. There are no obvious missing infrastructure features required for current or near term NMOS enhancements. The cpprestsdk codebase could be maintained fit for this project's purpose for sometime.
That said, open-source C++ cross platform networking libraries like Boost.Beast have matured in the last couple of years, and with json support provided by e.g. nlohmann/json or Boost.JSON, and several options for async task management to replace pplx, nmos-cpp could be transitioned, especially if the minimum C++ standard requirement were updated past GCC 4.8—era C++11.
This issue could be a good place to identify the options between those extremes.

I thought I'd make a start on a list of features to look for when evaluating alternative libraries, besides the obvious ones of OSS licence, level of project maintenance/activity, cross platform, C++ language version/compiler support (CI tests!), sufficient performance, Conan/vcpkg support, and recursively for additional dependencies...
Network I/O Features
Used by nmos-cpp now:

HTTP/1.1 client
HTTP/1.1 server
WebSocket client
WebSocket server (one of nmos-cpp's cpprest extensions)
Secure comms (TLS 1.2 and 1.3) for all of above
Async connection processing on server side
Connection pooling on client side
Socket options
Express style routing (one of nmos-cpp's cpprest extensions)

Nice to have (things cpprestsdk doesn't provide):

HTTP pipelining (server- and client-side)
HTTP to WebSocket upgrade
Binding to specific multiple interfaces

Potentially useful in the future:

HTTP/2, etc.

JSON Features
Used by nmos-cpp now:

JSON serialization and deserialization from/to 'DOM' and via events (an nmos-cpp extension to cpprest)
JSON syntactic validation
JSON merge patch (ish, another extension)
JSON Schema (draft-04) validation (another extension)
JSON 'DOM' construction from C++ nested braced initializer list (yep, another extension)

Nice to have:

JSON Schema draft-07 (and newer, it inches closer to RFC!)

I'm fully in agreement with all you've said (and I'm certainly under no impressions that swapping out the library would be trivial!). As you said - I think this issue would be a good place to discuss options.
REST Libraries
I'm currently in the process of building a REST server for one of our products and I did some investigation into available libraries (which was when I learned that cpprestsdk is in maintenance mode) so I have some fairly barebones notes about some of the options.
I looked at Pistache, Restbed, and Boost.Beast - though I'm sure there are other viable alternatives.
Pistache:

C++17
HTTPs support
No boost dependency
Basic "hello world" example is 32KiB
Not version 1.0 yet

Pistache felt fairly ergonomic to use, but the documentation was rather sparse. The project's immaturity worried me a bit.
Restbed:

AGPL or proprietary license

I pretty much stopped investigating Restbed after I saw the licensing. Apart from that, I got the impression it was fairly high-quality.

Boost.Beast:

C++11 with Boost, but can be used standalone with C++17
Introduced in Boost 1.66
HTTP/1.1 client/server
(Secure) websocket client/server
TLS 1.1, 1.2, 1.3 client/server
Async client/server
No connection pooling built-in
No build-in routing
HTTP to websocket upgrade

I eventually settled on Boost.Beast. It's very low level (no built-in routing, for example) and it's also my first foray into Boost so it's been a fairly steep learning curve for me. But given that it's a part of Boost, I don't really have any concerns about quality or maintenance. It ticked all the boxes I needed, and it looks like it almost satisfies all of the criteria you laid out - except for routing and connection pooling - though I believe you can accomplish pooling with Boost.ASIO, but I think you'd have to roll your own router.
JSON Libraries
I'm also using nlohmann JSON on the same project; so far I'm fairly happy with it, although there are some more modern C++ features that I'd have liked to see in it (random example: no built-in support for std::optional, but you can work around that). If I recall correctly the library targets C++11, so the std::optional annoyance is understandable.
I've used JsonCPP in the past and I'm not a big fan of it - without diving into details, I found it encourages difficult-to-maintain code.
Of the other JSON libraries I can name off the top of my head:

RapidJSON: I've never used it, so I can't really comment on it.
Boost.JSON: I've also never used it, but it seems to be only available in Boost >=1.75, which might be a bit too recent for a project like this where some of the users may be tied to ancient vendor-supplied toolchains.

https://github.com/yhirose/cpp-httplib

https://github.com/dfleury2/beauty

We've heard a request to use OpenSSL 3.0 rather than OpenSSL 1.1 as well, since the latter will be end-of-life in September 2023 - https://www.openssl.org/blog/blog/2023/03/28/1.1.1-EOL/.
Boost.ASIO supports OpenSSL 3.0 since 1.79.0 (see release notes)
We hope there are no additional direct dependencies on OpenSSL APIs from WebSocket++ (websocketpp) or C++ REST SDK (cpprestsdk)...


Fix the grammar: an operator definition should use qualId

Instead of normalCallName, the syntax rule for the operator definition should refer to qualId. It should not be possible to use the builtin operators in new definitions.
https://github.com/informalsystems/quint/blob/15596529a44749255219d211ef5e4960d09b198a/quint/src/generated/Quint.g4#L44

Blocked by  the discussion in #1249

It sounds like this is not actually causing problems currently, and we have better error reporting UX with the current approach, so we'll close this for the moment. If end up with a clear problem posed by this quirk in our grammar we can rethink.


model.predict time stdout

This is rather a question regarding support as I am yet to find an answer.
model.predict() outputs a time to stdout when calling on Keras model. For a given step i am given a time in milliseconds.
May I ask what the time includes? Does it include only pure forward pass through network, or is data copying to the GPU's DRAM or are some state initializations also included?
Thank you

The first step (or two steps sometimes) cover compilation time too (which is why they tend to take much longer). The other steps cover a full forward pass, which includes updating the variables.

Hey there, thanks for the quick response!
By first step you mean calling the model.predict for the first time (or second, as you said) in the given session? Hence making the subsequent calls being only the forward pass through the network? In both cases, the time reported in the stdout are covering only said phases?
Sorry if I am misunderstanding this.
Warm regards,
wortelus

By first step you mean calling the model.predict for the first time (or second, as you said) in the given session?

predict() (and fit, evaluate) are loops. The inner content of that loop is called a "step". One call to predict() might have, say, 1000 steps. Compilation only happens at the first step, the first time predict() is called. Subsequent steps and subsequent calls to predict() reuse the same compiled graph.

Hence making the subsequent calls being only the forward pass through the network? In both cases, the time reported in the stdout are covering only said phases? Is the data transfer between memory and GPU also included?

Yes.

I now understand that the time I get to stdout is part of Keras callback using, specifically Progbar class, with its methods that are executed before and after the main loop, as seen here from trainer.py
self.make_predict_function()
self.stop_predicting = False
callbacks.on_predict_begin()
outputs = None
with epoch_iterator.catch_stop_iteration():
    for step, iterator in epoch_iterator.enumerate_epoch():
        callbacks.on_predict_batch_begin(step)
        data = get_data(iterator)
        batch_outputs = self.predict_function(data)
        outputs = append_to_outputs(batch_outputs, outputs)
        callbacks.on_predict_batch_end(step, {"outputs": batch_outputs})
        if self.stop_predicting:
            break
callbacks.on_predict_end()
outputs = tree.map_structure_up_to(
    batch_outputs, potentially_ragged_concat, outputs
)
return tree.map_structure(convert_to_np_if_not_ragged, outputs)

I suppose the compilation happens under self.make_predict_function().
I now understand the source of the time, as the time is managed under callbacks.on_predict_begin() and callbacks.on_predict_end(), respectively. My question is then at what point in the predict() is the data loaded into the GPU, so I can know if the time within the progress bar includes the IO GPU<->memory operations or if (some) data are already present on the GPU beforehand.
Kind regards,
wortelus


Record object appears in "data" and "included" simountaneously

Version: v1.0.0
Bug description:
I have a recursive (tree) hierarchy of categories. So I have "Category" model and associated "categories" JSON:API resource. The database structure is very simple. I have just these columns: id, name, parent_id (nullable). The "parent_id" contans the ID of the parent category or it's null if the category has no parent (root category). On the Category model I have "parent" relationship. Now the bug... Imagine I have these 3 categories: A (id 1), B (id 2) and C (id 3). B is the child of C and C is the child of A. So the tree would look like this A -> C -> B. When I hit my API with the following URL .../api/categories?include=parent I got the response. In the "data" field of the response all 3 resources (categories) are presend with correct parent relationship. The problem is, that ONLY category C is present in the "included" field of the response. I mean... The C category is presend in "data" and in "included" as well. I was playing with this for a while and I found out that it's because of the IDs. It seems like the library is going through categories 1, 2, 3 and it pushes "missing" category to "included" field. So ti parses category A (id 1) at first. There is no parent so it continues to B (id 2). B is the child of C (and we haven't parse C yet...) so it pushes the C to "included". Finally if parses C and pushes it to "data" as well.
Im not 100% sure what official JSON:API spec is saying about such a scenario, but I think that one record should NOT be present in "data" and in "included" as well. In the screenshot, category with id 42 is present in both.
Also notice, that the values of attributes are present in the response twice. In this case the string "Nitrogen generator" is present in data and in included. If there would be let's say 50 attributes, the same data would be present twice in the response for no reason and the response would be too big for no good reason.

Hi. Please can you provide the JSON as properly formatted text? I find that image exceptionally difficult to read.

@lindyhopchris It's a little bit different response, but the principle is the same. The resource object with type product-categories and id 36 is present in included and in data as well.
{
  "jsonapi": {
    "version": "1.0"
  },
  "data": [
    {
      "type": "product-categories",
      "id": "34",
      "attributes": {
        "name": "Generator",
        "createdAt": "2021-09-09T12:23:55.000000Z",
        "updatedAt": "2021-09-10T13:39:03.000000Z"
      },
      "relationships": {
        "parentCategory": {
          "links": {
            "related": "http://localhost:8080/api/jsonapi/product-categories/34/parent-category",
            "self": "http://localhost:8080/api/jsonapi/product-categories/34/relationships/parent-category"
          },
          "data": null
        },
        "childCategories": {
          "links": {
            "related": "http://localhost:8080/api/jsonapi/product-categories/34/child-categories",
            "self": "http://localhost:8080/api/jsonapi/product-categories/34/relationships/child-categories"
          }
        },
        "productTypes": {
          "links": {
            "related": "http://localhost:8080/api/jsonapi/product-categories/34/product-types",
            "self": "http://localhost:8080/api/jsonapi/product-categories/34/relationships/product-types"
          }
        },
        "componentDependencies": {
          "links": {
            "related": "http://localhost:8080/api/jsonapi/product-categories/34/component-dependencies",
            "self": "http://localhost:8080/api/jsonapi/product-categories/34/relationships/component-dependencies"
          }
        },
        "productAttributeDefinitions": {
          "links": {
            "related": "http://localhost:8080/api/jsonapi/product-categories/34/product-attribute-definitions",
            "self": "http://localhost:8080/api/jsonapi/product-categories/34/relationships/product-attribute-definitions"
          }
        },
        "productTypeAttributeDefinitions": {
          "links": {
            "related": "http://localhost:8080/api/jsonapi/product-categories/34/product-type-attribute-definitions",
            "self": "http://localhost:8080/api/jsonapi/product-categories/34/relationships/product-type-attribute-definitions"
          }
        }
      },
      "links": {
        "self": "http://localhost:8080/api/jsonapi/product-categories/34"
      }
    },
    {
      "type": "product-categories",
      "id": "37",
      "attributes": {
        "name": "Modular",
        "createdAt": "2021-09-09T12:24:11.000000Z",
        "updatedAt": "2021-09-10T13:39:10.000000Z"
      },
      "relationships": {
        "parentCategory": {
          "links": {
            "related": "http://localhost:8080/api/jsonapi/product-categories/37/parent-category",
            "self": "http://localhost:8080/api/jsonapi/product-categories/37/relationships/parent-category"
          },
          "data": {
            "type": "product-categories",
            "id": "36"
          }
        },
        "childCategories": {
          "links": {
            "related": "http://localhost:8080/api/jsonapi/product-categories/37/child-categories",
            "self": "http://localhost:8080/api/jsonapi/product-categories/37/relationships/child-categories"
          }
        },
        "productTypes": {
          "links": {
            "related": "http://localhost:8080/api/jsonapi/product-categories/37/product-types",
            "self": "http://localhost:8080/api/jsonapi/product-categories/37/relationships/product-types"
          }
        },
        "componentDependencies": {
          "links": {
            "related": "http://localhost:8080/api/jsonapi/product-categories/37/component-dependencies",
            "self": "http://localhost:8080/api/jsonapi/product-categories/37/relationships/component-dependencies"
          }
        },
        "productAttributeDefinitions": {
          "links": {
            "related": "http://localhost:8080/api/jsonapi/product-categories/37/product-attribute-definitions",
            "self": "http://localhost:8080/api/jsonapi/product-categories/37/relationships/product-attribute-definitions"
          }
        },
        "productTypeAttributeDefinitions": {
          "links": {
            "related": "http://localhost:8080/api/jsonapi/product-categories/37/product-type-attribute-definitions",
            "self": "http://localhost:8080/api/jsonapi/product-categories/37/relationships/product-type-attribute-definitions"
          }
        }
      },
      "links": {
        "self": "http://localhost:8080/api/jsonapi/product-categories/37"
      }
    },
    {
      "type": "product-categories",
      "id": "36",
      "attributes": {
        "name": "Nitrogen generator",
        "createdAt": "2021-09-09T12:24:07.000000Z",
        "updatedAt": "2021-09-10T13:39:07.000000Z"
      },
      "relationships": {
        "parentCategory": {
          "links": {
            "related": "http://localhost:8080/api/jsonapi/product-categories/36/parent-category",
            "self": "http://localhost:8080/api/jsonapi/product-categories/36/relationships/parent-category"
          },
          "data": {
            "type": "product-categories",
            "id": "34"
          }
        },
        "childCategories": {
          "links": {
            "related": "http://localhost:8080/api/jsonapi/product-categories/36/child-categories",
            "self": "http://localhost:8080/api/jsonapi/product-categories/36/relationships/child-categories"
          }
        },
        "productTypes": {
          "links": {
            "related": "http://localhost:8080/api/jsonapi/product-categories/36/product-types",
            "self": "http://localhost:8080/api/jsonapi/product-categories/36/relationships/product-types"
          }
        },
        "componentDependencies": {
          "links": {
            "related": "http://localhost:8080/api/jsonapi/product-categories/36/component-dependencies",
            "self": "http://localhost:8080/api/jsonapi/product-categories/36/relationships/component-dependencies"
          }
        },
        "productAttributeDefinitions": {
          "links": {
            "related": "http://localhost:8080/api/jsonapi/product-categories/36/product-attribute-definitions",
            "self": "http://localhost:8080/api/jsonapi/product-categories/36/relationships/product-attribute-definitions"
          }
        },
        "productTypeAttributeDefinitions": {
          "links": {
            "related": "http://localhost:8080/api/jsonapi/product-categories/36/product-type-attribute-definitions",
            "self": "http://localhost:8080/api/jsonapi/product-categories/36/relationships/product-type-attribute-definitions"
          }
        }
      },
      "links": {
        "self": "http://localhost:8080/api/jsonapi/product-categories/36"
      }
    },
    {
      "type": "product-categories",
      "id": "35",
      "attributes": {
        "name": "Oxygen generator",
        "createdAt": "2021-09-09T12:24:02.000000Z",
        "updatedAt": "2021-09-10T13:39:13.000000Z"
      },
      "relationships": {
        "parentCategory": {
          "links": {
            "related": "http://localhost:8080/api/jsonapi/product-categories/35/parent-category",
            "self": "http://localhost:8080/api/jsonapi/product-categories/35/relationships/parent-category"
          },
          "data": {
            "type": "product-categories",
            "id": "34"
          }
        },
        "childCategories": {
          "links": {
            "related": "http://localhost:8080/api/jsonapi/product-categories/35/child-categories",
            "self": "http://localhost:8080/api/jsonapi/product-categories/35/relationships/child-categories"
          }
        },
        "productTypes": {
          "links": {
            "related": "http://localhost:8080/api/jsonapi/product-categories/35/product-types",
            "self": "http://localhost:8080/api/jsonapi/product-categories/35/relationships/product-types"
          }
        },
        "componentDependencies": {
          "links": {
            "related": "http://localhost:8080/api/jsonapi/product-categories/35/component-dependencies",
            "self": "http://localhost:8080/api/jsonapi/product-categories/35/relationships/component-dependencies"
          }
        },
        "productAttributeDefinitions": {
          "links": {
            "related": "http://localhost:8080/api/jsonapi/product-categories/35/product-attribute-definitions",
            "self": "http://localhost:8080/api/jsonapi/product-categories/35/relationships/product-attribute-definitions"
          }
        },
        "productTypeAttributeDefinitions": {
          "links": {
            "related": "http://localhost:8080/api/jsonapi/product-categories/35/product-type-attribute-definitions",
            "self": "http://localhost:8080/api/jsonapi/product-categories/35/relationships/product-type-attribute-definitions"
          }
        }
      },
      "links": {
        "self": "http://localhost:8080/api/jsonapi/product-categories/35"
      }
    }
  ],
  "included": [
    {
      "type": "product-categories",
      "id": "36",
      "attributes": {
        "name": "Nitrogen generator",
        "createdAt": "2021-09-09T12:24:07.000000Z",
        "updatedAt": "2021-09-10T13:39:07.000000Z"
      },
      "relationships": {
        "parentCategory": {
          "links": {
            "related": "http://localhost:8080/api/jsonapi/product-categories/36/parent-category",
            "self": "http://localhost:8080/api/jsonapi/product-categories/36/relationships/parent-category"
          }
        },
        "childCategories": {
          "links": {
            "related": "http://localhost:8080/api/jsonapi/product-categories/36/child-categories",
            "self": "http://localhost:8080/api/jsonapi/product-categories/36/relationships/child-categories"
          }
        },
        "productTypes": {
          "links": {
            "related": "http://localhost:8080/api/jsonapi/product-categories/36/product-types",
            "self": "http://localhost:8080/api/jsonapi/product-categories/36/relationships/product-types"
          }
        },
        "componentDependencies": {
          "links": {
            "related": "http://localhost:8080/api/jsonapi/product-categories/36/component-dependencies",
            "self": "http://localhost:8080/api/jsonapi/product-categories/36/relationships/component-dependencies"
          }
        },
        "productAttributeDefinitions": {
          "links": {
            "related": "http://localhost:8080/api/jsonapi/product-categories/36/product-attribute-definitions",
            "self": "http://localhost:8080/api/jsonapi/product-categories/36/relationships/product-attribute-definitions"
          }
        },
        "productTypeAttributeDefinitions": {
          "links": {
            "related": "http://localhost:8080/api/jsonapi/product-categories/36/product-type-attribute-definitions",
            "self": "http://localhost:8080/api/jsonapi/product-categories/36/relationships/product-type-attribute-definitions"
          }
        }
      },
      "links": {
        "self": "http://localhost:8080/api/jsonapi/product-categories/36"
      }
    }
  ]
}

Thanks!

I've noticed this as well and would prefer it only appears once (my vote would be in data), to save data transfer.

Yeah, get that. This however is really low down on my list to look at because (1) it only happens in very particular circumstances, (2) it's an optimisation not a bug and (3) it's going to be exceptionally complex to fix. (3) being the biggest reason why I can't prioritise it at the moment - my Open Source time is exceptionally limited and this issue will have a huge time impact.
Just being up-front about when this might get sorted out!


Use class GUIControlBase with controls in ControlView

Controls in class ``Display.ControlViewwill then take benefit of all the mechanisms already implemented in base classGUIItems.Controls.GUIControlBase`.

Let's do this in a further life...


ShirukaWorld.java:173: Implement...

The puzzle 1-11e68ada from #1 has to be resolved:
https://github.com/shiruka/shiruka/blob/b919490cc5126de2137a0d4ad33a00ba94cabc70/src/main/java/net/shiruka/shiruka/world/ShirukaWorld.java#L173-L173
The puzzle was created by Hasan Demirtaş on 20-Apr-21.
Estimate: 10 minutes,  role: DEV.
If you have any technical questions, don't ask me, submit new tickets instead. The task will be "done" when the problem is fixed and the text of the puzzle is removed from the source code. Here is more about PDD and about me.

The puzzle 1-11e68ada has disappeared from the source code, that's why I closed this issue.


TensorFlow Training (TFJob) - exitCode behaviour

Description of ExitCode restartPolicy should be updated to reflect changes made in the following PR: github.com/kubeflow/tf-operator/pull/518
Current description is misleading: only specific exit codes are identified as retryable, not the whole 128-255 range.

/assign


Java doesn't support generating 256 bits key

Standard Java doesn't support PKCS7Padding algorithm and advises to use PKCS5Padding instead. Another issue is that by default standard Java supports up-to 128 bit keys not 256 bit keys. To use 256 bit keys, the new JCE Unlimited Strength Jurisdiction Policy is required to be installed at a certain JRE/lib/security location.

From @snej , "128-bit AES keys are insufficient for good security (or FIPS compliance.)" So we may consider using 128-bit on standard java.

Need to throw an exception if the JCEUS JP cannot be found, and a short summary of to how to resolve the problem.


Add Ubuntu 21.04

Ubuntu 20.10 (Groovy Gorilla) reached end of life on 2021-07-22

Done.

Thanks!

I'm sorry, but hirsute(21.04) doesn't seem to exist?
https://packages.red-data-tools.org/ubuntu/dists/

Oh, sorry.
I've uploaded.

Thanks!


Change min-hour without closing datetime picker.

I need to update min hour in datetimepicker on date change.
For eg : If I choose today's date then min-hour should be equal to current time.
Today date : 27-02-2017 current time: 6:00 then as I select 27-02-2017 then min-hour should set to 6 so that user can't choose past time.
If I choose 28-02-2017 then min-hour should be 0.
Issue is that when I open datetimepicker first it show current date with current time that's correct. then I choose future date then still it shows min hour = current time instead 0, then If I close datetimepicker and open it again then it shows 0 for future date. My changes for minHour are not reflecting until we close datetimepicker.
Here is plunker :
https://plnkr.co/edit/fU0pBuxxdwbdHOgYidmI?p=preview
Thanks in advance.

min-hour and max-hour is designed to limit time in any date.
For example, when we pick a work-hour time, we can set it as 9 to 5 rather than 0-23.
It is not designed to reflect current time or future time. It's for past, current, and the future.
There is no such thing as min-hour for today, and min-hour tomorrow at this moment.
If I did not fully understand what you expect, please explain what it currently does and what it should be.

Closing for inactivity


Decouple test configuration and enable running tests against a real backend

Currently, in the test set the test configuration is (partly?) hardcoded using endpoint mocking approach with httptest:
func TestVirtualMachineService_DeployVirtualMachine(t *testing.T) {
	server := httptest.NewServer( ...

It would be great to have some decoupling here to provision endpoint configurations in a flexible way, also enabling automated testing against (multiple) real endpoints.

Hi @synergiator with the addition of https://github.com/apache/cloudstack-go/pull/32, a change in https://github.com/apache/cloudstack-go/blob/main/test/cloudstack_test.go#L39 to return a server with the URL of a management server can be made. Eg:
func CreateTestServer(t *testing.T, responses map[string]json.RawMessage) *httptest.Server {
	return &httptest.Server{
		URL:      "http://server-ip:8080/client/api",
		Listener: &net.TCPListener{},
		Config:   &http.Server{},
	}
}

There will be other changes required such as passing optional or mutually exclusive parameters, and using an async client as needed
The main intent of the tests is to ensure that the json responses are successfully unmarshalled into the respective go structs


Support copying span contexts.

Adds support for copying span contexts.
Follow up from https://gitter.im/opentracing/opentracing-cpp?at=5a82810018f388e62697ab54

@isaachier - Not a high priority, but could you take a look at this when you get the chance?

@rnburn Do you know when this will make it into a tagged release? It'd be really nice to be able to use this


Bump plette version to v0.3.0

Add news fragment.

I actually pushed the version bump on the master already. In order to adhere to our process, I am also adding a news fragment to document this change.


panic: range start index 255 out of range for slice of length 124

in gif-0.11.2/src/reader/decoder.rs:251:28 the bytes offset may be outside of the buffer.
The file that exhibits this error is NSFW.

The panic is on this line:

There seem to be 2 main points:

StreamingDecoder::next_state seems to be returning the wrong byte offset in the DecodeSubBlock match
How to handle unknown blocks in next_state's BlockStart match arm

bytes offset out of range
The panicking line of code is within a loop that calls gif::reader::decoder::StreamingDecoder::next_state. In that function is the following snippet:
https://github.com/image-rs/image-gif/blob/033353951d73be44d532720bd00c80617d04da17/src/reader/decoder.rs#L581-L588
I think on L587 instead of left, it should be returning n as the bytes offset.
- return goto!(left, DecodeSubBlock(0), emit Decoded::Data(&[]));
+ return goto!(n, DecodeSubBlock(0), emit Decoded::Data(&[]));

With this change,

both images in https://github.com/image-rs/image/issues/1551 return Error: Format(DecodingFormatError { underlying: "unexpected EOF" }) instead of panicking,
I'm able to decode and encode the gif from https://github.com/image-rs/image/issues/1452.

I haven't looked into other reported issues.
Handling unknown blocks
After that patch, this file will decode the first frame but then return Error: Format(DecodingFormatError { underlying: "unknown block type encountered" }),  which brings us to how unknown block types are handled.
https://github.com/image-rs/image-gif/blob/033353951d73be44d532720bd00c80617d04da17/src/reader/decoder.rs#L505-L509
I don't know what the proper block to use here should be or if more logic is required.
if self.allow_unknown_blocks {
    goto!(SkipBlock(b as usize))
} else {
    Err(DecodingError::format("unknown block type encountered"))
}

imagemagick identify shows 75 frames in the file
I'm only able to get 74 decoded/encoded with the mentioned changes
Using imagemagick convert input.gif -coalesce image%02d.jpg to explode the gif, and the explode example with allow_unknown_blocks:

the 70th frame gets dropped, but I don't know the cause

The testbed I'm using is based off the explode.rs example in this repo and a draft PR.

Testbed program

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let input_path = std::path::PathBuf::from(
        std::env::args_os()
            .nth(1)
            .ok_or("Specify a GIF path as the first argument")?,
    );
    let output_path = std::path::PathBuf::from(
        std::env::args_os()
            .nth(2)
            .ok_or("Specify a GIF path as the second argument")?,
    );

    let input = std::fs::File::open(&input_path)?;
    let mut options = gif::DecodeOptions::new();
    options.allow_unknown_blocks(false); // work in progress PR
    let mut decoder = options.read_info(input)?;
    let width = decoder.width();
    let height = decoder.height();
    let global_pal = decoder.global_palette().unwrap_or_default().to_vec();

    let mut decoded_number = 0;
    let mut encoded_number = 0;

    let mut file_out = std::fs::File::create(output_path)?;
    let mut encoder = gif::Encoder::new(&mut file_out, width, height, &global_pal)?;
    encoder.set_repeat(gif::Repeat::Infinite)?;

    while let Some(frame) = decoder.read_next_frame()? {
        decoded_number += 1;
        dbg!(decoded_number);

        encoder.write_frame(&frame)?;
        encoded_number += 1;
    }

    eprintln!("encoded frames: {}", encoded_number);

    Ok(())
}

Was fixed by #112, release soon.


Add latest supported self-service HUP-able devices to the doc

Connects-to: https://github.com/resin-io/hq/issues/1466 https://github.com/resin-io/hq/issues/1464

@imrehg where do we document devices that are huppable?


Use constants for storing cookie names

Storing cookie names in constants allows overriding the cookie names.
Eg.: on the VIP Go platform (part of the WordPress.com VIP offering), we do automatically whitelist cookies prefixed with wordpress_ in our Varnish configuration. Being able to change cookie names allows us to not introduce new Varnish and Nginx rules for this plugin specifically.
Also, actually, for clients using the plugin on our platform, we had to modify the names which makes it's updates more involved.

Hey @pitbulk ! Thanks for looking into this PR, really appreciate that.
Could you, please, elaborate on your concerns with alternative cookie names? Especially in relation to deep security review? What security measures in place could be affected?
Cookie names are still present in the code and as they are tight to constants, they can only be changed via other code, thus it does not happen on the fly.
Any platform or user who is doing code review, would still be capable of noticing the change when checking code which is being committed. Also, cookie names are likely to be set once, upon plugin introduction and setup, as changing them inevitably leads to affecting logged in users and thus it's not clever to do so after initial setup.

I don't consider myself as a security expert, but I was worried with the fact that maybe that change makes a possible "Session Hijacking attack" easier..that why approving that change will require an extra research.

Thanks for the details!
Regarding the "Session Hijacking attack" specifically, the cookie name is not what makes any of techniques mentioned by OWASP possible. Session Hijacking attack, in case of cookie session identification, is more about predictability of the value of the cookie, as that's what differs for individual users. Cookie name stays the same. Also, the cookie used by this pluing is publicly known due to the open source nature of the code :)
Regarding the technique of using overridable constants for cookie names is actually the same to what WordPress itself does - https://core.trac.wordpress.org/browser/trunk/src/wp-includes/default-constants.php?rev=41959#L236
For clarification, the COOKIEHASH part of the cookie name refers to site URL (https://core.trac.wordpress.org/browser/trunk/src/wp-includes/default-constants.php?rev=41959#L206) and helps differentiating cookies for individual sites within multisite install. But again, it's overridable via wp-config.php in case the installation want to use the same cookies across all sites in MS install.
But I do totally get your point about being cautious. Please, let me know if there is something I could help with when it comes to the extra review thing.


How to write WS file on root directory ?

Dear Vincent,
Thanks a lot for this very clear explication. But in part 2 I have an other question. Is it possible to explain more deeply how to reach the root directory to write the ws file.
I seach since a week with Oracle Developper Tools, throught out my APEX management pages, and with FTP connexion, but without any success.
Please put me "on the road" !
Best regards.
Lionel

Hi Lionel,
This repo (and associated blog) is now 4 years old. A good chunk of it is still valid, but given APEX 21.2 and APEX 22.1 efforts around PWA, I would suggest you look into the new built-in features instead.

Hi Vincent,
Thanks a lot for your reply. Yes, futhermore the update of my Apex to 22.1 is schedule at tomorrow, so it's really more interesting to wait a day and use all the new features regarding PWA that you had explain in the last AskTom webinar.
Thanks a lot for all you work !
Best regards.
Lionel
----- Mail original -----
De: "Vincent Morneau" @.>
À: "vincentmorneau/apex-pwa" @.>
Cc: "Beckerlionel" @.>, "Author" @.>
Envoyé: Jeudi 19 Mai 2022 15:32:50
Objet: Re: [vincentmorneau/apex-pwa] How to write WS file on root directory ? (Issue #25)
Hi Lionel,
This repo (and associated blog) is now 4 years old. A good chunk of it is still valid, but given APEX 21.2 and APEX 22.1 efforts around PWA, I would suggest you look into the new built-in features instead.
—
Reply to this email directly, view it on GitHub , or unsubscribe .
You are receiving this because you authored the thread. Message ID: <vincentmorneau/apex-pwa/issues/25/1131693580 @ github . com>

Hi Vincent,
Sorry to disturb you, but something doesn't works as I'm imagine.
Since the last release was update on my server, I try to use the new feature PWA. But I'm facing some issues.
Firstly, when I try to put in "default' function ans variables declaration part a custom function (yours which I found in your previous PWA github page), the devtools retrn me an error that this function is not defined ? Where I did wrong ?
Best regards.
Preview
let apex = { } ; apex . sw = { } ; apex . sw . CORE_CACHE_MATCHER = '#APEX_FILES#' ; apex . sw . CORE_CACHE_PREFIX = "APEX-CORE-" ; apex . sw . CORE_CACHE_NAME = apex . sw . CORE_CACHE_PREFIX + '#APEX_VERSION#' ; apex . sw . APP_CACHE_MATCHER = "&FB_FLOW_ID./files/static/v" ; apex . sw . APP_CACHE_PREFIX = "APEX-APP-&FB_FLOW_ID.-v" ; apex . sw . appCacheNeedsCleanup = true ; apex . sw . cleanAPEXCaches = ( ) => { caches . keys ( ) . then ( cacheNames => Promise . all ( cacheNames . map ( cacheName => { if ( cacheName . startsWith ( apex . sw . CORE_CACHE_PREFIX ) && cacheName !== apex . sw . CORE_CACHE_NAME ) { return caches . delete ( cacheName ) ; } } ) ) ) ; } ; apex . sw . cleanAppCaches = ( appCacheName ) => { if ( appCacheNeedsCleanup ) { appCacheNeedsCleanup = false ; caches . keys ( ) . then ( cacheNames => Promise . all ( cacheNames . map ( cacheName => { if ( cacheName . startsWith ( apex . sw . APP_CACHE_PREFIX ) && cacheName !== appCacheName ) { return caches . delete ( cacheName ) ; } } ) ) ) ; } } ; // "Function and Variable Declaration" hook starts const apexAppId = 434 ; // CHANGE_ME const apexPages = [ 1 , 2 , 3 ] ; // CHANGE_ME // It is recommended to have a page 404 as well, in case something goes wrong with the cache // Example: If the APEX app contains page 404 const apex404Page = [ 404 ] ; // CHANGE_ME // Leave these global variables as is const cacheStaticName = 'static-cache' ; const cache404Name = '404-cache' ; const cacheDynamicName = 'dynamic-cache' ; const apexPagesUrl = [ ] ; const apex404PagesUrl = [ ] ; async function installSW ( ) { let clientUrl ; // Getting the current page URL (with APEX session & everything else) await self . clients . matchAll ( { includeUncontrolled : true } ) . then ( clients => { for ( const client of clients ) { if ( new URL ( client . url ) . search . split ( ':' ) [ 0 ] === '?p=' + apexAppId ) { clientUrl = new URL ( client . url ) ; } } } ) ; if ( clientUrl ) { // Apply the current page URL to the array of static pages to cache (apexPages) for ( const apexPage of apexPages ) { let queryString = clientUrl . search . split ( ':' ) ; queryString [ 1 ] = apexPage ; queryString = queryString . join ( ':' ) ; apexPagesUrl . push ( clientUrl . origin + clientUrl . pathname + queryString ) ; } // Apply the current page URL to the array of static pages to cache (apex404Page) for ( const apexPage of apex404Page ) { let queryString = clientUrl . search . split ( ':' ) ; queryString [ 1 ] = apexPage ; queryString = queryString . join ( ':' ) ; apex404PagesUrl . push ( clientUrl . origin + clientUrl . pathname + queryString ) ; } // Store all static pages in the static cache const cacheStatic = await caches . open ( cacheStaticName ) ; cacheStatic . addAll ( apexPagesUrl ) . then ( function ( ) { console . log ( '[SW] Caching static files' , apexPagesUrl ) ; } ) . catch ( function ( err ) { console . error ( err ) ; } ) ; // Store all 404 pages in the 404 cache const cache404 = await caches . open ( cache404Name ) ; cache404 . addAll ( apex404PagesUrl ) . then ( function ( ) { console . log ( '[SW] Caching 404 files' , apex404PagesUrl ) ; } ) . catch ( function ( err ) { console . error ( err ) ; } ) ; } } // "Function and Variable Declaration" hook ends
----- Mail original -----
De: "Vincent Morneau" @.>
À: "vincentmorneau/apex-pwa" @.>
Cc: "Beckerlionel" @.>, "Author" @.>
Envoyé: Jeudi 19 Mai 2022 15:32:50
Objet: Re: [vincentmorneau/apex-pwa] How to write WS file on root directory ? (Issue #25)
Hi Lionel,
This repo (and associated blog) is now 4 years old. A good chunk of it is still valid, but given APEX 21.2 and APEX 22.1 efforts around PWA, I would suggest you look into the new built-in features instead.
—
Reply to this email directly, view it on GitHub , or unsubscribe .
You are receiving this because you authored the thread. Message ID: <vincentmorneau/apex-pwa/issues/25/1131693580 @ github . com>

Hi Lionel,
Can't help you if you don't provide more info. What code did you put in what location, where and and when are you seeing the error?

A new Guide for Apex 22.1 would be fine ;-) It's awesome. Thx a lot


CLI delete looks like it is working but package is not unlisted

Describe the bug
When running nuget delete from command line the respons is that nuget is deleted successfully but the nuget still exists on disk and in database and is downloadable
To Reproduce
Steps to reproduce the behavior:

Using this version of BaGet v0.2.0-preview1
upload a package package.xyz.nuget.<IP_ADDRESS>
delete the package with "nuget delete -Source http://your.path.com/v3/index.json package.xyz <IP_ADDRESS>"
response is:
package.xyz <IP_ADDRESS> will be deleted from the 'http://your.path.com/api/v2/package'. Would you like to continue? (y/N) y
WARNING: Deleting package.xyz from the 'http://your.path.com/api/v2/package'.
DELETE http://your.path.com/api/v2/package/package.xyz/<IP_ADDRESS>
NoContent http://your.path.com/api/v2/package/package.xyz/<IP_ADDRESS> 115ms
package.xyz <IP_ADDRESS> was deleted successfully.
go to  http://your.path.com/nuget
search for package.xyz
the package.xyz shows up in the search result with the <IP_ADDRESS> version as the latest greatest, and it is still possible to download <IP_ADDRESS>

Expected behavior

package.xyz should show up in the search result as version <IP_ADDRESS>

Additional context
The server is configured with
"PackageDeletionBehavior": "Unlist",
Note, when changing behaviour to HardDelete the package is deleted ok.

I noted that when performing a hard delete the package is deleted from the harddrive but the version folder is left (but empty)

Hi, thanks for opening this! This was fixed by https://github.com/loic-sharma/BaGet/pull/414, but I haven't released that fix yet. I'll push a new release of BaGet soon!

Great!