[RFC] Redirecting to the login page on refresh or open links in the new tab

Status: Open for comments
The current system may ask you to log in again if you refresh the page(trigger refresh real quick multiple times) or open a few links in new tabs.
The intention behind this RFC is to identify the exact cause of losing user authentication on refresh or opening a few links in new tabs.
Need
This might be because of a race that happens when the backing authentication provider invalidates refresh tokens on use. So if you for example make two parallel refresh requests, both are going to trigger an auth refresh, and if the second one is opened before the first one has had time to do a refresh, it will use the same refresh token and then fail to sign-in as the refresh token has been invalidated
Proposal
If the logged-in user refreshes the page(trigger refresh real quick multiple times), the user gets the login screen again, and in the Developer tools network tab, they get Refresh failed; caused by OPError: invalid_grant (unknown, invalid, or expired refresh token)" as a response for the API /api/auth/oidc/refresh?optional&env=development
On each refresh, we generate a new access token using the refresh token rotation technique to enhance the access token security against malicious attacks.
If we trigger the refresh real quick(parallel refresh requests) means both are going to trigger an auth refresh, and if the second one is opened before the first one has had time to do a refresh, it will use the same refresh token and then fail to sign-in as the refresh token has been invalidated
As discussed in https://github.com/backstage/backstage/issues/11160 this RFC, moving to a persistent server-side session store could solve the issue.
As a persistent session store, we can think of Memcached or Redis, these two are compatible with Backstage and works with our existing DB infra and that is configured through our app-config. These caches are better suited for the production environment.

🤔Which auth provider are you using? I haven't run into this issue before.

🤔Which auth provider are you using? I haven't run into this issue before.

@webark we are using GitLab as auth provider.

👍 - also, the in-memory session store is not ideal anyways given it blocks our ability to scale out in the EKS eco-system unless we force a user to the dedicated pods with sticky sessions, etc. as highlighted in #12757

@Ahampa07 it's normally due to refresh not being configured correctly, is that setup for your provider?

@benjdlambert could you please elaborate more, give some references around it?

@benjdlambert we are using Ping Identity.
Here's the snippet we use in App Config
auth:
  environment: production
  session:
    secret: ${AUTH_SESSION_SECRET}
  providers:
    oidc:
      production:
        metadataUrl: ${AUTH_OIDC_METADATA_URL}
        clientId: ${AUTH_OIDC_CLIENT_ID}
        clientSecret: ${AUTH_OIDC_CLIENT_SECRET}
        authorizationUrl: ${AUTH_OIDC_AUTH_URL}
        tokenUrl: ${AUTH_OIDC_TOKEN_URL}
        tokenSignedResponseAlg: ${AUTH_OIDC_TOKEN_SIGNED_RESPONSE_ALG}
        scope: ${AUTH_OIDC_SCOPE}
        prompt: ${AUTH_OIDC_PROMPT}

Hmm when you refresh the page, and open the network inspector, I think there should be a failing request to /api/auth-backend can you what that request is saying and see if you have any error there?

And see if there's any requests to /api/auth-backend/* that are failing and see what they say

Ah! On Refresh or opening a page in a new tab - sometimes it works fine and sometimes we are thrown to the Login page.
The request that fails is api/auth/oidc/refresh?optional&env=production
Here is the preview:
{
  "name": "AuthenticationError",
  "message": "Refresh failed; caused by OPError: invalid_grant (unknown, invalid, or expired refresh token)",
  "cause": {
    "error": "invalid_grant",
    "error_description": "unknown, invalid, or expired refresh token",
    "name": "OPError",
    "message": "invalid_grant (unknown, invalid, or expired refresh token)",
    "stack": "OPError: invalid_grant (unknown, invalid, or expired refresh token)\n    at processResponse (/home/deployer/node_modules/openid-client/lib/helpers/process_response.js:38:13)\n    at Client.grant (/home/deployer/node_modules/openid-client/lib/client.js:1325:22)\n    at runMicrotasks (<anonymous>)\n    at processTicksAndRejections (internal/process/task_queues.js:95:5)\n    at async Client.refresh (/home/deployer/node_modules/openid-client/lib/client.js:1069:22)\n    at async OidcAuthProvider.refresh (/home/deployer/node_modules/@backstage/plugin-auth-backend/dist/index.cjs.js:1917:22)\n    at async OAuthAdapter.refresh (/home/deployer/node_modules/@backstage/plugin-auth-backend/dist/index.cjs.js:411:59)\n    at async OAuthEnvironmentHandler.refresh (/home/deployer/node_modules/@backstage/plugin-auth-backend/dist/index.cjs.js:188:5)"
  }
}

and response:
{"error":{"name":"AuthenticationError","message":"Refresh failed; caused by OPError: invalid_grant (unknown, invalid, or expired refresh token)","cause":{"error":"invalid_grant","error_description":"unknown, invalid, or expired refresh token","name":"OPError","message":"invalid_grant (unknown, invalid, or expired refresh token)","stack":"OPError: invalid_grant (unknown, invalid, or expired refresh token)\n    at processResponse (/home/deployer/node_modules/openid-client/lib/helpers/process_response.js:38:13)\n    at Client.grant (/home/deployer/node_modules/openid-client/lib/client.js:1325:22)\n    at runMicrotasks (<anonymous>)\n    at processTicksAndRejections (internal/process/task_queues.js:95:5)\n    at async Client.refresh (/home/deployer/node_modules/openid-client/lib/client.js:1069:22)\n    at async OidcAuthProvider.refresh (/home/deployer/node_modules/@backstage/plugin-auth-backend/dist/index.cjs.js:1917:22)\n    at async OAuthAdapter.refresh (/home/deployer/node_modules/@backstage/plugin-auth-backend/dist/index.cjs.js:411:59)\n    at async OAuthEnvironmentHandler.refresh (/home/deployer/node_modules/@backstage/plugin-auth-backend/dist/index.cjs.js:188:5)"}},"request":{"method":"GET","url":"/api/auth/oidc/refresh?optional&env=production"},"response":{"statusCode":401}}

To be fair, we are facing this issue since last December and have raised multiple Issues to possibly get a fix to it:
#8462
#11160
#12757
We don't see any other adopter facing this issue so most probably we've setup something incorrectly but we've done the following analysis:

OIDC (or Ping Identity) for a matter of fact is not the root cause of the issue as we face this for GitLab as well which we use for development on the local workstation and lower environments
Our Enterprise architecture (K8s + Service Meshes) and policies are not a root cause - we are able to reproduce this issue on our local host as well.

Hmm , if you can reproduce this on your local host, this to me says that it's nothing to do with the in memory session store. I was going to suggest that if you just use one container does it work consistently? But if not then it looks like it's something else?

Agreed! I also think an in-memory session store is the root cause but having a persistent session store will allow for scaling out (alongside polling catalogs consistently in external memory instead of per-pod) but that's something we can look at later together.

But if not then it looks like it's something else?

We've been looking for an answer to this for months now - don't know what are we missing 😞

(alongside polling catalogs consistently in external memory instead of per-pod)
This is already taken care of by the DB, the catalog's don't use anything in memory if it's deployed using Postgres. Each catalog will poll for the work off a queue in the DB and will split the work up equally amongst replicas.

But yeah I'm not really sure, one for us @backstage/maintainers to have a chat about I think when they're back from vacation next week.

Just added some labels to this for us to have a chat about next week

@benjdlambert On the local host, if we refresh the page rigorously(trigger refresh real quick multiple times) then we get this error else it works fine, and it seems to be the case of a parallel refresh request,  where both the requests are going to trigger an auth refresh, and if the second one is opened before the first one has had time to do a refresh, it will use the same refresh token and then fail to sign in as the refresh token has been invalidated
The purpose of this API api/auth/oidc/refresh?optional&env=production is to generate a new access token via the refresh token rotation technique on each refresh call, can we avoid this API call and let's say wait for 10-15 mins to expire the access token and then call this refresh API to generate new access token?

@benjdlambert thanks - let's chat more next week - I've also blocked 11th August at 15:30 UK for this discussion via Calendly and am aligned to  F. Corti - it would be great if someone from @backstage-maintainers could also join so that we can have a focused discussion.

Yeah OK - sounds like it could be something with the in-memory store if it only fails under those circumstances. Seems like there's some comments from @rugvip on implementing the shared session store, I think it makes sense to whip up a PR with something and we can continue the discussion in the PR at this point. But yeah, let's catch up next week!

Is that something that you'd be interested in? Trying to throw a PR together of how we can implement?

@benjdlambert yeah sure, would be happy to pick this up and contribute :)

@Rugvip Could you please share your input or approach?

@Abhay-soni-developer

@Ahampa07 I think theres some unanswered questions here that probably need answering. https://github.com/backstage/backstage/issues/11160#issuecomment-1123321493

are we storing the token from auth provider in database or in cache, if yes than how should we get them.

The refresh token is stored in a cookie, while access tokens are not stored anywhere at all other than in-memory on the frontend. Coming back to this I wonder whether we could apply a much simpler fix to this issue by just calling the refresh endpoint again from the frontend if we're sure that it will solve the issue.
Let's say we have two browser tabs refreshing the session at the same time, starting out with refresh token A
1: browser1 --A--> auth-backend --A--> IdP (exchange A for B + access token)
2: browser2 --A--> auth-backend --A--> IdP (fails because A is now invalidated)
3: browser1 <--B-- auth-backend <--B-- IdP
4: browser2 <--X-- auth-backend <--X-- IdP

Step 1 and 2 are the auth refreshes via /refresh, step 3 and 4 are the responses back to the browser. If we in the case of step 4 can identify that we've switched out the refresh token, then we could just trigger another refresh straight away, as we'll now have the updated refresh token (B) that was set in step 3. It's ofc important to not be triggering any loops here, only continuing this cycle whenever we can be sure that the refresh token was invalidated mid-flight.
I think a decent way to implement this might be to first and foremost have an explicit error code when the validation of the refresh token fails specifically at the IdP. For example we should easily be able to distinguish between an error due to missing refresh token and an invalid one. We could potentially then use a hash of the refresh token to detect whether it has been switched out. Gonna leave the rest open to suggestions as I'm mostly just finding quite complicated solutions here :grin:. Perhaps there's something simple we can come up with though.
Now if we go and implement a session store in the auth backend I do think we need some similar solution in place to handle conflicts, but it can be much simpler because all of the retries and back end forth can be handled in the backend as we're not relying on frontend state.
Storing access tokens can alleviate the issue a bit, but we'd still end up with conflicting refreshes.

