[FEATURE] 🔑 Add DI Keyed Services support

Intro
Sometimes while working with DI in .NET we may need to register multiple services of the same type, but configured differently.
The classic example is with multiple HTTP clients configured differently and referenced via a name: the .NET team solved this with HTTP named clients by using a custom approach for that scenario which included the introduction of the services.AddHttpClient("name", ...) ext method to setup one, IHttpClientFactory as the dependency to take and finally the IHttpClientFactory.CreateClient("name") method to get one.
FusionCache had the same need, in the form of Named Caches: since the approach was sound, it worked well and the .NET community was already familiar with it, I used it as a blueprint for how to do it in FusionCache, too.
So if with HTTP client we can do this:

register: AddHttpClient("name", ...)
depend on: IHttpClientFactory
call: CreateClient("name")
obtain: HttpClient

with FusionCache we can do this:

register: AddFusionCache("name", ...)
depend on: IFusionCacheProvider
call: GetCache("name")
obtain: IFusionCache

All went well and the community response has been great.
Enter Keyed Services
Since .NET 8 we now have native support for multiple services of the same type, identified by different names, thanks to the addition of so called keyed services.
The idea is basically that we can now register services not only by type but also by specifying the name, like this:
services.AddKeyedSingleton<MyService>("foo");
services.AddKeyedSingleton<MyService>("bar");

and later, to resolve it, simply mark a constructor parameter or web action with the FromKeyedServices attribute, like this:
app.MapGet("/foo", ([FromKeyedServices("foo")] MyService myService) => myService.Whatever(123));
app.MapGet("/bar", ([FromKeyedServices("bar")] MyService myService) => myService.Whatever(123));

Note that at least currently (during the .NET 9 wave) the HTTP named clients story still seems not to have been updated to support keyed services yet (see here), nonetheless I was thinking about looking to add support to FusionCache.
So, here we are.
Proposed Design
The idea as always is that, as much as possible, things should just work.
This means that users already registering named caches via AddFusionCache("name") should be able to then resolve them not just with IFusionCacheProvider.GetCache("name") but also via [FromKeyedServices("name")] IFusionCache cache, all transparently, meaning with only one registration, both ways of resolving it would be available, all for free.
But how?
Easy, inside the implementation of the AddFusionCache("name") method I would register it both "normally" (to be later resolved via IFusionCacheProvider) and also as a keyed service, with a factory that just resolve the "normal" one and return it.
Something like this:
services.AddKeyedSingleton<IFusionCache>(cacheName, static (serviceProvider, key) =>
{
	return serviceProvider.GetRequiredService<IFusionCacheProvider>().GetCache(key!.ToString());
});

Therefore I started implementing it, and... problems.
Problems
Here's how how it started, and it basically boils down to thiese points:

by referencing Microsoft.Extensions.DependencyInjection.Abstractions >= 8 it's possible to call AddKeyedSingleton<TService> and friends
the underlying concrete container impl though must support keyed services, otherwise it will throw when calling building it (at least the Microsoft one does when calling BuildServiceProvider())
the standard Microsoft impl is in the Microsoft.Extensions.DependencyInjection package (which depends on Microsoft.Extensions.DependencyInjection.Abstractions above), and from >= 8 it supports keyed services
there can also be different implementations of the DI container on top of the standard Microsoft one (like Lamar, Autofac, etc)
support for keyed services is not present in all of them and/or in all versions of them
when registering a service there's no way to know if the concrete container impl supports it

