Feature: Webpack 5

This PR resolves the bug reports on the Node.js OpenSSL error 0308010c:digital envelope routines::unsupported with Node 17+.
There are a few ways to fix the error when running Webpack dev server and the most sensible solution is to upgrade Webpack to version 5.

Came here with the same error (0308010c:digital envelope routines::unsupported) and was going to suggest the same fix. It looks like someone else suggested the same fix back in 2020.
@fitzgen @ashleygwilliams can you merge one of these?

Just encountered this as well... I also bumped the version of the copy-webpack-plugin to ^12.0.0 which changes the constructor in webpack.config.js to read new CopyWebpackPlugin({patterns:["index.html"]}).
Afterwards the Rust-WASM tutorial worked as described again.

@DawChihLiou Thank you for making this PR! The changes here completely fixed the tutorial. I was originally getting the same digital envelope routines mentioned earlier in this thread. Can verify that the changes still work.

@DawChihLiou Thank you again, the changes fixed the tutorial for me as well. Tried this on a laptop and desktop and it worked both times.


Setting headers per file

With NGINX I was able to set the header per filetypes in a folder, like
location /tuts (.*\.pdf) {
    add_header Content-disposition "attachment";
}

to ensure files like pdf/mp4 etc are always forced to download, regardless of browser.
I have something like
tuts.example.com {
    root /var/www/static/tuts
    browse
    header / Content-disposition "attachment"
    log ../logs/tuts.log
}

but visiting tuts.example.com just downloads the HTML.
I would like that any file (or preferably specific files) at that location would get that header applied. The folder can have pdf/txt/mp4 files (amongst others), and some will open in the browser and others will download, again depending on the browser used.
The only 100% reliable way with NGINX that I could have a simple indexed page and force certain filetypes to download was to use the add_header method I mentioned above. I also tried changing the mime type to application/octet-stream but that wasn't reliable either.
Is this possible with Caddy or have I just messed up the syntax?

With the headers directive, you've set the base path to / which equates to all requests. It should instead be the path to only the folder which has the downloads stored in it.

That's what I had initially but it didn't seem to work at all. I tried just adding a custom header with
header /var/www/static/tuts X-Custom-Header "Some value"

but I couldn't see that in the response in the Chrome dev tools.
If I test a file that I know will download by default, like a zip, then I'll get something like
Accept-Ranges:bytes
Connection:keep-alive
Content-Disposition:attachment
Content-Length:7
Content-Type:application/zip
Date:Mon, 18 Jan 2016 12:23:03 GMT
ETag:"569cd4c7-7"
Last-Modified:Mon, 18 Jan 2016 12:04:23 GMT
Server:nginx/1.4.6 (Ubuntu)

with NGINX, but with Caddy
accept-ranges:bytes
content-length:7
content-type:application/zip
date:Mon, 18 Jan 2016 12:18:05 GMT
last-modified:Mon, 18 Jan 2016 12:04:23 GMT
server:Caddy
status:200

The server blocks are identical between NGINX/Caddy. All I did was change the syntax where needed, like browse instead of autoindex on.

If your root is /var/www/static/, you should set the header for /tuts. It is doing matching based on the HTTP GET path.

The root is /var/www/static/tuts. It's a folder with a bunch of files in it. When someone hits tuts.example.com then I want to serve the contents as a basic indexed page. This much works fine, barring the headers. I have it stripped down to simply
tuts.example.com {
    root /var/www/static/tuts
    browse
    header /var/www/static/tuts Content-disposition "attachment"
}

but no headers get applied.
For testing purposes, I tried making a files folder within tuts and moving the files in there, then used
tuts.example.com {
    root /var/www/static/tuts
    browse
    header /var/www/static/tuts/files Content-disposition "attachment"
}

but no difference.

header is request path based (not OS path based). Maybe try adding mime type too.
tuts.example.com {
    root /var/www/static/tuts
    browse
    header / Content-disposition "attachment"
    mime .mp4 application/octet-stream
    mime .pdf application/octect-stream
}

That was my initial assumption, but when I implement it exactly as you mentioned then visiting tuts.example.com downloads the HTML, it doesn't render the index.

Oh, you mean it downloads every file, including html. But you only want it limited to mp4, pdf e.t.c ?

No, I mean it literally downloads a copy of the HTML. If I go to that address it'll download download.htm. It doesn't actually take me to tuts.example.com.

That's what I've been saying -- the path you set for your header directive should only be the path for files you WANT the browser to download (in your case) -- not the path that includes the html files.

There are no HTML files in that tuts folder. It's just a file dump for txt/zip/mp4/pdfs mostly. That's why I used browse so it would just display as a list of files to choose from to download.
If I use
tuts.example.com {
    root /var/www/static/tuts
    browse
    header /var/www/static/tuts Content-disposition "attachment"
}

then the page renders properly but none of the files get that header applied. If I use
tuts.example.com {
    root /var/www/static/tuts
    browse
    header / Content-disposition "attachment"
}

then it's as I described. The browser just downloads the HTML (i.e the HTML that would be used if the page was to be displayed).

Ohh. So what's happening is you're setting the header for all requests, which tells the browser to download a file no matter what the response is. The browse middleware just writes an HTML response - the browser doesn't know it's not a real file on disk, it just thinks it has to download it because you're setting that header.

That's the problem. Either I get the page as a download, or the page renders as an indexed page but none of the downloadable files get that header applied.
With NGINX my setup was this
server {
    listen   80;

    root /var/www/static/tuts;
    server_name tuts.example.com;

    location ~* \.pdf$ {
        add_header Content-Disposition "attachment";
    }
    autoindex on;
}

Visiting the page would show a list of the files in the tuts folder, much like browse. The crucial difference being that it allowed me to target files inside the folder and apply a header only to them.
If I didn't specify a file(s) and just used
server {
    listen   80;

    root /var/www/static/tuts;
    server_name tuts.example.com;

    add_header Content-Disposition "attachment";

    autoindex on;
}

then it behaves exactly as
tuts.example.com {
    root /var/www/static/tuts
    browse
    header / Content-disposition "attachment"
}