@Rugvip thanks for your insights and approach :), the first approach seems a bit trickier, we have to have surety that the refresh token was invalidated mid-flight, or else we could end up triggering refresh requests in the loop. As I have to dig deep and research how can we have different error codes for missing and invalid refresh tokens, though this approach is promising.
I just wanted to have more clarity regarding the refresh token rotation technique we are using on each refresh trigger, it has to be enhancing the security against malicious attacks right? can we not simply store the access token in the auth session store and on each refresh trigger first check the access token validity, if the access token is still active then let's not rotate the refresh token? if it has expired, we rotate the refresh token, hence in the case of active access token the parallel refresh trigger scenario could be handled. In the case of rotating tokens, we can still end up with conflicting refreshes but the clashing occurrence is definitely minimal.
We will be raising a draft PR and hopefully, we can resolve this issue with collaboration :)
Cheers !!

@Rugvip
actually, after the 2nd flow, Idp will recognise your request as a malicious request and hence for security, will invalidate the current family of your tokens. hence all your sessions will end and you need to log in again.
so 3rd and 4th will never happen.

@Abhay-soni-developer ya agree with you, I missed this point, when using Refresh Token Rotation, if a previously invalidated token is used, the entire set of refresh tokens issued since that invalidated token was issued will immediately be revoked, requiring the end-user to re-authenticate.

@Rugvip  @Ahampa07 @mufaddal7
why do we need to ask for a new refresh token and access token at each refresh?
I believe this is just adding more overhead to the system without providing any benefit (such as security).
and I would like to know why are we saving the GitLab refresh token and access token in the front end. do we really need it to be there for any specific reason? what if we move it to the backend use the sid as a key and save it in Redis or any memory store?
this will even add a layer of security as then no one can directly access our GitLab refresh or access token.
and then we can reduce the expiry time of the access token and only make requests when this access token expires.
and we can further enhance this solution by making sure that this function can not be called parallelly.
I would love to connect and discuss this solution or something even better than this.

Moving to using a backend session store is what #11160 is about. I was looking for middle ground that doesn't require us to go quite that far. If it is the case that the IdP will invalidate the session on failed refresh attempts then I don't see that we have many other options than to move to session storage with some locking around session refreshes.
The reason I'm not too fond of a solution where we store access tokens is that it's not a complete solution. Imagine a tab that you've had open for long enough for the existing access token to expire. Then open two new windows, or do two quick refreshes, and we're going to run into the same trouble as before.

@Rugvip @Ahampa07  @mufaddal7
that is why I would suggest that we should move this to the backend. so the backend can handle the access token expiration and refresh token flow.

Moving to using a backend session store is what #11160 is about. I was looking for middle ground that doesn't require us to go quite that far. If it is the case that the IdP will invalidate the session on failed refresh attempts then I don't see that we have many other options than to move to session storage with some locking around session refreshes.
The reason I'm not too fond of a solution where we store access tokens is that it's not a complete solution. Imagine a tab that you've had open for long enough for the existing access token to expire. Then open two new windows, or do two quick refreshes, and we're going to run into the same trouble as before.

point taken. if the token expires and someone opens two tabs fast enough this will happen. going in with a lock mechanism can help but will think about it more.