It all boils down to the fact that it is not possible to detect if the container in use does support keyed services or not, therefore FusionCache cannot do anything automatically.
Some people suggested to use conditional compilation with something like #if NET8_0_OR_GREATER, but that doesn't work.
First because that only checks the .NET runtime version, not the version of the Microsoft.Extensions.DependencyInjection package (that contains the standard DI container impl): they are not the same and we cannot infer one from the other, as can be seen here.
Second because, as said, there may be different containers in use (like Lamar, etc) so the version of the standard Microsoft impl doesn't really tell use anything.
So basically, as of today, the design of the available abstractions in .NET seem to prevent a form of feature detection, therefore not allowing me to do this both well and in a transparent way 😞
(unless I'm missing something... and in that case please let me know!)
A Possible Solution
So, the core block is that it's not possible to do keyed registrations automatically because we want to avoid throwing random uncontrolled exceptions, right?
So, let's keep it manual! But wait, not with a different method altogether like AddKeyedFusionCache("cache"), that would ONLY register it as a keyed service forcing the user to choose one or the other, BUT with a very simple opt-in.
Something like this:
services.AddFusionCache("MyCache")
    .AsKeyedService() // OPT-IN HERE
    .WithDefaultEntryOptions(opt =>
    {
        opt.Duration = TimeSpan.FromSeconds(30);
        opt.FactorySoftTimeout = TimeSpan.FromMilliseconds(100);
    })
;

In this way the decision will be in the hand of the user actually registering the services, and they will know for sure if they want a keyed service or not, right?
Opinions?
What do you all think? Looks good? Not? Why?
Please le me know, thanks!

Based on my understanding the plan here is to make functionally equivalent the usage of the named caches feature of Fusion Cache with the keyed services feature of Microsoft DI.
So, you want that any code using a named cache registration should also be able to resolve the named cache instance by using the [FromKeyedServices attribute]. This basically means, as you said, to also register a keyed service each time a named cache is registered.
I have a few questions:

why do you want to do that ? Why not simply waiting to see the final decision made for the Http client factory and copy the same approach ?
do you also want to support the reverse relationship ? I mean, being able to resolve a named cache from the IFusionCacheProvider service if a keyed service with the same name is registered on the service provider ? Or, instead, you just want to make the named cache pattern (which is a custom solution in Fusion Cache) to work well with the keyed service feature (which is the built-in solution proposed by Microsoft for basically the same problem) ?
what is your long term plan ? Do you want to maintain both features and make them working together, or your long term plan is to deprecate the named cache feature and promote the usage of keyed services instead ?

Maybe answering this questions could help in deciding whether or not to implement this feature.

Based on your explanation, you want that any code using a named cache registration should also be able to resolve the named cache instance by using the [FromKeyedServices attribute].

Ideally yes, I think this would've been great.

why do you want to do that ? Why not simply waiting to see the final decision made for the IHttpClientFactory and copy the same approach in Fusion Cache ?

I uno-reverse the question: why should I wait?
In the same vein I would have waited for an hybrid cache instead of creating FusionCache.

do you also want to support the reverse relationship ? I mean, being able to resolve a named cache from the IFusionCacheProvider service if a keyed service with the same name is registered on the service provider.

No: apart from the fact that having "named resolving to keyed resolving to named etc" would probably create an infinite loop, but the way to register FusionCache is via the AddFusionCache method, and not by manually registering a component by calling AddSingleton or AddKeyedSingleton or something else, so there's no need to support that.

Or, instead, you just want to make the named cache feature (which is a custom solution in Fusion Cache) to work well with the keyed service feature (which is the built-in solution proposed by Microsoft for basically the same problem) ?

Exactly this.

what is your long term plan ? Do you want to maintain both features and make them working together, or instead your long term plan is to deprecate the named cache feature and promote the usage of keyed services instead ?

I don't see a need to deprecate named caches, so I'd like to keep supporting both (if you see a reason why let me know, I'm curious).
Also, the named caches approach is more powerful than the keyed one, since it allows programmatic access instead of declarative: basically the keyed approach is the simple and declarative version of the more flexible named approach.

By the way, I think that a very big advantage of the proposed opt-in approach is that
[...]
support for the named caches, then it can do that by calling .AsKeyedService().

Yep, exactly.

I'm not a huge fan of implicit behaviors, so I prefer this kind of api where I do need to explicitly require support for keyed services.

Got it, thanks for sharing!

I would like to offer another perspective. Basically your initial goal was that this keyed service approach will just work. Having to enable this feature explicitly is contrary to that goal as you have to explicitly search for such a method, which is unexpected.
Setting aside the problem of other DI implementations for a second, with the latest Microsoft DI, enabling keyed services by default should not be a breaking change as nothing will change unless you specifically asked for a keyed service. Agreed?
That leaves the issue of old Microsoft DI implementations or alternative DIs, which (for better or for worst) is the minority by now. In these DIs trying to register the services will cause an exception to be thrown. I would suggest to catch and wrap this exception in a custom exception that explains the problem and gives a clear instruction on how to opt out of this behavior.
As DI registration happens at startup, it is impossible to miss this change after updating Fusion cache, even if you missed the change in the documentation. Of course it's a small inconvenience for a small number of users, but so is requiring the majority of users to opt-in.
I think it's also fair to assume that the number of users using DIs that do not support keyed services will decrease over time, so I think it's better to use a solution that is prepared for this future.

I would like to offer another perspective. Basically your initial goal was that this keyed service approach will just work. Having to enable this feature explicitly is contrary to that goal as you have to explicitly search for such a method

Agree.

which is unexpected

Not really: I mean people registering other keyed services manually know that they have to call AddKeyedEtc, and here they would call .AsKeyedService() .
Makes sense?

enabling keyed services by default should not be a breaking change as nothing will change unless you specifically asked for a keyed service. Agreed?

Nope, building the ServiceProvider will throw, that's the main issue.
Will answer later to the other points.

Based on my understanding, your initial idea was to add an implicit support to keyed service resolution for named caches because, in a sense, it should be the natural expectation of a user: in a sense, it feels natural being able to resolve a named cache as a keyed service.
Reflecting on your answer to my previous post, it seems to me that these features are just "weakly" connected: they are there to solve different needs and, as you pointed out, named caches are a more flexible approach since they are tied to the usage of compile time constants (which, instead, must be used with keyed services because of the FromKeyedServicesAttribute attribute).
If you put yourself in the user shoes, an implicit support to keyed service resolution to named caches comes at the cost of side effects:

one minor side effects is that, in any case, a new keyed service is added to the service collection. This keyed service was not directly registered by the user, it is there because of the named cache usage. I understand that this is needed in order to support the keyed service resolution for the named cache, but this seems to me an unexpected behavior. Your service collection is changed just because you have updated the Fusion Cache library version: by definition, this is a side effect.
one major side effect is the runtime exception which is the core of this discussion, that you get if the concrete IServiceProvider implementation does not support keyed services. This is a breaking change and a catastrophic one.

To summarize, regardless of the runtime exception the implicit support for keyed service with named caches is a breaking change to the library: the runtime exception simply makes it worse.
Final point. Since you pointed out that the exception is thrown when the service provider is built from the service collection, there is no way for you to intercept this problem. Based on my understanding, the service provider is built at the moment that the host is built. Unless there is an extension point in the framework to inject logic to be executed at point in time (honestly, I have no idea), you have to way to handle this exception from the Fusion Cache code.
In your post you mentioned the idea of feature detection, to query and see if the keyed service feature is supported by the runtime environment. Since the keyed service support feature logically belongs to the service provider, even if in the future it will be introduced in the framework probably it will be associated with the IServiceProvider service: again, at the library level you interact with the IServiceCollection, since the service provider belongs to the host object which is outside of the Fusion Cache scope.
For all of these reasons, I think that designing this feature (keyed services support for named caches) as an opt-in feature is even better than your initial idea of an out of the box implicit support. This way the client code is in full control and can opt-in by explicitly calling .AsKeyedService().

Hi @EnricoMassone and thanks for taking the time to answer in such a complete way!

Reflecting on your answer to my previous post, it seems to me that these features are just "weakly" connected: they are there to solve different needs

I don't know if I would call them "weakly connected", maybe more like "the features of keyed services are a subset of the ones of named caches" but yeah, I got your point and it makes sense.

and, as you pointed out, named caches are a more flexible approach since they are tied to the usage of compile time constants

I suppose you meant "they are NOT tied to the usage of compile time constants"? In that case, yes exactly.

If you put yourself in the user shoes, an implicit support to keyed service resolution to named caches comes at the cost of side effects:

one minor side effects is that, in any case, a new keyed service is added to the service collection. This keyed service is not explicitly registered by the user, it is there because of the named cache usage. I understand that this is needed in order to support the keyed service resolution for the named cache, but this seems to me an unexpected behavior.

Yes, technically. But also that is the reality anyway, meaning that for example when you call AddSignalR() you are effectively delegating the actual components registration to somebody else, and then it becomes an implementation detail (which may change in the future, and you have no control on).

one major side effect is the runtime exception which is the core of this discussion, that you get if the concrete IServiceProvider implementation does not support keyed services. This is a breaking change and a catastrophic one.

Agree.

Final point. Since you pointed out that the exception is thrown when the service provider is built from the service collection, there is no way for you to intercept this problem. Based on my understanding, the service provider is built when the host is built, usually inside the Program.cs file. Unless there is an extension point in the framework to inject logic to be executed at point in time (honestly, I have no idea and I have never heard of that), you have no way to handle this exception from the Fusion Cache code. In your post you mentioned the idea of feature detection, to check and see if the keyed service feature is supported by the runtime environment. Since the keyed service support logically belongs to the service provider, any feature detection mechanism would probably be associated with the IServiceProvider object: again, at the library level you interact with the IServiceCollection, since you are at service registration time and the host is still to be created.

Exactly.

For all of these reasons, I think that designing this feature (keyed services support for named caches) as an opt-in feature is even better than your initial idea of an out of the box implicit support.

99% agree, and this is how it is currently implemented in my local branch, and it is working well 🙂 I just need a little bit more time to marinate the idea and see if somebody else comes up with some notes.
Thanks again, much appreciated!

Good afternoon @jodydonetti you are welcome.

I suppose you meant "they are NOT tied to the usage of compile time constants"?
In that case, yes exactly.

Yes, there was a type here. Actually what I meant is that named caches are not tied to the usage of compile time constants.
Of course let's also wait for other people point of view, designing this kind of stuff is never easy (also given the wide adoption of Fusion Cache).

Hi all, I just updated the original proposal, look for the "Update 2024-05-10" part at the bottom.
It's not about registering stuff but about adding support for resolving keyed registered services for things like the backplane, the distributef cache, etc.
Opinions?

Read the whole discussion, and I'm not sure if I missed this point, but the nice thing about AsKeyedServices is also that in a distant future, where all DI providers support this feature, you can simply make the method obsolete. Early adopters will hopefully keep reading changelogs, and the silent majority will be none the wiser.

Hi all, I just updated the original proposal, look for the "Update 2024-05-10" part at the bottom.
It's not about registering stuff but about adding support for resolving keyed registered services for things like the backplane, the distributef cache, etc.
Opinions?

Based on my understanding with the current implementation of methods WithRegisteredXyz(), it simply look for a specific service type in the DI container and registers a cache by using the service implementation registered in the DI container.
For instance, let's suppose we have:
services.AddFusionCache().WithRegisteredBackplane();
in this case, an instance of IFusionCacheBackplane is asked to the DI container and the implementation returned by the DI container is used to create the cache.
What happens, as of today, if a user registers multiple implementation of the IFusionCacheBackplane service ?
For instance:
services.AddSingleton<IFusionCacheBackplane, FooBackplane>();
services.AddSingleton<IFusionCacheBackplane, BarBackplane>();
services.AddFusionCache().WithRegisteredBackplane();

Based on my understanding, in this case the last registration wins, so the resolved instance of IFusionCacheBackplane should be BarBackplane, so basically the cache is crated by using BarBackplane. Am I correct ?
I'm asking this just to understand the reason to support keyed services for things like backplanes. If I get it right, with the current version there is not the possibility of registering different backplanes and then pick one of them to be used with the cache: as explained above, the last one registered wins and it is the one actually used.
So, this is basically a brand new feature (this situation is slightly different from the named caches one, in that case the feature of having named caches was already there).
The rationale behind this new feature is letting a user defining multiple different backplane implementation, give them a name and use them with different registered caches (by picking the chosen backplane by name) ?

Based on my understanding, with the current implementation of methods WithRegisteredXyz() the library looks for a specific service type in the DI container and registers a cache by using the service implementation registered in the DI container.
For instance, let's suppose we have:
services.AddFusionCache().WithRegisteredBackplane();
in this case, an instance of IFusionCacheBackplane is asked to the DI container and the implementation returned by the DI container is used to create a cache.

Correct.

What happens, in the current version of Fusion Cache, if a user registers multiple implementations of the IFusionCacheBackplane service ? For instance:
services.AddSingleton<IFusionCacheBackplane, FooBackplane>();
services.AddSingleton<IFusionCacheBackplane, BarBackplane>();
services.AddFusionCache().WithRegisteredBackplane();

Based on my understanding, in this case the last registration wins, so the resolved instance of IFusionCacheBackplane should be BarBackplane. So, the cache is crated by using BarBackplane as the backplane type. Am I correct ?

Yes, I'm not 100% sure since it's not that common, but I think so.
Anyway, it's basically a way to say "use THE backplane is that has been registered via DI".
Because of that, the behaviour is the one defined by the DI container (not FusionCache) when registering more than one service of type IFusionCacheBackplane and later calling serviceProvider.GetService<IFusionCacheBackplane>().
Makes sense?

I'm asking this just to understand the actual use case to support keyed services for things like backplanes.

The use case, in general, is to add support for keyed services everywhere it can make sense: at first it was about FusionCache registering itself to be later resolved by user code via [FromKeyedService("name")], but later I remembered that FusionCache itself was sometimes resolving services, so I wanted to think about supporting that scenario, too.
A concrete example I can think about for this scenario is registering 2 different IFusionCacheBackplanes via keyed services, and then being able to use them via keyed services.
Can this be done in another way? Yup, sure, but it's just about supporting a feature (in this case keyed services) everywhere it is possible, and let users pick and choose if and how to use it.

If I get it right, with the current version there is not the possibility of registering different backplanes and then pick one of them to be used with the cache:

Not directly, but it's possible to do this:
services.AddFusionCache()
	.WithBackplane(sp =>
	{
		var backplanres = sp.GetServices<IFusionCacheBackplane>();
		// TODO: USE A LOGIC HERE...
		return backplanres.First();
	});

So, this is basically a brand new feature

Kinda, we can say this.

Is the use case behind this new feature to let a user define multiple backplane implementations, give them a name, and use them with different caches (by picking the chosen one by name)?

Yes.

Based on my understanding, with the current implementation of methods WithRegisteredXyz() the library looks for a specific service type in the DI container and registers a cache by using the service implementation registered in the DI container.
For instance, let's suppose we have:
services.AddFusionCache().WithRegisteredBackplane();
in this case, an instance of IFusionCacheBackplane is asked to the DI container and the implementation returned by the DI container is used to create a cache.

Correct.

What happens, in the current version of Fusion Cache, if a user registers multiple implementations of the IFusionCacheBackplane service ? For instance:
services.AddSingleton<IFusionCacheBackplane, FooBackplane>();
services.AddSingleton<IFusionCacheBackplane, BarBackplane>();
services.AddFusionCache().WithRegisteredBackplane();

Based on my understanding, in this case the last registration wins, so the resolved instance of IFusionCacheBackplane should be BarBackplane. So, the cache is crated by using BarBackplane as the backplane type. Am I correct ?

Yes, I'm not 100% sure since it's not that common, but I think so.
Anyway, it's basically a way to say "use THE backplane is that has been registered via DI". Because of that, the behaviour is the one defined by the DI container (not FusionCache) when registering more than one service of type IFusionCacheBackplane and later calling serviceProvider.GetService<IFusionCacheBackplane>(). Makes sense?

I'm asking this just to understand the actual use case to support keyed services for things like backplanes.

The use case, in general, is to add support for keyed services everywhere it can make sense: at first it was about FusionCache registering itself to be later resolved by user code via [FromKeyedService("name")], but later I remembered that FusionCache itself was sometimes resolving services, so I wanted to think about supporting that scenario, too.
A concrete example I can think about for this scenario is registering 2 different IFusionCacheBackplanes via keyed services, and then being able to use them via keyed services. Can this be done in another way? Yup, sure, but it's just about supporting a feature (in this case keyed services) everywhere it is possible, and let users pick and choose if and how to use it.

If I get it right, with the current version there is not the possibility of registering different backplanes and then pick one of them to be used with the cache:

Not directly, but it's possible to do this:
services.AddFusionCache()
	.WithBackplane(sp =>
	{
		var backplanres = sp.GetServices<IFusionCacheBackplane>();
		// TODO: USE A LOGIC HERE...
		return backplanres.First();
	});

So, this is basically a brand new feature

Kinda, we can say this.

Is the use case behind this new feature to let a user define multiple backplane implementations, give them a name, and use them with different caches (by picking the chosen one by name)?

Yes.

Ok, now it makes more sense to me.
My only point is about this overload:
services.AddFusionCache("MyCache")
  .WithRegisteredKeyedBackplane();

In this case, since an explicit name is not provided for the backplane, a keyed service named "MyCache" is resolved from the DI container, correct ?
Does this break existing code ? I mean, in an existing code-base you maybe already have a similar registration. If you now change the behavior, by implicitly resolving a keyed service named "MyCache" you have introduced a breaking change. If I get it correct, the problem here is that you are implicitly changing the behavior to keyed services for the sole fact that the cache is named.
Maybe it is better to only support the other overload ?
I mean this one:
services.AddFusionCache()
  .WithRegisteredKeyedBackplane("foo");

in this case, the client code is explicitly asking to shift to a keyed services approach.

In general, this seems to be a good idea. My only point is about this overload:
services.AddFusionCache("MyCache")
  .WithRegisteredKeyedBackplane();

Is this really needed? Probably your rationale is that in many cases the user will register a named backplane having the very same name of the cache. Correct?

Correct.

What do you expect to happen if this overload is used in this way:
services.AddFusionCache()
  .WithRegisteredKeyedBackplane();

In this case you don't have a cache name, at least you don't have an explicit one (I don't know if there is an implicit default cache name in this case).

Any cache has a name underneath, including the default one: for that, the name is FusionCacheOptions.DefaultCacheName.
Anyway I see your point, and in fact I'm still not sure about the parameterless version: on one hand it makes sense to specify the name just once (with AddFusionCache("name")) and then simply tell it to look for the the keyed backplane/distributed cache/whatever without repeating it, but on the other hand it may create doubts... I don't know, still have to marinate the idea a little bit.

Hi all, I just released v1.2.0-preview1 🥳

Hi @EnricoMassone , did you happen to take a look at or play with preview1?
I'm about to release preview2 with some changes, any observation of that first preview would be helpful.
Thanks!

Hi @EnricoMassone , did you happen to take a look at or play with preview1? I'm about to release preview2 with some changes, any observation of that first preview would be helpful. Thanks!

Good evening, I just tried it in a little toy project and it seems to work fine.
I didn't have a chance to try it in real production code though.
Looking forward for the next stable release!

Thanks @EnricoMassone !
Since preview1 I slightly changed it to better fit with the existing keyed services in .net, will update with the next release.

Hi all, FusionCache v1.2.0 is out 🥳


BETA - Templates with Data Apps Release - part2

Kai PromptLab release
Kai SQL bot release

@TomNett please approve, releasing ai apps to beta


Default manifest.json is not well-formed for the app installation + inconsistency + wrong property

Bug Report or Feature Request (mark with an x)
- [x] bug report
- [ ] feature request

Area
- [ ] devkit
- [x] schematics

Versions
CLI RC.6
Repro steps
ng new testApp
ng add @angular/pwa --project testApp
ng build --prod
http-server dist/testApp
Chrome -> DevTools -> Application -> Manifest -> Add to Homescreen
The log given by the failure
Errors:

Site cannot be installed: one of manifest name or short name must be specified
Site cannot be installed: the manifest display property must be set to 'standalone' or 'fullscreen'

Same from Lighthouse audit:
User will not be prompted to Install the Web App

Failures: Manifest's display value is not one of: minimal-ui | fullscreen | standalone, Manifest does not have short_name, Manifest does not have name.

Is not configured for a custom splash screen

Failures: Manifest does not have name.

Desired functionality
The idea to have Web App Manifest is to have the app installable. Proposed fix:
{
  "name": "Angular Application",
  "short_name": "Angular App",
  "display": "fullscreen",
  ...
}

Theme-color insonsistency
In index.html:
<meta name="theme-color" content="#FFFFFF">

should be
<meta name="theme-color" content="#1976d2">

To follow theme_color from manifest.json as described here: https://developers.google.com/web/fundamentals/web-app-manifest/

Specify a theme color using the theme_color property. This property sets the color of the toolbar. For this we also suggest duplicating an existing color, specifically the theme-color .

Wrong property
"splash_pages": null

This is not a part of Web App Manifest and should be removed
https://developer.mozilla.org/en-US/docs/Web/Manifest
References
https://developers.google.com/web/tools/lighthouse/audits/manifest-contains-short_name
Chrome's maximum recommended length is 12 characters.
CC: @Brocco

I see that name and short_name should be the title:
https://github.com/angular/devkit/blob/master/packages/angular/pwa/pwa/files/assets/manifest.json#L2
But it doesn't work in CLI RC.6

Also, Description metatag added to index.html is not about PWA. To be removed

Fixed all except name and short_name issue by https://github.com/angular/devkit/pull/776

Closed via this commit: https://github.com/angular/devkit/commit/0f65111557435e65430544085b0dbd0b108bdf60


Update Settings “config”

Automatically generated by Netlify CMS

👷 Deploy Preview for mystifying-heyrovsky-e13280 processing.

Name
Link

🔨 Latest commit
bde041c1a293c0d8f048b061d0387847ddb27734

🔍 Latest deploy log
https://app.netlify.com/sites/mystifying-heyrovsky-e13280/deploys/62cdb17cd417db0009960f7e


Fix side effects of the bookkepping of Area/Area2D's monitoring (2.1)

Fix monitoring flag being reset when the scene is out of the tree (happens on save all if the current scene is not the focused one, therefore on save-on-run as well)
Fix the inability to reset the monitoring flag while the area is out of the tree

@lonesurvivor, @volzhs, @reduz, @akien-mga:
Additionally, could you have a look at this and test if this doesn't break your use cases?
Finally, I think some or all of this should be ported to 3.0 but the code there is not in the same initial state. Any volunteer to port all the relevant recent Area/Area2D fixes to 3.0?

Ah, one more thing.
I've noticed Area2D::set_enable_monitoring() only complains about having been called during a signal if it needs to actually update the node's state (in contrast to what happens in Area3D.)
Even though it's possible in those cases to skip the locked check, I think that with a view to making the behavior of the node predictable and making its bookkeeping invisible to the outside world, it should be checked just at the beginning of the method as well.
For 2.1 I'd advise to keep it where it is now so as not to make a possibly breaking change.


Upload the website to prod

Description
This PR is essentially a no-op as far as actual, runtime changes. It adds a (missing) newline to the end of the .env.example file in the client package. This is done to trigger change-detection for the website CI/CD workflow so that the website deployment artifact gets pushed up to our prod environment.

PS- This is a follow-up to #1040


Start the work to bring in casemapper into goschtalt since it is real…

…ly needed all the time.

Codecov Report

Merging #45 (20d46ba) into main (370f97d) will decrease coverage by 0.01%.
The diff coverage is 99.18%.

:exclamation: Your organization is not using the GitHub App Integration. As a result you may experience degraded service beginning May 15th. Please install the Github App Integration for your organization. Read more.
@@            Coverage Diff             @@
##             main      #45      +/-   ##
==========================================
- Coverage   99.29%   99.29%   -0.01%
==========================================
  Files          31       32       +1
  Lines        2838     2961     +123
==========================================
+ Hits         2818     2940     +122
- Misses         14       15       +1
  Partials        6        6

Flag
Coverage Δ

unittests
99.29% <99.18%> (-0.01%)
:arrow_down:

Flags with carried forward coverage won't be shown. Click here to find out more.

Impacted Files
Coverage Δ

internal/casbab/casbab.go
99.18% <99.18%> (ø)


feat: Add assist for replacing turbofish with explicit type.

Converts ::<_> to an explicit type assignment.
let args = args.collect::<Vec<String>>();

->
let args: Vec<String> = args.collect();

Closes #10285


Kinesis Data Firehose service controller

I need an ability to define Kinesis Data Firehose delivery streams to be able to send containers logs over it to S3.
Looks like existing kinesis-controller doesn't support this.

@astryia yes... Kinesis Data Firehose is an entirely separate and different service from Kinesis :( We will need to generate a firehose-controller from the API definition for this new service.


[stable/fluent-bit] add securityContext and podSecurityContext variables

What this PR does / why we need it:
Add securityContext and podSecurityContext variables to enable privilege and access control settings for a Pod or Container.
For details please refer to https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
Which issue this PR fixes
(optional, in fixes #<issue number>(, fixes #<issue_number>, ...) format, will close that issue when PR gets merged)

fixes #

Special notes for your reviewer:
Checklist
[Place an '[x]' (no spaces) in all applicable fields. Please remove unrelated fields.]

[x] DCO signed
[x] Chart Version bumped
[x] Variables are documented in the README.md
[x] Title of the PR starts with chart name (e.g. [stable/chart])

/lgtm


Empty exported feature list

Basic information

My operating system: win10 pro 64bit
My MZmine version: 3.2.0

What happened

Please describe what happened and how it differs from what you expected to happen.
Please include all parameter values for the MZmine modules you used.
Please upload screenshots of any errors and your log/mzmine.log file.
Please upload an MZmine project file that demonstrates the problem you are reporting.
p_m.zip
Hello,

My name is Jian from Queen's University. I have created a feature list for my data, and I could visually confirm the peaks in mzmine. But if I use the export feature list for GNPS-feature based molecular network exported, csv and mgf files are always empty. I followed the step in the documentation. I wonder if anyone has seen such problem. Thank you very much.
Best Regards,
Jian

my guess is that the ms2 spectra are not assigned to your features. This can be done during the resolving step by selecting the respective parameter or at the end of the processing with the "Assign MS2 to feature" module.

Thank you so much. It worked.


[FLINK-27243][table] Support SHOW PARTITIONS statement for partitioned table

What is the purpose of the change
To make flink support SHOW PARTITION syntax
Brief change log

extend flink-sql-parser to convert it to SqlShowPartitions
convert SqlShowPartitions to ShowPartitionsOperation

Verifying this change
UT
Does this pull request potentially affect one of the following parts:

Dependencies (does it add or upgrade a dependency): (yes / no)
The public API, i.e., is any changed class annotated with @Public(Evolving): (yes / no)
The serializers: (yes / no / don't know)
The runtime per-record code paths (performance sensitive): (yes / no / don't know)
Anything that affects deployment or recovery: JobManager (and its components), Checkpointing, Kubernetes/Yarn, ZooKeeper: (yes / no / don't know)
The S3 file system connector: (yes / no / don't know)

Documentation

Does this pull request introduce a new feature? (yes / no)
If yes, how is the feature documented? (not applicable / docs / JavaDocs / not documented)

@ruanhang1993 Thanks for reviewing. Merging....


Add forms to in-progress table

@KiriHoy I know it's a bit annoying for smaller issues but it's always good practice to leave a comment explaining what's happening, what you did etc 🙂

🚢 it! Thanks @KiriHoy


[REF] Update link to environment variables TSV

See https://github.com/neurobagel/recipes/issues/12

For reviewer: to avoid merging with failing checks, ensure https://github.com/neurobagel/recipes/issues/14 is merged first

Checklist

[x] PR has an interpretable title with a prefix ([ENH], [FIX], [REF], [TST], [CI], [MNT], [INF]) (see https://neurobagel.org/contributing/pull_requests for more info)
[x] PR links to GitHub issue with mention Closes #XXXX
[x] Checks pass

Things are looking dire on mobile, will check with context on my machine later.


Wrong swap with token name displayed in token details screen

What happened:

What you expected to happen:
How to reproduce it (as minimally and precisely as possible):
Anything else we need to know?:

Acceptance Criteria: dTokens swap should be DUSD not DFI
Android:

[ ] Balances > dTSLA > Swap with DUSD > From dTSLA to DUSD
[ ] Balances > dGME > Swap with DUSD > From dGME to DUSD
[ ] Balances > dGOOGL > Swap with DUSD > From dGOOGL to DUSD
[ ] Balances > dBABA > Swap with DUSD > From dBABA to DUSD
[ ] Balances > dPLTR > Swap with DUSD > From dPLTR to DUSD
[ ] Balances > dAPPL > Swap with DUSD > From dAPPL to DUSD
[ ] Balances > dSPY > Swap with DUSD > From dSPY to DUSD
[ ] Balances > dQQQ > Swap with DUSD > From dQQQ to DUSD
[ ] Balances > dPDBC > Swap with DUSD > From dPDBC to DUSD
[ ] Balances > dVNQ > Swap with DUSD > From dVNQ to DUSD
[ ] Balances > dARKK > Swap with DUSD > From dARKK to DUSD
[ ] Balances > dGLD > Swap with DUSD > From dGLD to DUSD
[ ] Balances > dURTH > Swap with DUSD > From dURTH to DUSD
[ ] Balances > dTLT > Swap with DUSD > From dTLT to DUSD
[ ] Balances > dSLV > Swap with DUSD > From dSLV to DUSD


feat: Add auto-focus as a setting

          ok how about we just add a setting to enable autofocus and make it disabled by default? IMO this feature is hella nice so I don't want to see it removed.

Originally posted by @EricPedley in https://github.com/icssc/AntAlmanac/issues/786#issuecomment-1834552808
TL;DR Auto-focus should be a setting (off by default)
Within SettingsStore, create a new Zustand store to handle whether or not the user wants to have auto-focus on. Then, implement the UI in SettingsMenu.

Closing, not planned


Wrong Facebook Share URL is built

That's what's get built:
https://www.facebook.com/sharer/sharer.php?u=&url=http://google.com
and that should be built:
https://www.facebook.com/sharer/sharer.php?u=http://google.com

Thanks @subpixelch  ! I'm going to update this


wip: update to bevy 0.9

Currently comments out bevy_flycam.
Will update again once 0.9 releases.

I've updated this PR to use the released 0.9 and uncommented flycam: https://github.com/philpax/bevy_infinite_grid


just: 0.8.3 -> 0.8.4

Motivation for this change
@xrelkd

0.8.3 -> 0.8.4
use new installShellCompletion style

Structure before:
 result ⇒ /nix/store/lswqbqf9kzfvnkhk76kamz83pxm9pmfv-just-0.8.4
├──  bin
│  └──  just
└──  share
   ├──  bash-completion
   │  └──  completions
   │     └──  just.bash
   ├──  fish
   │  └──  vendor_completions.d
   │     └──  just.fish
   ├──  man
   │  └──  man1
   │     └──  just.1.gz
   └──  zsh
      └──  site-functions
         └──  _just

After:
 result ⇒ /nix/store/l0h01k0rfvn3fybnic1q6g779l63w2yk-just-0.8.4
├──  bin
│  └──  just
└──  share
   ├──  bash-completion
   │  └──  completions
   │     └──  just.bash
   ├──  fish
   │  └──  vendor_completions.d
   │     └──  just.fish
   ├──  man
   │  └──  man1
   │     └──  just.1.gz
   └──  zsh
      └──  site-functions
         └──  _just

Things done

[X] Tested using sandboxing (nix.useSandbox on NixOS, or option sandbox in nix.conf on non-NixOS linux)
Built on platform(s)

[X] NixOS (x86_64)
[ ] macOS
[ ] other Linux distributions

[ ] Tested via one or more NixOS test(s) if existing and applicable for the change (look inside nixos/tests)
[x] Tested compilation of all pkgs that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review wip"
[X] Tested execution of all binary files (usually in ./result/bin/)
[ ] Determined the impact on package closure size (by running nix path-info -S before and after)
[X] Ensured that relevant documentation is up to date
[X] Fits CONTRIBUTING.md.

Result of nixpkgs-review pr 112496 run on x86_64-linux 1

1 package built:

just

This is a semi-automatic executed nixpkgs-review with nixpkgs-review-checks extension. It is checked by a human on a best effort basis and does not build all packages (e.g. lumo, tensorflow or pytorch).
If you have any questions or problems please reach out to SuperSandro2000 on IRC.
Result of nixpkgs-review pr 112496 run on x86_64-darwin 1

1 package built:

just


Shield images are not found for packages with uppercase owners

Will be automatically fixed if this will be resolved in the normalize-package-data module
https://github.com/npm/normalize-package-data/issues/73

This has to be fixed https://github.com/npm/hosted-git-info/issues/16


Green "ANSWER" button has to be clicked several times to ANSWER an incoming call

Hi
An INCOMING call - and I have to click several times to ANSWER the call.

With which sip server are you using it ?
I am unable to make it work with Freepbx / Asterisk 13


support client secret

refs #1.
This PR is for supporting client secret.
The client_secret of Aws::CognitoSrp.new is optional argument.
And it keeps same behavior if client_secret is not specified.
require "aws-cognito-srp"

aws_srp = Aws::CognitoSrp.new(
  username:   "username",
  password:   "password",
  pool_id:    "pool-id",
  client_id:  "client-id",
  aws_client: Aws::CognitoIdentityProvider::Client.new(region: "aws-region"),
  client_secret: "client_secret" # this is optional
)

@pilaf
I added attr_reader for user_id_for_srp, and spec.
Pls review again.

@suketa Thank you! This looks good, so I merged your PR. I will release the new gem version (0.5.0) in a few minutes.

@pilaf Thank you!!


Failed to request message, please check your network.

Is your feature request related to a problem?
Background:

Using a Linux virtual machine, deploy the SQL Chat project locally and the project starts normally.
The correct Open AI Key value has been set.
In the http://xxx.xxx.xxx.xxx:3000/ The following error occurred during the conversation on the page:
Failed to request message, please check your network.
In the/sqlchat/src/utils/openai.ts file, the API endpoint (OPENAI-API-ENDPoint) information was checked,
The endpoint information can be accessed normally on the Windows local network.
But when accessing it on the virtual machine, the following error occurred:
`error - src/pages/api/chat.ts (107:26) @ fetch
error - fetch failed
105 |   const apiEndpoint = getApiEndpoint(req.headers.get("x-openai-endpoint") || openAIApiEndpoint);
106 |   const model = getModel(req.headers.get("x-openai-model") || "");

107 |   const remoteRes = await fetch(apiEndpoint, {
|                          ^
108 |     headers: headers,
109 |     method: "POST",
110 |     body: JSON.stringify({`

Describe the solution you'd like
1.Can the request proxy address for open AI be specified in the project?
How to do it so that when the project sends an Open AI request, it can go through the designated agent in the project.
2. If open AI request proxies cannot be set in the project, can virtual machine network proxies be used?
Additional context

You can set the API Endpoint by specifying OPENAI_API_ENDPOINT
https://github.com/sqlchat/sqlchat?tab=readme-ov-file#openai-related


The Ci_query_log don´t save operations logs in action UPDATE, DELETE, INSERT

Hi ozanmora
First congratulations on the creation of HOOK.
I implanted in my system this hook and it worked perfectly, but the actions of UPDATE, INSERT and DELETE are not recorded in the log file.
Is it something of a config in Codeigniter?
See u  ozanmora

Hello @denisVitonis ,
I noticed the same problem. I have no idea where exactly the reason. But I am thinking of updating this code. When I solve the issue, I will note here.
If you can find a solution to this issue, I would be glad if you can share it with me.
Thanks

Dear Ozan, I managed to solve it in another way, however using your hook.
First and I created a helper.
with the function
////////////CODE IN helper FILE***//////////////////////////
function log_queries_2($sql) {
$filepath = APPPATH . 'logs/Query-log-' . date('Y-m-d') . '.php';
$handle = fopen($filepath, "a+");
fwrite($handle, $sql." \n Execution Time: ".date("Y-m-d H:i:s")."\n\n");
fclose($handle);
}
//////////////**************************///////////////////
After this go to system/database/DB_driver.php and find function named "query" and put this below code on top inside the function.
It may not be the best of good practices but it works perfectly.
////////////CODE IN DB_driver.php  FILE***//////////////////////////
log_queries_2($sql);'
//////////////**************************///////////////////

Dear Ozan, I managed to solve it in another way, however using your hook.
First and I created a helper.
with the function
////////////CODE IN helper FILE***//////////////////////////
function log_queries_2($sql) {
$filepath = APPPATH . 'logs/Query-log-' . date('Y-m-d') . '.php';
$handle = fopen($filepath, "a+");
fwrite($handle, $sql." \n Execution Time: ".date("Y-m-d H:i:s")."\n\n");
fclose($handle);
}
//////////////**************************///////////////////
After this go to system/database/DB_driver.php and find function named "query" and put this below code on top inside the function.
It may not be the best of good practices but it works perfectly.
////////////CODE IN DB_driver.php FILE***//////////////////////////
log_queries_2($sql);'
//////////////**************************///////////////////

this solution is not the right approach. Because if you want to be able to update Codeigniter, you should never make changes under the system folder.
I have made some code fixes but this problem is still not resolved.
I'm still investigating this problem. If I can find a solution, I want to update it as soon as possible.

I solved this problem. Actually, this was not an error.
The code runs correctly and actually writes INSERT, UPDATE, DELETE queries to the log file.
However, this code only works on "post_controller" (Called immediately after your controller is fully executed). You can read the details of this from the link.
You are probably doing a redirect after doing INSERT, UPDATE, DELETE operations like me. The controller cannot be completed if it contains redirecting. No database queries can be written to the log file because the operation could not be completed.
P.S.: My English is not very good. I apologize for this.


Fixed UI bugs

Fixes:

Offline Screen on Preview Screen reconnection
Added Error handler in Preview Screen

Invalid PR.


HELP

[06 Oct 2023 12:23:53] [INFO   ] [set_game_config      ] Overwriting/creating game config
[06 Oct 2023 12:23:54] [INFO   ] [launch_loop          ] Attempting to Launch League
[06 Oct 2023 12:24:05] [DEBUG  ] [connect_rc           ] Initializing Riot Client session
[06 Oct 2023 12:24:05] [DEBUG  ] [connect_rc           ] Riot Client:21600:55653:N53PqOdv_YVTIsqBgUNtaA:https
[06 Oct 2023 12:24:05] [DEBUG  ] [connect_rc           ] Basic cmlvdDpONTNQcU9kdl9ZVlRJc3FCZ1VOdGFB
[06 Oct 2023 12:24:05] [DEBUG  ] [request              ] GET https://<IP_ADDRESS>:55653/rso-auth/v1/authorization/access-token {}
[06 Oct 2023 12:24:05] [DEBUG  ] [_new_conn            ] Starting new HTTPS connection (1): <IP_ADDRESS>:55653
[06 Oct 2023 12:24:05] [DEBUG  ] [_make_request        ] https://<IP_ADDRESS>:55653 "GET /rso-auth/v1/authorization/access-token HTTP/1.1" 404 186
[06 Oct 2023 12:24:05] [INFO   ] [login                ] Logging into Riot Client
[06 Oct 2023 12:24:05] [DEBUG  ] [request              ] POST https://<IP_ADDRESS>:55653/rso-auth/v2/authorizations {'clientId': 'riot-client', 'trustLevels': ['always_trusted']}
[06 Oct 2023 12:24:05] [DEBUG  ] [_make_request        ] https://<IP_ADDRESS>:55653 "POST /rso-auth/v2/authorizations HTTP/1.1" 200 149
[06 Oct 2023 12:24:05] [DEBUG  ] [request              ] PUT https://<IP_ADDRESS>:55653/rso-auth/v1/session/credentials
[06 Oct 2023 12:24:06] [DEBUG  ] [_make_request        ] https://<IP_ADDRESS>:55653 "PUT /rso-auth/v1/session/credentials HTTP/1.1" 201 256
[06 Oct 2023 12:24:06] [ERROR  ] [account_loop         ] Invalid username or password
[06 Oct 2023 12:24:06] [ERROR  ] [account_loop         ] None
Username and Password are correct but still not working

what does your account.py file look like?


fix spelling

It seems that you have misspelled something in your README and I have attempted to fix it.

rude


RMSNorm Implementation Question

Here is the code in the denoising_diffusion_pytorch_1d.py
class RMSNorm(Module):
    def __init__(self, dim):
        super().__init__()
        self.g = nn.Parameter(torch.ones(1, dim, 1))

    def forward(self, x):
        return F.normalize(x, dim = 1) * self.g * (x.shape[1] ** 0.5)

I am wondering if it should instead be x.shape[1] ** -0.5 given the equation is

Also, I am curious why this normalization is applied at dim=1. If the shape of x is three-dimensional (same as self.g), what about the last dimension?
Thanks!

I realized that I overlooked the entire equation where sqrt(1/n) is in the denominator:

Sorry about this. I will close this issue.


add support for array of Struct and array of NestedStruct

Codecov Report
Attention: Patch coverage is 46.75325% with 82 lines in your changes missing coverage. Please review.

Project coverage is 65.81%. Comparing base (46e0682) to head (8f5518c).

Files
Patch %
Lines

...ain/test/return_types/types/ReturnTypesContract.py
44.73%
21 Missing :warning:

pypechain/test/structs/types/StructsAContract.py
38.46%
16 Missing :warning:

pypechain/utilities/abi.py
25.00%
9 Missing :warning:

pypechain/test/deployment/types/utilities.py
44.44%
5 Missing :warning:

pypechain/test/errors/types/utilities.py
44.44%
5 Missing :warning:

pypechain/test/events/types/utilities.py
44.44%
5 Missing :warning:

pypechain/test/overloading/types/utilities.py
44.44%
5 Missing :warning:

pypechain/test/return_types/types/utilities.py
44.44%
5 Missing :warning:

pypechain/test/structs/types/utilities.py
44.44%
5 Missing :warning:

pypechain/utilities/types.py
0.00%
4 Missing :warning:

... and 1 more

Additional details and impacted files
@@            Coverage Diff             @@
##             main     #111      +/-   ##
==========================================
- Coverage   67.34%   65.81%   -1.54%
==========================================
  Files          49       49
  Lines        2346     2460     +114
==========================================
+ Hits         1580     1619      +39
- Misses        766      841      +75

Flag
Coverage Δ

unittests
65.81% <46.75%> (-1.54%)
:arrow_down:

Flags with carried forward coverage won't be shown. Click here to find out more.

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


instancetype: Refactor and fix inferFromVolume functional tests

What this PR does / why we need it:
As discovered in #9805 these functional tests have actually not been
running for some time now. The ultimate goal of this refactor is to
allow these tests to run once again under the default local
storageclass provided by kubevirtci.
The following changes were made to the tests to accommodate this:

Remove the use of Ordered
Remove the dependency on a RWO block StorageClass
Validate the VirtualMachine prior to any attempt to start
Use a DataVolume to orchestrate the creation of the source PVC
Use of the ForceBinding annotation to ensure the PVC is bound
Use libdv to build DataVolume objects
Add TODOs for possible libdv and other follow ups (posted as a draft https://github.com/kubevirt/kubevirt/pull/9885 to avoid blocking this PR)

Which issue(s) this PR fixes (optional, in fixes #<issue number>(, fixes #<issue_number>, ...) format, will close the issue(s) when PR gets merged):
Fixes #9805
Special notes for your reviewer:
Depends on https://github.com/kubevirt/kubevirt/pull/9810
Release note:

NONE

/test pull-kubevirt-e2e-k8s-1.25-sig-compute

/area instancetype

/test pull-kubevirt-e2e-k8s-1.27-sig-compute

/retest-required

/retest-required

/retest-required

/cherry-pick release-1.0

/retest-required

/retest-required

Thanks a lot @lyarwood!
/approve


Add option to expose secrets only to protected branches

Clear and concise description of the problem
I want to prevent the collaborators with write permission to the repository from accessing specific secrets.
In Gitea push access to the protected branches can be limited to the whitelisted users and in Gitlab it can be limited to the maintainers (not developers)
Suggested solution
a checkbox at settings#secrets named "Available only for the protected branches" (or something similar) which is unchecked by default
Alternative
As an alternative I tried limiting the secret to a specific image without a shell which runs as a service. This service had a custom entry point which extracted the secret from environment and passed it as a cli flag to the tool which uses the secret. This solution is very involved and adds lots of extra complexity.
Additional context
This feature already exists in Gitlab CI. See Protect variable option in https://docs.gitlab.com/ee/ci/variables/#add-a-cicd-variable-to-a-project
Validations

[X] Read the Contributing Guidelines and it was irrelevant for opening issues!
[X] Read the docs.
[X] Check that there isn't already an issue that request the same feature to avoid creating a duplicate.

hmm we would either do an api call as we do for changed files or cache it in advance ...
... a nice idea just two thoughts: is it too specific? can it be done by a simple plugin?


I'm Facing this issue

Is it immediately after you run the script, or had there been questions before this error message?

Was this the first attempt you run the script?

Yes !
There were no questions. I followed the exact steps that you've described and everything worked fine. I changed my directory to ticketit and then ran the command " php artisan ticketit:install" and i got this error.

Hmm. What's in .env? (Be careful not to post sensitive info)

I'm sorry but i couldn't figure that out

cat .env

Thank you very much.

there were some keys as well

Try
rm .env
cp .env.example .env
php artisan key:generate
php artisan ticketit:install

I've again received the same error after php artisan key:generate

In config/app.php is Kordy\Ticketit\TicketitServiceProvider::class commented out? (Like here)

It worked!
Thanks a ton.
But now i'm getting this

Yeah, you should set up a mysql database first, with  username and password and enter those here. O if you dont want  to mess with that,  choose sqlite, which will create a single file

Thank you so much. I'm going with sqlite now.
I appreciate your effort :)


Downgrade Elixir version to 1.12

@TheFirstAvenger can we make this change? Beacon is using 1.12 following Phoenix LiveView:
https://github.com/BeaconCMS/beacon/blob/main/mix.exs#L10 https://github.com/phoenixframework/phoenix_live_view/blob/main/mix.exs#L10

@leandrocp thanks for prompting this. I just merged a PR into main that both adds CI to the repo and has this same reduction in requirements in it.

Thanks!


How to build a chart like this?

I used Distribution - Bar Chart, but it only support me to build 2 Histogram

like this

And how to sort by the date? it only sort by summary

Notice: this issue has been closed because it has been inactive for 530 days. Feel free to comment and request for this issue to be reopened.


ARROW-809: [C++] Do not write excess bytes in IPC writer after slicing arrays

cc @itaiin

This is complete

The code lgtm.
About dense unions - since its problematic to slice without scanning to find the last offset of each type, its possible to use a best-effort approach by slicing the children with a maximum value.
It will still keep redundant values, but in some cases can still save a lot of space.
What do you think?

Rebased. @itaiin I'll add a change to make them no longer than the parent, which will definitely save space in some cases

Added the test, will merge once build runs

Green MSVC build: https://ci.appveyor.com/project/wesm/arrow/build/1.0.250


eosio main-net After the synchronization is complete, an error is reported !!!version mainnet-<IP_ADDRESS>

5852, conf: 0, latency: 1338 ms]
217532ms thread-0   producer_plugin.cpp:290       on_incoming_block    ] Received block ccd98d7b9bfd05b2... #475854 @ 2018-06-13T05:03:36.000 signed by genesisblock [trxs: 0, lib: 475853, conf: 0, latency: 1532 ms]
217535ms thread-0   producer_plugin.cpp:290       on_incoming_block    ] Received block 7a3eba4e1a755edd... #475855 @ 2018-06-13T05:03:36.500 signed by genesisblock [trxs: 0, lib: 475854, conf: 0, latency: 1035 ms]
218231ms thread-0   producer_plugin.cpp:290       on_incoming_block    ] Received block 563ab98123a0f45c... #475856 @ 2018-06-13T05:03:37.000 signed by genesisblock [trxs: 0, lib: 475855, conf: 0, latency: 1231 ms]
218238ms thread-0   producer_plugin.cpp:290       on_incoming_block    ] Received block 566b7ae6fab1ff0f... #475857 @ 2018-06-13T05:03:37.500 signed by genesisblock [trxs: 1, lib: 475856, conf: 0, latency: 738 ms]
218585ms thread-0   net_plugin.cpp:1507           verify_catchup       ] got a catch_up notice while in in sync, fork head num = 475858 target LIB = 475857 next_expected = 475858
218932ms thread-0   controller.cpp:855            push_block           ] 10 assert_exception: Assert Exception
prior != by_id_idx.end(): unlinkable block
{"id":"000742d346b36b4d991458db9c5f16721342d6645c58f95ad183019bf7e2d3be","previous":"000742d2da77811eea278e802d2b0de2a220349e64654baa78f0bdee0a3ccf70"}
thread-0  fork_database.cpp:152 add
218933ms thread-0   producer_plugin.cpp:274       on_incoming_block    ] 10 assert_exception: Assert Exception
prior != by_id_idx.end(): unlinkable block
{"id":"000742d346b36b4d991458db9c5f16721342d6645c58f95ad183019bf7e2d3be","previous":"000742d2da77811eea278e802d2b0de2a220349e64654baa78f0bdee0a3ccf70"}
thread-0  fork_database.cpp:152 add
rethrow
{}
thread-0  controller.cpp:855 push_block
219213ms thread-0   controller.cpp:855            push_block           ] 10 assert_exception: Assert Exception
prior != by_id_idx.end(): unlinkable block
{"id":"000742d42c45bd0fe20a8db72d2274ffa07e26ac7c01b0e8efa5995145cfe898","previous":"000742d346b36b4d991458db9c5f16721342d6645c58f95ad183019bf7e2d3be"}
thread-0  fork_database.cpp:152 add
219214ms thread-0   producer_plugin.cpp:274       on_incoming_block    ] 10 assert_exception: Assert Exception
prior != by_id_idx.end(): unlinkable block
{"id":"000742d42c45bd0fe20a8db72d2274ffa07e26ac7c01b0e8efa5995145cfe898","previous":"000742d346b36b4d991458db9c5f16721342d6645c58f95ad183019bf7e2d3be"}
thread-0  fork_database.cpp:152 add
rethrow
{}
thread-0  controller.cpp:855 push_block
219713ms thread-0   controller.cpp:855            push_block           ] 10 assert_exception: Assert Exception
prior != by_id_idx.end(): unlinkable block
{"id":"000742d55f251cd172e33755ab1fee9eb8b2c3e0c5c64c83e4b1f50963f652d4","previous":"000742d42c45bd0fe20a8db72d2274ffa07e26ac7c01b0e8efa5995145cfe898"}
thread-0  fork_database.cpp:152 add
219714ms thread-0   producer_plugin.cpp:274       on_incoming_block    ] 10 assert_exception: Assert Exception
prior != by_id_idx.end(): unlinkable block
{"id":"000742d55f251cd172e33755ab1fee9eb8b2c3e0c5c64c83e4b1f50963f652d4","previous":"000742d42c45bd0fe20a8db72d2274ffa07e26ac7c01b0e8efa5995145cfe898"}
thread-0  fork_database.cpp:152 add
rethrow
{}
thread-0  controller.cpp:855 push_block
220213ms thread-0   controller.cpp:855            push_block           ] 10 assert_exception: Assert Exception
prior != by_id_idx.end(): unlinkable block
{"id":"000742d67bb97a79cee6c719c56d97fbe16ac54fbec20208c76a8c5bbd94f10a","previous":"000742d55f251cd172e33755ab1fee9eb8b2c3e0c5c64c83e4b1f50963f652d4"}
thread-0  fork_database.cpp:152 add
220214ms thread-0   producer_plugin.cpp:274       on_incoming_block    ] 10 assert_exception: Assert Exception
prior != by_id_idx.end(): unlinkable block
{"id":"000742d67bb97a79cee6c719c56d97fbe16ac54fbec20208c76a8c5bbd94f10a","previous":"000742d55f251cd172e33755ab1fee9eb8b2c3e0c5c64c83e4b1f50963f652d4"}
thread-0  fork_database.cpp:152 add
rethrow
{}
thread-0  controller.cpp:855 push_block
220713ms thread-0   controller.cpp:855            push_block           ] 10 assert_exception: Assert Exception
prior != by_id_idx.end(): unlinkable block
{"id":"000742d73f33c078db133ca344c5c11eba925ceff7f10d85edacbfbb3759b3ac","previous":"000742d67bb97a79cee6c719c56d97fbe16ac54fbec20208c76a8c5bbd94f10a"}
thread-0  fork_database.cpp:152 add
220713ms thread-0   producer_plugin.cpp:274       on_incoming_block    ] 10 assert_exception: Assert Exception
prior != by_id_idx.end(): unlinkable block
{"id":"000742d73f33c078db133ca344c5c11eba925ceff7f10d85edacbfbb3759b3ac","previous":"000742d67bb97a79cee6c719c56d97fbe16ac54fbec20208c76a8c5bbd94f10a"}
thread-0  fork_database.cpp:152 add
rethrow
{}
thread-0  controller.cpp:855 push_block
221213ms thread-0   controller.cpp:855            push_block           ] 10 assert_exception: Assert Exception
prior != by_id_idx.end(): unlinkable block
{"id":"000742d8a884b339d7b9d5218915f5592b49830cfe5973e65d8bc5c6ccf72d6a","previous":"000742d73f33c078db133ca344c5c11eba925ceff7f10d85edacbfbb3759b3ac"}
thread-0  fork_database.cpp:152 add
221214ms thread-0   producer_plugin.cpp:274       on_incoming_block    ] 10 assert_exception: Assert Exception
prior != by_id_idx.end(): unlinkable block
{"id":"000742d8a884b339d7b9d5218915f5592b49830cfe5973e65d8bc5c6ccf72d6a","previous":"000742d73f33c078db133ca344c5c11eba925ceff7f10d85edacbfbb3759b3ac"}
thread-0  fork_database.cpp:152 add
rethrow
{}
thread-0  controller.cpp:855 push_block