in that it returns an HTML download, not a page listing.
So, as it stands, I can't use browse and target files in that folder to apply headers to? Something like
header /*.pdf Content-disposition "attachment"

Thanks for the help btw. I was able to get as much done in 10 minutes with Caddy as it took me the best part of an hour with NGINX.

Ahhh, I see, so you need to apply headers to just .pdf files.
This can't be done right now -- not intuitively, anyway -- except maybe using a hack with the rewrite directive (@abiosoft?).
Meanwhile I'm considering implementing more powerful request matching features since the number of valid use cases seem to be adding up.

Actually, rewrite can as well be able to add/remove headers since proxy can do that too.

Closing since the answer to the question is the same feature request as in a few other related issues. Thanks!

Closing since the answer to the question is the same feature request as in a few other related issues.

I am trying to track down the status of this feature request. Specifically, I want to add headers to a rewrite rule - i.e., if I match a rewrite regex, I want to add response headers.
Is this possible today?


JupyniumStartSync sometimes leaves the ipynb empty

Minor bug that doesn't set the ipynb content from time to time.
Maybe happens when you move around during the :JupyniumStartSync call.
It's minor because as soon as you make changes in vim it will be synced again.

This happens when the kernel lags and gets started after we set all texts.
We can wait until the kernel loads before we start setting the texts.


Make constants related to orphaning mechanism configurable

https://github.com/scylladb/scylla-rust-driver/blob/d4ea364a772f3c052dd5bc3daab1abec7c59606e/scylla/src/transport/connection.rs#L55-L62

My first take was that it's not worth making it configurable and let's just pick some sensible constants (1 second OLD_AGE_ORPHAN_THRESHOLD seems low). But on a second thought, for OLAP worksloads it might make sense to pick a very high constants, therefore let's keep this open (but it's not worth doing now).


Variable font size for the suggestions and chat panels

Discussed in https://github.com/intitni/CopilotForXcode/discussions/176

Originally posted by KieranConlon April 26, 2023
The font size used for the suggestions and chat panels appears to be fixed size.
Could having a variable font size be a nice improvement?

Released in 0.14.0 beta 4

Released in 0.14.0


getMigrationsForRollback method fix

The syntax change is not a fix and will not be accepted. Taylor likes the clarity of if.. else statements.

@BrandonSurowiec I didn't know syntax changing isn't a fix. :slightly_smiling_face: And about this PR'
s acceptance, my intention wasn't making this accepted. I suggested the way which I think it should be done. :slightly_smiling_face:

I am closing this pull request because it lacks sufficient explanation, tests, or both. It is difficult for us to merge pull requests without these things because the change may introduce breaking changes to the framework.
Feel free to re-submit your change with a thorough explanation of the feature and tests - integration tests are preferred over unit tests. Please include it's benefit to end users; the reasons it does not break any existing features; how it makes building web applications easier, etc.
Thanks!


NullPointerException: Null reference used for synchronization

java.lang.NullPointerException: Null reference used for synchronization (monitor-enter)
at android.os.Parcel.readException(Parcel.java:1706)
at android.os.Parcel.readException(Parcel.java:1653)
at android.app.ActivityManagerProxy.getContentProvider(ActivityManagerNative.java:4335)
at android.app.ActivityThread.acquireProvider(ActivityThread.java:5779)
at android.app.ContextImpl$ApplicationContentResolver.acquireUnstableProvider(ContextImpl.java:2382)
at android.content.ContentResolver.acquireUnstableProvider(ContentResolver.java:1532)
at android.content.ContentResolver.query(ContentResolver.java:522)
at android.content.ContentResolver.query(ContentResolver.java:479)
at com.google.android.gms.internal.clearcut.zzy.zza(Unknown Source)
at com.google.android.gms.internal.clearcut.zzy.zza(Unknown Source)
at com.google.android.gms.internal.clearcut.zzae.zzb(Unknown Source)
at com.google.android.gms.internal.clearcut.zzah.zzp(Unknown Source)
at com.google.android.gms.internal.clearcut.zzae.zza(Unknown Source)
at com.google.android.gms.internal.clearcut.zzae.zza(Unknown Source)
at com.google.android.gms.internal.clearcut.zzae.zzl(Unknown Source)
at com.google.android.gms.internal.clearcut.zzae.get(Unknown Source)
at com.google.android.gms.internal.clearcut.zzp.zza(Unknown Source)
at com.google.android.gms.clearcut.ClearcutLogger$LogEventBuilder.log(Unknown Source)
at com.google.android.gms.internal.firebase-perf.zzh.zza(Unknown Source)
at com.google.android.gms.internal.firebase-perf.zzh.zzb(Unknown Source)
at com.google.android.gms.internal.firebase-perf.zzh.zza(Unknown Source)
at com.google.android.gms.internal.firebase-perf.zzk.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:761)
implementation 'com.google.android.gms:play-services-base:15.0.1'
implementation 'com.google.android.gms:play-services-maps:15.0.1'
implementation 'com.google.android.gms:play-services-analytics:16.0.3'
implementation 'com.google.firebase:firebase-core:16.0.3'
implementation 'com.google.firebase:firebase-messaging:17.3.0'
implementation 'com.google.firebase:firebase-perf:16.1.0'
implementation 'com.google.android.gms:play-services-tagmanager:16.0.3'

phone: OPPO R11
7.1.1

Thanks @jkasnicki for jumping in.
@LiuDongCai we always appreciate your bug reports, but they generally seem to be just pasted stack traces. I assume you're getting them from Crashlytics or similar.
Without clear steps to reproduce (or at least a code snippet from your app that causes thre crash) there is nothing we can do to help you!
Closing this issue since it's been ~9 days since @jkasnicki asked a question and there's no more information, however if you can answer his questions I am happy to re-open and discuss.


Remove unnecessary SFDX plugin installation

https://github.com/Oliver-Preuschl/sfdx-package-dev-template/blob/e9b858e677e5b4dabdc085808f2263281b30da0b/.github/workflows/system-test-apex-tests.yaml#L55
Currently this installation fails (and with it, the whole workflow) because the plugin is not digitally signed. Since it's never used in the script, it should be removed.

Already done


Suggestion: I want to add readonly keyword

Readonly keyword was added to TypeScript.
But, TSJS-Genrerator does not correspond  to readonly keyword.
related PR: #66

Dupe of #55.


fix: remove dep cycle with certreloader

https://github.com/open-feature/flagd/pull/1389 works well but caused a dependency cycle: flagd -> core -> flagd -> core.
I've moved the certreloader pkg to core with the existing telemetry stuff.
cc @kevinschoonover

@toddbaert, thanks for finding this. Do you know why the existing tests/pipelines didn't catch this? I would love to update them so this gets caught automatically this time.
Did I just not do a build with the most recent changes and can update the PR to do a test build?


Function to jsonify BSON objects

Add function to jsonify BSON objects
Add test

closes #62

I don't think we want to be dumping to JSON, parsing from JSON, then dumping again. @ajdavis do you know of anything better to do here?
I think at worst we can use the JSON string returned by json_utils and create a Flask response out of that directly. Flask's jsonify doesn't do a whole lot more than that anyway).

I don't understand the purpose of the BSON-encoding step at all. If you look at the json_util documentation it shows:
>>> from bson import Binary, Code
>>> from bson.json_util import dumps
>>> dumps([{'foo': [1, 2]},
...        {'bar': {'hello': 'world'}},
...        {'code': Code("function x() { return 1; }", {})},
...        {'bin': Binary(b"\x01\x02\x03\x04")}])
'[{"foo": [1, 2]}, {"bar": {"hello": "world"}}, {"code": {"$code": "function x() { return 1; }", "$scope": {}}}, {"bin": {"$binary": "AQIDBA==", "$type": "00"}}]'

So I think that calling json_util.dumps directly on the input obj creates the string you want. The only additional work that Flask's jsonify does is apply some styling defaults and wrap it in a Response, you could do that in flask_pymongo.jsonify, too.

Yeah, that's kind of what I thought as well. Leaving this for 2.0, in any case.

Closing in favor of #122


[stable/prestashop] Use storageClassName for prestashop.

Fixed prestashop for #1869
/cc @prydonius

/lgtm


Enforce access control (using authorization token)

Implement enforcement of authorization token i.e. the actual access control.

Done in #507


[Question] Python3 support

Hello, we're using this code for some time and so far it's been amazing.
We're also transitioning to using Python3 everywhere and I'm interested in whether this would work with Python3? Has it been tested?
Thanks!

Yes i have use it with 3.6 :)

Hi, I'll rewrite and test that code on Python3 soon. Stay in touch ;)

Hi, I'll rewrite and test that code on Python3 soon. Stay in touch ;)


Update scala-library to 2.12.14

Updates org.scala-lang:scala-library from 2.12.4 to 2.12.14.
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!

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

labels: library-update, semver-patch

Superseded by #193.


[de] Additional attributes

Added attribute translations for German based on those appearing in the French file.

Danke


Update sbt-typelevel, sbt-typelevel-site to 0.7.2

About this PR
📦 Updates

org.typelevel:sbt-typelevel
org.typelevel:sbt-typelevel-site

from 0.5.4 to 0.7.2
📜 GitHub Release Notes - Version Diff
Usage
✅ Please merge!
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!

⚙ Adjust future updates
Add this to your .scala-steward.conf file to ignore future updates of this dependency:
updates.ignore = [ { groupId = "org.typelevel" } ]

Or, add this to slow down future updates of this dependency:
dependencyOverrides = [{
  pullRequests = { frequency = "30 days" },
  dependency = { groupId = "org.typelevel" }
}]

labels: sbt-plugin-update, early-semver-major, semver-spec-minor, version-scheme:early-semver, commit-count:n:2

Superseded by #70.


CFP: Increase PolicyMapMax Hard Limit

Cilium Feature Proposal
Is your proposed feature related to a problem?
Yes.  Even after increasing bpf.policyMapMax to 65536, I'm managing to hit the maximum on a particularly strange cluster.  (> 20k services, 1-2 pods per service)
Describe the feature you'd like
Increase bpf.policyMapMax further than 16 bits.
(Optional) Describe your proposed solution
Simply put, I'd like to increase https://github.com/cilium/cilium/blame/710316a4cf64202e210ec29c97be08209f96c69a/pkg/option/config.go#L644 even further.  Practically speaking, I don't know what a theoretical hard maximum for this value is.  Would 24 bits be acceptable?  Realistically, it seems like there are inevitable practical limits to the maximums here, but allowing users to go higher if they choose to face the risks of those limits would be nice if it's mechanically possible to do so.  Happy to open the PR to increase this myself, if it'd be accepted.

I think it's certainly possible to bump the maximum. I think it might be worth investigating whether the way your policies are written could be optimized such that the number of identities relevant in the policies is reduced. One very easy way to saturate the policymaps is with an overly permissive policy. Have you taken a look at https://docs.cilium.io/en/latest/operations/performance/scalability/identity-relevant-labels/#identity-relevant-labels?

I have!  I was tuning that a bit yesterday actually.  Unfortunately, I was in the middle of dealing with an incident triggered by a strange upgrade behavior and had to roll back, so I haven't had a great opportunity to explore what the impact of the change ended up being.  The key thing in my mind is that with the sheer number of unique services in the cluster (and that growing more over time), it's still likely to be hit.  This cluster provides per-engineer development environments, so there's a huge number of unique identities, unlike a more traditional cluster.
I'm not sure if there's a metric for the number of identities created, but I'll take a look at that when I get back to work on Tuesday and see how our changes impacted things.

Yep, see the metrics reference here for identity-relevant metrics.

Maybe I've got an X/Y problem here.  The log entry I'm seeing is
Aug 31 17:02:00 cilium-r5k59 cilium-agent error level=error msg="Failed to add PolicyMap key" bpfMapKey="{46885 8080 6 0}" containerID= datapathPolicyRevision=9 desiredPolicyRevision=9 endpointID=1489 error="Unable to update element for cilium_policy_01489 map with file descriptor 299: the map is full, please consider resizing it. argument list too long" identity=31110 ipv4= ipv6= k8sPodName=/ port=0 subsys=endpoint

Looking at the metrics, at peak late this past week there were ~37000 identities on the cluster.  With some tuning of the identity-relevant labels, I managed to get that down to about ~31000 identities before we had to roll back our changes for other reasons, preventing me from doing further testing and tuning.  As deployed from the helm chart, my values for BPF settings look as follows:
  bpf:
    mapDynamicSizeRatio: 0.005
    masquerade: true
    policyMapMax: 65536

With the sheer number of unique things running in this cluster, I'm not honestly sure I could feasibly decrease the identity count much further.  We give each user a namespace where they can deploy as much of our service stack as they need for development, and each namespace should be able to run fully independently, so there's effectively no overlap between them, and very few pods which have multiple replicas.  Nearly everything that runs on the cluster is actually a unique identity, for all reasonable intents and purposes.
If there are further things that could be tuned, I'm absolutely open to trying that.  One thing that's worth noting is that, today, the only policies on the cluster are ones used by Cilium's own test harness.  This is intentional.  While we could turn off policy entirely because of that, we're intentionally using this cluster as a means to do worst-case scenario testing in our environment as we work toward certifying Cilium for use elsewhere in our stack.  Eventually, we do intend to be using policy on our other clusters (and perhaps this one in a meaningful way), so we're really trying to push the limits and understand where things break.

Thanks for the context.
Speaking of this subject, I've put up https://github.com/cilium/cilium/pull/27903 which should provide more pointers. I'm curious to see how these instructions fair with your situation, especially depending on the type of identities. If most of your identities are label-derived, then identity-relevant labels is the best that can be done there. However, if some identities come from another source, there could be some wiggle room there. Let me know how it goes.
Btw, it would be useful to see the cilium_identities metric in your environment and the breakdown based on type.

That linked PR is super helpful, I'll about checking that out tomorrow.

Last 7 days of metrics.  That bit in the middle where everything goes weird is when we upgraded from 1.13 to 1.14, and then it levels back out after we downgraded.  That's also why there are only node_local identities during that window.  The graph being a mess there is almost certainly more to do with the cluster being in a weird/bad state than my changes, especially given that we rolled back everything (including the reduced set of labels) at 1940 UTC, where the node_local line disappears from the graph and the amount of identities doesn't actually go back to the pre-reduction state.

Looked through the doc.  I'll have to see about enabling that pressure metric, because it's not default enabled on 1.13.  Also tossed a comment in to correct the metric lookup.  I'm not sure how much this is going to end up helping, but I'll try the further investigation steps as well.

Apologies for the delay, I had some conflicts and couldn't get back to this until today.  We upgraded to 1.14 this weekend, so I now have the cilium_identities metric.
{type="cluster_local"} 37370
{type="reserved"} 3992
We are still hitting limits on the map size at this point.

I wonder why there are nearly 4k reserved identities. That seems a bit surprising.

Well, I feel a bit silly. That's the result of me doing sum by (type). I
had assumed that each row would have a value of 1. There are 8 reserved
identities per node.
On Wed, Sep 27, 2023, 7:20 PM christarazi @.***> wrote:

I wonder why there are nearly 4k reserved identities. That seems a bit
surprising.
—
Reply to this email directly, view it on GitHub
https://github.com/cilium/cilium/issues/27866#issuecomment-1738272070,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ADSDAA6CH2QUOXSXQS54Q7LX4S7DBANCNFSM6AAAAAA4G2TLBM
.
You are receiving this because you authored the thread.Message ID:
@.***>

Policy map max size is effectively encoding the maximum of the set of explicitly denied tuples (peer identity + port) plus the maximum of the set of explicitly allowed tuples (peer identity + port). I can see some evaluation above regarding how many unique app policy postures there may be, and perhaps there's a fair argument for having 10Ks of unique identities in the cluster. I note that this is limited to a little less than 65K based on the bitpatterns used to encode numeric identities under the hood, though that's mostly for in-cluster destinations and it's possible to extend the total number of identities further with out-of-cluster destinations potentially by at least tens of thousands more peers.
If we wish to encode all of these into the policy map, then the policy posture seems like it's "allow all", which Cilium can effectively encode with a single entry if the policy is set to allow toEntities: - All or fromEntities: - all. In that case, you wouldn't need a policymap max size scaling based on the number of identities in the cluster because one entry is enough to allow all peers. If on the other hand there is a use case for being very permissive within the cluster but not allowing all peers, then maybe we should work on a better way to encode the policy into the policy map rather than simply bumping the limit. Simply bumping the limit further is always possible, but it comes at the cost of memory usage for the maps plus processing cost for calculating the policy posture for each possible peer, which is naturally inefficient for highly permissive policies in clusters with many identities.

I should specifically call out that we're not actively using policy on this cluster, but have it enabled in the interest of future use.  The reason I opened this issue is that we're getting continuous log messages indicating the inability to update Cilium policy maps.  Prior to 1.14, I can't recall the precise message (and the logs have long since been lost to time) but since upgrading we're getting ENOSPC back when attempting to update the map.  Perhaps this is misguided on my part and I'm proposing an X/Y problem here where my speculation is that the total map size is too small, and instead there's some other problem.
It's probably also a reasonable assumption to suggest we could just disable policy entirely for the cluster, but that's actually not desirable to us, just so it's said.  We've been trying to stress test Cilium to see where the cracks are, to prepare for a broader rollout to more clusters, and being able to see it in our most abusive cluster has been extremely enlightening for us.
Maybe there's some other possible solution to this which could be proposed?  Since I hadn't provided one before now, example log line below:
 level=error msg="Failed to add PolicyMap key" bpfMapKey="{64 51799 0 6 36895}" containerID=363108759a datapathPolicyRevision=0 desiredPolicyRevision=6 endpointID=2015 error="update map cilium_policy_02015: update: no space left on device" identity=7563 ipv4=<IP_ADDRESS> ipv6= k8sPodName=flux-system/notification-controller-5dc5586b8b-mt9gj port=0 subsys=endpoint

ENOSPC is actually interesting because I was under the impression that you were seeing the more typical E2BIG when it comes to maps. Do you have a sense for when the former occurs over the latter?

  Thank you for pointing that out, this has been ongoing long enough that I completely forgot.  So, yes, I had been seeing E2BIG consistently for a while, interspersed with ENOSPC.  E2BIG completely stopped in our logs as of 9/27 for reasons that aren't obvious to me because we didn't make any relevant changes around then that I'm aware of.

ENOSPC sounds like it occurs when the bpffs runs out of space presumably due to many maps consuming lots of memory due to many entries, but I've never experienced this before so I'm not sure exactly.

I should specifically call out that we're not actively using policy on this cluster, but have it enabled in the interest of future use.
...
Perhaps this is misguided on my part and I'm proposing an X/Y problem here where my speculation is that the total map size is too small, and instead there's some other problem.
...
Maybe there's some other possible solution to this which could be proposed?

Cilium's generation of policymap entries is highly dependent on the network policies you have in place. I think it would help to have a general overview of how permissive you wish the network policy to be and also to see how you're mapping that to netpol/cnp/ccnp resources to see whether there is a use case here that Cilium is poorly optimized for, or whether it's simply a matter of encoding the network policy more precisely for the traffic you expect to allow.

Today, precisely one policy exists on the entire cluster.  https://github.com/cilium/cilium/blob/79f07dff67cdf6b22a4cc770532bb6bd1800a88f/examples/policies/l7/dns/dns-visibility.yaml  I can delete it, but made the assumption that it may be providing some useful data in terms of metrics since it's theoretically exercising the system.
As far as how we actually want things to look, that's somewhat of a mutable state that we're still determining.  In an ideal world, each of the main developer namespaces would be isolated via CNP such that it can only talk to things inside that namespace, DNS, and the ingress controllers.  I think I'd place that somewhere in the moderately permissive camp, in that we wouldn't be isolating services from each other within the same namespace at all.

Hmm, that's quite odd. I wouldn't expect this policy to generate many policymap entries. Are you sure there isn't another permissive policy created somewhere, such as Kubernetes NetworkPolicy?

Bad assumption on my part that the core NetworkPolicy wouldn't be a part of this.  In that case, there are 4 other network policies on the whole cluster:
apiVersion: v1
items:
- apiVersion: networking.k8s.io/v1
  kind: NetworkPolicy
  metadata:
    labels:
      app.kubernetes.io/instance: flux-system
      app.kubernetes.io/part-of: flux
      kustomize.toolkit.fluxcd.io/name: fluxcd
      kustomize.toolkit.fluxcd.io/namespace: flux-system
    name: allow-egress
    namespace: flux-system
  spec:
    egress:
    - {}
    ingress:
    - from:
      - podSelector: {}
    podSelector: {}
    policyTypes:
    - Ingress
    - Egress
  status: {}
- apiVersion: networking.k8s.io/v1
  kind: NetworkPolicy
  metadata:
    labels:
      app.kubernetes.io/instance: flux-system
      app.kubernetes.io/part-of: flux
      kustomize.toolkit.fluxcd.io/name: fluxcd
      kustomize.toolkit.fluxcd.io/namespace: flux-system
    name: allow-scraping
    namespace: flux-system
  spec:
    ingress:
    - from:
      - namespaceSelector: {}
      ports:
      - port: 8080
        protocol: TCP
    podSelector: {}
    policyTypes:
    - Ingress
  status: {}
- apiVersion: networking.k8s.io/v1
  kind: NetworkPolicy
  metadata:
    labels:
      app.kubernetes.io/instance: flux-system
      app.kubernetes.io/part-of: flux
      kustomize.toolkit.fluxcd.io/name: fluxcd
      kustomize.toolkit.fluxcd.io/namespace: flux-system
    name: allow-webhooks
    namespace: flux-system
  spec:
    ingress:
    - from:
      - namespaceSelector: {}
    podSelector:
      matchLabels:
        app: notification-controller
    policyTypes:
    - Ingress
  status: {}
- apiVersion: networking.k8s.io/v1
  kind: NetworkPolicy
  metadata:
    creationTimestamp: "2023-02-17T18:45:39Z"
    generation: 1
    labels:
      app.kubernetes.io/component: grafana
      app.kubernetes.io/name: grafana
      app.kubernetes.io/part-of: kube-prometheus
      app.kubernetes.io/version: 9.5.3
      kustomize.toolkit.fluxcd.io/name: infra-grafana
      kustomize.toolkit.fluxcd.io/namespace: infra-grafana
    name: grafana
    namespace: infra-grafana
  spec:
    egress:
    - {}
    ingress:
    - {}
    podSelector:
      matchLabels:
        app.kubernetes.io/component: grafana
        app.kubernetes.io/name: grafana
        app.kubernetes.io/part-of: kube-prometheus
    policyTypes:
    - Egress
    - Ingress
  status: {}
kind: List
metadata:
  resourceVersion: ""

Those probably could be removed as well, they're just the stock ones provided by the apps, but I wouldn't expect these to be problematic either unless there's something you see that I don't.

The way that Cilium interprets these Kubernetes permissive network policies is by enumerating every identity within the cluster and populating the policymap with an allow for each.
If you converted these to CNP with toEntities: - all fromEntities: - all instead of the pod selectors, then this would (a) allow connections from both within and outside the cluster (assuming connectivity outside the cluster is physically possible), but also (b) would be far more efficient on the number of policymap entries. As long as (a) does not violate your intended policy, this would be the best path forward using current Cilium feature support.
If these policies need to express only an allow-all for every other Pod within the cluster, then CNP has the expressions toEntities: - cluster and fromEntities: - cluster, but this is not currently optimized to minimize the number of Identities. If that is an intended policy target, then maybe one further step is for Cilium to look at optimizing policy matches for traffic within the cluster so that they don't require encoding every peer inside the cluster into the policymap lookup. It's not exactly trivial but I think there's a reasonable way to integrate such a solution into the current implementation without super invasive changes.


Failed to run dev server when folder path is containing "#"

Describe the bug
i have a project folder containing a # symbol
e.g  C:\#path\project
i create a new vite app inside the project folder
when i try to run the dev server it failed to run and i got an error
error: No loader is configured for ".html" files: index.html

error when starting dev server:
Error: Build failed with 1 error:
error: No loader is configured for ".html" files: index.html

Reproduction

create a new folder with symbol "#" in it e.g  C:\#Path\Myproject
install a new vite app
try to run the dev server

System Info
System:
    OS: Windows 10 10.0.19042
    CPU: (16) x64 AMD Ryzen 7 4800H with Radeon Graphics
    Memory: 8.14 GB / 15.37 GB
  Binaries:
    Node: 15.4.0 - C:\Program Files\nodejs\node.EXE
    Yarn: 2.4.1 - C:\Program Files (x86)\Yarn\bin\yarn.CMD
    npm: 7.0.15 - C:\Program Files\nodejs\npm.CMD
  Browsers:
    Edge: Spartan (44.19041.423.0), Chromium (89.0.774.63)
    Internet Explorer: 11.0.19041.1
  npmPackages:
    @vitejs/plugin-vue: ^1.1.5 => 1.2.0
    vite: ^2.1.3 => 2.1.3

Used package manager: npm | yarn
Before submitting the issue, please make sure you do the following

[ x] Read the Contributing Guidelines.
[ x] Read the docs.
[ x] Check that there isn't already an issue that reports the same bug to avoid creating a duplicate.
[ x] Provide a description in this issue that describes the bug.
[ x] Make sure this is a Vite issue and not a framework-specific issue. For example, if it's a Vue SFC related bug, it should likely be reported to https://github.com/vuejs/vue-next instead.
[ x] Check that this is a concrete bug. For Q&A open a GitHub Discussion or join our Discord Chat Server.

maybe duplicate: #2346


Use logWarn for all warnings

Description of the change
Also removes some unused messages.
Checklist:

[ ] Added the change to the "Unreleased" section of the changelog
[ ] ~Added some example of the new feature to the README~
[ ] ~Added a test for the contribution (if applicable)~

P.S.: the above checks are not compulsory to get a change merged, so you may skip them. However, taking care of them will result in less work for the maintainers and will be much appreciated 😊

@f-f Aw, thank you! :smile:

You're welcome :slightly_smiling_face:


Update Set-SPOSiteDesign.md

Corrected example: add -Identity parameter.

:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

sharepoint/sharepoint-ps/sharepoint-online/Set-SPOSiteDesign.md
:white_check_mark:Succeeded
View (sharepoint-ps)

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

thx Aaron, appreciated.


Wrong function type at AdminModuleOptions.auth.authenticate interface

At admin-module-options.interface.ts:24 there's a line:
authenticate: (email: string, password: string) => Promise<CurrentAdmin>
The promise return type does not make sense. It should be nullable.
Let's see the usage of this function at login.handler.ts:39:
const adminUser = await auth.authenticate(email, password);
    if (adminUser) {
      req.session.adminUser = adminUser;
      req.session.save((err) => {
        if (err) {
          next(err);
        }
        if (req.session.redirectTo) {
          res.redirect(302, req.session.redirectTo);
        } else {
          res.redirect(302, rootPath);
        }
      });
    } else {
      const login = await admin.renderLogin({
        action: admin.options.loginPath,
        errorMessage: "invalidCredentials",
      });
      res.send(login);
    }

It checks if the result of the function is falsy (nullish). Yet the compiler won't run if we return undefined or null because of the wrong type at the interface.
The correct function type would be:
authenticate: (email: string, password: string) => Promise<CurrentAdmin | null>

Pushed a PR that would fix this issue with no side effects. Would be glad if it gets approved! 🙂

@dziraf , @wojtek-krysiak can someone take a look at this? Is there another way to return something to tell the server that the admin failed to login?


localTime not picking up correct date

later.date.localTime()
let my_schedule = later.parse.text('at 16:48 every day')
let times = later.schedule(my_schedule).next(10)
console.log(times)

seems to be returning the following for me:
[ 2017-02-01T21:48:00.000Z,
  2017-03-01T21:48:00.000Z,
  2017-04-01T20:48:00.000Z,
  2017-05-01T20:48:00.000Z,
  2017-06-01T20:48:00.000Z,
  2017-07-01T20:48:00.000Z,
  2017-08-01T20:48:00.000Z,
  2017-09-01T20:48:00.000Z,
  2017-10-01T20:48:00.000Z,
  2017-11-01T20:48:00.000Z ]

So it appears that - on initialization - it's picking up the correct year, but starting on January 1st - even though today is January 15th.
I've double-checked but can't find anything that I've skipped - any clues?
Thanks!

I haven't seen this before, unfortunately.  You can set a break point and see what start date it is pulling in or try setting one explicitly in the .next() function call.

I'll give it a shot sometime in the next few days if I go back to the project that was using this and will follow up.  Thanks!

It doesn't work for me too.

It doesn't work for me too.
Code
const later = require('later');

later.date.localTime();
let schedule = later.parse.text('every 1 min');
let times = later.schedule(schedule).next(10);
console.log(times);

Result
[ 2018-03-26T10:30:30.909Z,
  2018-03-26T10:31:00.000Z,
  2018-03-26T10:32:00.000Z,
  2018-03-26T10:33:00.000Z,
  2018-03-26T10:34:00.000Z,
  2018-03-26T10:35:00.000Z,
  2018-03-26T10:36:00.000Z,
  2018-03-26T10:37:00.000Z,
  2018-03-26T10:38:00.000Z,
  2018-03-26T10:39:00.000Z ]

Expected result (timezone Europe/Rome)
[ 2018-03-26T12:30:30.909Z,
  2018-03-26T12:31:00.000Z,
  2018-03-26T12:32:00.000Z,
  2018-03-26T12:33:00.000Z,
  2018-03-26T12:34:00.000Z,
  2018-03-26T12:35:00.000Z,
  2018-03-26T12:36:00.000Z,
  2018-03-26T12:37:00.000Z,
  2018-03-26T12:38:00.000Z,
  2018-03-26T12:39:00.000Z ]


python3 changes cause errors

I am using version 0.41 and python 3.4

If lastcheck.txt has not been created yet, it fails with "str does not support the buffer interface". Workaround is to manually write the text file with the timestamp.
When using a service account the type error "the JSON object must be str, not 'bytes'" appears. Fallback to non service account method was necessary.

i fixed the second issue by decoding the object to an utf-8 string (around line 414)
json_string = open(oauth2servicefilejson, 'rb').read().decode('utf-8')

I got these two issues too. And after patched as @jonegerton said, still get error at line 300.
I think it because the lastcheck.txt is empty. It can be fixed after date +%s > lastcheck.txt.

See my simple solution to issue #57.

should be fixed in 0.43.


Allow filtering by PR numbers

Filtering by QUERY sometimes doesn't suffice, because we'd like to select multiple, but not every PR to be included in the combined PR. This change allows to select PRs by their PR numbers.
The change might feel awkward, so I'm fine if you don't see a chance for it to be merged. An alternate approach would be to add labels to the selected PRs and then filter by that label. Yet, I personally prefer staying in the shell and not switching over to a browser.

Hi @gesellix!
I've not seen this use case, but can see the value of being able to do this. I'd be happy to merge.
Thanks for the contribution!

Thanks for the quick approval! 😍


Cannot install quadricslam

Hi, I am trying to install quadricslam using pip install quadricslam but I am facing the following error:
ERROR: Could not find a version that satisfies the requirement dinstinctipy (from quadricslam==1.0.1) (from versions: none)
ERROR: No matching distribution found for dinstinctipy (from quadricslam==1.0.1)

So I manually install dinstinctipy by pip install distinctipy with succeess, and then I tried install quadricslam again but I got the same error. My Python version is 3.9.5, and my OS is Ubuntu20.04, could you tell me how to solve this problem? Thanks!

I think there is a typo in the pyproject.toml that cause the issue, specifically in the dependencies dinstinctipy should be change to distinctipy.

Thanks for spotting this @siqiyan .
I've fixed this in the latest release, v1.0.2.


Update the translation of Simplified Chinese and Traditional Chinese.

Update the translation of Simplified Chinese and Traditional Chinese.

Thank you! Merged, will include in the next release.


Bugfix/dbc22 994

DBC22-994: Execute publish scheduled command every one minute to publish scheduled advisories or bulletins.

Closed, replaced with https://github.com/bcgov/DriveBC.ca/pull/124.


The app has been modified or damaged

I just tried to install the last version from the Release page and I'm getting this:
"The app has been modified, and its code does not match the original signed code. The app may be broken or corrupted, or it may have been tampered with. If you think that an app has been damaged or tampered with, you should delete it by dragging it to the Trash."
I guess you have to renew the certificate or something of the sort.

Presumably what I'm seeing is just another manifestation of the above but FWIW I get:
"“Paddle Battle” is damaged and can’t be opened. You should move it to the Trash."

Eep! Thanks both of you. Hmmmmm I can't figure out what i did differently for the first release, but I can confirm it's not signed correctly...
It's annoying: it downloaded and opened no-problem for me, even though it wasn't signed correctly! I didn't run the command-line tool to double-check because it worked through the finder, but now I know better! D:
I'm looking into this now though. Thanks!

Okay! Fixed! :) Please try the latest release, if you could? :)
https://github.com/NHDaly/PaddleBattleJL/releases/tag/v1.0.3
It turned out there were two problems with my release.sh script I was using. Unfortunately, I hadn't committed it before i fixed the problem so i can't point at a diff to show you. But basically, there were two problems that resulted from me trying to automate the release process:

I wasn't deleting the .app on the .dmg before copying my new .app onto it. So this meant that any files I've deleted in the app weren't getting deleted in the released version (meaning there was an extra file in the app that wasn't signed). So I fixed that here:
https://github.com/NHDaly/PaddleBattleJL/commit/f2c337971e3a6d1cb4ef47462c5dc6a6a148e5f2#diff-e55bb7573f1110c8b2a6922fe8cccf48R9

Apparently even then, when I was using cp -r to copy the finished, signed app on the .dmg, it was breaking the signature, because it was "modifying" the signed files (and, i guess, changing their hash). So I had to switch cp to CpMac, which is the Finder-equivalent copy and it somehow preserves the files completely (I assume by preserving their modified timestamp?):
https://github.com/NHDaly/PaddleBattleJL/commit/7d40de0112078b93be3f40387b48de6dfbc07781

Thanks again for pointing this out!! :) Sorry it took me so long to fix it, Jonathan!

v1.0.3 works! And is pretty great, thank you! Let the Julia indie games revolution begin ;-)

Let the Julia indie games revolution begin ;-)

Hahaha 😈

And thanks for checking it out!! XD


fix unit test race condition

this is the same issue as previous fix. Move the runningCount inc/dec into the main loop and only modify the counter in the main loop.
Have verified the fix on Wenquan's machine and the issue is not repro anymore with this fix.

Coverage increased (+0.009%) to 67.754% when pulling 60fef7964570dbd9508c2a12ca938129eec34df5 on yiminc:fix_unit_test_race_condition into 911aebfff24f363dbc27bedb38064b9cb582214a on uber-go:master.

i have tested this commit locally 37 times, works.

Coverage increased (+0.05%) to 67.798% when pulling adf024bb68f347eeb13a5fbdf827e13369c7a369 on yiminc:fix_unit_test_race_condition into 911aebfff24f363dbc27bedb38064b9cb582214a on uber-go:master.

change type of runningCount from  atomic.Int32 to int and make sure all inc/dec happen in main thread. Hopefully, this fix should close this issue.


onSelect not being called on CustomSelect components

The onSelect attribute on CustomSelect components doesn't seem to do anything.
Example (I am not 100% on this flems setup, but the issue occurs elsewhere too):
https://flems.io/#0=N4IgZglgNgpgziAXAbVAOwIYFsZJAOgAsAXLKEAGhAGMB7NYmBvEAXwvW10QICsEqdBk2J4hcYgAJgAHTSTJAIQCuxYvQpyFASXGb5kgMLKJtLAGUYsasX0KVa+gHEATrWUAHO5IAiLjADuMC7ePhAYULQA5t6W1sQAMhAS3kkS2oxY3gBitNQmALIYmFHBcqySALxGAKraANxycrn5cEUlwfhwhLQBLSYA8mhQAJ5DACoYAEYAFACUjWhysFLJYRHRAx5MVZJgEXAwiyuSa-5BLls71ftQh8cwUofxMAAmhrSRLoty4lIAgh4PLtZAYAG4QGABRCSeZVAB80i0CkkLkeyhc8iwMxkIGQEhGsEqHgwr1eEDQUUQAGYAAweAAeAF1cRRJMhkSjJNiHOo0K53F5pJI4BAAF4wGG4hlwXGSdjszlc7kzYymCxWGA2Nmg5XK2geYgQehwGEckAAKWKMFZklxFtohCWlDtlutxFxTO8eoUrxg+2UUGIADUIspJa6rWgbZQlXriC4IFFSi5-moXKakQYfSiIEIEv7iDDdCb8DVzABRABK5jjyvYda59DiWqLsINRvocwRWZzXIiwWIMw7xrQC0bKNYE9YczrTLm3sk88WCinaFYPzQWHwWHcDBmrzyyhwDHwU1orxGbMBHnHaEoIGerdHCB4ACYAJyIN8AVjYHBATAcDwfBqDgAQaHoRhmB4NgvRAKAKQAa1fVBAK4PAsAgYhCETcgqAxcgeBIYgPFNAB6cjlDQDwkKiUCzHIrCcLwgABABGfBOIANiY7DcOgfB+AfYgRm2PA4GoRNDX-ThgJ4P4XGUGwAFplAgHcKSEiDCLwEiyMQSjqNo+i6CwcjFOU4g1IgVjaS4rjaXIxCpgsk0EysmzNLQbSRLE7hHykiAZPYOSAopP0GVA8CH104i1AMoyaLohjzMs1T1Lshz2KclzyIimAorAiDRPEngCVgB8nxsF88FpRBaRU+qctpAB2dq4NYIA
Btw, thanks for all your work on this library! I can try to send PRs upstream for some of these fixes if that would be helpful. So far everything has been minor or easy to patch around, and I have assumed you'd want to test any code that goes in.

Fixed in v0.2.7. Looks like I have no tests for the CustomSelect component which I'll note down for the future.
PRs are most definitely welcome, I'm glad you've found the library useful!


Review of app manager (user story based)

This task is to finish the app manager design
Definition of done:

[ ] Somebody reviews the App Manager, and checks the functionality exists to complete all user stories

User stories: https://github.com/Tonomy-Foundation/Tonomy-ID/issues/360

@HaseebUllahAbbasi @MilicaSequeira


Updated Dashboard Starred Box - SEAB-5197

Description
Added routing to the starred page and some UI fixes to the starred-box.component on the dashboard to match the zeplin mocks (empty and full).
Before:

After:

You will notice the starred "services" star has been removed since there is no starred services page for users to go to. The work has been commented out for when we are ready.
The links at the top right of the card route to individual tabs on the "Starred Entries" page, it follows the same logic as the tabs on the "My Account" page.  Instead of defaulting to the organizations tab, I changed the default to workflows so it follows other pages where you start at the tab to the far left.

Other small fixes:

org logos being compressed
star icons colour and sizing
updated empty card text and icon

Review Instructions
In relation to the dashboard resizing ticket, I'm containing the mat-card contents in a div to help prevent the overflow issues that will soon be addressed, as a result, the actual changes in starred-box.component.html are hard to see.  Essentially line 2 is for the new div, lines 3-38 are the updated stars and routing, and lines 182-203 are for the updated empty card. Everything else should just have a new indentation.
Issue
SEAB-5197

Security
If there are any concerns that require extra attention from the security team, highlight them here.
Please make sure that you've checked the following before submitting your pull request. Thanks!

[x] Check that your code compiles by running npm run build
[x] Ensure that the PR targets the correct branch. Check the milestone or fix version of the ticket.
[x] If this is the first time you're submitting a PR or even if you just need a refresher, consider reviewing our style guide
[x] Do not bypass Angular sanitization (bypassSecurityTrustHtml, etc.), or justify why you need to do so
[x] If displaying markdown, use the markdown-wrapper component, which does extra sanitization
[x] Do not use cookies, although this may change in the future
[x] Run npm audit and ensure you are not introducing new vulnerabilities
[x] Do due diligence on new 3rd party libraries, checking for CVEs
[x] Don't allow user-uploaded images to be served from the Dockstore domain
[x] If this PR is for a user-facing feature, create and link a documentation ticket for this feature (usually in the same milestone as the linked issue). Style points if you create a documentation PR directly and link that instead.
[x] Check whether this PR disables tests. If it legitimately needs to disable a test, create a new ticket to re-enable it in a specific milestone.

Can you set the padding to 0 instead of using margin?

Resolved, using margin seems to be the cleanest solution (will make more sense with the dashboard resizing pr)


Recordset Errors

Opening this pull request with my comments for recordset.

@jrchudy @howdyjessie I have made the changes for global error handling as well as recordset app.
https://dev.gpcrconsortium.org/~chirag/chaise/recordset/#1/experiments:experiment

Besides the two comments that I just made, I think the code looks good to merge.
This is how the output of new catchAll looks like. Mentioning @hongsudt for comments about UI.

@chiragsanghvi We should be displaying
Error: Terminal Error
An unexpected error has occurred. Please report this problem to your system administrators.
Click OK to return to the Home Page, or Show Details to see technical details associated with this error.
There should be a terminal error object that contains this information, correct?

@hongsudt This is how it will look for terminal errors. Other HTTP Error handling we will add later.

The changes look good to me. The error is detailed enough and provides the information that we had talked about for stack traces.


Add missing @RefreshScope configuration

To make OAuth/OIDC interceptors refreshable as the ticketRegistry (they rely on) is.

Merging as is, with some follow-up work to make sure the hierarchy is also refreshable. Thank you Jérôme!


ImGui file has to be manually included in the project when cloning from GitHub

When building for the first time or from a clean build, you need to include imgui_impl_opengl3.cpp into the project.
The way I currently fix this in Visual Studio is through the Solution Explorer. I start by finding the file at:
Apostle -> vendor -> imgui -> backends -> imgui_impl_opengl3.cpp
Then, I simply include the file by right clicking and pressing 'Include in project'. Not entirely sure how this would be done in other IDEs but I assume the process would be relatively similar.
POTENTIAL FIX:
Should be as simple as including it through the premake file, but as it's not a pressing matter I'm leaving it for a later date, or until it becomes relevant.

Fixed with latest pull request (19/05/2023 00:33AM BST)


Create a user script for Filesystem cleanup (EFS and FSx)

Is your feature request related to a problem? Please describe.
We need a way to be able to delete all resources created by the automated or manual EFS/FSx tests or user runs. This would also help with providing easy commands in docs.
Describe the solution you'd like
Create a script for Filesystem cleanup (EFS and FSx) that can be used directly by the user
Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.
Additional context
Add any other context or screenshots about the feature request here.

Some POC I have so far
import argparse
import boto3
import subprocess
from utils import get_cloud_formation_stacks
from utils import delete_stacks
from utils import wait_for_stacks_to_be_gone
from time import sleep

EFS_FILE_SYSTEM_NAME = "KubeflowEfs"
EFS_STORAGE_CLASS_NAME = "efs-sc"

def delete_efs_resources():
    print("Deleting EFS resources...")

    file_system = get_file_system()

    delete_mount_targets(file_system)
    delete_file_system(file_system)

    delete_storage_class()

    stacks = get_cloud_formation_stacks(CLUSTER_REGION)
    stacks_to_delete = [stack for stack in stacks if CLUSTER_NAME in stack and "efs-csi-controller-sa" in stack]

    delete_stacks(stacks_to_delete, CLUSTER_REGION)
    wait_for_stacks_to_be_gone(stacks_to_delete, CLUSTER_REGION)

def get_file_system():
    file_systems = get_file_systems()
    return next(file_system for file_system in file_systems if file_system["Name"]==EFS_FILE_SYSTEM_NAME)

def get_file_systems():
    client = get_efs_client()
    return client.describe_file_systems()["FileSystems"]

def get_efs_client():
    return boto3.client(
        'efs',
        region_name=CLUSTER_REGION,
    )

def delete_mount_targets(file_system):
    client = get_efs_client()

    for mount_target in get_mount_targets(file_system):
        print(f"Deleting mount target {mount_target}...")
        client.delete_mount_target(
            MountTargetId=mount_target["MountTargetId"]
        )

    wait_for_mount_targets_deletion(file_system)

def get_mount_targets(file_system):
    client = get_efs_client()
    return client.describe_mount_targets(FileSystemId=file_system["FileSystemId"])["MountTargets"]

def wait_for_mount_targets_deletion(file_system):

    while (len(get_mount_targets(file_system)) > 0):
        print("Waiting for EFS mount targets deletion to complete...")
        sleep(1)

    print("EFS mount targets deletion completed!")

def delete_file_system(file_system):
    client = get_efs_client()
    file_system_name = file_system["Name"]
    file_system_id = file_system["FileSystemId"]

    print(f"Deleting EFS file system Name: {file_system_name}, ID : {file_system_id}")
    client.delete_file_system(
        FileSystemId=file_system_id
    )

    wait_for_file_system_deletion()

def wait_for_file_system_deletion():

    while any(file_system["Name"] == EFS_FILE_SYSTEM_NAME for file_system in get_file_systems()):
        print("Waiting for EFS file system deletion to complete...")
        sleep(1)

    print(f"EFS file system {EFS_FILE_SYSTEM_NAME} deletion completed!")

def delete_storage_class():
    subprocess.run([
            "kubectl",
            "delete",
            "storageclass",
            EFS_STORAGE_CLASS_NAME
        ])

parser = argparse.ArgumentParser()
parser.add_argument(
    '--region',
    type=str,
    metavar="CLUSTER_REGION",
    help='Your cluster region code (eg: us-east-2)',
    required=True
)
parser.add_argument(
    '--cluster',
    type=str,
    metavar="CLUSTER_NAME",
    help='Your cluster name (eg: mycluster-1)',
    required=True
)

if __name__ == "__main__":
    args, _ = parser.parse_known_args()
    CLUSTER_REGION = args.region
    CLUSTER_NAME = args.cluster

    delete_efs_resources()

That's a good idea @mbaijal , after a lot of trials and errors, here is a POC I came up with that finally works (code not clean, will make more functions etc).
I am able to use this to delete all needed ressources, then re-create a new EFS and it works.
The very tricky/not-obvious-part for me was to delete the deployment and the daemon set, took me a while to figure out that without these delete, your new EFS file system simply wont work even if the install doesnt fail.
import argparse
import boto3
import subprocess
from utils import get_cloud_formation_stacks
from utils import delete_stacks
from utils import wait_for_stacks_to_be_gone
from time import sleep

EFS_FILE_SYSTEM_NAME = "KubeflowEfs"
EFS_SECURITY_GROUP_NAME = "KubeflowEfsSecurityGroup"
EFS_STORAGE_CLASS_NAME = "efs-sc"

def delete_efs_resources():
    print("Deleting EFS resources...")

    try:
        file_system = get_file_system()

        delete_mount_targets(file_system)
        delete_file_system(file_system)

        delete_storage_class()

        subprocess.run([
            "eksctl",
            "delete",
            "iamserviceaccount",
            "--name",
            "efs-csi-controller-sa",
            "--namespace",
            "kube-system",
            "--cluster",
            CLUSTER_NAME,
            "--region",
            CLUSTER_REGION
        ])

        stacks = get_cloud_formation_stacks(CLUSTER_REGION)
        stacks_to_delete = [stack for stack in stacks if CLUSTER_NAME in stack and "efs-csi-controller-sa" in stack]

        delete_stacks(stacks_to_delete, CLUSTER_REGION)
        wait_for_stacks_to_be_gone(stacks_to_delete, CLUSTER_REGION)
    except:
        print("No file system found!")

    try:
        delete_security_group()
    except:
        print("No file system security group found!")

    delete_daemon_set()
    delete_deployment()

def get_file_system():
    file_systems = get_file_systems()
    return next(file_system for file_system in file_systems if file_system["Name"]==EFS_FILE_SYSTEM_NAME)

def get_file_systems():
    client = get_efs_client()
    return client.describe_file_systems()["FileSystems"]

def get_efs_client():
    return boto3.client(
        'efs',
        region_name=CLUSTER_REGION,
    )

def delete_mount_targets(file_system):
    client = get_efs_client()

    for mount_target in get_mount_targets(file_system):
        print(f"Deleting mount target {mount_target}...")
        client.delete_mount_target(
            MountTargetId=mount_target["MountTargetId"]
        )

    wait_for_mount_targets_deletion(file_system)

def get_mount_targets(file_system):
    client = get_efs_client()
    return client.describe_mount_targets(FileSystemId=file_system["FileSystemId"])["MountTargets"]

def wait_for_mount_targets_deletion(file_system):

    while (len(get_mount_targets(file_system)) > 0):
        print("Waiting for EFS mount targets deletion to complete...")
        sleep(1)

    print("EFS mount targets deletion completed!")

def delete_file_system(file_system):
    client = get_efs_client()
    file_system_name = file_system["Name"]
    file_system_id = file_system["FileSystemId"]

    print(f"Deleting EFS file system Name: {file_system_name}, ID : {file_system_id}")
    client.delete_file_system(
        FileSystemId=file_system_id
    )

    wait_for_file_system_deletion()

def wait_for_file_system_deletion():

    while any(file_system["Name"] == EFS_FILE_SYSTEM_NAME for file_system in get_file_systems()):
        print("Waiting for EFS file system deletion to complete...")
        sleep(1)

    print(f"EFS file system {EFS_FILE_SYSTEM_NAME} deletion completed!")

def delete_storage_class():
    subprocess.run([
            "kubectl",
            "delete",
            "storageclass",
            EFS_STORAGE_CLASS_NAME
        ])

def delete_security_group():
    client = get_ec2_client()

    security_group_id = get_security_group_id()
    print(f"Deleting security group {security_group_id}...")

    client.delete_security_group(
        GroupId=security_group_id
    )

def get_ec2_client():
    return boto3.client(
        'ec2',
        region_name=CLUSTER_REGION,
    )

def get_security_group_id():
    client = get_ec2_client()

    security_groups = client.describe_security_groups()["SecurityGroups"]

    return next(security_group for security_group in security_groups if security_group["GroupName"]==EFS_SECURITY_GROUP_NAME)["GroupId"]

def delete_daemon_set():
    subprocess.run([
            "kubectl",
            "delete",
            "ds",
            "efs-csi-node",
            "-n",
            "kube-system"
        ])

def delete_deployment():
    subprocess.run([
            "kubectl",
            "delete",
            "deployment",
            "efs-csi-controller",
            "-n",
            "kube-system"
        ])

parser = argparse.ArgumentParser()
parser.add_argument(
    '--region',
    type=str,
    metavar="CLUSTER_REGION",
    help='Your cluster region code (eg: us-east-2)',
    required=True
)
parser.add_argument(
    '--cluster',
    type=str,
    metavar="CLUSTER_NAME",
    help='Your cluster name (eg: mycluster-1)',
    required=True
)

if __name__ == "__main__":
    args, _ = parser.parse_known_args()
    CLUSTER_REGION = args.region
    CLUSTER_NAME = args.cluster

    delete_efs_resources()

utils.py
import boto3
from time import sleep

def get_ec2_client(cluster_region):
    return boto3.client(
        "ec2",
        region_name=cluster_region
    )

def get_load_balancer_client(cluster_region):
    return boto3.client(
        'elbv2',
        region_name=cluster_region,
    )

def wait_for_stacks_to_be_gone(stacks, cluster_region):

    all_stacks = get_cloud_formation_stacks(cluster_region)

    while stacks in all_stacks:
        print("Waiting for stacks to be deleted...")
        sleep(1)

    print("Stacks deleted!")

def get_cloud_formation_stacks(cluster_region):
    client = get_cloud_formation_client(cluster_region)

    stacks = client.list_stacks()["StackSummaries"]

    def get_name(stack):
        return stack["StackName"]

    return list(map(get_name, stacks))

def delete_stacks(stacks, cluster_region):
    client = get_cloud_formation_client(cluster_region)

    for stack in stacks:
        print(f"Deleting {stack}...")
        client.delete_stack(
            StackName=stack
        )

def get_cloud_formation_client(cluster_region):
    return boto3.client(
        "cloudformation",
        region_name=cluster_region
    )


Unable to find Git repository

gradle-semantic-build-versioning requires the existence of a git directory. As a result, unless the user explicitly generates a git directory (e.g. via git init), gradle build fails. Is it possible to sidestep the requirement regarding the existence of git folder?
Please see the relevant issue here, and the relevant code here.
Thanks!

The plugin depends on git to identify the state of the current source-tree and so I don't think there a way around that. While we could just print out some starting version even if there is no git directory, this can lead to unexpected behavior if someone attempts to tag. Having to run git init doesn't seem too much of a burden imo, since the plugin advertises itself as using git.

@efeg One option might be to automatically create a .git directory if one doesn't exist (after prompting the user)? What do you think?

Thanks for the response @vivin!
I think it would be great to create a .git directory automatically if one doesn't exist (after prompting the user). Alternatively, I believe we might make the error message include a guidance on how to resolve the issue -- i.e. Unable to find Git repository. Please run "git init" to generate one.

Only took me a year and a half...

@vivin Thanks for the fix! -- I look forward to pick it up once a release is generated.


Conflict with Tidey 5e Sleep button

having an issue where lockdown is causing Sleep button to disapear

There's a new setting for that. Turn it off if you don't want it.


queryURL can resolve primitive values

Previously queryURL would only be able to resolve

Ember Data compatible JSON:API documents and
null or undefined

[fix #750]

Can we add tests that test the whole flow including the ember-data portion of this, rather than just the query cache part.


Keep track in the graph of the words used for extraction

Keep track in the graph of the words used for extraction, in order to visualise them

To be re-implemented because of a small bug


support_python_12

Codecov Report
All modified and coverable lines are covered by tests :white_check_mark:

Comparison is base (d588285) 99.24% compared to head (8878510) 99.24%.

:exclamation: Your organization needs to install the Codecov GitHub app to enable full functionality.
Additional details and impacted files
@@           Coverage Diff           @@
##           master     #571   +/-   ##
=======================================
  Coverage   99.24%   99.24%
=======================================
  Files          33       33
  Lines        5008     5008
=======================================
  Hits         4970     4970
  Misses         38       38

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.


API service

The API service is the entry point for producers and consumers of the service. The process uses the authentication service to authenticate and authorize users.
The API may be implemented using serverless functions running on KNative in order to scale with the demand.
Should use the storage facade to talk to s3. Should use seedwing to check input.
The following REST APIs will be implemented:

PUT /api/v1/sbom/:name - create or update an SBOM

Response: 200 Ok if SBOM was updated
Response: 404 Not found if SBOM does not exist
Response: 401 Unauthorized  if not authorized

GET /api/v1/sbom/:name  - retrieve an SBOM with the given name

Response: 200 Ok + SBOM matching name
Response: 401 Unauthorized  if not authorized
Response: 404 Not found if SBOM does not exist

GET /api/v1/sbom?purl=... - retrieve an SBOM for a given package URL.

Response: 200 Ok + SBOM matching pURL
Response: 401 Unauthorized  if not authorized
Response: 404 Not found if SBOM does not exist

GET /api/v1/sbom?sha256=... - retrieve an SBOM for an artifact with the given sha256 hash

Response: same as above

DELETE /api/v1/sbom/:name - delete an SBOM for artifact with name

Response: 200 Ok if SBOM was deleted
Response: 404 Not found if SBOM does not exist
Response: 401 Unauthorized  if not authorized

DELETE /api/v1/sbom?purl=... - delete an SBOM for artifact with pURL

Response: 200 Ok if SBOM was deleted
Response: 404 Not found if SBOM does not exist
Response: 401 Unauthorized  if not authorized

DELETE /api/v1/sbom?sha256=... - delete an SBOM for artifact with hash

Same as above

This is in progress already, right? We can already GET/PUT SBOM's.

I've only added the minimum PUT/GET for now. This is started, but definitely needs work, and is not something I'm actively working until I have ironed some quirks in the storage and indexing.

I think the API is complete now?


"Uncaught SyntaxError: Unexpected token ." from StatelessComponent using FullName

Hi - Firstly, thanks for making such a great utility!
I'm following the tutorial at http://www.productiverage.com/writing-react-apps-using-bridgenet-the-dan-way-from-first-principles - I apologise if this is an old tutorial or if I'm just missing an obvious step or configuration setting.
When I run the example by opening demo.html, I only see "Loading.." and the Chrome Debugger Console reports:
Uncaught SyntaxError: Unexpected token .
The problem seems to be caused by:
        createStatelessRenderFunction: function () {
            var className = Bridge.React.ComponentNameHelpers.getDisplayName(this);
            var namedScopeBoundFunction = null;
            eval("namedScopeBoundFunction = function " + className + "(props) { return scopeBoundFunction(props); };");
            return namedScopeBoundFunction;
        }

The value of className is (for me) "ClassLibrary1.MessageEditor" - which causes eval to try and make a function with a "." in the name, which doesn't appear to be a valid javascript name.
Further digging led me to ComponentNameHelpers.cs - which returns the C# strong typename including namespace:
		internal static string GetDisplayName(object source)
		{
			if (source == null)
				throw new ArgumentNullException("source");

			if (Script.Write<bool>("Bridge.isPlainObject(source)"))
				return source.ToString();

			return source.GetType().FullName;
		}

The issue seems to only affect StatelessComponent<>.
I'm very happy to provide more detail or a minimum reproducible sample (and I can open a pull-request if my above diagnosis seems correct).
Thanks again!

Hi! Thanks for the report. Bridge 15.0 was released last week and I had to
make a few changes to the Bridge.React library, it looks like I introduced
this bug while doing so. The intention was to get just the type name, not
the full namespace - I'll have to check whether the change should be in the
StatelessComponent class or in the ComponentNameHelpers.
I'm not at my computer now but should be able to check later and release a
fix in no more than a few hours.
Thanks for the report! Hope you enjoy the rest of the tutorials.. when they
work again!
Dan.
On 18 Sep 2016 6:30 a.m., "badcommandorfilename"<EMAIL_ADDRESS>wrote:

Hi - Firstly, thanks for making such a great utility!
I'm following the tutorial at http://www.productiverage.com/
writing-react-apps-using-bridgenet-the-dan-way-from-first-principles - I
apologise if this is an old tutorial or if I'm just missing an obvious step
or configuration setting.
When I run the example by opening demo.html, I only see "Loading.." and
the Chrome Debugger Console reports:
Uncaught SyntaxError: Unexpected token .

The problem seems to be caused by:
    createStatelessRenderFunction: function () {
        var className = Bridge.React.ComponentNameHelpers.getDisplayName(this);
        var namedScopeBoundFunction = null;
        eval("namedScopeBoundFunction = function " + className + "(props) { return scopeBoundFunction(props); };");
        return namedScopeBoundFunction;
    }

The value of className is (for me) "ClassLibrary1.MessageEditor" - which
causes eval to try and make a function with a "." in the name, which
doesn't appear to be a valid javascript name
https://mothereff.in/js-variables#ClassLibrary1.MessageEditor.
Further digging led me to ComponentNameHelpers.cs
https://github.com/ProductiveRage/Bridge.React/blob/d75d47038b56f7445887f23c98271d146e6669f4/Bridge.React/Components/ComponentNameHelpers.cs

which returns the C# strong typename including namespace:
  internal static string GetDisplayName(object source)
  {
      if (source == null)
          throw new ArgumentNullException("source");

      if (Script.Write<bool>("Bridge.isPlainObject(source)"))
          return source.ToString();

      return source.GetType().FullName;
  }

The issue seems to only affect StatelessComponent<>.
I'm very happy to provide more detail or a minimum reproducible sample
(and I can open a pull-request if my above diagnosis seems correct).
Thanks again!
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/ProductiveRage/Bridge.React/issues/12, or mute the
thread
https://github.com/notifications/unsubscribe-auth/AAtTzG4XVxodunjh641BcDzvUlfoKVLZks5qrMxhgaJpZM4J_zmP
.

I've pushed a fix for this. It only broke the StatelessComponent but it also meant that the component name shown in the React dev tools for PureComponent and Component were not as intended. I'm hoping to release the fix to NuGet later today, I'd like to include another bug fix, though, which I just need to finish off.

I've pushed a new version of the library to NuGet (1.8.6) and so the fix should be available for you to test now. Let me know if you have any more problems :)

Thanks for the quick response!
Confirming fixed in Bridge.React 1.8.6 NuGet package - great work!


Console.WriteLine produces strange text in Blazor 0.8.0

Repro steps:

dotnet new -i Microsoft.AspNetCore.Blazor.Templates::0.8.0-preview-19075-0444
dotnet new blazor -o BlazorApp1
Edit Program.cs to add Console.WriteLine("Hello, world!"); in Program.Main

Expected result:

Browser dev console shows: "Hello, world!"

Actual result:

WASM: mono_pe_file_map: Error opening file mscorlib.dll (3): No such file or directorymono_pe_file_map: Error opening file Mono.WebAssembly.Interop.dll (3): No such file or directorymono_pe_file_map: Error opening file Microsoft.JSInterop.dll (3): No such file or directorymono_pe_file_map: Error opening file BlazorApp1.dll (3): No such file or directorymono_pe_file_map: Error opening file Microsoft.AspNetCore.Blazor.dll (3): No such file or directorymono_pe_file_map: Error opening file Microsoft.Extensions.DependencyInjection.Abstractions.dll (3): No such file or directoryHello, world

In my case, Console.WriteLine simply doesn't write anything. I can hit a breakpoint while debugging razor components, but nothing is displayed in chrome console.

@tezine  Console.WriteLine will only write to the browser console when you're running client-side in the browser. For a Razor Components app Console.WriteLine will write to the console on the server.

@tezine Console.WriteLine will only write to the browser console when you're running client-side in the browser. For a Razor Components app Console.WriteLine will write to the console on the server.

For anyone who doesn't know, you can see the server console in the Output window in Visual Studio, just select 'ASP.NET Core Web Server in the select list:

@tezine Console.WriteLine will only write to the browser console when you're running client-side in the browser. For a Razor Components app Console.WriteLine will write to the console on the server.

For anyone who doesn't know, you can see the server console in the Output window in Visual Studio, just select 'ASP.NET Core Web Server in the select list:

So many thanks for that... I was stuck on Debug log...


Autofill adds a space to email address, leading to "Please enter valid email address" error

Samsung Galaxy S5 mini
Android: 4.4.2
https://play.google.com/store/apps/details?id=eu.smartpatient.mytherapy
You get to the contact/help center by following these steps:

Skip the voluntary information by tapping the x in the left upper corner
Open the main menu by tapping the burger button
Select "settings" and you get to the settings sub menu
Now you should already see the help button

Then click on "help" and you're inside the uservoice sdk

Type a question
Proceed to contact support
You will be prompted to enter an email address. If you use auto-fill to add the email, it will give you the "Please enter valid email address" error.

It may be hard for end users to realize that there is a space, and they won't proceed to enter a message because they won't know this is the issue.

+1
Please trim email before sending it up.


Identical IGNs don't get lumped together when it would be convenient.

Yeah, this was a plan of mine. Don't know why I didn't already have it here.

Done


GH-41758: [Python] Disallow direct pa.RecordBatchReader() construction to avoid segfaults

Rationale for this change
A user should never do this, but if you do you easily get segfaults. We should raise an error with an informative message like we do for other classes.
Are these changes tested?
Yes

GitHub Issue: #41758

Oh. I think it's good to have guidance like this.
+1


Add support for array and nested object assertions

Hi,
This pull request adds support for asserting claims which are of type array. It adds two new assertions:

Contains: Only authorize the user when the claims array contains this assertion string
ContainsAny:  Only authorize the user when any entry assertion string array is also contained in the claims array

With the functionality to assert claim arrays it's now easily possible to for example assert an user role to authorize the user.
I have also introduced some changes to how claims are deserialized depending on their type:

Strings and Integers: Those values are stringified when needed
Objects: Recursively apply the same rules on the values of the object and append them using dot notation
Arrays: Stringify all antries of the array

Using this change it's now possible to create assertions for nested object keys as the keys of objects are concatenated using a .
Additionally, I've removed the version from the docker-compose.yml as it's no longer needed with newer versions of docker compose and I updated traefik to v3.1.4 which (somewhat unintentionally) fixed #5
In some cases I'm not sure what's the most intuitive way to deserialize the claims. For example for claims which have arrays of objects we currently wouldn't support dot notation for the objects of the array but instead just stringify them. I could also imagine allowing support for something like outer.inner[0].value to also allow easy assertions on arrays of objects. Adding something like outer.inner[0].value would however make the validation somewhat more troublesome for what reason I didn't add it yet.
Please let me know what you think of these changes.

Hi @WhySoBad,
many thanks for your contribution. Looks promising. I will do a closer review as soon as i have some time.

Hmm.. Let me think of the cases we could have:
Scalar Claim
JWT:
"preferred_username": "foo"

Config:
AssertClaims:
  - name: "preferred_username"
    anyOf: ["foo"]

Array Claim
JWT:
"roles": ["foo", "bar", "xyz"]

Config:
AssertClaims:
  - name: "preferred_username"
    anyOf: ["foo"] # Would match
    anyOf: ["xyz"] # Would match
    anyOf: ["zzz"] # Would not match
    allOf: ["foo", "xyz"] # Would match
    allOf: ["foo", "zzz"] # Would not match

Complex Object Claim
JWT:
"some": {
  "complex": {
    "val": ["foo", "bar", "xyz"]
  }
}

Config:
AssertClaims:
  - name: "some.complex.val"
    anyOf: ["foo"] # Would match
    anyOf: ["xyz"] # Would match
    anyOf: ["zzz"] # Would not match
    allOf: ["foo", "xyz"] # Would match
    allOf: ["foo", "zzz"] # Would not match

So: I think we can remove the value and values configuration options completely and only use anyOf and allOf.
You always need to specify an array, even if it's a single value but I'am happy with that to keep it simple.
@WhySoBad I can rework your PR if you want. Just 👍 if that's ok for you.

Maybe we use https://pkg.go.dev/github.com/PaesslerAG/jsonpath instead of you own dot notation?
I don't know if it's compatible with yaegi but we can try.

So: I think we can remove the value and values configuration options completely and only use anyOf and allOf. You always need to specify an array, even if it's a single value but I'am happy with that to keep it simple.
@WhySoBad I can rework your PR if you want. Just 👍 if that's ok for you. Or just comment if you have time to do it by yourself :)

I agree with you. I think this solution is the best of both worlds.

Maybe we use https://pkg.go.dev/github.com/PaesslerAG/jsonpath instead of you own dot notation? I don't know if it's compatible with yaegi but we can try.

Yes using a package is probably a better solution. However, I see the following "edge case":
Let's assume I have the following object:
{
  "some": [
    { "key": "111" },
    { "key": "222" }
  ]
}

Now, when I want to assert the array to contain an object with the value 222 for the key key I'd have to use a constant index: $.some[1].key
I think we should offer a solution like $.some[x].key which does not check for a constant index but any indices. The server which returns the claims may store the objects in a hash set in which case the order of the objects in the array is completely random.
I don't think we can achieve such a behavior using the package you mentioned. I've also found this package https://github.com/tidwall/gjson which would support this syntax enhancement and provide even more syntactic sugars for the user without any implementation complexity on our side.
If it's okay for you I'd finish this feature as it's a good way for me to learn a bit of go :)

Now, when I want to assert the array to contain an object with the value 222 for the key key I'd have to use a constant index: $.some[1].key
I think we should offer a solution like $.some[x].key which does not check for a constant index but any indices. The server which returns the claims may store the objects in a hash set in which case the order of the objects in the array is completely random.

Oh yes, i didn't thought about this case. 👍

If it's okay for you I'd finish this feature as it's a good way for me to learn a bit of go :)

Yes sure. Thank you very much for your work, as this is something I have wanted to do for a long time but have not gotten around to it yet.
I'am also in the middle of learning Go btw. 😉

I'am also in the middle of learning Go btw. 😉

Nice, after my experience with go in last advent of code it'll take some time for me to get to like go again. In my opinion it's missing a lot of functionality in the standard library which I enjoy from rust. For small projects like this it's pretty nice though
I have kind of bad news: The gjson library makes use of the unsafe package which is prohibited by the traefik's yaegi configuration. However, gjson only requires unsafe functionality for two functions which we don't really need. It might be a bit sketchy but we could put the gjson package into the vendored directory and then comment out this functionality which is not needed.
I'm also considering creating an issue in the gjson repository and ask for advice since the issue linked above is very old and there was another issue which mentioned a gjson-safe package but this can't be found anymore and it is also very old.
I'd like to stick to the gjson package as it seems like the perfect fit for our needs and offers some flexibility for the users which I think is very nice

Ok yes, give ajson a try. Just as a hint: For traefik, all 3rd party libs need to be vendored, but i would much appreciate it if we don't need to patch anything.
I also had the idea of rewriting the entire plugin to WebAssembly because 1. it's compiled and faster, 2. i can use all 3rd party libs so i also don't need to implement OIDC by myself.
But i haven't used WebAssembly already so i decided to keep it as it is for right now.

Ok yes, give ajson a try. Just as a hint: For traefik, all 3rd party libs need to be vendored, but i would much appreciate it if we don't need to patch anything.

Yes, I think patching in a vendored library is very sketchy

I also had the idea of rewriting the entire plugin to WebAssembly because 1. it's compiled and faster, 2. i can use all 3rd party libs so i also don't need to implement OIDC by myself. But i haven't used WebAssembly already so i decided to keep it as it is for right now.

Ouh, I totally forgot about WebAssembly traefik plugins. This sounds really interesting as the benefits are obvious. Sadly, I'm not familiar with WebAssembly either but I might have a look at it in the future (as it would also allow writing plugins in rust :eyes:)
Anyways, I've now implemented the matching using ajson and changed the assertions to only use the AllOf and AnyOf quantifiers. In my opinion the ajson package does a great job for our purpose. I've also added some examples to the README which allow for a quick overview of what can be achieved using json path assertion names.
It's possible to combine AnyOf and AllOf quantifiers. Since a name like store.book[*].price yields multiple matches with every match being a single float it's also possible to specify the AllOf quantifier for matching non-array values.

Thx for reworking the code using ajson.
I'am just playing around with your code a bit and here are two things i've found:

An empty AllOf ignores AnyOf. Example:

AssertClaims:
  - Name: preferred_username
    AnyOf: ["admin", "xy"]

So if i login as "foo" for example, i'am authorized and see the following message:
Authorized claim preferred_username: Found all values of []
I think this happens because the allMatches array will then be empty and therefore if !slices.Contains(allMatches, false) will always be true.

Can you please re-add the code for showing the available claims in the log?
I think this makes debugging easier when you want to configure the authorization.

Can you please re-add the code for showing the available claims in the log?
I think this makes debugging easier when you want to configure the authorization.

Yes those messages are indeed really helpful when debugging. I accidentally removed those lines when rebasing and fixing merge conflicts
I've now moved the isAuthorized(...) method to the augorization.go file and added tests for it in the authorization_test.go file. I think the most common cases (including some edge cases) should be covered by those tests. Writing the tests was certainly a good decision as I already found some bugs (including the one you mentioned) whilst writing the tests.
Additionally, I've added a github workflow which runs testing in CI on every push. Since this repository is public you have unlimited free action minutes so why don't verify on every pust the authorization still works as expected. Maybe you can even add a rule for pull requests which enforces successful testing before being able to merge.

@WhySoBad thank you.. Looks good now 👍
If you're also happy with it, i will merge it.

Yes, I'm happy with the current state of this pull request. You can go on and merge it :+1:
Will this in addition to the PKCE be enough for a new release? I'd love to be able to use these new features without having to rely on local plugins in my setup :)

Will this in addition to the PKCE be enough for a new release? I'd love to be able to use these new features without having to rely on local plugins in my setup :)

Yes, since i don't have any other features planned yet, i'll publish a new release of the current features.
I'll do that tomorrow, probably.


git clone https://github.com/fulcrumgenomics/fgbio.gitcd fgbio

please remove cd fgbio in the installation doc (https://screadsim.readthedocs.io/en/latest/InstallTools.html).

Thank you very much for pointing out the typo! I've corrected the installation doc.


How can I display images?

I would like to display an image for each data point, can you please provide an example code how to do that? Thank you!

Thanks! I will add an example soon. To show images instead of text, you just need to specify the image urls in the two JSON files. Take DiffusionDB as an example.
In the diffusiondb.json file, we specify the image URL prefix.
{'image': {'imageGroup': 1,
  'imageURLPrefix': 'https://raw.githubusercontent.com/poloclub/diffusiondb-thumbnails/master/'}}

In the diffusiondb.ndjson file, we specify the rest of the URL for each image point.
[-4.7069817,
  4.4307537,
  '3f/3f72a44a-1b36-4de8-bd2a-68046e844429.webp',
  '',
  1],
 [-3.5961475,
  -3.2497282,
  '24/240c16c6-ab4d-4bd4-8519-7a153d59d137.webp',
  '',
  1],
 [-0.15707111,
  -1.4298916,
  '31/317a6218-382c-4dbd-938f-a82d558769a7.webp',
  '',
  1]

Thank you!

Hi, were you able to visualize images when you hover over the data points? For me the Diffusion-DB example only shows the link to the image and doesn't display the image exactly

Hi, were you able to visualize images when you hover over the data points? For me the Diffusion-DB example only shows the link to the image and doesn't display the image exactly

Hi! I just tried https://poloclub.github.io/wizmap/?dataset=diffusiondb, and I can see the images. Which browser do you use? What's your browser version?

Thanks a lot! Opened in another system and it worked.


Don't Merge! PR real time test for webhook case

Docs Build status updates of commit b11732f:
:clock10: Pending: waiting for processors (28 builds ahead of you)
:warning: Docs Build is busy, currently there are 28 builds ahead of this one, for more information you can view the Build queue graph on the Docs Portal.

Docs Build status updates of commit b11732f:
:clock10: Full build: the average full build time is 7 min(s) 25 sec(s), this is based on the last 30 build(s) for this repository.

Docs Build status updates of commit b11732f:
:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

docs-ref-conceptual/testing.md
:white_check_mark:Succeeded
View (azure-cli-latest) View (azure-cli-2017-03-09-profile) View (azure-cli-2018-03-01-hybrid)

For more details, please refer to the build report.
Note: Broken links written as relative paths are included in the above build report. For broken links written as absolute paths or external URLs, see the broken link report.
For any questions, please:Try searching in the Docs contributor and Admin GuideSee the frequently asked questionsPost your question in the Docs support channel


Idle Watchdog For Access Point After Restart (IDFGH-1630)

Environment

Build System:  Make
Compiler version (run xtensa-esp32-elf-gcc --version to find it):
// 1.22.0-80-g6c4433a
Operating System: Windows
Power Supply:  USB

Problem Description
Our device sometimes transitions from a WiFi station mode to a WiFi access point.  In this scenario, the unit restarts using esp_restart() and then access point is started using the following code:
this->log_i("Starting SoftAP");
ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_AP) );

// Build the apConfig structure.
wifi_config_t apConfig;
memset(&apConfig, 0, sizeof(apConfig));
memcpy(apConfig.ap.ssid, ssid.data(), ssid.size());
apConfig.ap.ssid_len = ssid.size();
apConfig.ap.channel         = 0;
apConfig.ap.authmode        = WIFI_AUTH_OPEN;
apConfig.ap.ssid_hidden     = (uint8_t) false;
apConfig.ap.max_connection  = 4;
apConfig.ap.beacon_interval = 100;

ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_AP, &apConfig) );

ESP_ERROR_CHECK(esp_wifi_start() );

this->log_i("SoftAP started");

On some devices, the task watchdog is invoked after attempting to start the access point:
I (921) WIFI_MANAGER: Starting SoftAP
E (5926) task_wdt: Task watchdog got triggered. The following tasks did not reset the watchdog in time:
E (5926) task_wdt:  - IDLE1 (CPU 1)
E (5926) task_wdt: Tasks currently running:
E (5926) task_wdt: CPU 0: IDLE0
E (5926) task_wdt: CPU 1: IDLE1

When this occurs, the access point is not available/visible, meaning the access point was never started.
Restarting the unit using esp_deep_sleep_start() instead of esp_restart() seems to solve the issue.  This leads me to believe the issue in with I2C behavior for WiFi.

@gregjesl， could you help to get the task watchdog backtrace vi a following steps:

make menuconfig => Common ESP-related => Select "Invoke panic handler on Task Watchdog timeout"
reproduce the issue
get the backtrace when the watchdog happens

@liuzfesp I performed the steps you recommended here is the result:
E (5926) task_wdt: Task watchdog got triggered. The following tasks did not rese                                                                                t the watchdog in time:
E (5926) task_wdt:  - IDLE1 (CPU 1)
E (5926) task_wdt: Tasks currently running:
E (5926) task_wdt: CPU 0: IDLE0
E (5926) task_wdt: CPU 1: IDLE1
E (5926) task_wdt: Aborting.
abort() was called at PC 0x400d250c on core 0

ELF file SHA256: 43ab51787385f13c0fdaeeb8013d852d387b3a07f81544901fac81bd2abdc5e                                                                                f

Backtrace: 0x4008c274:0x3ffb0630 0x4008c4b9:0x3ffb0650 0x400d250c:0x3ffb0670 0x4                                                                                008210d:0x3ffb0690 0x401ad497:0x3ffbee30 0x400d3663:0x3ffbee50 0x400901cd:0x3ffb                                                                                ee70

Rebooting...
ets Jun  8 2016 00:22:57

rst:0xc (SW_CPU_RESET),boot:0x12 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0018,len:4
load:0x3fff001c,len:552
load:0x40078000,len:7940
load:0x40080400,len:5632
entry 0x40080674

when the unit restarted, the unit encountered another error that we had seen where ledc_isr_register() hangs.  Our workaround for that particular issue was implementing a timeout; when a timeout occurs the unit restarts using esp_deep_sleep_start() as suggested here.  After the unit restarted from the deep sleep, the unit was able to start the access point.

HI @gregjesl I don't have the elf file, could you help to get the backtrace with following command:

xtensa-esp32-elf-addr2line -piaf -e *.elf backtrace

The *.elf is the elf file that related to the test bin.
Moreover, could you give the detailed steps to replicate this issue, e.g:

sdkconfig
can this issue be reproduced with the example code plus minimum change?
steps to replicate this issue

@gregjesl Thanks for reporting the issue, would you please help provide more details as suggested by @liuzfesp, including sdkconfig; can this issue be reproduced with the example code plus minimum change? steps to replicate this issue. Thanks.

@gregjesl Thanks for reporting the issue, would you please help provide more details as suggested by @liuzfesp , including sdkconfig; can this issue be reproduced with the example code plus minimum change? steps to replicate this issue. Thanks.

Hi @gregjesl I think this issue should have been fixed by commit: fbd38ad1 (v3.3), d9cfb05e (v4.0),  53d57dd7 (master). These fixes already merged into IDF gitlab internally, may have some days delay before it can be synced to github.
For v3.2/v3.1, will merge the fix soon.
Please let me know if you still encounter similar issue with the fixes.

v3.2 - wait for merge...
v3.1 - 907878d6

@gregjesl Thanks for reporting, the fix commits have been shared by @liuzfesp . Feel free to reopen if the issue still happens. Thanks.


made changes to a statement

The statement I made changes to was due to the fact that explicit values were used in the link generator method but no ambient value was used

@rynowak @serpent5

Thanks @sammychinedu2ky

You're welcome 😅


is there any example of LSTM image classification?(not a issue)

Is there any example of LSTM image classification?
Or is  any other method for image classification except CNN?

http://arxiv.org/abs/1505.00393

@tornadomeet thank you !!!

This issue is closed due to lack of activity in the last 90 days. Feel free to reopen if this is still an active issue. Thanks!


Can't add an image for the recipe

Hi,
There is no way to add an image for the recipe. Instead, a Nextcloud adress is shown in the image field and there is no way to add another one, please see screenshot below.

Thank you.

Duplicate of  #102


Add Amenities Component

Description
This PR introduces a new Amenities component, which is responsible for displaying the available amenities and services offered for housing and hiking listings. It provides users with a clear overview of what features are included in the listing.
Type of Change

[x] New feature (non-breaking change which adds functionality)

Checklist

[x] The Amenities component is tested and displays information correctly
[x] Code is properly documented and follows project guidelines
[x] The component is responsive and works across all supported platforms

Related Issues
N/A
Additional Information
The component can be extended to include more detailed amenities and services in the future.

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


Add xiaotaojiang in website

I've just rewritten https://app.xiaotaojiang.com with vue. It was an angular app.
I'll publish an article about it soon.

Will you publish in english? ;)

@azamat-sharapov absolutely

Nice!

✨


Dendron Insert note link command

Please Select if your Request is Either something new or an Enhancement

[ ] Enhancement of an existing Feature.
[x] Request of a new feature.

Please select the area your request applys to. (Multiple selections are Possible)

[ ] Onboard. Initial vault setup and import/export pods
[x] Create. Note creation, lookup, snippets and templates
[ ] Retrieve. Backlinks, references, graph view
[ ] Structure. Refactoring, multi-vault and schemas
[ ] Publish. Sharing your repo with the world
[ ] Misc (Choose this if your not sure)

Is your feature request related to a problem? Please describe
Creating links is a crucial part on PKM, no difference in Dendron. In my opinion creating a wiki link is not very
consistent yet:

If you start writing and make a typo and delete a char, you loose completion
pressing ctrl-space brings back completion but starts completing from the last dot.

This makes linking more uncomfortable.
Describe the solution you'd like
I Think a good solution could be having a insertNoteLink command that uses the lookup for searching
the note you want without the completion caveats.
This could be extended to a two phase input where after asking for the link you get prompted for a label.
This possibility will be configurable by an argument to the command (promptForLabel: true|false)
Additional context
This is as well another approach for #702 and I think it could potentially solve #473 as well

This is an excellent idea. Tagging to the next milestone for now for discussion. I see a lot of value in reducing the friction of creating links.

delivered in v44!


Add aes_wrap cipher to providers

Checklist

[ ] documentation is added or updated
[ ] tests are added or updated

ping
Old PR rebased.

Thanks. Merged to master.