@Rugvip
what do we do with the access token that is saved at the frontend? ( because I can't see it being sent to any request).
I do understand it is required to take action on behalf of any user but I was under the assumption that it would be sent for some particular request. like when creating a new repo.
I am thinking about using a service worker to intercept the refresh request.

in this way, I will not let multiple refresh requests proceed at the same time and let the first one get resolved and safely return the same response to every other tab. successfully solving our problem.

A and B are browser agents.
S is the service worker.

Step 1
A  makes refresh request
B also makes a refresh request at the very same moment.
Step 2
S --service workers intercept these requests and stop them Let's only one request forward.
Step 3
service worker gets a response and returns the same response to every tab that is requested.
I believe this will successfully resolve our problem. let me know if we can go forward with this approach.
@mufaddal7  @Ahampa07  @NishkarshRaj

what do we do with the access token that is saved at the frontend? ( because I can't see it being sent to any request).
I do understand it is required to take action on behalf of any user but I was under the assumption that it would be sent for some particular request. like when creating a new repo.

@Abhay-soni-developer we can do something similar without service workers by relying on web messaging between tabs and possibly a bit of LocalStorage to synchronize things. It's a bit trickier due to the distributed nature, but services workers themselves add an huge amount of complexity to the deployment so I would like to avoid them if possible.
I'm not super keen on sending access tokens through web messaging though, due to the risk of leakage. But if we can implement it in a way that is simple to verify I think we could move forward with it, it's how we ship the tokens from the popup window to the app after all.
Most likely this would take the form of a decorating implementation of the AuthConnector interface, where each method communicates with other tabs to deduplicate requests.

@Rugvip  today I implemented the solution, where I was stopping the parallel requesting going together.
but then I found out that even though it throws us on the login page, our session still exists and refreshing the page one more time lets us in.

@Abhay-soni-developer yep the refresh token cookie will have updated when you refresh the page. The issue we want to fix here is that concurrent refreshes fail. Even though the session is still intact and you can do a manual refresh, it's an annoying behavior to open a tab and end up on the sign-in page.

Hey, just wanted to chime in here and say that we too are experiencing the exact same problem. We deploy Backstage in 2 pods, and tell Backstage to store the session in Cockroach DB, so I think our setup is the same as the OP.
Was there a resolution to this? This has been a pretty major pain point for our users.

@davjhan-doordash do you have Backstage configured to connect into Cockroach DB? we are trying to do that but are getting this issue: https://github.com/knex/knex/issues/2892
How did yall get the configuration working for Backstage?


Add swedish translation

Add swedish translation.

Coverage remained the same at 67.938% when pulling 350fecd8c54329c610330375b2e93558ceb58eb9 on davty:sv-locale into 85ee14feed16ac7ce7827ac6bbdb10471c107141 on bitwalker:master.

Thanks!


Update auth packages

PasswordAuthStrategy is now own package auth-password
Renamed passport-auth to auth-passport

Split this into 2 PRs


Try fix for issue #36

Do not verify status if not running
Access pid in platform independent way

I believe the issue is due to a race condition where waitpid is probably being called with a not pid that is not valid yet.
I've modified the code so that the check for finished process only runs if the process has effectively started.

This is already fixed in #40


Instructions for replacing contacts in Chat

This text doesn;t seem to describe well what i had to do
"

You no longer can access Contacts from Chat. Instead, use the new People app. Pin it to your left navigation pane by selecting the (...) menu, right-click People, and then select Pin.
--

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

ID: 442f8c6b-95ba-a09e-639d-b9dd141198f6
Version Independent ID: 442f8c6b-95ba-a09e-639d-b9dd141198f6
Content: Known issues in the new Microsoft Teams desktop client - Microsoft Teams
Content Source: Teams/new-teams-known-issues.md
Service: msteams
GitHub Login: @JoanneHendrickson
Microsoft Alias: jhendr

Hello @Baldgyt I could follow the instructions, let me know on which step you could not follow them. Thanks


Issue starting skiptracer.py

so i started skiptracer.py with python3 and python2 and it keeps saying:
Traceback (most recent call last):
File "skiptracer.py", line 4, in
from plugins.menus import menus
ImportError: No module named plugins.menus
I have installed the requirements.txt file and followed the tutorial correctly and it don't work pls help

having the same issue. aggravating. i cant seem to correct it no matter what i do

ah. if you look at the closed issues, this is normal. the readme doesnt specify that it doesnt work at all right now, just that its being ported to python3. could be more descriptive, but its not going to work right now it seems

ah. if you look at the closed issues, this is normal. the readme doesnt specify that it doesnt work at all right now, just that its being ported to python3. could be more descriptive, but its not going to work right now it seems

Oh ok thanks for the help

Do you know when the the skiptracer is going to start working.

Do you know when the the skiptracer is going to start working.

Nobody does.
The author clearly states that it's a W.I.P. to support Python 3, and that the previous Python 2 versions weren't working. We wait until then..!

okayy thanks for the help and info.

Samuel, the other day i found a version that still worked with py2. Just use the search bar and search skiptracer, some random user has an old working version posted. Dunno if this is allowed, so illwill, delete this comment if you must


Images not displaying on iOS 14

Frequency: 100%
Repro App version:  Test Flight build Valora app build  v1.2.0 (24)
Repro on device: iPhone 11 (14 iOS),
Repro Steps:
Launch the Application

Signin with test account
Tap on hamburger menu
Tap on add & withdraw button
Tap on Add funds button
Enter valid amount & tap on Next button
Observe moonpay button is not shown

Investigation: User redirected to “Lets get started” page by tap[ping on blank screen button
Current Behavior: User not able to see the moonpay button on add funds page
Expected Behavior: Moonpay button should show on add funds page
Attachment: MoonPayButton.MP4

@tarikbellamine I have verified this issue on latest test flight build (25) and found issue is fixed
Device: iPhone 11 (14iOS)


Support passing custom roles to nodes created by Karpenter

Is your request related to a new offering from AWS?

No

Is your request related to a problem? Please describe.
Custom instanceProfiles in Karpenter node templates are not supported when using the IRSA role in the Karpenter module. The role that Karpenter can pass to nodes is limited to a single IAM role.
https://github.com/terraform-aws-modules/terraform-aws-eks/blob/master/modules/karpenter/main.tf#L140-L143
Describe the solution you'd like.
Please add a variable to the Karpenter module to support passing additional roles that nodes can assume.
Additional context
Documentation on using a custom instanceProfile with Karpenter can be found here: https://karpenter.sh/v0.27.1/concepts/node-templates/#specinstanceprofile

I'm sorry but I am not following - could you provide pseudo code of what you are trying to achieve?
to be clear, an instance profile is 1:1 to an IAM role, and a node is 1:1 to an instance profile. I'm not sure where multiples (instance profile or IAM role) of either would be suitable here

Sorry, I'm using instanceProfile in this case as that is the attribute name in Karpenter node templates. That can be interchanged with role.
Basically, Karpenter uses iam:PassRole to assign a role/instanceProfile to a node. The policy used in the Karpenter module is restricted to passing a single role to nodes. If a custom instanceProfile is used in the Karpenter node template, Karpenter will fail to provision the node as the policy is too restrictive to pass custom roles.

wouldn't passing the underlying IAM role of your custom instance profile to the var.iam_role_arn variable fulfill this?

Technically yes, but the issue is that assigning different roles to node templates does not work. The policy used in the Karpenter module assumes that all nodes will use the same role.

The policy used in the Karpenter module assumes that all nodes will use the same role.

Correct - there aren't any tangible benefits to having Karpenter in one cluster use multiple IAM roles/instance profiles (that I am aware of)

Normally that would be true, with the expectation that all pods make use of IRSA and don't need access to the instance IAM role. Unfortunately, some applications (such as Harbor) still don't support IRSA. For this use case, I created a custom node template that enables Harbor to use the instance IAM role, while other pods run on nodes that use the default instance role.

Just to clarify about Harbor and IRSA, Harbor does not support IRSA due to the lack of support for it in its dependency, distribution.

understood - however, this is not a pattern we are looking to expose in the Karpenter module because its not a recommended practice. for now, I am going to close the issue since everything seems to be working as intended

Changing the instanceProfile for a node template is a feature in Karpenter. I don't think a module that depends on Karpenter should aim to restrict features that are built into the application. If you want, I can create a pull request for this issue. My initial thoughts are to do something like this:
  statement {
    actions   = ["iam:PassRole"]
    resources = concat([var.create_iam_role ? aws_iam_role.this[0].arn : var.iam_role_arn], var.additional_iam_role_arns)
  }


fix(sfu): panic when vp8 Unmarshal

Description
fix panic when vp8 unmarshal
Reference issue
Fixes #478

@adwpc this looks ok, but if the header is present and indicates that there is a TLZ0Idx and there is not, the error is from the packetizer. If not we need to check the short packet for everything

scene：Use ion-sdk-go to publish stream on arm


Unhide Zend_Exception in UtilityComponent::run_sql_from_file

With this PR, error messages are way clearer than current Unable to connect:

FYI, the error displayed here is because the MySQL instance I used had NO_ZERO_DATE enabled...

Is your example in development or production mode? In production, it should not give this information.

@jamiesnape Development mode as I am still struggling with making Midas to connect to an instance of the official MySQL Docker image.
I agree that such information might be sensible for production.
However:

this specific function is called for administration-only operations (AFAIK).
only displaying Unable to connect is not enough to determine the actual cause of an issue.

I agree it would be good to see the actual exception, but I don't think we want to display this in the web app.
How about you log the exception like this and continue to pass the existing message?


Adding LC for 1679. Max Number of K-Sum Pairs

Related Issue
Closes :  #707
Description
Useful for user to be able to solve complex/hard problems similar to this whenever somebody want a solution for this.
Type of PR

[ ] Bug fix
[x] Feature enhancement
[ ] Documentation update
[x] Other (specify): _______________

Screenshots / Videos (if applicable)
[Attach any relevant screenshots or videos demonstrating the changes]
Checklist

[x] I have performed a self-review of my code.
[x] I have read and followed the Contribution Guidelines.
[x] I have tested the changes thoroughly before submitting this pull request.
[x] I have provided relevant issue numbers, screenshots, and videos after making the changes.
[x] I have commented my code, particularly in hard-to-understand areas.

Additional Context
[Include any additional information or context that might be helpful for reviewers.]
Resources for Guidance
Here are some resources that may be helpful as you contribute to CodeHarborHub:

Code Harbor Hub Community Features
Docusaurus Documentation
React.js Documentation
Markdown Guide
MDX Documentation
Mermaid Documentation

Resources for DSA Features on Our Site:

Tabs: Switch Languages
Line Numbering
Math Equations

Thank you @Ajay-Dhangar for your valuable guidance.


CWL Segmentation workflow

This segmentation workflow works with Camilo's hd2 branches of image-tools and WIC.

image-tools https://github.com/camilovelezr/image-tools.git
WIC https://github.com/camilovelezr/workflow-inference-compiler.git

Note: This PR should be merged after this PR https://github.com/PolusAI/image-workflows/pull/2

This PR is dependent on Antoine's work.


Separate platform-specific code in host to a separate binary

Same as #2458

No, this is about R Host (C++) rather than Microsoft.Common.Core

I don't think we need a separate binary for this - it'll just mean more hassle when building and deploying it.
#ifdef should work fine for one-liners (like when you just need to call a single function that's currently Win32, but there's a POSIX equivalent). For stuff that's platform-dependent and complicated, like e.g. event loop or detouring, we can just have a header file define the common interface, and platform-specific implementations in .cpp files that are entirely conditionally compiled. Kinda like R does that.

Yes, agreed. We discussed this with @karthiknadig

https://github.com/Microsoft/R-Host/commit/76480debd135a08f8f6c077c39d7f6f96114811b


Interacting with the respawn screen isn't working

Fixed by https://github.com/Lea-fish/Leafish/commit/9176d74d496b641e6da91bc81cec44292b95d951


Later Binding on specific file does not work

Describe the bug
The GOOSE type later binding plugin does not show any ExtRef when clicking on data
To Reproduce
Open appending file

Go to Subscribe - Later Binding (GOOSE)
Click on '´data'
See no reaction in possible inputs

Expected behavior
A selection of inputs or a warning that there are none
Additional context
See file
LaterBindingGOOSEError.scd.zip

I have the same issue for both GOOSE and SV when using Edition 2.1 with Siemens SIPROTEC 5 devices.
The attached scd may help reproduce this.
XAT_Prot2_Base_Configuration.scd_1.zip

@JakobVogelsang I'm a bit confused by your specific file. There is a single IED, and I would not expect there to be any possibility of subscribing to anything else. There are no ExtRefs in this file.

What did I miss?

I thought I might try to diagnose the issue I'm having with Edition 2.1 DIGSI 5 SCL files. It is caused by:
https://github.com/openscd/open-scd/blob/48ef7ea26d772573027f9627612fb56e3a982d67/src/editors/subscription/later-binding/ext-ref-later-binding-list.ts#L136-L148
Specifically in L141: this.sameAttributeValue(extRefElement, 'prefix') && .
When we do the comparison:
the FCDA might be:
<FCDA ldInst="Application" prefix="" lnClass="LPHD" lnInst="1" doName="Sim" fc="ST" />

And the ExtRef might be something like (not an exact match):
<ExtRef desc="RxPos1" intAddr="RxPos1;/Pos/stVal" pServT="GOOSE" pDO="Pos" pDA="stVal" iedName="XAT_232_M2" ldInst="CB1" lnClass="XCBR" lnInst="1" doName="Pos" daName="stVal" serviceType="GOOSE" srcLDInst="CB1" srcLNClass="LLN0" srcCBName="Ind_0" />

Note, there is no prefix. This is optional and the default is the empty string in the standard:

What we do is:
  private sameAttributeValue(
    extRefElement: Element,
    attributeName: string
  ): boolean {
    return (
      extRefElement.getAttribute(attributeName) ===
      this.currentSelectedFcdaElement?.getAttribute(attributeName)
    );
  }

Where: extRefElement.getAttribute(attributeName) = null (there is no prefix is the extRef)
And this.currentSelectedFcdaElement?.getAttribute(attributeName) = ""
So what happens is we end up comparing null with an empty string which fails and so the subscribed ExtRef is not shown.
Do we need to compare the prefix? Is the FCDA fully qualified without it if it is an optional field?


Update sbt-scalajs-crossproject to 1.1.0

Updates org.portable-scala:sbt-scalajs-crossproject from 1.0.0 to 1.1.0.
GitHub Release Notes - Version Diff
I'll automatically update this PR to resolve conflicts as long as you don't change it yourself.
If you'd like to skip this version, you can just close this PR. If you have any feedback, just mention me in the comments below.
Configure Scala Steward for your repository with a .scala-steward.conf file.
Have a fantastic day writing Scala!

Files still referring to the old version number
The following files still refer to the old version number (1.0.0).
You might want to review and update them manually.
project/plugins.sbt

Ignore future updates
Add this to your .scala-steward.conf file to ignore future updates of this dependency:
updates.ignore = [ { groupId = "org.portable-scala", artifactId = "sbt-scalajs-crossproject" } ]

labels: sbt-plugin-update, semver-minor, old-version-remains

Codecov Report

Merging #1790 (d9bcc12) into master (8d361bd) will decrease coverage by 0.16%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##           master    #1790      +/-   ##
==========================================
- Coverage   85.99%   85.82%   -0.17%
==========================================
  Files          72       68       -4
  Lines        2499     2455      -44
  Branches      136      136
==========================================
- Hits         2149     2107      -42
+ Misses        350      348       -2

Impacted Files
Coverage Δ

...re/shared/src/main/scala/io/circe/KeyDecoder.scala
97.29% <0.00%> (-2.71%)
:arrow_down:

...rc/main/scala/io/circe/numbers/BiggerDecimal.scala
86.54% <0.00%> (-0.59%)
:arrow_down:

...rc/main/scala-2.13+/io/circe/LiteralDecoders.scala

...rc/main/scala-2.13+/io/circe/LiteralEncoders.scala

...c/main/scala-2.13+/io/circe/FactoryInstances.scala

...main/scala-2.13+/io/circe/CollectionDecoders.scala

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 8d361bd...d9bcc12. Read the comment docs.


Implemented proper radius scaling when scaleRadius is enabled (radius in meters)

When scaleRadius is set to true radius is expressed in meters.
Based on: http://wiki.openstreetmap.org/wiki/Zoom_levels

looks good, I'll merge it this weekend

"I'll merge it this weekend"


Error: Building package cpprestsdk:x64-windows failed with: BUILD_FAILED

CMake Error at scripts/cmake/vcpkg_execute_required_process.cmake:14 (message):
Command failed: F:/Development/vcpkg-master/downloads/cmake-3.8.0-rc1-win32-x86/bin/cmake.exe;--build;.;--config;Debug;--target;install;-
-;/p:VCPkgLocalAppDataDisabled=true;/p:UseIntelMKL=No;/m
Working Directory: F:/Development/vcpkg-master/buildtrees/cpprestsdk/x64-windows-dbg
See logs for more information:
F:\Development\vcpkg-master\buildtrees\cpprestsdk\package-x64-windows-dbg-out.log
package-x64-windows-dbg-out.txt
F:\Development\vcpkg-master\buildtrees\cpprestsdk\package-x64-windows-dbg-err.log
Call Stack (most recent call first):
scripts/cmake/vcpkg_install_cmake.cmake:35 (vcpkg_execute_required_process)
ports/cpprestsdk/portfile.cmake:38 (vcpkg_install_cmake)
scripts/ports.cmake:73 (include)
Error: Building package cpprestsdk:x64-windows failed with: BUILD_FAILED
Please ensure you're using the latest portfiles with .\vcpkg update, then
submit an issue at https://github.com/Microsoft/vcpkg/issues including:
Package: cpprestsdk:x64-windows
Vcpkg version: 0.0.78-
Additionally, attach any relevant sections from the log files above.
PS F:\Development\vcpkg-master> .\vcpkg update
Using local portfile versions. To update the local portfiles, use git pull.
No packages need updating.

I believe this is fixed by 5414655, please let us know if the problem persists!

Still getting error with x64 installation with latest:
The following packages will be built and installed:
cpprestsdk[brotli,core,default-features,websockets]:x64-windows
Starting package 1/1: cpprestsdk:x64-windows
Building package cpprestsdk[brotli,core,default-features,websockets]:x64-windows...
-- Using cached B:/IGS/cozmo resources/cpprestsdk/vcpkg/downloads/Microsoft-cpprestsdk-v2.10.8.tar.gz
-- Using source at B:/IGS/cozmo resources/cpprestsdk/vcpkg/buildtrees/cpprestsdk/src/v2.10.8-9ddf85cf92
-- Configuring x64-windows
-- Building x64-windows-dbg
CMake Error at scripts/cmake/vcpkg_build_cmake.cmake:175 (message):
Command failed: V:/Softwares/cmake/bin/cmake.exe;--build;.;--config;Debug;--target;install;--;-v;-j1
Working Directory: B:/IGS/cozmo resources/cpprestsdk/vcpkg/buildtrees/cpprestsdk/x64-windows-dbg
See logs for more information:
B:\IGS\cozmo resources\cpprestsdk\vcpkg\buildtrees\cpprestsdk\install-x64-windows-dbg-out.log
Call Stack (most recent call first):
scripts/cmake/vcpkg_install_cmake.cmake:24 (vcpkg_build_cmake)
ports/cpprestsdk/portfile.cmake:43 (vcpkg_install_cmake)
scripts/ports.cmake:71 (include)
Error: Building package cpprestsdk:x64-windows failed with: BUILD_FAILED
Please ensure you're using the latest portfiles with .\vcpkg update, then
submit an issue at https://github.com/Microsoft/vcpkg/issues including:
Package: cpprestsdk:x64-windows
Vcpkg version: 2018.11.23-nohash
Additionally, attach any relevant sections from the log files above.

Same here. It built nearly 100 dependencies. I tried vcpkg update which asks from git pull, which I made as well. but stops downloading for cpprestsdk
D:\share\libs\code\vcpkg>vcpkg install cpprestsdk cpprestsdk:x64-windows
The following packages will be built and installed:
  * boost-algorithm[core]:x64-windows
  * boost-asio[core]:x64-windows
  * boost-atomic[core]:x64-windows
  * boost-concept-check[core]:x64-windows
  * boost-container[core]:x64-windows
  * boost-context[core]:x64-windows
  * boost-conversion[core]:x64-windows
  * boost-coroutine[core]:x64-windows
  * boost-date-time[core]:x64-windows
  * boost-exception[core]:x64-windows
  * boost-function[core]:x64-windows
  * boost-function-types[core]:x64-windows
  * boost-functional[core]:x64-windows
  * boost-fusion[core]:x64-windows
  * boost-io[core]:x64-windows
  * boost-iterator[core]:x64-windows
  * boost-lambda[core]:x64-windows
  * boost-lexical-cast[core]:x64-windows
  * boost-math[core]:x64-windows
  * boost-numeric-conversion[core]:x64-windows
  * boost-optional[core]:x64-windows
  * boost-pool[core]:x64-windows
  * boost-range[core]:x64-windows
  * boost-regex[core]:x64-windows
  * boost-smart-ptr[core]:x64-windows
  * boost-thread[core]:x64-windows
  * boost-tokenizer[core]:x64-windows
  * boost-tuple[core]:x64-windows
  * boost-type-index[core]:x64-windows
  * boost-unordered[core]:x64-windows
  * brotli[core]:x64-windows
    cpprestsdk[brotli,core,default-features,websockets]:x86-windows
    cpprestsdk[brotli,core,default-features,websockets]:x64-windows
  * openssl[core]:x64-windows
  * openssl-windows[core]:x64-windows
  * websocketpp[core]:x64-windows
  * zlib[core]:x64-windows
Additional packages (*) will be modified to complete this operation.
Starting package 1/37: cpprestsdk:x86-windows
Building package cpprestsdk[brotli,core,default-features,websockets]:x86-windows...
-- Using cached D:/share/libs/code/vcpkg/downloads/Microsoft-cpprestsdk-v2.10.8.tar.gz
-- Using source at D:/share/libs/code/vcpkg/buildtrees/cpprestsdk/src/v2.10.8-9ddf85cf92
-- Configuring x86-windows
-- Building x86-windows-dbg
CMake Error at scripts/cmake/vcpkg_build_cmake.cmake:175 (message):
    Command failed: C:/Program Files/CMake/bin/cmake.exe;--build;.;--config;Debug;--target;install;--;-v;-j1
    Working Directory: D:/share/libs/code/vcpkg/buildtrees/cpprestsdk/x86-windows-dbg
    See logs for more information:
      D:\share\libs\code\vcpkg\buildtrees\cpprestsdk\install-x86-windows-dbg-out.log

Call Stack (most recent call first):
  scripts/cmake/vcpkg_install_cmake.cmake:24 (vcpkg_build_cmake)
  ports/cpprestsdk/portfile.cmake:43 (vcpkg_install_cmake)
  scripts/ports.cmake:71 (include)


chore: snyk scan update

Issue
https://github.com/gravitee-io/issues/issues/7066
Adding dockers images in snyk scan manually after each release
Description
Automated the manual task of adding docker images to snyk scan for continuous scan
Additional context
Added new orb for snyk, commands for docker scan and steps to run snyk scan upon releasing with dry run as false

🚀 CI was able to deploy the build of this PR, so you can now try it directly here
Notes: The deployed app is linked to the management API of APIM master. (Same login and password as APIM master)

📚  View the storybook of this branch here

Sadly it looks like we are missing some information when doing this scan.
Here is the result of a scan with the CLI/CI:

And here are the ones in Dockerhub/AzureRegistry world:
DockerHub

ACR

only critical is mentioned. need to include even low, high and medium as well in severity parameter. i will verify now and update

We only have the base image scan and not the Java external libs we are adding in the image 🤔  (click on the screenshot to have them not blurry)

Ok, i will check further and raise it with snyk or circleci on this issue.  I didnt see any other parameter to include these additional paths

@gaetanmaisse Fix is now done to this PR , so that java external libs are added in the scanning, by installing the snyk CLI and  adding the --app-vulns parameter, see the example below, used on the cicd/snyk_scan_test branch :
CCI link : https://app.circleci.com/pipelines/github/gravitee-io/gravitee-api-management/6704/workflows/b0a12e7d-221b-42bd-b3ed-67c1f7197212

@sursak123 @Hakim187 I've cleaned the CLI part on Snyk and retriggered a few scans to check. It looks better indeed but we are not there yet as scans aren't grouped by version.
Here is what we currently have in the CI/CLI part, everything mixed together:

Here is the DockerHub part, with scans grouped by versions:

Can you reach the Snyk guys and check how can we end up with a proper dashboard?
⚠ Notes: I've rebased the branch on master and force push so be sure to update your local version before reworking on this branch

@gaetanmaisse request is sent to the snyk team, i'll keep you updated once we have a feedback

Closing in favor of https://github.com/gravitee-io/gravitee-api-management/pull/2219


KnockToReactExample

Create example app that calls methods from KnockToReact.swift

Created Knock-To-React (Swift) project to build the example app while creating the KnockToReact.swift (provides all the functionalities of the library). Reorganized the project to contain old Objective-C implementation and new Swift implementation.


Enforce request schema for sucess tests

When choosing a request schema for the Swagger documentation, Xcribe may pick one from a failure test, i. e., an invalid request body as the example request schema.
Xcribe should only use request bodies from success tests (i.e., tests that return 2XX).

https://github.com/brainn-co/xcribe/pull/37


Calling analysis_results while jobs are running gives confusing error

Informations

Qiskit Experiments version:
Python version:
Operating system:

What is the current behavior?
Running an experiment and getting the result while the job is running returns the following error:
data = exp.run(backend)
result = data.analysis_result(0)

~/git/qiskit/qiskit-experiments/qiskit_experiments/database_service/db_experiment_data.py in analysis_results(self, index, refresh)
    632             return self._analysis_results.values()
    633         if isinstance(index, (int, slice)):
--> 634             return self._analysis_results.values()[index]
    635         if isinstance(index, str):
    636             if index not in self._analysis_results:
IndexError: list index out of range

Steps to reproduce the problem
What is the expected behavior?
This should probably return some sort of analysis job object or raise an error saying the job is still pending/running.
Suggested solutions
Avoiding the error requires blocking for results when running in a single line:
data = exp.run(backend)
data.block_for_results()
result = data.analysis_result(0)

But it would be good to handle this a bit better somehow.

I think that default should be to block for results, so users don't have to call block_for_results() explicitly. I would handle this in a parameter to the experiment run() method, something like blocking : bool = True. For specific use-cases where the user want a non-blocking behavrior this param can be set to false and a proper exception should be raised if analysis results is used before the run is complete. The block_for_results() is still useful then as a join operation when non-blocking run is being used

Here's a similar scenario, taken from #256, with block_for_results omitted:
# Run once
expdata1 = exp.run(backend)
expdata1.block_for_results()

# Add extra data
expdata2 = exp.run(backend, experiment_data=expdata1)

I don't think ExperimentData needs to default to block for results, but having the analysis_results method block if its called might be good. This is what the regular qiskit provider jobs do if you call job.results().

@chriseclectic How about blocking also in the #256 use-case?

I think #437 is going to resolve it

@chriseclectic You've recently fixed it, right?


Allow more generic usage of chart widget

Commit af59edc1b673a86656aadd95ae3980503f4e7323 addresses the following lints:

upper_case_acronyms
while_let_on_iterator
branches_sharing_code

Commit dabfd8db95b2f54dd708377e465eaca0f5f45dff and 3983f42c070099a2d08e6e13bb41dbc2ee149442 fix other small pedantic things I noticed while making other changes.
The meat of the change is in commit b95f26823e40b39dec156c1c74f6231fcdb615e2. This commit does not restrict the chart passed to the ChartWidget to a &mut reference to something that implements Chart. This commit instead allows the ChartWidget to be generic over any type that implements Chart and also adds a blanket implementation over all &mut T where T: Chart. These two changes in conjunction allow for the ChartWidget to take either a mutable reference to or ownership of a type that implements Chart.
The previous implementation of ChartWidget to always take a &mut Chart makes sense in most use cases since the user is most likely to create a struct to hold persistent data about the chart and pass a mutable reference to that to the chart widget in the view method on the iced::Application. My use-case however required that I pass extra data to all of the charts in the update function. To accomplish this, I needed to return a new structure with the new data that will implement Chart, but this was not possible since the ChartWidget implementation required a reference to this temporary structure that could not persist.
I have not thoroughly tested the change in implementation to ensure it will not break any existing code though my idea was to ensure this would be 100% backwards compatible with the previous implementation. I have tested the implementation on both of the native examples.
I did not implement this change on the web implementation due to my lack of familiarity with its implementation and the implementation seeming reliant on the chart passed as a reference as seen here:
https://github.com/Joylei/plotters-iced/blob/master/src/web/widget.rs#L97

looks  good. will merge it soon.


'ply properties header format invalid, pls check it first' From a polycam .ply file

          > Same issue here. Error code is the same. "ply properties header format invalid, pls check it first" UE Version: 5.2.1 XV3DGS Plugin 1.1.1 The Gaussian Splat file was generated with Nerfstudio, then exported as PLY from Nerfstudio. I can provide all necessary files if needed.

We added support for the generic ply header file in the just released v1.1.2 plugin, please try again and contact me if there are any bugs
Originally posted by @lxk121lalala in https://github.com/xverse-engine/XV3DGS-UEPlugin/issues/16#issuecomment-1923623055
A fix for files from polycam would be very helpful. Thank you in advance!

I somehow fixed the problem by converting it to cloudcompare so CC.ply and back to .ply and it worked! I used https://github.com/francescofugazzi/3dgsconverter for it

I am getting the same error working with ply files from polycam. Any recommendations?

Same problem here.


Fix elpa variant

Elpa variant isnt properly set in the octopus in spack package.
Steps to fix:

[x] enable elpa only when +scalapack
[x] Update tests to test elpa and scalapack only when mpi is selected
[ ] Set FCFLAGS_ELPA
[ ] Include patch to the m4 for elpa_openmp detection

Fixes https://github.com/fangohr/octopus-in-spack/issues/66

Closing this MR as it is being worked on in https://github.com/fangohr/octopus-in-spack/pull/92


Fix security vulnerabilities

Fix #312 and #331.
Note: some vulnerabilities couldn't be fixed here as they are located within vorpal-repl and load-plugins.

Hey @Berkmann18, appreciated your work! I had issues with the lodash vulnerability too and this PR will help.
Looks like it's broken the CI though. Would you mind having another look?

@superliuwr Yeah, the second commit did break it, I'll try to revert a part of it and see.

Merge!

@dthree ?

@dthree has been inactive since 2018 as you can see...

+1

@dthree any hope of getting this merged? I see you've been active in github recently.


Fresh install is not working on debian

I'm trying to build HDDM on a new Debian system, different than what I had done before and it's failing. CMake works when I point it directly to the XercesC library
base) bellis@titan:~/HDDM/build$ cmake ../ -DXercesC_LIBRARY_DEBUG=/usr/lib/x86_64-linux-gnu/libxerces-c.a -DCMAKE_INSTALL_PREFIX=/home/bellis -DXercesC_INCLUDE_DIR=/usr/include
-- The C compiler identification is GNU 7.3.0
-- The CXX compiler identification is GNU 7.3.0
-- Check for working C compiler: /opt/anaconda3/bin/x86_64-conda_cos6-linux-gnu-cc
-- Check for working C compiler: /opt/anaconda3/bin/x86_64-conda_cos6-linux-gnu-cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /opt/anaconda3/bin/x86_64-conda_cos6-linux-gnu-c++
-- Check for working CXX compiler: /opt/anaconda3/bin/x86_64-conda_cos6-linux-gnu-c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found BZip2: /opt/anaconda3/lib/libbz2.so (found version "1.0.8")
-- Looking for BZ2_bzCompressInit
-- Looking for BZ2_bzCompressInit - found
-- Found ZLIB: /opt/anaconda3/lib/libz.so (found version "1.2.11")
-- Found XercesC: /usr/lib/x86_64-linux-gnu/libxerces-c.a (found version "3.2.2")
-- HDF5: Using hdf5 compiler wrapper to determine C configuration
-- Found xalan2 at /usr/share/java/xalan2.jar
-- Found xmllint at /usr/bin/xmllint
-- Configuring done
-- Generating done
-- Build files have been written to: /home/bellis/HDDM/build

But make fails
(base) bellis@titan:~/HDDM/build$ make
Scanning dependencies of target xstream
[  1%] Building CXX object xstream/src/CMakeFiles/xstream.dir/base64.cpp.o
[  3%] Building CXX object xstream/src/CMakeFiles/xstream.dir/bz.cpp.o
[  4%] Building CXX object xstream/src/CMakeFiles/xstream.dir/common.cpp.o
[  6%] Building CXX object xstream/src/CMakeFiles/xstream.dir/dater.cpp.o
[  7%] Building CXX object xstream/src/CMakeFiles/xstream.dir/debug.cpp.o
[  9%] Building CXX object xstream/src/CMakeFiles/xstream.dir/digest.cpp.o
[ 10%] Building CXX object xstream/src/CMakeFiles/xstream.dir/fd.cpp.o
[ 12%] Building CXX object xstream/src/CMakeFiles/xstream.dir/md5.cpp.o
[ 13%] Building CXX object xstream/src/CMakeFiles/xstream.dir/posix.cpp.o
[ 15%] Building CXX object xstream/src/CMakeFiles/xstream.dir/tee.cpp.o
[ 16%] Building CXX object xstream/src/CMakeFiles/xstream.dir/xdr.cpp.o
[ 18%] Building CXX object xstream/src/CMakeFiles/xstream.dir/z.cpp.o
[ 19%] Building CXX object xstream/src/CMakeFiles/xstream.dir/z_digest.cpp.o
[ 21%] Linking CXX static library libxstream.a
[ 21%] Built target xstream
Scanning dependencies of target hddm-xml
[ 22%] Building CXX object src/CMakeFiles/hddm-xml.dir/hddm-xml.cpp.o
/home/bellis/HDDM/src/hddm-xml.cpp:58:10: fatal error: xercesc/util/PlatformUtils.hpp: No such file or directory
 #include <xercesc/util/PlatformUtils.hpp>
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Even though that header file exists.
base) bellis@titan:~/HDDM/build$ ls -l /usr/include/xercesc/util/PlatformUtils.hpp
-rw-r--r-- 1 root root 32790 Dec 15 09:55 /usr/include/xercesc/util/PlatformUtils.hpp

It even files if I try to explicitly point it to the include directory
base) bellis@titan:~/HDDM/build$ make -I/usr/include
[ 21%] Built target xstream
[ 22%] Building CXX object src/CMakeFiles/hddm-xml.dir/hddm-xml.cpp.o
/home/bellis/HDDM/src/hddm-xml.cpp:58:10: fatal error: xercesc/util/PlatformUtils.hpp: No such file or directory
 #include <xercesc/util/PlatformUtils.hpp>
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
make[2]: *** [src/CMakeFiles/hddm-xml.dir/build.make:63: src/CMakeFiles/hddm-xml.dir/hddm-xml.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:206: src/CMakeFiles/hddm-xml.dir/all] Error 2
make: *** [Makefile:152: all] Error 2