I met the same issue yesterday. I try restart  nodeosd with "--replay-blockchain". After waiting a long time (about twenty mins). It works again without these error logs. But I don't figure out the reason cause it.

I have somewhat similar problem. After downloading all blocks, I began getting many new invalid blocks signed by 'genesisblock'.

It seems like you are connected to a block producer that is forking. Do you still have this issue?

yeah starting the nodeos with --replay-blockchain solved the problem for me. but didnt really understand how it solved the sync problem ?


chore: reorganise reference docs storage

Explanation
Reorganise reference docs storage.

/cherry-pick release-0.2


Realm + ObjectMapper

I am getting data from my server. The response is:
{"languages":[{"language":"en","disabled":false}]}
When I do the request the code suddenly throws EXC_BAD_INSTRUCTION and it gets stuck in the error. If I remove inheritance Object from Language.swift it works ok
LanguageResponse.swift
import ObjectMapper

class LanguageResponse: Mappable {

    var languages: [Language]?

    required init?(_ map: Map){
    }

    override func mapping(map: Map) {
        super.mapping(map)
        languages <- map["languages"]
    }

}

Language.swift
import UIKit
import RealmSwift
import ObjectMapper

class Language: Object, Mappable {

    dynamic var language: String = ""

    override static func primaryKey() -> String? {
        return "language"
    }

    required convenience init?(_ map: Map) {
        self.init()
    }

    func mapping(map: Map) {
        language <- map["language"]
    }

}

I'm not sure exactly what is going on but I don't think this should compile as is.
LanguageResponse has no super class so the mapping function shouldn't have a call to super in it and should not be mark as override. I've just tested this out with my suggested change and everything seems to work fine

Sorry, I put Realm instead of RealmSwift in my Pod file

No problem


removed LED from devpins

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


Depth Accuracy of D435/D435i under varying inclination angles (tilt camera).

I have read a lot of docs from the forum discussed about the depth accuracy/precision of D435/D435i. It is clear that the accuracy is correlated to the distance between target and camera.
Such measurement are often performed at a flat wall with camera perpendicular point to the wall. However, I am quite interesting to understand what is the depth accuracy when there is an inclination angle between the camera and the wall (i.e. camera angle is title, not perpendicular anymore).
I can see the accuracy reduction in my experimental test. However, I am not sure if such accuracy degradation is only affected by the distance difference between the pixels (the pixel near or far from the camera) or the camera title angle also play a role (e.g. lens distortion). If yes, how much does it affects the results?
I see many tests, such as human tracking or drone mapping, mounted the camera with a tilt angle to the ground. I believe better understanding such scenery can help those applications. I put the discussion here because I haven't not find any document provide a full discussion about such parameter. Any comment is really appreciated.