I'm guessing this system is a bit different than my other computer, but it shouldn't be that different.

Same behavior if I use the XercesC_LIBARY_RELEASE
cmake ../ -DXercesC_LIBRARY_RELEASE=/usr/lib/x86_64-linux-gnu/libxerces-c.a -DCMAKE_INSTALL_PREFIX=/home/bellis

Can you try it with just letting the system install xerces-c itself, and then build without any commandline options for xerces? Cmake should be able to find xerces-c on its own. I also installed the debian package libxalan2-java in my debian test build, but that is optional if you don't need the full schema validation toolset.
$ apt install libxerces-c-dev
$ cmake -S . -B build
$ cmake --build build --target install
$ cmake --build build --target modules_install

I was trying to build it without the -DXerces... before and running into errors, which is why I tried the other way.
libxerces-c-dev was installed.
Now, when I try it your way, it's not finding bzip2, even though it's there.
titan:~/HDDM> sudo apt-get install bzip2 libbz2-dev
Reading package lists... Done
Building dependency tree
Reading state information... Done
bzip2 is already the newest version (1.0.6-9.2~deb10u1).
libbz2-dev is already the newest version (1.0.6-9.2~deb10u1).
0 upgraded, 0 newly installed, 0 to remove and 2 not upgraded.
titan:~/HDDM> cmake -S . -B build
-- The C compiler identification is GNU 7.3.0
-- The CXX compiler identification is GNU 7.3.0
-- Check for working C compiler: /opt/anaconda3/bin/cc
-- Check for working C compiler: /opt/anaconda3/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /opt/anaconda3/bin/c++
-- Check for working CXX compiler: /opt/anaconda3/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
CMake Error at /usr/share/cmake-3.13/Modules/FindPackageHandleStandardArgs.cmake:137 (message):
  Could NOT find BZip2 (missing: BZIP2_LIBRARIES) (found version "1.0.6")