Section 14a of Intel's camera tuning guide states that in scenes where there Is a repetitive structure such as a grid or fence, tilting the camera up to 20 degrees from the horizontal may be beneficial.
https://www.intel.co.uk/content/www/uk/en/support/articles/000027833/emerging-technologies/intel-realsense-technology.html
In general though, my understanding is that straight-ahead or straight-vertical (e.g pointing 90 degrees downwards) is the optimal orientation.
I recall a case where a RealSense user tilted the camera between 26 and 40 degrees from the straight ahead and experienced decreased accuracy when doing so.
https://github.com/IntelRealSense/librealsense/issues/2723#issuecomment-499153021

@MartyG-RealSense Thanks for the reply. I agree the vertical to target is the best setup. However, for our usage, RS camera is applied in a small pipe/tunnel. The minimal sensing distance of realsense make it difficult points directly to the tunnel's inner surface. Thus, camera with tilt angle is selected for the current setup. However, we observe ghost effects at pixels close to the boundary of camera FOV.
In the first document, it seems that the 20 degree tilt angle is to avoid the repetitive features (like use affine transformation to minimize those repetitive features in the left and right images I guess).
The human tracking case (#2723) is very similar as our application scenery, the near points have smaller error than the further points. This can be (1) the distance of those near points are closer to the camera (so has smaller RMS error); (2) the inclination angle of the near points are smaller (if camera points downward to the ground is 0 degree ) than the further points; (3) the effect of both (1) and (2).
Currently we assume its like (3) but the RMS error is dominated by (1). This make the setup a little bit simple. However, having the clearer understanding would help us the find the optimal setup for our application.
Thanks.

If by "minimal sensing distance" you mean the minimum distance of objects from the camera before the image starts to break up if you get any closer: you can reduce the minimum distance further by increasing the "Disparity Shift" setting.  This has the effect of reducing minimum distance (MinZ), though also decreasing maximum observable distance (MaxZ).
A cruder way of reducing minimum distance is to use a lower resolution, though this has an impact on accuracy.
My understanding is that there is a practical limit of around 20 cm from an object, below which the left and right imagers may start getting confused.
RMS error starts off very small at the camera lens and increases linearly over distance.  The D435 has around twice the RMS error over distance of the D415 model, though both models have similar error at close range.  If minimising the minimum sensing distance is important to you then the D435 is a better choice though.
You may be interested in an article on construction inspection with RealSense that was published on the RealSense blog recently, and an associated paper on using RealSense D435 for  inspection of concrete structures.
https://www.intelrealsense.com/the-future-of-construction/
https://rd.springer.com/chapter/10.1007/978-3-030-17798-0_49

Agreed. I believe it is all about the parameter tunning (disparity shift, depth units, resolution, exposure,...), and there are trade-offs between accuracy and depth range.
Thank you for the kindly help.

You're very welcome.   Thanks for the update.   Good luck!   :)


about you project episode_2/TVDemoApp

First,thanks for sharing this codes.
I found a little bugs.
setOnItemSelectedListener(getDefaultItemSelectedListener());
A quick look at the HeadersFragment source code revealed that the method has been removed and it has been replaced by setOnHeaderViewSelectedListener(OnHeaderViewSelectedListener listener).
But I can't set a OnHeaderViewSelectedListener. It can't be accessed from outside package.
I try your method like this
VerticalGridView grid = getActivity().getVerticalGridView(this);
grid.setOnChildSelectedListener(new OnChildSelectedListener() {
@Override
public void onChildSelected(ViewGroup viewGroup, View view, int i, long l) {
// we can now update the content accordingly!
}
});
but it don't work.

Hi @BulletTrain ,
episode 2 won't work if you use a newer version of Leanback (22 and onwards). It would be better to start from episode 4.
I'm planning to write a library that offers this CustomBrowseFragment, this will hopefully remove the need to create a project starting from what I've written here.

@dextorer Thanks.


CustomModule directory

Description
Mythril already has a few built in detection modules, but ofcourse we could also run custom detection modules.
One option could be to auto import modules in ~/.mythril/
Todo:

[ ] Define proposal what the best user experience would be for this
[ ] Setup requirements

I'm not sure if this is the place to address this issue, but MythrilAnalyzer's constructor has a parameter to specify a "custom_modules_directory" but it's never actually used :/

@VeraBE This item is a bit stale 😅 . In the past year we've actually implemented support for mythril plugins.
With plugins you can put your detection module(s) (or laser extension, etc..) in a python package which will be auto discovered & loaded (if appropriate) by mythril.
I've a blogpost in the pipeline to show how this works.

"custom_modules_directory" but it's never actually used :/
This is true though, some technical debt left to clean up 😅


[nmstate-1.4] test: add test for bond port revive

Add test case to simulate the import use case in
https://bugzilla.redhat.com/show_bug.cgi?id=2207690
The IP on VLAN of bond should be assigned back when bond port link
revived.

Don't want to include this test case to 1.4 yet, will do after NM shipped their fixes to branches we use for testing.


feat: function to generate monotonic ULIDs

This commit adds gen_monotonic_ulid() function, which generates ULIDs with monotonicity as described in
spec. To achive this it uses PostgreSQL's shared memory and LWLock to store last generated ULID.
Pros:
1. Monotonic ULIDs are better for indexing, as they are sorted by
   default.

2. Monotonic ULIDs slightly faster than `gen_ulid()` when generating
   lots of ULIDs within one millisecond. Because, in this case,
   there is no need to generate random component of ULID. Instead it
   is just incremented.

Cons:
1. Previously generated ULID is saved in shmem and accessed via LWLock.
   i.e. it is exclusive for function invocation within database.
   Theoretically this can lead to slowdowns.

   ...But, in practice (at least in my testing) `gen_monotonic_ulid()`
   is slightly faster than `gen_ulid()` (see Pros.2).

2. Extensions that use shared memory must be loaded via
   postgresql.conf's shared_preload_libraries configuration setting.

   ...But, it only affects `gen_monotonic_ulid()` function. Other
   functions of this extension will work normally even without this
   config.

3. Monotonic ULIDs may overflow and throw an error.

   ...But, chances are negligible.

Tests:
GENERATION
ulid=# EXPLAIN ANALYSE SELECT gen_ulid() FROM generate_series(1, 1000000);
                                                            QUERY PLAN
-----------------------------------------------------------------------------------------------------------------------------------
 Function Scan on generate_series  (cost=0.00..12500.00 rows=1000000 width=32) (actual time=47.207..2908.978 rows=1000000 loops=1)
 Planning Time: 0.035 ms
 Execution Time: 4053.482 ms
(3 rows)

ulid=# EXPLAIN ANALYSE SELECT gen_monotonic_ulid() FROM generate_series(1, 1000000);
                                                            QUERY PLAN
-----------------------------------------------------------------------------------------------------------------------------------
 Function Scan on generate_series  (cost=0.00..12500.00 rows=1000000 width=32) (actual time=46.479..2586.654 rows=1000000 loops=1)
 Planning Time: 0.037 ms
 Execution Time: 3693.901 ms
(3 rows)

INSERTION
First, gen_ulid()
ulid=# CREATE TABLE users (
  id ulid NOT NULL DEFAULT gen_ulid() PRIMARY KEY,
  name text NOT NULL
);
CREATE TABLE