Call Stack (most recent call first):
  /usr/share/cmake-3.13/Modules/FindPackageHandleStandardArgs.cmake:378 (_FPHSA_FAILURE_MESSAGE)
  /usr/share/cmake-3.13/Modules/FindBZip2.cmake:62 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
  CMakeLists.txt:17 (find_package)

-- Configuring incomplete, errors occurred!
See also "/home/bellis/HDDM/build/CMakeFiles/CMakeOutput.log".

Ah, wait, maybe it's a conflict between the anaconda install and the debian base install. Let me try to resolve that.

Yeah, no can't figure this out. Is there a way to tell find_packages where to look?

Matt,
Did you install libbz2-dev and libz-dev? Here is a complete list that I
tested, starting from a base debian buster docker image.

apt install g++ python2 python3 libxerces-c-dev libxalan2-java
libhdf5-dev libxml2-utils cmake git libbz2-dev libz-dev
git clone https://github.com/rjones30/hddm
cd hddm && cmake -S . -B build
cmake --build build --target install
cmake --build build --target modules_install

Can you try that? I do not normally install ROOT support because that is
really peripheral to the purpose of hddm.
-Richard Jones

-Richard J.
On Sun, Apr 4, 2021 at 10:07 AM Matt Bellis @.***>
wrote:

I was trying to build it without the -DXerces... before and running into
errors, which is why I tried the other way.
libxerces-c-dev was installed.
Now, when I try it your way, it's not finding bzip2, even though it's
there.
titan:~/HDDM> sudo apt-get install bzip2 libbz2-dev
Reading package lists... Done
Building dependency tree
Reading state information... Done
bzip2 is already the newest version (1.0.6-9.2~deb10u1).
libbz2-dev is already the newest version (1.0.6-9.2~deb10u1).
0 upgraded, 0 newly installed, 0 to remove and 2 not upgraded.
titan:~/HDDM> cmake -S . -B build
-- The C compiler identification is GNU 7.3.0
-- The CXX compiler identification is GNU 7.3.0
-- Check for working C compiler: /opt/anaconda3/bin/cc
-- Check for working C compiler: /opt/anaconda3/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /opt/anaconda3/bin/c++
-- Check for working CXX compiler: /opt/anaconda3/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
CMake Error at /usr/share/cmake-3.13/Modules/FindPackageHandleStandardArgs.cmake:137 (message):
Could NOT find BZip2 (missing: BZIP2_LIBRARIES) (found version "1.0.6")
Call Stack (most recent call first):
/usr/share/cmake-3.13/Modules/FindPackageHandleStandardArgs.cmake:378 (_FPHSA_FAILURE_MESSAGE)
/usr/share/cmake-3.13/Modules/FindBZip2.cmake:62 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
CMakeLists.txt:17 (find_package)
-- Configuring incomplete, errors occurred!
See also "/home/bellis/HDDM/build/CMakeFiles/CMakeOutput.log".
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/rjones30/HDDM/issues/1#issuecomment-813039267, or
unsubscribe
https://github.com/notifications/unsubscribe-auth/AB3YKWHN5BZOV7XF6JAR4SLTHBXA7ANCNFSM42K6VEJQ
.

Matt, can you close out this issue if it resolved to your satisfaction?
-Richard


How can I get no area filling??

Hi,
tried to follow the example (which I have done with nd-d3 before, but without Angular, but this time I aways get area: true and dots on my line and no grid lines. The config is the same as in my older sample, and here everything works ??
Here my code for drawing a series:
$scope.getEnergyData =
function ()
{
infoService.fetch('energyusage/data')
.then(// success
function (data)
{
$scope.data = [
{
key   : "Energy",
values: data,
area  : false
}];
},
// error
function ()
{
console.log("Energy-Usage fetch failed");
$scope.data = [{
key    : "-------",
values : []
}]
});
};
Whats wrong with that?
I include a screenshot of the result
With best regards
Gerhard

What nvd3 version do you use?

.. sorry. Fixed.
Forget to link the nvd3 CSS file, so some defaults were in place I guess. Working now fine.
With best regards
Gerhard


[WIP] Ensure virtual attributes don't reuse table alias

before:
if this table is part of the primary query, then the table alias will conflict. The query will blow up.
after:
use a different table alias so it does not conflict. The queries will work.
/cc @imtayadeway this is causing issues in miq_expression, but the main concern is reports that a customer can tweak to blow up.
ASIDE:
of note, it would be nice if we could detect that the primary query has this table already in it, but that is for another day.

Hmm.. do you have an example of a problem query? I couldn't work it out from your test :trollface:
select (select 1 from (select 1) x) from (select 1 from (select 1) x) x; works fine, for example -- AFAIK the only time table aliases will conflict is if they appear twice in the same scope: select 1 from (select 1) x, (select 1) x;, which doesn't seem like it should be the case here. :confused:

@matthewd It was:
select 1, (select 1 from b)
from a join b on a.id = b.a_id

So I wanted to change to:
select 1, (select 1 from b as b_ss)
from a join b on a.id = b.a_id

[local]/postgres=# select 1, (select 1 from b) from a join b on a.id = b.a_id;
 ?column? | ?column?
----------+----------
        1 |        1
(1 row)

WIPPING on finding an example of a query that is failing

Looks like this may not be necessary.

I will maybe resurrect when this becomes necessary again.
Confused why it seemed to fix things before but is not needed now.


Feature request: range calendar

It would be nice, if you could select multiple dates, like a range calendar:

You can achieve that using 2 flatpickr inputs, and disabling the start/ending dates via js:
https://chmln.github.io/flatpickr/#disable

You can achieve that using 2 flatpickr inputs, and disabling the start/ending dates via js:
https://chmln.github.io/flatpickr/#onchange

Yes that's the way to do as of now. I've had a range picker on my mind for a while now, will implement by next release if I think of a decent way to do it

I think just using two inputs works great, personally.

@chmln did you decide to implement a side by side two calendar range view like this?

This is a great idea!
Select range useless in case selection in current month only...
impossible to select range from 20 of first month until 10 of next month...
Please think about or if you have some idea how to fix that — help us please.

We also need this.

To reiterate my comment https://github.com/flatpickr/flatpickr/issues/96#issuecomment-228889715 using two inputs works great for this.


Add primary table

Primary Table
Fixes #35
Here is a screenshot of that.
Add a screenshot here

This looks awesome. @its-ayush-07

Congrats 🎉, your PR got merged. To be eligible for the swags from ClueLess. Follow this steps.

Star this repository. ⭐

SignIn / SignUp in [ClueLess Website](https://www.clueless.tech/) .

Go to profile section from the top right hand corner.

Comment your profile URL under this comment tagging the person who merged your PR.

That’s it. Follow the leaderboard !
And don’t forget to share your achievement with your friends. @its-ayush-07

Congrats 🎉, your PR got merged. To be eligible for the swags from ClueLess. Follow this steps.

Star this repository. ⭐
SignIn / SignUp in [ClueLess Website](https://www.clueless.tech/) .
Go to profile section from the top right hand corner.

Comment your profile URL under this comment tagging the person who merged your PR.

That’s it. Follow the leaderboard !
And don’t forget to share your achievement with your friends. @its-ayush-07

Thanks @Rajdip019
Here's my profile https://www.clueless.tech/profile/admin/110535490894696020512


Introduce @ToBeImplemented

The @ToBeImplemented annotation replaces Groovy's @NotYetImplemented.
The problem with NotYetImplemented is that tests marked with it succeed no matter what causes the test to fail. Marked tests can pass because the expected failure is still present (which is the purpose of the test), or if the expected failure is replaced by some other failure.
It's better to write a test that explicitly tests for the expected failure, so when it fails for some other reason, it becomes noticeable. The purpose of the @ToBeImplemented annotation is to keep such tests easy to find in the code.

Here's another one, the previous one produced some weird errors: https://builds.gradle.org/viewQueued.html?itemId=7547266

@lptr Still some errors. Could you rebase on current master and try again?


Give the option to auto-generate a basic Web.config file when trying to deploy a full-framework app

When this extension attempts to deploy a full-framework .NET app to TAS, it will show this error message if no Web.config file can be found at the root project directory:

Instead of just describing the issue, this pop-up window could offer to create a basic Web.config file at the specified location to facilitate the deployment process

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.web>
    </system.web>
</configuration>

Need to accommodate for Web.DEBUG.config or Web.RELEASE.config.
Also, does the buildpack handle this for us if we push to TAS?

Default Web.Debug.config:
<?xml version="1.0"?>

<!-- For more information on using Web.config transformation visit https://go.microsoft.com/fwlink/?LinkId=301874 -->

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <!--
    In the example below, the "SetAttributes" transform will change the value of
    "connectionString" to use "ReleaseSQLServer" only when the "Match" locator
    finds an attribute "name" that has a value of "MyDB".

    <connectionStrings>
      <add name="MyDB"
        connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True"
        xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
    </connectionStrings>
  -->
  <system.web>
    <!--
      In the example below, the "Replace" transform will replace the entire
      <customErrors> section of your Web.config file.
      Note that because there is only one customErrors section under the
      <system.web> node, there is no need to use the "xdt:Locator" attribute.

      <customErrors defaultRedirect="GenericError.htm"
        mode="RemoteOnly" xdt:Transform="Replace">
        <error statusCode="500" redirect="InternalError.htm"/>
      </customErrors>
    -->
  </system.web>
</configuration>

Default Web.Release.config:
<?xml version="1.0"?>

<!-- For more information on using Web.config transformation visit https://go.microsoft.com/fwlink/?LinkId=301874 -->

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <!--
    In the example below, the "SetAttributes" transform will change the value of
    "connectionString" to use "ReleaseSQLServer" only when the "Match" locator
    finds an attribute "name" that has a value of "MyDB".

    <connectionStrings>
      <add name="MyDB"
        connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True"
        xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
    </connectionStrings>
  -->
  <system.web>
    <compilation xdt:Transform="RemoveAttributes(debug)" />
    <!--
      In the example below, the "Replace" transform will replace the entire
      <customErrors> section of your Web.config file.
      Note that because there is only one customErrors section under the
      <system.web> node, there is no need to use the "xdt:Locator" attribute.

      <customErrors defaultRedirect="GenericError.htm"
        mode="RemoteOnly" xdt:Transform="Replace">
        <error statusCode="500" redirect="InternalError.htm"/>
      </customErrors>
    -->
  </system.web>
</configuration>


Fault -32700: 'parse error. not well formed'

I'm getting this error while trying to publish a notebook:
/home/juanlu/.miniconda3/envs/planet9/lib/python3.5/site-packages/IPython/nbconvert.py:13: ShimWarning: The `IPython.nbconvert` package has been deprecated. You should import from nbconvert instead.
  "You should import from nbconvert instead.", ShimWarning)
Traceback (most recent call last):
  File "../../ipy2wp/ipy2wp/ipy2wp.py", line 131, in <module>
    status_published)
  File "/home/juanlu/.miniconda3/envs/planet9/lib/python3.5/xmlrpc/client.py", line 1091, in __call__
    return self.__send(self.__name, args)
  File "/home/juanlu/.miniconda3/envs/planet9/lib/python3.5/xmlrpc/client.py", line 1431, in __request
    verbose=self.__verbose
  File "/home/juanlu/.miniconda3/envs/planet9/lib/python3.5/xmlrpc/client.py", line 1133, in request
    return self.single_request(host, handler, request_body, verbose)
  File "/home/juanlu/.miniconda3/envs/planet9/lib/python3.5/xmlrpc/client.py", line 1149, in single_request
    return self.parse_response(resp)
  File "/home/juanlu/.miniconda3/envs/planet9/lib/python3.5/xmlrpc/client.py", line 1321, in parse_response
    return u.close()
  File "/home/juanlu/.miniconda3/envs/planet9/lib/python3.5/xmlrpc/client.py", line 654, in close
    raise Fault(**self._stack[0])
xmlrpc.client.Fault: <Fault -32700: 'parse error. not well formed'>

These are my packages:
└[20:46:29] $ python --version
Python 3.5.1 :: Continuum Analytics, Inc.
└[20:51:37] $ jupyter --version
4.0.6
└[20:51:44] $ jupyter notebook --version
4.1.0

I would try to have a look on this asap but, in general, i stopped any development on the notebook/Jupyter stuff as their code/API is quite unstable and each new small version break some of my extensions... :-(

No hurries, I totally understand. I will use an iframe inside the wordpress article in the meanwhile :)

I have identified the problem in the figures that result of using %matplotlib notebook. I will rename the issue and leave it open - for the moment, I switched to %matplotlib inline instead.

BTW there are some updates in my branch https://github.com/Juanlu001/ipy2wp/tree/update-jl. I intend to fix #12 and #13 there but don't have an ETA. I got rid of Python 2 support and the JS extension, but still I can make a pull request if you wish.

I haven't seen this until today. I will borrow some of the code from your branch. In fact, I already did some refactoring here without knowing the commits in your branch :-(

Oops, don't worry! Glad you're back to work :) I cannot dedicate much time to jupy2py but if there are easy issues that you want to assign me please go ahead!