Next queries launched in parrallel (as much as possible) from different clients (psql)
ulid=# -- Client 1
ulid=# EXPLAIN ANALYZE INSERT INTO users (name) SELECT 'Client 1' FROM generate_series(1, 1000000);
                                                               QUERY PLAN

-----------------------------------------------------------------------------------------------------------------------------------------
 Insert on users  (cost=0.00..12500.00 rows=0 width=0) (actual time=8418.257..8418.261 rows=0 loops=1)
   ->  Function Scan on generate_series  (cost=0.00..12500.00 rows=1000000 width=64) (actual time=99.804..3013.333 rows=1000000 loops=1)
 Planning Time: 0.066 ms
 Execution Time: 8419.571 ms
(4 rows)

ulid=# -- Client 2
ulid=# EXPLAIN ANALYZE INSERT INTO users (name) SELECT 'Client 2' FROM generate_series(1, 1000000);
                                                               QUERY PLAN

-----------------------------------------------------------------------------------------------------------------------------------------
 Insert on users  (cost=0.00..12500.00 rows=0 width=0) (actual time=8359.558..8359.561 rows=0 loops=1)
   ->  Function Scan on generate_series  (cost=0.00..12500.00 rows=1000000 width=64) (actual time=64.449..2976.754 rows=1000000 loops=1)
 Planning Time: 0.090 ms
 Execution Time: 8360.840 ms