Microsoft images give errors

Dive looks very cool, and today I tried it on a couple of Microsoft images, but got lots of errors. Eg:
[1mImage Source: [0mdocker://mcr.microsoft.com/dotnet/framework/aspnet
[1mFetching image...[0m (this can take a while for large images)
[1mAnalyzing image...[0m
[1mBuilding cache...[0m
path error at layer index Index(0-1:2): unable to remove '/Files/Windows/System32/LogFiles/Scm/scm.evm': path does not exist: /Files/Windows/System32/LogFiles/Scm/scm.evm
path error at layer index Index(0-1:2): unable to remove '/Files/Windows/System32/catroot2/edbtmp.log': path does not exist: /Files/Windows/System32/catroot2/edbtmp.log
There are 4900 lines of errors. Is this a known problem?

Yes. I'm currently encountering the same issue. They're all "path error at layer index Index(0-14:15) unable to add..." and "path does not exist", which would be incorrect, since I'm certain that the paths reported do exist.
I've tried on several working images, which are fully functional, and the error is the same.

I am getting these errors to for images we build using Kaniko. Maybe that's related?
Building cache...
  path error at layer index Index(0-34:35): unable to remove '/var/lib/apt/lists/.wh.auxfiles': path does not exist: /var/lib/apt/lists/.wh.auxfiles
  path error at layer index Index(0-35:36): unable to add '/var/lib/apt/lists/.wh.auxfiles': path does not exist: /var/lib/apt/lists/.wh.auxfiles
  path error at layer index Index(0-36:37): unable to add '/var/lib/apt/lists/.wh.auxfiles': path does not exist: /var/lib/apt/lists/.wh.auxfiles
  path error at layer index Index(0-37:38): unable to add '/var/lib/apt/lists/.wh.auxfiles': path does not exist: /var/lib/apt/lists/.wh.auxfiles
  path error at layer index Index(0-38:39): unable to add '/var/lib/apt/lists/.wh.auxfiles': path does not exist: /var/lib/apt/lists/.wh.auxfiles
...

is it related to copy layer cache when i use gcr.io/kaniko-project/executor:v1.9.0-debug having same situation.

it is character device.

+1  Same error here for windows Server Core 2022 (5G size):
" path error at layer index Index(0-47:48): unable to add ...."


Ask the asynchronous features for Vim 8.1/8.2

Hello,
NERDTree is very good plugin for Vim but it seems doesn't support asynchronous features for vim 8.1/8.2.  Because if we open a folder which has a huge of files inside, it will be spend many time to load it and Vim has to wait for it.  The other plugin defx.nvim has been used the Remote plugin from NeoVim. It should be good idea for NERDTree can implement the asynchronous features for Vim 8.1/8.2.

Asynchronous vim features are only applicable when communicating with external processes.
NERDTree is implemented in pure VimScript, so async support would require to rewrite at least some parts of the plugin in another language.

@noscript , thanks for you reply.  I'm not familar with Vim script but can read to understand them. Python is one of my familar language.  Does the member has the road map to do this asynchronous feature? NERDTree is really a excellent vim plugin but only may missing the asynchronous feature.

would it be possible to use timer_start() along with a lambda callback to run in the background? Something like this maybe....
function! s:NERDTree.__update(name)
    ... process a:name to generate tree hierarchy
endfunction

function! s:NERDTree.update(name)
    if has('lambda') && has('timers')
        call timer_start(0, { -> s:NERDTree.__update(a:name)})
    else
        call s:NERDTree.__update(a:name)
    endif
endfunction

Vim is single threaded and so timers are executed in the same thread. Any long operation will freeze Vim.

Given that vim (and even neovim) is single-threaded, there is no sense in attempting this. Plus, I have no plans to rewrite NERDTree in another language. The reason NERDTree is so slow (and a memory hog) is that it creates an object in memory for each item on the tree. This is a very slow and memory intensive process when the tree is large, and is a lot of overhead because many of those objects are just taking up space when the files they represent aren't accessed.
There are plenty of other plugins out that either do less in terms of memory with the files, or are written at least partially as external programs. They operate better than anything I'd have the time or patience to rewrite NERDTree into.
And there are people who want Vimscript-only plugins (I was one once.), and I think NERDTree fits that bill well.


docs: update lb.md

:tada: This PR is included in version 3.22.4 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:


raft: Fix a nil-pointer panic in MultiNode.Propose.

@xiang90 @yichengq
CC @mrtracy

The fix LGTM. But this change might cause a silent drop of proposal. Not sure you are OK with it. But I do not have a better solution at this moment.

Agreed that this is probably better than an NPE, but a silent drop also leaves room for further improvement (or at least an investigation of alternatives).

We already have the possibility of silent drops (see the comment just above the changed lines in multinode.go: the single-node version blocks the channel if it doesn't know the leader; the multi-node version has to read from the channel and drops the message instead). We work around these drops at a higher level (the pending list in multiraft).
FYI there's a second related panic that I'm trying to narrow down, so expect another PR soon. I'm not sure which one is the one @mrtracy has run in to.

@bdarnell I am aware of that one too. Just want to give you guys a reminder. Merging...


Shaders : Global uniform declaration breaks loading the project

Godot version
4.11 alpha
System information
Windows 11
Issue description
If I declare a global uniform in the shader script, project crashes on next loading;
WORKAROUND: deleting the declaration with notepad directly in .tres file before launch and then retyping it again, once loaded. [they work fine during the session (yes, I added global in project settings)]
Steps to reproduce
shader_type canvas_item;
global uniform float g;

void fragment(){
	vec4 color = texture(TEXTURE,UV);
	color.a-=g;
	COLOR = color;
}

Add float global uniform in project settings, so there is no error spotted by the engine.
close and reopen the project.

Minimal reproduction project
No response

The issue is that per-instance uniforms (and likely global uniforms) aren't implemented for use in 2D (canvas_item) shaders yet. They only work with 3D (spatial) shaders.

I wonder if this is connected to the recent shader caching issues. It would explain why it works after deleting the shader and rewriting it on subsequent loads


Add support for Piwigo 12

Closing. Tested 2.0.3 on Piwigo 12 locally and have uploaded the new revision to the main Piwigo extensions site. That revision is marked as being compatible so Piwigo should no longer flag it as not being compatible.


Added Specular Highlights, Spot Lights, Directional Lights

I've also approved the CI, and allowed it to run on your proposed changes. Hopefully they'll all pass, but if they don't, try to fix the bugs if you can.

In the future, it'll be nicer and easier to review if you break up the changes into multiple Git commits instead of one monolithic commit.
Don't worry about increasing the number of commits on the main repo. We can squash and merge PRs, meaning after reviewing the code, we can make it so that only 1 new commit shows up on the repository.

Please fix the bugs which prevent CI build


Fix form focus directive, add tests

When writing a test for #27, I found that the code could stand to be refactored. By adding scope: true, support for multiple forms is handled correctly without having to pass around the form name. I also eliminated the for...in loop since it was unnecessary. My only remaining question is whether this adequately handles all error cases.
cc @iandotkelly @dylanb

Looks fine to me. My only concern is now we have a separate scope, if that's ok with the design I'm fine with it.

Is this released yet?

It is now! I was able to preserve your commits in this PR, so they are recognized in the code history. Thanks for your contributions! https://www.npmjs.com/package/ng-a11y


Question : not using service worker ?

Hi, is elderjs not using service worker ? Or dont need it ?
Thanks

@x4080 No service worker needed at this time. They are complex to debug and are we didn't see any advantages for the SSG to include it... but we're open to having our minds changed if there is a large oversight on our end. 👍
What problem would the service worker solve? Just looking for offline support?

@nickreese, thanks for quick reply, I agree with quirks with service worker, I experienced strange things using sapper with sw, like when I refresh the page (mainly in IOS) - some components will appear twice
I just think using service worker for static assets for first loading - it will improve page loading, and lighthouse score :)
Not thinking about offline right now

Hi @x4080, you can do caching of static assets without a Service Worker using cache headers. For example in the Elder.js template the Svelte components are compiled to /public/dist/svelte/. The filenames contain a hash like entryClock-075a8898.js. The hash ensures the name changes as the file contents change. So you can set a cache header to Cache-Control: public, max-age=31536000, immutable.
If you use Netlify for instance you could achieve this using:
# netlify.toml
[build]
  command = "yarn build"
  publish = "public/"

[[headers]]
  for = "/dist/svelte/*"
  [headers.values]
    cache-control = '''
      public,
      max-age=31536000,
      immutable'''

@jbmoelker Thanks for the tip

@jbmoelker Included this in the netlify.toml of the template. We were doing this on our Cloudflare worker on ElderGuide.com but hadn't documented it for Netlify. This is a great addition.

@nickreese I'm playing with firebase hosting here's for firebase.json
{
  "hosting": {
    "public": "public",
    "headers": [
      {
        "source": "/**",
        "headers": [
          {
            "key": "Cache-Control",
            "value": "no-cache, no-store, must-revalidate"
          }
        ]
      },
      {
        "source":
          "**/*.@(jpg|jpeg|gif|png|svg|webp|js|css|eot|otf|ttf|ttc|woff|woff2|font.css)",
        "headers": [
          {
            "key": "Cache-Control",
            "value": "max-age=31536000"
          }
        ]
      }
    ],
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ]
  }
}


Make remaining uses of Value.get() side effect friendly

Follow up for #21629
Fixes some bugs in side effect propagation, and adds more documentation regarding side effects to the ValueSupplier.Value

@bot-gradle test qfl

OK, I've already triggered the following builds for you:

QuickFeedbackLinux build

@bot-gradle test qfl

OK, I've already triggered the following builds for you:

QuickFeedbackLinux build

@bot-gradle test this

OK, I've already triggered the following builds for you:

PullRequestFeedback build

@bot-gradle test and merge

OK, I've already triggered a build for you.

Pre-tested commit build failed.

@bot-gradle test and merge

OK, I've already triggered a build for you.


Typo: integreates -> integrates

Hey @agarrharr
just a typo...
Cheers!

Thanks! I integreated that fix. :)

Thanks! I integreated that fix. :)

hahaha, thanks for the quick integreation :D


Support BookieID using bookie-rack affinity groups

With Pulsar 2.7.0 we include Apache BookKeeper 4.12.0 that allows you to configure a static "BookieID" that does not depend on the current Network Address of the Bookie.
Unfortunately it is not possible to leverage this feature we need to inject the BookieAddressResolver into Pulsar  DNSToSwitchMapping implementation ZkBookieRackAffinityMapping.
An enhancement is required on BK side
https://github.com/apache/bookkeeper/pull/2519

this fix has been committed to master branch

this fix has been committed to master branch


Rd service not detected

I installed Myntra app in my android and use the function getDeviceInfo() but function always give response driver not found and status -1

Make sure that the device is connected properly and the Device driver is installed correctly on your Mobile.
Share your Device Information.

Do i need to pass device package name in the function

No. This package can automatically get that device package name using the device driver.

ok

👍


Can not create a tag with < character

Description:
If you try to create a tag with a < character, you will get a HTTP Status 400 response.
Environment:
Shopware <IP_ADDRESS>-rc4
Steps to reproduce:

Open the detail view of a customer in the Shopware 6 administration
Try to add a new tag for the customer with a < character, e.g. <abc

Expected result:
A new tag named "<abc" or a useful error message
Actual result:
Nothing happens and you will get a HTTP status code 400 for /api/tag with the message "This value should not be blank."

[public] Automated response: This issue is linked to the internal issue https://shopware.atlassian.net/browse/NEXT-34405.
[created from NEXT-34405, comment 485876]

[public] Hello,
Within our company roadmap and work capacity, we try to address each bug or improvement request but admit that not each one will be resolved. To continue our culture of honesty and openness, we are closing this issue to focus on our roadmap on behalf of all Shopware users.
If you feel like this issue is still impacting you, please create a new issue and let us know. Thank you again for your valuable feedback.
[created from NEXT-34405, comment 501206]


Update README.md

I think the API changed for this one also
actor.ProcessRegistry.Register("myactor", pid) does not work anymore

There is actor.ProcessRegistry.Add but it needs a process and wont accept pid so not sure


[backport] Update agnostic code tutorial

Backport of #1521

[automatic post] Jenkins, test this please.

Jenkins CI test (for commit 7551e3125544fa068de1b5c7601d5a94dcf5d9ba, target branch v4) failed with status FAILURE.
(For contributors, please wait until the reviewer confirms the details of the error.)


Recaptcha.getClient(siteKey:) always returns an error

Describe the bug
Intergrated the latest version 18.0.2.
Using the following
Recaptcha.getClient(siteKey: siteKey) { [weak self] client, error in
            if let error {
                print("RecaptchaClient creation error: \(error).")
            }
            if let client {
                self?.recaptchaClient = client
            }
        }

I always get an RecaptchaClient creation error: Error code: 100.
Didn't have this issue with previous versions.
Also wrapping the above code as per instructions on https://cloud.google.com/recaptcha-enterprise/docs/instrument-ios-apps crashes the app, see screenshot below for the crash.
Integration Method
Select the method used to integrate with reCAPTCHA Mobile.

[x] SPM
[ ] Cocoapods
[ ] Direct Download

SDK Version (e.g. 18.0.1): 18.0.2
To Reproduce
Steps to reproduce the behavior:
Simulator & Device seems to always fail when using Recaptcha.getClient(siteKey:)
A crash occurs when trying to use  Task { ... await Recaptcha.getClient(siteKey:) ... }
Expected behavior
Should be able to get the client from Recaptcha.getClient
Screenshots
Screenshot of the crash

Xcode version (please complete the following information):

Version [e.g. Xcode 13.4.1]

Device (please complete the following information):

Model: [e.g. iPhone6] iPhone 14 Simulator - Device: iPhone XS Max
OS: [e.g. iOS8.1] iOS 16 Simulator - Device iOS 1.5.
Simulator or real Device? Simulator & Device

Additional context

We are looking into this, thank you for the bug report.

We have investigated this locally and were able to reproduce, it was an internal issue with the SDK that happen on low end devices/emulators. A release with the fix is coming soon
Thanks for filing the bug! 😄

Hi there 👋
I'm receiving same error RecaptchaClient creation error: Error code: 100. for all 18.0.X versions now.
Verified using this project

We are targeting a release of a fix this week, thank you for the bug report.

18.0.3 just went out with a probable fix for this.  Let us know if this works (but note there is a scoring bug ATM: #16)

Thanks @mcorner for the update. I did a quick test and I successfully received RecaptchaToken object, but I spot another bug. I had no bundle ID specified in Google Cloud Console and disabled bundle ID verification, but still sdk returned error 4 Invalid Package Name. After specifying bundle ID in Console it works as expected. Do you want me to file another issue?

@mcorner Nice thanks for the quick fix, will integrate and report back 👍

I'm receiving the same error as OP but 18.0.3 does not fix the issue for me. Tested on:

iOS Simulator (iPhone 14 Pro)
Integrated via direct download

If you downloaded it via direct download, that is very likely to be 18.0.2 as we haven't updated the direct download link yet (takes longer than pushing to cocoapods). Also note that direct download nomlonger requires protobuf as a dependency (it is included now).  Lmk if I am wrong.

@mcorner I pretty much took the link from the documentation and manually changed the version number in the URL. https://dl.google.com/recaptchaenterprise/v18.0.3/RecaptchaEnterprise_iOS_xcframework/recaptcha-xcframework.xcframework.zip

Also note that direct download no longer requires protobuf as a dependency (it is included now). Lmk if I am wrong.

do you mean it's no longer a dependency in version 18.0.2 or 18.0.3?

Can you try a real device?   Also, send me your sitekey at markcorner at the company I work at...
And in 18.0.3 you no longer need protobuf as a dependency.  18.0.2 you did

I've tried on a real device (iPhone 14 Pro) as well. Just sent you and email as well.

And in 18.0.3 you no longer need protobuf as a dependency. 18.0.2 you did

understood!

@bjjeong I believe I have a minimal reproduction of your error.  I want to confirm that you aren't actually getting a 100  you are getting a crash, right?
I get this while using RN with by bridging from objc to a swift use of reCAPTCHA.  Oddly it is working while using it directly from objc in RN.  You can give that a try to see what you get.
I think this is a) a different issue and b) is RN related.  We don't really support RN ATM, but I want to see if we can fix this.  I get some indications that this might be related to #15 actually.

@mcorner yep, no 100 error, just a crash.
that's interesting because the first approach I tried was with objc and I was getting the same error. To confirm, when you got it to work with objc, were you on 18.0.3 or 18.0.2?
I'll give objc another try right now - perhaps I did something wrong the first time.

Ok, this is definitely a different bug, opened #18

@mcorner good news - I was able to get it to work with both objc and swift.
Thank you for pointing out #15. That issue reminded me that in my logs, I kept getting the following warning Main Thread Checker: UI API called on a background thread: -[WKWebView .cxx_construct].
To get this to work, I had to make sure the calls to getClient and execute were being called on the main thread.
For swift:
@objc
func initialize(_ siteKey: String) {
  DispatchQueue.main.async { // <------- this right here
    Recaptcha.getClient(siteKey: siteKey) { [weak self] client, error in
      if let error {
        print("RecaptchaClient creation error: \(error).")
      }
      if let client {
        self?.recaptchaClient = client
      }
    }
  }
}

For objc:
RCT_EXPORT_METHOD(initialize:(NSString *)siteKey)
{
  dispatch_async(dispatch_get_main_queue(), ^{
    [Recaptcha getClientWithSiteKey:siteKey
          completionHandler:^void(RecaptchaClient* recaptchaClient, RecaptchaError* error) {
            if (!recaptchaClient) {
              NSLog(@"%@", error);
              return;
            }
            NSLog(@"reCAPTCHA initialized!");
          }
    ];
  });
}

After wrapping those calls, both getClient and execute complete with no issues!

Great! Yes further discussion in #18.
I am closing this issue since the original issue is likely solved.  Please open a new issue if not.


In(..) clause with empty collection has no affect

If I do something like engine.In("my_column", []int64{}).Find(&results), every row of the corresponding table will be returned (just like engine.Find(&results)). I would instead expect no rows to be returned, since a SQL query with an empty IN clause, such as SELECT * FROM foo WHERE col in (SELECT 0 WHERE 0=1) returns no rows.
If this is a bug, I would be happy to fix it.

Yes, I know this. Keep it no condition or a false condition for empty In which one is better?

I personally prefer false condition

agree with @ethantkoenig , false condition make sense


Improve Drogon 2.0 API

This is a placeholder ticket for discussions related to public API changes inside the framework.
As we currently already have a user base, and most people would be annoyed by sudden API changes in minor version upgrades, we can use the upcoming release of Drogon 2.0 (whenever that will be) to also improve the public API where it’s currently suboptimal, and introduce breaking changes with a new major version.

As of now, big, breaking changes includes:

Replaced JsonCpp with nlohmann/json
Dropped MD5
Introduced SHA3 and BLAKE2b
Replaced all trantor::Date objects with std::chrono::syste,_clock::time_point

Is it relevant to use std::filesystem::path instead of std::string when variable/arguments are a path to a file ?

That's a good question. But AFAIK most (even C++17 only) libraries uses std::string(_view) anyway. We could add that if it becomes popular.

Isn't it better to create a new branch related to the new version so we can all contribute and test.

We would like to. But since we replaced a lot of the low level code in drogon2. Almost all of the core functions aren't even compiling. We are in the process of bringing features back. It isn't ready for even pre-alpha. However since we are still bringing up features, most new features added to drogon will also land in drogon2.

@marty1885 could you elaborate on why nlohmann/json was chosen over other JSON libraries? Is that discussion available somewhere?

@sharm294 We discussed internally. Some points are illustrated here.
It boils down to a few points:

4x faster in parsing compared to JsonCpp (the library that we are using now)
Best syntax among all libraries
Graceful type error handling (unlike RapidJSON and SimdJSON)
Handles both reading and writing to strings/buffer
Available on most Linux (and BSD) distros (to avoid packing our own submodule, thus potentially conflicting with the user's setup)

Feel free to suggest other libraries if you think they fit better :)

Otherwise Boost.JSON would also be a candidate

I was just curious; nlohmann/json seems like a good balanced choice from what I've read. Still, RapidJSON's performance is enticing but I guess that comes at the cost of type safety and ease of use. I wonder if you can create a clear partition between Drogon and its JSON library backend so the user can choose in Cmake what to build Drogon with.
Btw, you guys have done awesome work on Drogon. I'm currently using it on a project :) The performance, documentation, and your availability and activity on issues here were big factors in choosing it. Look forward to 2.0!

I think it's unlikely we could do that as there's isn't a universal JSON API in C++. But you don't need it anyway. Drogon already parses JSON lazily. So you could add an overload to fromRequest then call req->as<rapidjson::Document>() to let RapidJSON to parse the request, instead of letting the default library doing the job.

是否可以在app().run();时就创建controller对象而不是在收到第一个请求时


added DJ Pringle to guestbook.md

One more for the guestbook Sean!
Great course, and this is a great little exercise :-)

Thank you!