(4 rows)

Snippet from table
ulid=# SELECT id, name, id::timestamp as ts FROM users WHERE id::timestamp = '2023-06-14 18:02:15.089'::timestamp LIMIT 10;
             id             |   name   |           ts
----------------------------+----------+-------------------------
 01H2XMJYSH02BV5G5NNXF2F93Z | Client 2 | 2023-06-14 18:02:15.089
 01H2XMJYSH0HAQ63M6275PTQTP | Client 2 | 2023-06-14 18:02:15.089
 01H2XMJYSH13K8J4RGWEM0TMV3 | Client 2 | 2023-06-14 18:02:15.089
 01H2XMJYSH174Q04GFZNJKS3AP | Client 2 | 2023-06-14 18:02:15.089
 01H2XMJYSH19PWNYC4X7Q53J4B | Client 1 | 2023-06-14 18:02:15.089
 01H2XMJYSH1WM0NH5W7QHSEST3 | Client 2 | 2023-06-14 18:02:15.089
 01H2XMJYSH27VYJY40HWWA4BAR | Client 2 | 2023-06-14 18:02:15.089
 01H2XMJYSH2911P1Y9Y7N55RJM | Client 2 | 2023-06-14 18:02:15.089
 01H2XMJYSH2DER9A5QBCACBGEQ | Client 1 | 2023-06-14 18:02:15.089
 01H2XMJYSH2F51ZERVPSD52D6Z | Client 2 | 2023-06-14 18:02:15.089
(10 rows)

Now, gen_monotonic_ulid()
ulid=# CREATE TABLE users (
  id ulid NOT NULL DEFAULT gen_monotonic_ulid() PRIMARY KEY,
  name text NOT NULL
);
CREATE TABLE

Next queries launched in parrallel (as much as possible) from different clients (psql)
ulid=# -- Client 1
ulid=# EXPLAIN ANALYZE INSERT INTO users (name) SELECT 'Client 1' FROM generate_series(1, 1000000);
                                                               QUERY PLAN
-----------------------------------------------------------------------------------------------------------------------------------------
 Insert on users  (cost=0.00..12500.00 rows=0 width=0) (actual time=6534.466..6534.471 rows=0 loops=1)
   ->  Function Scan on generate_series  (cost=0.00..12500.00 rows=1000000 width=64) (actual time=77.349..2778.529 rows=1000000 loops=1)
 Planning Time: 0.063 ms
 Execution Time: 6535.592 ms
(4 rows)

ulid=# -- Client 2
ulid=# EXPLAIN ANALYZE INSERT INTO users (name) SELECT 'Client 2' FROM generate_series(1, 1000000);
                                                               QUERY PLAN
-----------------------------------------------------------------------------------------------------------------------------------------
 Insert on users  (cost=0.00..12500.00 rows=0 width=0) (actual time=6568.836..6568.841 rows=0 loops=1)
   ->  Function Scan on generate_series  (cost=0.00..12500.00 rows=1000000 width=64) (actual time=53.712..2757.347 rows=1000000 loops=1)
 Planning Time: 0.058 ms
 Execution Time: 6570.180 ms
(4 rows)

Snippet from table
oml=# SELECT id, name, id::timestamp as ts FROM users WHERE id::timestamp = '2023-06-14 18:26:52.719'::timestamp LIMIT 10;
             id             |   name   |           ts
----------------------------+----------+-------------------------
 01H2XP01SFR6QVRDC7X4Q562ZV | Client 1 | 2023-06-14 18:26:52.719
 01H2XP01SFR6QVRDC7X4Q562ZW | Client 2 | 2023-06-14 18:26:52.719
 01H2XP01SFR6QVRDC7X4Q562ZX | Client 1 | 2023-06-14 18:26:52.719
 01H2XP01SFR6QVRDC7X4Q562ZY | Client 2 | 2023-06-14 18:26:52.719
 01H2XP01SFR6QVRDC7X4Q562ZZ | Client 1 | 2023-06-14 18:26:52.719
 01H2XP01SFR6QVRDC7X4Q56300 | Client 2 | 2023-06-14 18:26:52.719
 01H2XP01SFR6QVRDC7X4Q56301 | Client 1 | 2023-06-14 18:26:52.719
 01H2XP01SFR6QVRDC7X4Q56302 | Client 2 | 2023-06-14 18:26:52.719
 01H2XP01SFR6QVRDC7X4Q56303 | Client 1 | 2023-06-14 18:26:52.719
 01H2XP01SFR6QVRDC7X4Q56304 | Client 2 | 2023-06-14 18:26:52.719
(10 rows)

I don't mind if you run all of them on your machines and override those numbers. As long as the performance improvement is the same on the existing ones. I will be worried if they are not reproducible.

I don't mind if you run all of them on your machines and override those numbers. As long as the performance improvement is the same on the existing ones. I will be worried if they are not reproducible.

Sadly, on my setup I cannot confirm the numbers or correlations, at least.
Generate:

ulid=# EXPLAIN ANALYSE SELECT gen_random_uuid() FROM generate_series(1, 1000000);
                                                            QUERY PLAN
-----------------------------------------------------------------------------------------------------------------------------------
 Function Scan on generate_series  (cost=0.00..12500.00 rows=1000000 width=16) (actual time=45.871..2064.064 rows=1000000 loops=1)
 Planning Time: 0.049 ms
 Execution Time: 3215.753 ms
(3 rows)

ulid=# EXPLAIN ANALYSE SELECT uuid_generate_v7() FROM generate_series(1, 1000000);
                                                            QUERY PLAN
-----------------------------------------------------------------------------------------------------------------------------------
 Function Scan on generate_series  (cost=0.00..12500.00 rows=1000000 width=16) (actual time=45.686..3199.047 rows=1000000 loops=1)
 Planning Time: 0.035 ms
 Execution Time: 4339.978 ms
(3 rows)

ulid=#  EXPLAIN ANALYSE SELECT gen_ulid() FROM generate_series(1, 1000000);
                                                            QUERY PLAN
-----------------------------------------------------------------------------------------------------------------------------------
 Function Scan on generate_series  (cost=0.00..12500.00 rows=1000000 width=32) (actual time=45.362..2901.578 rows=1000000 loops=1)
 Planning Time: 0.054 ms
 Execution Time: 4043.564 ms
(3 rows)

ulid=# EXPLAIN ANALYSE SELECT gen_monotonic_ulid() FROM generate_series(1, 1000000);
                                                            QUERY PLAN
-----------------------------------------------------------------------------------------------------------------------------------
 Function Scan on generate_series  (cost=0.00..12500.00 rows=1000000 width=32) (actual time=45.602..2593.468 rows=1000000 loops=1)
 Planning Time: 0.034 ms
 Execution Time: 3696.327 ms
(3 rows)

Insert:

ulid=# EXPLAIN ANALYSE INSERT INTO uuid_keys(id) SELECT gen_random_uuid() FROM generate_series(1, 1000000);
                                                               QUERY PLAN
-----------------------------------------------------------------------------------------------------------------------------------------
 Insert on uuid_keys  (cost=0.00..22500.00 rows=0 width=0) (actual time=5935.442..5935.447 rows=0 loops=1)
   ->  Function Scan on generate_series  (cost=0.00..12500.00 rows=1000000 width=16) (actual time=60.207..2173.441 rows=1000000 loops=1)
 Planning Time: 0.091 ms
 Execution Time: 5936.721 ms
(4 rows)

ulid=# EXPLAIN ANALYSE INSERT INTO uuid7_keys(id) SELECT uuid_generate_v7() FROM generate_series(1, 1000000);
                                                               QUERY PLAN
-----------------------------------------------------------------------------------------------------------------------------------------
 Insert on uuid7_keys  (cost=0.00..22500.00 rows=0 width=0) (actual time=5928.696..5928.701 rows=0 loops=1)
   ->  Function Scan on generate_series  (cost=0.00..12500.00 rows=1000000 width=16) (actual time=48.871..3297.297 rows=1000000 loops=1)
 Planning Time: 0.074 ms
 Execution Time: 5929.864 ms
(4 rows)

ulid=# EXPLAIN ANALYSE INSERT INTO ulid_keys(id) SELECT gen_ulid() FROM generate_series(1, 1000000);
                                                               QUERY PLAN
-----------------------------------------------------------------------------------------------------------------------------------------
 Insert on ulid_keys  (cost=0.00..22500.00 rows=0 width=0) (actual time=7372.736..7372.740 rows=0 loops=1)
   ->  Function Scan on generate_series  (cost=0.00..12500.00 rows=1000000 width=32) (actual time=54.747..2973.534 rows=1000000 loops=1)
 Planning Time: 0.096 ms
 Execution Time: 7373.956 ms
(4 rows)

ulid=# EXPLAIN ANALYSE INSERT INTO mono_ulid_keys(id) SELECT gen_monotonic_ulid() FROM generate_series(1, 1000000);
                                                               QUERY PLAN
-----------------------------------------------------------------------------------------------------------------------------------------
 Insert on mono_ulid_keys  (cost=0.00..22500.00 rows=0 width=0) (actual time=6533.530..6533.534 rows=0 loops=1)
   ->  Function Scan on generate_series  (cost=0.00..12500.00 rows=1000000 width=32) (actual time=45.537..2658.244 rows=1000000 loops=1)
 Planning Time: 0.053 ms
 Execution Time: 6534.640 ms
(4 rows)

@pksunkara
Checked out to https://github.com/pksunkara/pgx_ulid/commit/0b3a88a2b9b2b0e2122ac24db1e8ba1f5b1f8ee3 , when those numbers in README.md first appeared, and compiled that version. But no luck... I still get same result, where gen_random_uuid are slightly faster than gen_ulid.
Maybe you can reproduce those tests and update README.md?

Just to confirm,l before I start looking into this, I assume you ran with release build and not debug build?


[ISSUES] UI - Size bar not fix v1.2.3

the bar size varies according to the percentage and is not a fixed width as on your screenshots.
test redone on a new world with only:

PF2e kingmaker v2.1.1 and PF2e-chance v1.2.3
PF2E Abomination Vault and PF2e-chance v1.2.3

screen KM:
in order (by default, without criticism)
without normal percentage and without review

Screen AB :

same with only base PF2e

Couldn't replicate on my machine, but i guess the problem was in the string that adds a space between the number and the percentage symbol: that way the width css property was broken and the bar would look like that when there's no width set.
I guess in some locales the percentage works like this (adding the space before the symbol), so I fixed this in 1.3.0 by adding the us-EN format in the toLocaleString() function.
Let me know if it works now!

Couldn't replicate on my machine, but i guess the problem was in the string that adds a space between the number and the percentage symbol: that way the width css property was broken and the bar would look like that when there's no width set.
I guess in some locales the percentage works like this (adding the space before the symbol), so I fixed this in 1.3.0 by adding the us-EN format in the toLocaleString() function.
Let me know if it works now!

it's much better, just leave the text too low and superimpose it on the line and it'll be perfect.


PDP pairs with end stops

What language and solver does this apply to?
All, Python, Java, C#, C++ / CP-SAT, Routing, Linear Solver
C++
Describe the problem you are trying to solve.
A PDP where the pairs can contain end stops.
ex:
10 stops
2 vehicles
start stops: 0 1
end stops: 5 6
pickup-delivery pairs: [4 5] [7 9]
Describe the solution you'd like
One possible solution:
0->3->4->8->5
1->7->2->9->6
Describe alternatives you've considered
I tried to duplicate the end stop that is used in the end stops and in the pairs and I set the distance between the duplicated stop and the actual stop to be 0, but the algorithm doesn't put them right after each other.
Additional context
From what I saw, the error comes from CompressPath method in connectivity.h. If I changed the method as below, the problem works, but I don't know if the modification is right.
  // Compresses the path for node.
  NodeIndex CompressPath(NodeIndex node) {
    CheckNodeBounds(node);
    NodeIndex parent = node;
    while (parent != class_[parent])
	{
		if (parent != class_.size())
		{
			CheckNodeBounds(class_[parent]);
			CheckNodeBounds(class_[class_[parent]]);
			parent = class_[parent];
		}
		else
		{
			parent = class_[0];
			node = class_[0];
		}
    }
    while (node != class_[node]) {
      const NodeIndex old_parent = class_[node];
      class_[node] = parent;
      node = old_parent;
    }
    return parent;
  }

Please use the mailing list instead:

Yes you must duplicate the node since you can't use an end index as part of a P&D pair

You can try to add a constraint on NextVar(), C++ like pseudo-code

int64 delivery_idx = manager.NodeToIndex(delivery);
int64 end_idx = routing.End(vehicle_idx);
auto active = routing.ActiveVar(delivery_idx) * routing.ActiveVar(end_idx);
solver.AddConstraint(active * routing.NextVar(delivery_idx)  == active * end_idx);

ref: https://github.com/google/or-tools/blob/08769b2d9e973b3b6df7883caf0c8b10d47e513e/ortools/constraint_solver/routing.h#L1180-L1184


Add WinGet

[x] Have you signed the Contributor License Agreement?
[x] Have you checked that there aren't other open pull requests for the same manifest update/change?

[ ] Have you tested your manifest locally with winget install --manifest <path>?
[x] Does your manifest conform to the 1.0 schema?

Any good package manager must at least be able to install itself ;)
cc https://github.com/lukesampson/scoop-extras/issues/4107 https://github.com/microsoft/winget-cli/issues/505 #825 #19425
Microsoft Reviewers: Open in CodeFlow

Unfortunately, this suffers from lack of dependencies. We're working on a solution for VCLibs also related to the Sandbox PowerShell script #827 .

Couldn't those problems just be solved afterwards? After all, one might already have the necessary dependencies, otherwise an error message can be equally helpful, and it's normal for a fairly new installer-executor to not have dependency awareness at first. And now that I think about it, anyone trying to install WinGet via WinGet probably have most dependencies already.

Deployment wants to shut down old winget to deploy new winget, deployment sends the old winget a ctrl-c signal, the old winget cancels all it’s doing(including the ongoing “install new winget”).

https://github.com/microsoft/winget-cli/issues/505

Unfortunately, this suffers from lack of dependencies. We're working on a solution for VCLibs also related to the Sandbox PowerShell script #827.

Hold on a second, I remember installing from github.com/microsoft/winget-cli/releases on brand new instances of Windows 10 like last week without missing any dependencies. Are the dependencies in newer builds of Windows?

I think we're still blocked on the fact that the install cancels our active installation. We're looking at a delayed registration via MSIX which would unblock this one. I hope we get to that soon 😊

cc @denelon: could you please add the "Blocking-Issue" label on this PR?

Just an "FYI" here. It's now possible to winget install "App Installer with the connectivity to the "msstore" source. One of the things the Microsoft Store does is handle some of the dependencies related to MSIX packages in the store. We've been talking about the fact that the Windows Package Manager dependencies "must" have been available in order to run winget upgrade winget in the first place. The bigger challenge here is that the package is actually the "App Installer" package. We could use winget as the moniker though.

Close with reason: Replaced by PR 56841;

Here's a link to it for mobile users:

https://github.com/microsoft/winget-pkgs/pull/56841


[ST] goLinea -> Poly Mumbai | Relayer not bumping.

Describe the bug
The user bumped relayer with additional fees a few times on Linea Goerli, the UI shows Additional required relayer fee is 0. TX is stuck for 48 hours.
Additional context
Lineascan: https://goerli.lineascan.build/tx/0x4398146d5535acd1d406afbe55843d09f104ae491f2a1811e4f7d5ca6892eda8
Connextscan: https://testnet.connextscan.io/tx/0xe00dfbf4039ff756ac346c02bd4c5229a2b55e09a146935db06b2f75132c9043
@oncall

It completed. Fee estimate on testnet is kinda jank right now.


Getting rotation information from results (demo.py)

    pred_body_pose = matrix_to_axis_angle(pred['poses_body']).cpu().numpy().reshape(-1, 69)
    pred_root = matrix_to_axis_angle(pred['poses_root_cam']).cpu().numpy().reshape(-1, 3)
    pred_root_world = matrix_to_axis_angle(pred['poses_root_world']).cpu().numpy().reshape(-1, 3)
    pred_pose = np.concatenate((pred_root, pred_body_pose), axis=-1)
    pred_pose_world = np.concatenate((pred_root_world, pred_body_pose), axis=-1)
    pred_trans = (pred['trans_cam'] - network.output.offset).cpu().numpy()

    results[_id]['pose'] = pred_pose
    results[_id]['trans'] = pred_trans
    results[_id]['pose_world'] = pred_pose_world
    results[_id]['trans_world'] = pred['trans_world'].cpu().squeeze(0).numpy()
    results[_id]['betas'] = pred['betas'].cpu().squeeze(0).numpy()
    results[_id]['verts'] = (pred['verts_cam'] + pred['trans_cam'].unsqueeze(1)).cpu().numpy()
    results[_id]['frame_ids'] = frame_id

I took this snippet from demo.py where the results are saved. I have been filtering these results into a CSV file to save only the positional information and joint rotations. For now, I have been deriving the joint coordinates from the 'verts' and using values in 'pose_world' as the joint rotations as angles in radians in the x,y, and z coordinate systems. Are my assumptions wrong regarding these?

verts are the 3D position (in the camera coordinate system) of 6,890 SMPL vertices. pose_world is indeed the joint rotations as axis angle representation, indicating the relative rotation of a body segment with respect to its parent body segment (e.g., left knee rotation is relative rotational transformation between left shank and left thigh).

Thank you for confirming my assumptions. I wanted to also know what is the domain for these angles. I believe the unit for joint rotations is radians. From what I have read, the domain seems like it should be between -180 and 180 degrees when converted, but I have seen angles bigger than 180.


[terra-scroll] Adding new A11y example for testing purposes.

Summary

What was changed:
Added a new A11y example.
Why it was changed:
Current examples weren't good enough for testing.
Testing

This change was tested using:

[ ] WDIO
[ ] Jest
[ ] Visual testing (please attach a screenshot or recording)
[ ] Other (please describe below)
[x] No tests are needed

Reviews
In addition to engineering reviews, this PR needs:

[ ] UX review
[ ] Accessibility review
[ ] Functional review

Additional Details

This PR resolves:
UXPLATFORM-8578

Thank you for contributing to Terra.
@cerner/terra

Could we call the new tests just Horizontal and Vertical instead? Do we need to add a11y in front of their names?

Could we call the new tests just Horizontal and Vertical instead? Do we need to add a11y in front of their names?

So my main concern was that 4-5 months from now no one would remember why we have these examples that don't have WDIO tests that use them, and since (currently) their sole purpose is for A11y testing I figured naming them as such would help future proof it.

Gotcha that sounds good


SchemaRegistry: Add http agent argument

Add option to pass in HTTP agent that binds to mappersmith

@Nevon any comments on this PR?
Fixes issue #107

This is a very useful change that I'd like to get merged. I only have one comment, to make sure that we don't modify the global gateway config. Other than that it's great.


receive: Include current config hash in forward requests

Signed-off-by: Kemal Akkoyun<EMAIL_ADDRESS>
[ ] I added CHANGELOG entry for this change.
[x] Change is not relevant to the end user.

Changes

Add the hashring hash to the forward payload.

Verification

make test-local

@brancz Do you see any value for merging this? Or should I just close this one?

I think since we're splitting the architecture for the receive component, we can close this. Wdyt?

@brancz Sounds good to me 👍


Upgrade UI-Router to 1.x

#3617

found an issue whilst testing, will re-open when fixed.

sorted now, the roadmap and scenario routing wasn't correct.


Microsoft.DotNet.DesktopRuntime.X

Packages:
Microsoft.DotNet.DesktopRuntime.6
Microsoft.DotNet.DesktopRuntime.5
Microsoft.DotNet.DesktopRuntime.3_1
Both fail to update. I had to blacklist them to make WAU stop trying to update them. Who is at fault here: Microsoft, Winget-AutoUpdate or myself?

updates.log
For some crazy reason I have the latest version of all x86 and x64 DesktopRuntimes. Winget doesn't detect any update (correctly), but WAU does (incorrectly). I also know that Microsoft.DotNet.DesktopRuntime is a problematic package for Winget, so I don't know who to blame...

I have the same problem and I had to blacklist that package. In fact, if you look at your installed apps, you might have different version for the same package. Winget running under system gets confused.

I have the exactly same versions for x86 and x64. I know that if they are outdated Winget is only able to update the x64 version for some weird reason but when they are updated winget upgrade correctly doesn't detect any update for it and even so WAU tries to update

WAU using this command to get outdated apps:
Winget upgrade --source winget
The only thing is, it is run under system context.
What you can try to do is to run the "C:\ProgramData\Winget-AutoUpdate\winget-upgrade.ps1" script from an admin user account and compare with system output.

WAU using this command to get outdated apps: Winget upgrade --source winget The only thing is, it is run under system context.
What you can try to do is to run the "C:\ProgramData\Winget-AutoUpdate\winget-upgrade.ps1" script from an admin user account and compare with system output.

I guess it is simply not possible, then