HLS read codec type from first segment

Have you read the FAQ and checked for duplicate open issues?:
Yes
What version of Shaka Player are you using?:
2.3.7
Can you reproduce the issue with our latest release version?:
Yes
Can you reproduce the issue with the latest code from master?:
Yes
Are you using the demo app or your own custom app?:
Custom App.
If custom app, can you reproduce the issue using our demo app?:
Yes, I get the same errors. In my custom app stream won't start and it does on shaka's hosted demo but it still throws the same errors and it takes a very long time to initiate.
What browser and OS are you using?:
Chrome 66, Ubuntu 16.04.
What are the manifest and license server URIs?:
sent to<EMAIL_ADDRESS>email subject is the same as the issue's title.
(NOTE: a copy of the manifest text or an attached manifest will not be enough to reproduce your issue, and we will ask you to send a URI instead)
What did you do?
Start reproduction of an HLS stream.
What did you expect to happen?
Stream being reproduced without errors.
What actually happened?
I get the following error:
Failed to load https://my.url.tv/folder/segment_540p_452131.ts: Request header field Range is not allowed by Access-Control-Allow-Headers in preflight response.
In shaka's hosted app, stream reproduction eventually starts but it doesn't on mine. After a while I sometimes get a 9009 error in my app which does not appear in the list of errors.
I tried reproducing Shaka's demo HLS stream in my application and it worked, no problem. The only difference I spotted between streams is that mine has .ts chunks instead of .mp4. Can that be causing the issue?
Keep in mind the stream causing this issue is the same stream I'm using with other web players without problems. I've also tested it with VLC successfully.
Regards,

Error 9009 was retired in v2.3.4, so it would appear you are using Shaka v2.3.3 or older.
This error:

Failed to load https://my.url.tv/folder/segment_540p_452131.ts: Request header field Range is not allowed by Access-Control-Allow-Headers in preflight response.

is a CORS error. The server does not support cross-origin requests which have the Range header. You can read more about CORS here:
https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
In order for you to use Range, the server will need to return an Access-Control-Allow-Headers  header, in the preflight response, which includes Range.

You're right, there was a miss-communication in the team, headers were missing. 9009 is an error we got a few weeks ago. Right now we're getting a 4032 error, after fixing headers. Can that be due to the .ts chunks? Sorry for the inconvenience...

I believe you are able to play in Shaka sample app because it includes mux.js to transmux your TS segments to fmp4. To enable this in your custom app, you will need to include window.muxjs.

@sergioavazquez
6001 Error is REQUESTED_KEY_SYSTEM_CONFIG_UNAVAILABLE, and can be cause by these reasons mentioned in the document.
Is there any specific reason that you're forcing https on your localhost? Plain http should work for localhost.

hey guys , I am running into the same issue and I included muxjs ( locally built ) and I ensured window.muxjs is defined .
Unfortunately I am also getting 6001 , but I am using an encrypted content ( http://b028.wpc.azureedge.net/80B028/Samples/a38e6323-95e9-4f1f-9b38-75eba91704e4/5f2ce531-d508-49fb-8152-647eba422aec.ism/Manifest(format=m3u8-aapl))
Any advice is highly appreciated.

Ok , quick update , I removed the DRM config, since it's un-encrypted  and no more 6001 error. So Muxjs played it's role, but again , it's not playing back the content , stuck at the first frame and buffering.
Any thoughts ?

@sergioavazquez you mentioned that your Widevine content is working. What DRM are you using for the content which won't play? If you are attempting to play Fairplay-protected content, this won't work in Chrome (or in Safari... see #382).

@chrisfillmore I'm working on an app that supports DASH - Widevine. I'm sure the 6001  is coming from the fact that the asset has Widevine set up as its DRM by default, just like @kchandran1029 mentioned. For un-encrypted Dash assets, that's not a problem but I'm guessing since HLS and DASH are not supported that might be a problem. I'm going to remove it and let you know how it goes!

@sergioavazquez : hey please let me know if you are able to get it play back , for me it's playing intermittently , but on demo app it works fine after an initial hickup , I get the below log on demo app --
Unable to fetch a partial HLS segment! Falling back to a full segment request, which is expensive!  Your server should support Range requests and CORS preflights.
--
Then it just play back fine. In our custom app , it doesn't play . I am wondering if I need anything more than just muxjs . Do I need to override any default config , please help. Thanks

@kchandran1029 removing DRM config from the asset worked for me!! I use to get that same log and it turned out it was due to lack of headers in source's server. For testing purposes, try adding the following header to the server Access-Control-Allow-Origin: *
Thanks!!!

@sergioavazquez  : Thanks for the response , but is it playing fine for you ? Can you please test with the manifest I posted above ? I can't get it to play back.

@kchandran1029 : I got my HLS stream to work without problems. I tested your stream with my app and I experience the same behavior you describe, I can't get it to play, same error.

It's weird , the demo app is able to playback the same after some initial hick ups , wondering what are we missing from demo app.
@sergioavazquez Would you be able to share the content or some test contents you have , may be with some decent timeshiftbuffer ? Thanks

@kchandran1029 unfortunately I can't share streams because they're not free, company policy, sorry.
But I just emailed another HLS stream that is not working on Shaka, not even in the demo app, but it does work on other players.

I've been testing HLS streams from diverse sources and most of them have problems.
Here are some of the streams I've been testing. Keep in mind all these streams work both with MediaElement and VLC.

https://kissfm-cires21-video.secure.footprint.net/hittv/master.m3u8 Throws 405 on OPTIONS request. Your server should support Range requests and CORS preflights. Works on and off, refresh and reload to verify. It takes a very long time to start when it works.

https://lsd2-latam.secure2.footprint.net/hls-live/streamroot_lsd2latam-tectv/_definst_/live/stream3.m3u8
Returns error 4022 on both demo and custom app. Never works.

https://rbtvdiglinear-i.akamaihd.net/hls/live/241719/ATfallback/master_1660.m3u8
Returns error 4022 on both demo and custom app. Never works.

https://lsd2-latam.secure2.footprint.net/hls-live/streamroot_lsd2latam-lared/_definst_/live.m3u8
Never works. Response for preflight has invalid HTTP status code 405. Warns about lack of Range support: Your server should support Range requests and CORS preflights
Error 3016 and 3014. All in demo App. (RADIO stream)

<EMAIL_ADDRESS>Sometimes works, sometimes doesn't. Huge load times. Your server should support Range requests and CORS preflights. Throws 405 on OPTIONS request.

These are just a few, but there are 2 recurrent error patterns despite the fact that streams were gathered from different sources:
1 - OPTIONS and Range requests issues.
2 - 4022.
Thoughts?

These two playlists:
https://lsd2-latam.secure2.footprint.net/hls-live/streamroot_lsd2latam-tectv/_definst_/live/stream3.m3u8
https://rbtvdiglinear-i.akamaihd.net/hls/live/241719/ATfallback/master_1660.m3u8
...are variant playlists and cannot be provided to Shaka directly. This is why you are getting error 4022. You need to provide a master playlist. You can take a look at some of the playlist examples from the HLS spec to see the difference:
https://tools.ietf.org/html/draft-pantos-hls-rfc8216bis-00#section-8.4
Essentially, a master playlist is a playlist which lists other playlists, which are valled variant (or media) playlists.
When playing HLS, Shaka will make a partial segment request using a Range header. I'm not familiar with the specific behaviour and reasons why (hopefully someone can comment). However, in order for this request to succeed, the server will need to allow the Range header in cross-origin requests, as I described before. This means the OPTIONS request must have:
Access-Control-Allow-Headers: Range, ...(other required headers here)...
Does that make sense?

Yes. I Understand why the 4022 occurs and I expected an explanation along those lines for the Range warning. However, I'm working on a video application were the ability to reproduce contents from all over the web is a key feature, and it looks like there are many streams that don't follow those guidelines.
I was hoping you would consider adding support for these. I don't always have full control over streams and this restricts the amount of contents that can be visualized by the player, contents that are actually playable.
Is this something you would consider?
Thanks!

Hey Guys ,
Please let me know if I have to open this as new separate issue, I will be happy to do that , but I feel Shaka is having a hard time to play most of the HLS stream on Safari browser. Interestingly it works in Chrome. I have tested with couple of other players out there and they can play back the stream well.
Also, I assume this has a master play list
https://akamai-axtest.akamaized.net/routes/lapd-v1-acceptance/www_c4/Manifest.m3u8
Is there anything I am missing out or do we have a known issue with HLS playback on Safari ( Un-ecrypted ) ?

@TheModMaker I understand, but my point is that somehow other HTML players got around it. For example MediaElement and Clappr. I'm not using Safari but Chrome 66 and Ubuntu, so I have no native HLS support.
Here is the official demo of Clappr with one of the links that throws a 4022: Clappr
You can edit the source on the fly and test other streams too. I tested all the streams I mentioned in this issue and they all work perfectly, thus my reasoning that there's a way of making it work. I have no idea how they did it though, could you help?
Thanks!!

Awesome! Let me know if there's something I can do to help! Thanks!!

@TheModMaker - Hi, as you mentioned it is required to set range header for the first segment but can we customise using shaka configuration to not send range header in any case?
Or any flag we can set which will stop sending Headers with range for the first segment ?
https://github.com/google/shaka-player/issues/1431#issuecomment-387812986

@chahatmiddha561 There is no option to disable this feature.  When we make a partial request for the first segment, we'll send the Range header to avoid downloading the whole segment; but if this fails, we will download the whole segment instead.  So not supporting Range requests shouldn't inhibit playback (in this case).

@sergioavazquez, while we had said we would consider this enhancement before, that was based on the fact that we already fetch segment headers to get timestamp info.  This is something we're moving away from now to reduce startup latency.  Therefore, I'm going to close this and mark it as "will not implement".  We apologize for any inconvenience this may cause.
If you can, we would recommend you update your playlists to include MIME type and codec information.


A name of pdf for each wiki file

I create a wiki using "azuredevops-export-wiki" but after that I have one file "export.pdf" with 197 pages in it ‿︵ヽ(°□° )ノ︵‿
How can I create pdf pages separately so that each one has its own name?
I saw that there is a parameter  https://github.com/MaxMelcher/AzureDevOps.WikiPDFExport#-d----debug but  I tried it, and for me it does not working, I get the same one file with name export.pdf
How to correctly use the -b / --breakPage parameter?

discussed offline:
-b starts a new page per file
If you want to create a pdf per markdown file, then use powershell to query all the files and run the converter for every page.


Error in New Version of Visual Studio

Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware
An unhandled exception has occurred while executing the request. System.InvalidOperationException: A view component named 'NToastNotify' could not be found. A view component must be a public non-abstract class, not contain any generic parameters, and either be decorated with 'ViewComponentAttribute' or have a class name ending with the 'ViewComponent' suffix. A view component must not be decorated with 'NonViewComponentAttribute'.    at Microsoft.AspNetCore.Mvc.ViewComponents.DefaultViewComponentHelper.InvokeAsync(String name, Object arguments)    at Microsoft.AspNetCore.Mvc.Rendering.ViewComponentHelperExtensions.InvokeAsync(IViewComponentHelper helper, String name)    at AspNetCore.Views_Shared_Layouts__Layout.<ExecuteAsync>b__13_1() in C:\Users\REZA\Documents\Visual Studio 2019\Source\AvestanWorkspaces\EventTick\AradConcert\AVS.WebApplication\Views\Shared\Layouts\_Layout.cshtml:line 22    at Microsoft.AspNetCore.Razor.Runtime.TagHelpers.TagHelperExecutionContext.SetOutputContentAsync()    at AspNetCore.Views_Shared_Layouts__Layout.ExecuteAsync()    at Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderPageCoreAsync(IRazorPage page, ViewContext context)    at Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderPageAsync(IRazorPage page, ViewContext context, Boolean invokeViewStarts)    at Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderLayoutAsync(ViewContext context, ViewBufferTextWriter bodyWriter)    at Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderAsync(ViewContext context)    at Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor.ExecuteAsync(ViewContext viewContext, String contentType, Nullable1 statusCode)
at Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor.ExecuteAsync(ActionContext actionContext, IView view, ViewDataDictionary viewData, ITempDataDictionary tempData, String contentType, Nullable1 statusCode)    at Microsoft.AspNetCore.Mvc.ViewFeatures.ViewResultExecutor.ExecuteAsync(ActionContext context, ViewResult result)    at Microsoft.AspNetCore.Mvc.ViewResult.ExecuteResultAsync(ActionContext context)    at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextResultFilterAsync>g__Awaited|29_0[TFilter,TFilterAsync](ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)    at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResultExecutedContextSealed context)    at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.ResultNext[TFilter,TFilterAsync](State& next, Scope& scope, Object& state, Boolean& isCompleted)    at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.InvokeResultFilters() --- End of stack trace from previous location where exception was thrown ---    at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextResourceFilter>g__Awaited|24_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)    at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResourceExecutedContextSealed context)    at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)    at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeFilterPipelineAsync>g__Awaited|19_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)    at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)    at Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)    at Microsoft.AspNetCore.Session.SessionMiddleware.Invoke(HttpContext context)    at Microsoft.AspNetCore.Session.SessionMiddleware.Invoke(HttpContext context)    at NToastNotify.NtoastNotifyAjaxToastsMiddleware.InvokeAsync(HttpContext context, RequestDelegate next)    at Microsoft.AspNetCore.Builder.UseMiddlewareExtensions.<>c__DisplayClass5_1.<<UseMiddlewareInterface>b__1>d.MoveNext() --- End of stack trace from previous location where exception was thrown ---    at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)    at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)    at Microsoft.AspNetCore.Diagnostics.StatusCodePagesMiddleware.Invoke(HttpContext context)    at Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.<Invoke>g__Awaited|6_0(ExceptionHandlerMiddleware middleware, HttpContext context, Task task)

Are you using Resharper? That's what was causing the error for me. After updating it to latest version, clearing Nuget caches everywhere and obj and bin folders, it started working again.
I battled this for many days ...

What could resharper be possibly doing ?

@nabinked
Yes Im Using resharper .
I had no problems before updating Visual Studio. Error is issued after updating

Hmm maybe it's VS then but for me the fix was to update te sharper to latest version and clean up all nuget caches. And to answer your question, resharper does something special about project builds (bypassing MS Build partially I think) and in my case the problem was that the host assembly did not contain the metadata linking to the embedded view components in RCL

Closing this due to lack of response from @rbsdotnet


performance

Hi I did a test with a simple c++ container that creates a jwt token and a nodejs container that requests that token over grpc and if I run it without istio I get these values
note I also log the time it took to get the token back
request: 0.785ms
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c3IiOiJ7XCJuYW1lXCI6XCJ3b3JsZFwifSIsInN1YiI6InVzZXIiLCJpc3MiOiJtYWRmIn0.LKlO9AT7VHLMiCuA2UDYEss4fFQ0Wv_pKB_rw7NQcUQ
request: 0.668ms
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c3IiOiJ7XCJuYW1lXCI6XCJ3b3JsZFwifSIsInN1YiI6InVzZXIiLCJpc3MiOiJtYWRmIn0.LKlO9AT7VHLMiCuA2UDYEss4fFQ0Wv_pKB_rw7NQcUQ
request: 0.932ms
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c3IiOiJ7XCJuYW1lXCI6XCJ3b3JsZFwifSIsInN1YiI6InVzZXIiLCJpc3MiOiJtYWRmIn0.LKlO9AT7VHLMiCuA2UDYEss4fFQ0Wv_pKB_rw7NQcUQ
request: 0.797ms
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c3IiOiJ7XCJuYW1lXCI6XCJ3b3JsZFwifSIsInN1YiI6InVzZXIiLCJpc3MiOiJtYWRmIn0.LKlO9AT7VHLMiCuA2UDYEss4fFQ0Wv_pKB_rw7NQcUQ
request: 0.816ms
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c3IiOiJ7XCJuYW1lXCI6XCJ3b3JsZFwifSIsInN1YiI6InVzZXIiLCJpc3MiOiJtYWRmIn0.LKlO9AT7VHLMiCuA2UDYEss4fFQ0Wv_pKB_rw7NQcUQ
request: 0.763ms
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c3IiOiJ7XCJuYW1lXCI6XCJ3b3JsZFwifSIsInN1YiI6InVzZXIiLCJpc3MiOiJtYWRmIn0.LKlO9AT7VHLMiCuA2UDYEss4fFQ0Wv_pKB_rw7NQcUQ
request: 0.663ms
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c3IiOiJ7XCJuYW1lXCI6XCJ3b3JsZFwifSIsInN1YiI6InVzZXIiLCJpc3MiOiJtYWRmIn0.LKlO9AT7VHLMiCuA2UDYEss4fFQ0Wv_pKB_rw7NQcUQ
request: 0.670ms
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c3IiOiJ7XCJuYW1lXCI6XCJ3b3JsZFwifSIsInN1YiI6InVzZXIiLCJpc3MiOiJtYWRmIn0.LKlO9AT7VHLMiCuA2UDYEss4fFQ0Wv_pKB_rw7NQcUQ
request: 1.168ms
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c3IiOiJ7XCJuYW1lXCI6XCJ3b3JsZFwifSIsInN1YiI6InVzZXIiLCJpc3MiOiJtYWRmIn0.LKlO9AT7VHLMiCuA2UDYEss4fFQ0Wv_pKB_rw7NQcUQ
request: 2.656ms
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c3IiOiJ7XCJuYW1lXCI6XCJ3b3JsZFwifSIsInN1YiI6InVzZXIiLCJpc3MiOiJtYWRmIn0.LKlO9AT7VHLMiCuA2UDYEss4fFQ0Wv_pKB_rw7NQcUQ
request: 0.730ms
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c3IiOiJ7XCJuYW1lXCI6XCJ3b3JsZFwifSIsInN1YiI6InVzZXIiLCJpc3MiOiJtYWRmIn0.LKlO9AT7VHLMiCuA2UDYEss4fFQ0Wv_pKB_rw7NQcUQ

but if I do the the same thing with the proxy injected in the pod I get these values
request: 197.925ms
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c3IiOiJ7XCJuYW1lXCI6XCJ3b3JsZFwifSIsInN1YiI6InVzZXIiLCJpc3MiOiJtYWRmIn0.LKlO9AT7VHLMiCuA2UDYEss4fFQ0Wv_pKB_rw7NQcUQ
request: 5.163ms
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c3IiOiJ7XCJuYW1lXCI6XCJ3b3JsZFwifSIsInN1YiI6InVzZXIiLCJpc3MiOiJtYWRmIn0.LKlO9AT7VHLMiCuA2UDYEss4fFQ0Wv_pKB_rw7NQcUQ
request: 4.968ms
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c3IiOiJ7XCJuYW1lXCI6XCJ3b3JsZFwifSIsInN1YiI6InVzZXIiLCJpc3MiOiJtYWRmIn0.LKlO9AT7VHLMiCuA2UDYEss4fFQ0Wv_pKB_rw7NQcUQ
request: 78.588ms
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c3IiOiJ7XCJuYW1lXCI6XCJ3b3JsZFwifSIsInN1YiI6InVzZXIiLCJpc3MiOiJtYWRmIn0.LKlO9AT7VHLMiCuA2UDYEss4fFQ0Wv_pKB_rw7NQcUQ
request: 6.597ms
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c3IiOiJ7XCJuYW1lXCI6XCJ3b3JsZFwifSIsInN1YiI6InVzZXIiLCJpc3MiOiJtYWRmIn0.LKlO9AT7VHLMiCuA2UDYEss4fFQ0Wv_pKB_rw7NQcUQ
request: 76.763ms
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c3IiOiJ7XCJuYW1lXCI6XCJ3b3JsZFwifSIsInN1YiI6InVzZXIiLCJpc3MiOiJtYWRmIn0.LKlO9AT7VHLMiCuA2UDYEss4fFQ0Wv_pKB_rw7NQcUQ
request: 6.717ms
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c3IiOiJ7XCJuYW1lXCI6XCJ3b3JsZFwifSIsInN1YiI6InVzZXIiLCJpc3MiOiJtYWRmIn0.LKlO9AT7VHLMiCuA2UDYEss4fFQ0Wv_pKB_rw7NQcUQ
request: 175.892ms
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c3IiOiJ7XCJuYW1lXCI6XCJ3b3JsZFwifSIsInN1YiI6InVzZXIiLCJpc3MiOiJtYWRmIn0.LKlO9AT7VHLMiCuA2UDYEss4fFQ0Wv_pKB_rw7NQcUQ
request: 72.513ms
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c3IiOiJ7XCJuYW1lXCI6XCJ3b3JsZFwifSIsInN1YiI6InVzZXIiLCJpc3MiOiJtYWRmIn0.LKlO9AT7VHLMiCuA2UDYEss4fFQ0Wv_pKB_rw7NQcUQ
request: 6.641ms
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c3IiOiJ7XCJuYW1lXCI6XCJ3b3JsZFwifSIsInN1YiI6InVzZXIiLCJpc3MiOiJtYWRmIn0.LKlO9AT7VHLMiCuA2UDYEss4fFQ0Wv_pKB_rw7NQcUQ
request: 10.100ms
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c3IiOiJ7XCJuYW1lXCI6XCJ3b3JsZFwifSIsInN1YiI6InVzZXIiLCJpc3MiOiJtYWRmIn0.LKlO9AT7VHLMiCuA2UDYEss4fFQ0Wv_pKB_rw7NQcUQ

sometimes up to 300-500ms which seems like quite a big performance difference
is this something that something that is expected or is this bad?
I'm running the cluster inside minikube

Take any performance measurements with a grain of salt this early in the project's life: we've not spent any time on performance yet, and there's a lot of low hanging fruit for us to harvest.
The 300-500ms latencies are likely due to some lazy initialization performed in the request path in Mixer. This initialization occurs any time it receives a new config, including at startup (like I said, lots of low hanging fruit). Outside of those outliers, the variance you're seeing still strikes me as odd. If you run with Zipkin in your cluster the traces could help diagnose where the latency is coming from. Note that today Mixer doesn't have tracing so we don't have the full story (Mixer tracing is next on my list of things to do).

I've run some performance test and I get a median time under 5000 http1.1 requests/second with proxy around 2ms (albeit in ideal/minimalistic situation) - so I'm surprised about your numbers
(this is excluding an initial "warm up" request) which should be better as grpc should be more efficient for multiple requests than http1.1
Can you run more load and make sure each instance is warm enough to not get paged out etc?

The test i did was basically running the request inside a setInterval on the node side once per second. so there was a constant connection and even if I looked at the logs a few minutes later the results where very similar.
So it doesn't seem likely it was because it wasn't warm?
I'm not sure now that I think about it if I used the debug proxy or the production proxy, I will have to come back on that.
I guess there's some differences between them.

maybe there is no other proxy than the debug proxy? I can't see anything other in the install files. maybe I'm confusing it with the container names i got when I tried it using helm.

debug image just means it includes more tools
on the other hand we don't produced optimized images but that's what I use for my tests (built from source)
I added https://github.com/istio/istio/issues/426 to provide optimized images

closing this now - please reopen (in https://github.com/istio/issues/issues ) if needed


Revert to Lucene 8.8.2

Lucene 8.9.0 caused a performance regression on the benchmark
select hyperloglog_distinct("cCode") from uservisits causing
the doc values decompression running much slower introduced by the
change https://issues.apache.org/jira/browse/LUCENE-9663. We
should therefore release 4.6 with Lucene 8.8.2 and investigate
further on the regression.
V1: 4.6.0-b227e962b16a58e5900e5c770777e432ec66cae9
V2: 4.6.0-600c7c866f49825f762b4376aa1059600ecaef7c
Q: select hyperloglog_distinct("cCode") from uservisits
C: 1
| Version |         Mean ±    Stdev |        Min |     Median |         Q3 |        Max |
|   V1    |      403.000 ±  103.730 |    355.374 |    389.946 |    392.092 |   1118.239 |
|   V2    |      989.173 ±  129.581 |    941.106 |    966.361 |    977.820 |   1881.523 |
├---------┴-------------------------┴------------┴------------┴------------┴------------┘
|               +  84.21%                           +  85.00%
There is a 100.00% probability that the observed difference is not random, and the best estimate of that difference is 84.21%
The test has statistical significance

Summary of the changes / Why this improves CrateDB
Checklist

[x] Added an entry in CHANGES.txt for user facing changes
[x] Updated documentation & sql_features table for user facing changes
[x] Touched code is covered by tests
[x] CLA is signed
[x] This does not contain breaking changes, or if it does:

It is released within a major release
It is recorded in CHANGES.txt
It was marked as deprecated in an earlier release if possible
You've thought about the consequences and other components are adapted
(E.g. AdminUI)

The version constant has to be updated
server/src/main/java/org/elasticsearch/Version.java:119: error: cannot find symbol

    public static final Version V_4_6_0 = new Version(7_06_00_99, true, org.apache.lucene.util.Version.LUCENE_8_9_0);

(You could use git revert <commit> to revert the full commit that updated Lucene)
Otherwise lgtm.

Thanks for finding this.


Error: No JWT_SECRET in env variable

Hi, I get this error, but there are no instructions on how to fix it..
I have created an .env file and it's accessible, what do I put in it?
Thanks in advance!

Hey guy, I have issue same. Can you help me fix ?

<EMAIL_ADDRESS>build E:\GITHUB\mern-stack\server

rm -rf ./dist && NPM_CONFIG_PRODUCTION=false babel -d ./dist ./src -s

'NPM_CONFIG_PRODUCTION' is not recognized as an internal or external command,
operable program or batch file.
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR<EMAIL_ADDRESS>build: rm -rf ./dist && NPM_CONFIG_PRODUCTION=false babel -d ./dist ./src -s
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the<EMAIL_ADDRESS>build script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

@vantuanprimelabo  thx fot the feedback, it due to because you are not using linux-based machine, but it's okay, I fixed in the latest version<EMAIL_ADDRESS>please clone and do it again.

@themcguy please refer to the docs https://github.com/amazingandyyy/mern-stack#server-side-usageport-8000

pls feel free to reopen if the issue still exists

Looks like the issue still exists?  Im on windows
'NPM_CONFIG_PRODUCTION' is not recognized as an internal or external command,
operable program or batch file.
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR<EMAIL_ADDRESS>build: rm -rf ./dist && NPM_CONFIG_PRODUCTION=false babel -d ./dist ./src -s
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the<EMAIL_ADDRESS>build script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR!      C:\Users\Home\AppData\roaming\npm-cache_logs\2019-07-01T23_28_44_712Z-debug.log
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR<EMAIL_ADDRESS>postinstall: npm run build
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the<EMAIL_ADDRESS>postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.


Color setting for support.variable is missing

In JS template literals support variables have the same color as strings. For TS setting is there but for JS it is missing.
{
  "name": "[JavaScript] Variables",
  "scope": "source.js support.variable",
  "settings": {
    "foreground": "#D8DEE9"
  }
}

Before:

After:

Thanks for your report :+1:
I've created PR #51 which improves the string literal characters and the color of the variable properties.


Temporal code completion and navigation

http://dl.acm.org/citation.cfm?id=2486956

No data presented in the paper, but talks about a prototype (didn't get a link).


Get branch name for PR in a better way

See JENKINS-51867

@grandvizier does this look good ?

The javadoc are really helping me understand the intent. Thank you @gautamabhishek46 .

Does this looks good  now.


Fix kafka consumer OpenInbound loop

Fix #591
Signed-off-by: Francesco Guardiani<EMAIL_ADDRESS>

Ok so this should fix it, but it adds a breaking change because now Receiver is Closer.
Now the incoming channel is not closed anymore from the session, but a manual method is invoked to cleanup that channel. @n3wscott mind taking a look? I tried to write a test for it, but it's quite hard without scrambling some prod code too

@toddkazakov I'm gonna merge it, let me know if it solves the issue


engine

Hello, I would like to ask how to convert weights from torchscript format to engine format. After the conversion, do I need to modify the program in order to run it?

Hi @yuanhs1996, my understanding is that you want to inference in TensorRT? If so I would recommend exporting the onnx directly from the pt format, and build engine with TensorRT APIs, either python/C++ API would work. Here is an example:
https://github.com/cyrusbehr/tensorrt-cpp-api?tab=readme-ov-file#sanity-check
Let me know if any questions :)

Thank you for your answer, it was very helpful.


Support TTL

Announce: https://aws.amazon.com/about-aws/whats-new/2017/02/amazon-dynamodb-now-supports-automatic-item-expiration-with-time-to-live-ttl/
Dev Guide: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/TTL.html

This deserves a few examples and maybe even a Bloop Pattern; one method of managing relationships in DynamoDB requires a periodic cleanup for dropped changes.  If the transaction process involves clearing a TTL field then this mechanism will remove the need to have a cleanup Lambda or periodic table scan.
More research needed into the specific mechanism, but it may be as simple as adding a ttl field to BaseModel.Meta that resolves to the column name:
class User(BaseModel):
    class Meta:
        ttl = "delete_by"

    id = Column(UUID, hash_key=True)
    delete_after = Column(DateTime)
    name = Column(String)

Alternatively, it may need more structure (see Meta.stream).

This will need to call UpdateTimeToLive.
To preserve Bloop's existing contract (tables will not be modified after creation) this must only be called if CreateTable doesn't raise TableAlreadyExists.  Table validation will need to call DescribeTimeToLive and raise if the model specifies a TTL that doesn't match the returned description.

Since the backing type needs to be a unix timestamp, there's two obvious options:

Create a new Timestamp type which maps to a datetime.datetime value
Expose an option on the existing DateTime type which specifies if the value serializes to DynamoDB as an iso8601 string or an int timestamp.

I strongly prefer the first option, since it keeps the Bloop Type tightly bound to the backing type.  In both types, Timestamp and DateTime will map to a python type of datetime.datetime so the difference will be invisible in code, including conditions.  It makes it harder to accidentally specify the wrong format for a TTL attribute, since you can't specify a column that's a DateTime which uses the wrong config value.
The downside is slight API bloat; not only will there be a types.Timestamp but each time extension will need one: ext.arrow.Timestamp, ext.delorean.Timestamp, ext.pendulum.Timestamp.
The only validation Bloop should do when checking a model's Meta.ttl is that the referenced column has the correct backing type (eg NUMBER).  Looking for the types.Timestamp or a subclass is overly restrictive.  It's worth special-casing a check for the built-in DateTime variants when the backing type isn't correct so that the message is more helpful for a common error case.

I had forgotten that the TTL verification would special case the check against DateTime, so it's possible to also special case the check against a Timestamp.resolution.  I'll consider it, but for now I'm opting for simplicity.  Additional resolutions could be added in a backwards-compatible way as long as second-resolution is the default.

Missing from the impl in 9d63568: call UpdateTimeToLive when the table is newly created.


Improve shards view

Hi there.
Currently, when navigating to the the "Shards" view, Admin UI should display a message like There are no shards. on an empty database where no tables or shards have been created yet.
While Admin UI expects a zero-length result to display this message, CrateDB returns a result with one record. https://github.com/crate/crate/issues/11089 is the respective issue on its issue tracker.
With kind regards,
Andreas.

The suggestion by @mfussenegger was to use an INNER JOIN here, see https://github.com/crate/crate/issues/11089#issuecomment-789909334.

I've changed this from bug to feature as the current shard view is not broken with empty tables. Showing a explicit message that no shards exists is indeed an improvement but current situation is not buggy.


fix(api): increment stack identifier atomically

This change fixes #2633 as tested in our production environment.

Thanks @aa-ko :+1:


Create a mod for Traders

Adjust buying price cf: ODT softcore

Ready for testing

https://github.com/devilflippy/Better_sales_to_Traders


line(a, b) vs lineTo([a, b]) argument types

How come there's this difference?

This is the different between an absolute and a relative position. When you draw (or sketch) your pointer is at a position (for instance you drew a line to [5, 2]. If you do line(1, 1) you will draw to the point [6, 3]. If you do lineTo([1, 1]) you will draw to [1, 1]

The math then only involves 1 type, making everything easier to understand (instead of seeing additional type conversion)

It feels like it would be less welcoming for new users. It makes the API more consistant - but the action behind it is not consistant. In some ways it exposes the inconsistency (line and lineTo are not the same thing) in a way that aligns with what it does.

The math then only involves 1 type, making everything easier to understand (instead of seeing additional type conversion)

Note that the conversion is not that complicated to do line(...vector) should just work.
There is a bit of inconsistency with the way I do the translate - sometimes I take a vector sometimes a list of distances. I will support everywhere the list of distances for consistency with the "what is absolute and what is relative". I will keep the type overloaded for backwards compatibility but might remove it at some point in the future.
I will close this issue for now - if I see it coming up again and again with newbies I will reconsider!


Create a contact info block

Add links to social networks (LinkedIn, Facebook, Instagram), phone number, email, Telegram username, etc.

Not yet but link to Linkedin added


Unit testing

In this project apply the following features :100:
Add unit tests for all the below classes:
Book
Person
Student
Teacher
Classroom
Rental
Decorator
Note:  reason why submitting solo

@joel-kalema  i think you did,t read special note i mention above . For reference please check below :

Hi @faisalakb, In your first poll request, I think you didn't mention it 😄 , but anywhere,  you may ask for the review and thank you for your update 👍

@MahmoudBakr23 things are all working if you did in this way : rspec ./spec/teacher_spec.rb rather then rspec .\spec\teacher_spec.rb. Meanwhile i rename my all file names end with spec.

Thansk @Felix45 for your time


Is there a way to do an intersect() of a dataframe with itself without symmetric duplicates?

if a pyranges object has:
chr1, 1, 5, 'A'
chr1, 2, 6, 'B'
and you do bed.intersect(bed), then you get
chr1, 1, 5, 'A', chr1, 1, 5, 'A'
chr1, 1, 5, 'A', chr1, 2, 6, 'B'
chr1, 2, 6, 'B', chr1, 1, 5, 'A'
chr1, 2, 6, 'B', chr1, 2, 6, 'B'
What is the fastest way to get a single row result:
chr1, 1, 5, 'A', chr1, 2, 6, 'B'
?

Based on your example, I think you're looking for PyRanges function join, rather than intersect. The latter will report only the common portions of overlapping intervals. The output of join is as you sketch.
Briefly, you want to do join, followed by a filter to drop the self-matches, and also drop the symmetric duplicates.
gr=pr.from_dict( {'Start':[1,2,10, 14], 'End':[4,5, 20, 18], 'Chromosome':['chr1']*4, 'Strand':['+']*4})
gr
+-----------+-----------+--------------+--------------+
|     Start |       End | Chromosome   | Strand       |
|   (int32) |   (int32) | (category)   | (category)   |
|-----------+-----------+--------------+--------------|
|         1 |         4 | chr1         | +            |
|         2 |         5 | chr1         | +            |
|        10 |        20 | chr1         | +            |
|        14 |        18 | chr1         | +            |
+-----------+-----------+--------------+--------------+
Stranded PyRanges object has 4 rows and 4 columns from 1 chromosomes.
For printing, the PyRanges was sorted on Chromosome and Strand.

It is convenient to have some sort of ID column that uniquely identify every interval. If you have one already (values A,B in your example), great; if not, create one:
gr.ID=np.arange(len(gr))
Run method join:
jgr=gr.join(gr)
Filter out self matches:
jgr=jgr[jgr.ID != jgr.ID_b]
To filter out symmetric duplicates, first create a temporary column whose value will be the same for duplicates:
jgr._temp =[ '_'.join(sorted( map(str, [i, ib]))) for i, ib in zip( jgr.ID, jgr.ID_b) ]
jgr
+-----------+-----------+--------------+--------------+-----------+-----------+-----------+--------------+-----------+------------+
|     Start |       End | Chromosome   | Strand       |        ID |   Start_b |     End_b | Strand_b     |      ID_b |      _temp |
|   (int32) |   (int32) | (category)   | (category)   |   (int64) |   (int32) |   (int32) | (category)   |   (int64) |   (object) |
|-----------+-----------+--------------+--------------+-----------+-----------+-----------+--------------+-----------+------------|
|         1 |         4 | chr1         | +            |         0 |         2 |         5 | +            |         1 |        0_1 |
|         2 |         5 | chr1         | +            |         1 |         1 |         4 | +            |         0 |        0_1 |
|        10 |        20 | chr1         | +            |         2 |        14 |        18 | +            |         3 |        2_3 |
|        14 |        18 | chr1         | +            |         3 |        10 |        20 | +            |         2 |        2_3 |
+-----------+-----------+--------------+--------------+-----------+-----------+-----------+--------------+-----------+------------+
Stranded PyRanges object has 4 rows and 10 columns from 1 chromosomes.
For printing, the PyRanges was sorted on Chromosome and Strand.

And take only the first row per unique value:
final_gr=pr.PyRanges( jgr.df.groupby('_temp').first() )
final_gr
+-----------+-----------+--------------+--------------+-----------+-----------+-----------+--------------+-----------+
|     Start |       End | Chromosome   | Strand       |        ID |   Start_b |     End_b | Strand_b     |      ID_b |
|   (int32) |   (int32) | (category)   | (category)   |   (int64) |   (int32) |   (int32) | (category)   |   (int64) |
|-----------+-----------+--------------+--------------+-----------+-----------+-----------+--------------+-----------|
|         1 |         4 | chr1         | +            |         0 |         2 |         5 | +            |         1 |
|        10 |        20 | chr1         | +            |         2 |        14 |        18 | +            |         3 |
+-----------+-----------+--------------+--------------+-----------+-----------+-----------+--------------+-----------+
Stranded PyRanges object has 2 rows and 9 columns from 1 chromosomes.
For printing, the PyRanges was sorted on Chromosome and Strand.

@alexlenail did that work for you? If so, I will close the issue.

Thanks @marco-mariotti ! it worked, but I'm still wondering if there's a more performant way. Maybe not without rolling up my sleeves and writing my own c++ 😮💨


"Scope already assigned" when trying to attach a scope for a newly created version which already has scopes

Create an API using below swagger.
{ "swagger":"2.0", "paths":{    "/abc":{       "get":{          "responses":{             "200":{                "description":""             }          }       }    } }, "info":{    "title":"dev1_ms_subjects",    "version":"v1.0" } }

Attach a scope "read_abc" to the resource and save the API.

Create a new version.

Go to the Manage tab, we can see the "read_abc" scope is still there without an issue.

Update the swagger of the API for that using below using Import button in the design tab.
{ "swagger":"2.0", "paths":{    "/abc":{       "get":{          "responses":{             "200":{                "description":""             }          }       }    },    "/pqr":{       "get":{          "responses":{             "200":{                "description":""             }          }       }    } }, "info":{    "title":"dev1_ms_subjects",    "version":"v1.0" } }

Now when we go to the manage tab, the previous scope "read_abc" will be cleared as we imported a new swagger. Now try to add that scope again to the API.

We will get "Scope already assigned" and we will not be allowed to add the scope again.

Not reproducible in 2.1.0 and in the latest version 3.2.0 as well.


Namespace remains active if error is thrown in catch of Promise

I'm using this module in my express app. As you suggested I have used it as a request context and stopped setting properties on request and response.
But I ran into a problem. When an error is thrown inside Promise, active context(namespace) never exits. All the calls made after this; share same context.
Following is a small code snippet which shows the issue.
var express = require('express')
var app = express();
var getNamespace = require('continuation-local-storage').getNamespace;
var nameSpaceName = 'sample';
var sampleKey = 'sampleKey';

var createNamespace = require('continuation-local-storage').createNamespace;
createNamespace(nameSpaceName);

// add middle-ware
app.use(function (req, res, next) {
  var namespace = getNamespace(nameSpaceName);

  // hack for exiting context <=========
  if (namespace.active) {
    console.log(namespace.get(sampleKey)); // prints `sample` instead of `undefined`
    console.log('calling exit');
    namespace.exit(namespace.active);
  }

  namespace.bindEmitter(req);
  namespace.bindEmitter(res);

  namespace.run(function () {
    next();
  });
});

// throws an error in promise
var errorPromise = function () {
  var promise = new Promise((resolve, reject) => {
    reject('str');
  });
  Promise.resolve(promise).then(function (obj) {
  }).catch(function (err) {
    throw new Error(err);
  });
}

// route
app.get('/', function (req, res) {
  // adding sample key in context
  // which should reset in every call
  var namespace = getNamespace(nameSpaceName);
  namespace.set(sampleKey, 'sample');

  // if request query as test, call promise
  if (req.query.test)
    errorPromise();

  res.status(200).send('{"status": 200}');
});
app.listen(3000, function () {
  console.log('Example app listening on port 3000!')
})

Here when query string contains test, call to error promise is made. After this error when next call is made, the earlier context is still active.
Following are the requests made and respective console output
http://localhost:3000/
http://localhost:3000/?test=true
http://localhost:3000/

output:
Example app listening on port 3000!
(node:796) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 2): Error: str
sample
calling exit

For now before I call namespace.run, if the namespace is active, I explicitly call exit on it. But this is not the right solution, as in parallel calls for few milliseconds the context is shared.
Please let me know if I'm doing something wrong or propose a solution.
Thanks.

I don't understand why this happens, but here is an ad-hoc for this.
var errorPromise = function () {
  var promise = new Promise((resolve, reject) => {
    reject('str');
  });
  Promise.resolve(promise).then(function (obj) {
  }).catch(function (err) {
    //throw new Error(err);
    return Promise.reject(err);
  });
}

Actually, I think it's a async-listener problem, not continuation-local-storage. In this case, when throw an error in promise.catch method, it trigger 'unhandledRejection' instead of calling process._fatalException function. Missing calling for https://github.com/othiym23/async-listener/blob/master/glue.js#L108

Actually, I think it's a async-listener problem, not continuation-local-storage. In this case, when throw an error in promise.catch method, it trigger 'unhandledRejection' instead of calling process._fatalException function. Missing calling for asyncCatcher


Update static image file

Update Image of Create a new ASP.NET Core web application from ASP.NET Core 3.0 to 3.1

@eslamisepehr  thanks for the update.


use main page as source

for the scrapers / cantons that update the excel URL for new data.
I'd prefer changing this, since this would cause less changes in the csv files and thus would be easier to track, what actually changed. Of course this is a bit a change of the behaviour...

The frequent changes do not really bother me, but I'm fine with changing to a more stable URL.

The frequent changes do not really bother me, but I'm fine with changing to a more stable URL.


Contributing new widgets: Numeric Input

Context
I'm currently using OrbTk to build a simple GUI for a small tool I'm working on. In the process, I've been creating some simple widgets like a numeric input (text block with + and - buttons).
Problem description & Solution
There are not very many widgets currently available. I'm wondering if the maintainers are currently interested in new widget contributions from the community, such as that described above.
Is the repo currently in a stable enough state for this to even be worthwhile? Is there any plan/desire to create a repo/library of community built widgets?
PS: I would normally have asked these questions on the chat server, but I have not yet been granted access 😄

Any update?

It needs tweaking, but it is working.

@kivimango nice 🙂

#211

#211 is merged, can we close it?


Newlines \n in snippets aren't being broken up properly

Consider the parsed snippet (taken from private repo tortuga/api) below which is a curl command followed by its expected output. Currently this command will fail due to the attempt to execute both.
"$ curl -XPOST -H \"Content-Type: application/json\" localhost:8080/tasks/ -d '{\"duration\": \"10s\", \"exit_code\": 0, \"name\": \"Run task\", \"runbook_name\": \"RB 1\", \"runbook_run_id\": \"6e975f1b-0c0f-4765-b24a-2aa87b901c06\", \"start_time\": \"2022-05-05T04:12:43Z\", \"command\": \"/bin/sh\", \"args\": \"echo hello\", \"feedback\": \"this is cool!\", \"extra\": \"{\\\"hello\\\": \\\"world\\\"}\"}'\n{\"id\":\"6e975f1b-0c0f-4765-b24a-2aa87b901c06\"}\n"

Works for me now @adambabik. Thank you 👌🏼!


Ability to Cancel Live Migration

/kind enhancement

Related to #1550
Users need the ability to cancel an in-flight live migration job.  Cancelling the job will have to be a best effort attempt as there will always be a race condition between when the migration completes and when the cancel operation is received.

@vladikr @rmohr @fabiand  We should discuss how an admin invokes canceling a migration and how the result of that request is conveyed.
I think the action needs to remain declarative, meaning the user declares they want to cancel the migration job, and the system makes a best effort attempt at satisfying that request. I also think the action needs to be tied to the migration job and not the VMI.
The idea I had for this is to allow the user to toggle a "cancel" value on the Migration Object's spec via a PATCH. The validation webhook can ensure this option is only toggled during an update, and that once toggled it can never be untoggled. When the migration controller sees this option is set, it attempts to stop the migration using whatever internal mechanism we want.
For reporting whether or not the migration was cancelled, we could use a condition. The end result would be a migration with "Phase: Failed" and a condition indicating the migration was cancelled. A migration with "cancel=true" on the spec with the "Phase: Succeeded" would mean the VMI migrated despite our attempts at cancelling the job.
thoughts?

It feels a little odd right now, but DELETE is not an option, as we probably want to migration informations even after the migration was canceled.

@fabiand How long do we want it? Will we create some CRON job that will remove all migration objects after some time?

@fabiand How long do we want it? Will we create some CRON job that will remove all migration objects after some time?

Well, I thought we have direct support for https://kubernetes.io/docs/concepts/workloads/controllers/ttlafterfinished/ ;)
Seriously: So, eitehr we keep them until they are removed by $something (time, higher mgmt) or DELETE is okay enough, because the events contain enough information for the UI and other tooling.
IOW: We might not need to keep it around after completion, if the events logs provide enough informations.
But having an object is a more structured and defined approach to gather details.

I think a well-structured event must be enough, at least we do not have migration objects under the oVirt and OpenStack.
If migration succeeded, I think only migration duration and a destination node is interesting and if it failed duration and the reason why it failed(from the controller or from libvirt)

If that's sufficient, then cancellation could be a DELETE, which looks
natural to me.

@fabiand How long do we want it? Will we create some CRON job that will remove all migration objects after some time?

the migration objects are deleted when the VMI is deleted. We could choose to garbage collect finished migration objects after 24hrs or something if we wanted.

If that's sufficient, then cancellation could be a DELETE, which looks
natural to me.

I suggest deciding on the UI/UX flow for creating and canceling migrations before committing to a backend implementation. Ii could be that DELETE of the migration object will suffice, and we'll discover the migration was canceled via the VMI's status section or some prometheus event... or it could be that the UI finds it useful to track the migration object.  Just make sure the backend solution is cohesive with the use workflow.

The reason why I was considering delete is actually UX - "CLI UX".
As a user, using the CLI, I'd assume to be able to cancel a migration by
deleting the migration entity.
Editing the migration object to i.e. set cancel: true feels not intuitive

to me at least.

The status could be kept as a condition on the VMI.
To cycle back: I agree that it should be UX driven, but to me UX is also a
CLI flow.

@fabiand
it needs to be available after completion, for that a garbage collect or explicit DELETE on finished object would be good -assuming that another migration would overwrite it we would always have at most one.
but if the cancellation is done using the same mechanism (DELETE) then we can have a case when you issue a cancel but the migration actually succeeds before it can be canceled, and you'd lose migration stats. For that "cancel: true" would be a better way, even if not that intuitive. You could refer to the migration object for tracking progress, results (stats on success or failure) and trigger cancellation (and possibly other operations, e.g. for long ongoing migrations you may want to "switch to post-copy" explicitly)

Yes, I do understand.
The question is if enough informations could be retrieved from events and
logs.
But I also udnerstand that an object would be nicer for tracking.

well, migration is not anything you can lose track of. IIUC events are not really that reliable, for that a state (some sort of state) is better to have on the entity itself.

To cycle back: I agree that it should be UX driven, but to me UX is also a CLI flow.

+1. I believe the flow should be the same whether it's CLI or UI. I agree with others that it should be revolved around the VM from a user's perspective rather than the migration job. I think we want to take away the need of having to even know about the migration job from the user if we can. I would expect something like this:
1 - Identify a VM to migrate, specify which Node to migrate it to.
2 - Monitor the migration progress of the VM, in this use case, choose to cancel the migration of this VM.
3 - Monitor the cancellation of the migration for this VM, once complete notice that the VM is still running on the original Node.
I think that any errors with respect to the migration should be reported within the context of the VM as well and stored in the VM events history.
If it's helpful, here is what we've been thinking about with respect to a flow on the OpenShift UI side, but again I do think it should be a similar VM-focused flow on the CLI side...
User identifies a VM, chooses to migrate:

User defines destination Node (goal would be to ultimately support multi-select from the UI as well to make it easier to migrate VMs in bulk):

User monitors the migration process...I'd expect an action in the kebab would be to cancel the migration at this point:

User sees that the migration has been successful (or maybe it has been canceled), but the VM is back up and running on the new Node:

I think a well-structured event must be enough, at least we do not have migration objects under the oVirt and OpenStack.

that is incorrect for oVirt at least, I do not know the details of Openstack.
You need to have an entity to query for the results, stats, progress.
Events are fine for reporting progress, you don't care much if you loose one if that's a periodic report. But the state (migration state) and result stats need to be available for queries later, both for succesful and failed cases

We discussed this a bit off-list.
Two key takeaways:

Kubernetes in general does not provide historic data
The UI wants to show historic data
DELETE is the 'natural' way to remove a desired state iow cancel a migration

The suggestion we have:

Cancel a migration by DELETE the migration object.
For successful migrations, all the details and events are still maintained for some time after the migration is done on the migration object.
If historic data is needed, the a service should collect the data that is needed by the UI. I.e. in this case a service could collect all migrations which come and go (cancelled or succeeded or failed or …) and provide this data to the UI. We already have a similar service for searching templates. An alternative would be to use the Kubernetes audit log.

If historic data is needed, the a service should collect the data that is needed by the UI. I.e. in this case a service could collect all migrations which come and go (cancelled or succeeded or failed or …) and provide this data to the UI. We already have a similar service for searching templates. An alternative would be to use the Kubernetes audit log.

The migration object can provide this historical data, which is why I'm still hesitant about using DELETE for the cancel operation.
The migration object represents a single attempt at a migration, and it contains all the information about what occurred as a result of that attempt (success, failure, cancelled, etc...)  Those objects are a VMI's migration history and that history is directly tied to the VMI's lifecycle. When a VMI is deleted, all the migration objects are automatically cleaned up.

The migration object can provide this historical data, which is why I'm still hesitant about using DELETE for the cancel operation.

I don't know. Why should the runtime provide historical data? You could argue the same way that you need a "v1/namespaces//pods/mypod/stop" rest-call instead of using DELETE, because you want to see afterwards for a few days on the pod itself how fast it terminated, or want to extract the logs 3 days after you stopped the pod. The same for VMIs, VMs, ...
In my opinion monitoring and analysis should strictly be separated from runtime operations (and yes we need to catch up here a little bit, more prometheus metrics, ...). Otherwise we can never use DELETE for anything.

@rmohr that's a good point, but please make sure the monitoring is 100% reliable. it cannot be done as best-effort only as the logic on top of these basic actions is going to depend on it.

@rmohr that's a good point, but please make sure the monitoring is 100% reliable. it cannot be done as best-effort only as the logic on top of these basic actions is going to depend on it.

For as long as the object exists the UI can reliably follow it's changes. You and I for instance talked about making attempted restarts visible on the object while they are going on. That makes sense. Also it has a meaning if an object got deleted from the cluster and finally disappeared, the UI can consistently interpret that.
Another things are historical events or recent events of interest (e.g. warnings): They are always best-effort. We have no influence on that (event stream simply is best-effort to for instance not overload the cluster if it is already unhealthy). The UI can never use that to determine an actual state of the cluster. It can only associate it with existing objects and make the event visible if it is interesting for the user.
Finally as a third lane we have log-aggregation (different than showing the logs in the UI of currently running things) and metrics collection: They are independent of the runtime , probably hard to interpret for the UI and normally mostly make sense to be visualized or analyzed in extra web-portals (kibana, graphana, ...) or by extra tools (alertmanager, ...). As far as I have seen, the openshift UI normally provides links to the external tools in the appropriate places.
I don't think that we have more to offer here.
Things like the metrics API, the audit log or e.g. visualizing alertmanager alarms  probably also makes sense to display to a degree to users, but we would only provide the metrics. If this is then available for the UI or not, is not really something which kubevirt/kubevirt can influence.

I would differentiate between the last attempt and full history of actions. I agree that we shouldn't maintain full history "ourselves" and we indeed would have to rely on metrics for display purposes. But the result of last action is something different, that needs to be reliable. It can also be part of the object (so it goes away when object is removed), that's fine as well as once the object is removed the any potential associated flow is irrelevant and we again can just show historical data.
But then let's go back to the immediate latest result - if we do not want to keep it in the migration object, would it make sense to update VM with it?
For context in libvirt/oVirt you get the same behavior, the migration "task" is transient and there would be nothing to refer to after it's finished successfully or canceled,and so there is a callback. That "persists" the resulting data in the VM object for backend to pick up when needed - which is typically immediate as a reaction to lifecycle change of the VM. There's no need for a history, just for the most recent attempt.

I don't know. Why should the runtime provide historical data? You could argue the same way that you need a "v1/namespaces//pods/mypod/stop" rest-call instead of using DELETE, because you want to see afterwards for a few days on the pod itself how fast it terminated, or want to extract the logs 3 days after you stopped the pod. The same for VMIs, VMs, ...

That might not be a perfect analogy.  Pods VMI and VMs are workloads. Once you delete those objects you no longer care about those workloads or their state. The Migration object is tracking a single attempt to transition a workload. That migration object is tied to the lifecycle of the workload. As long as the workload persists, I think the migration object might maintain value for us.
Here's what I want to sort though.
If we need to maintain a full history of migration attempts for the UX, then I suggest we keep every migration object and let the VMI controller garbage collect them when the VMI is deleted. Metrics are just sampling the state of the system at a give point in time. If we need a detailed history for the UX, then for accuracy I think we'll need to maintain that in the runtime.
If we only need information about the last attempted migration, then the UX can gather that information today in the VMI's status section. We store enough information in the status section to derive everything we need to know about the last migration.
If we can answer those questions, then I think we can definitively say whether or not Deletion of the Migration object is a good idea or not.

That might not be a perfect analogy. Pods VMI and VMs are workloads. Once you delete those objects you no longer care about those workloads or their state. The Migration object is tracking a single attempt to transition a workload. That migration object is tied to the lifecycle of the workload. As long as the workload persists, I think the migration object might maintain value for us.

I think it is a pretty good one. For as long as you don't cancel/delete something in Kubernetes you very often see the previous attempts, so you kind of have a failure history, but cancel/delete means that you most of the time remove the history. I am not sure I understand why I would care more about an old migration in the runtime, than I would care about a Pod being evicted. In both cases everything can have been well, or not.

If we need to maintain a full history of migration attempts for the UX, then I suggest we keep every migration object and let the VMI controller garbage collect them when the VMI is deleted. Metrics are just sampling the state of the system at a give point in time. If we need a detailed history for the UX, then for accuracy I think we'll need to maintain that in the runtime.

I did not see any reason so far why we would want a detailed history in that sense, if you explicitly cancel a migration. If it runs  to success/failure it stays there. Even for e.g. load-balancers which do automatic migration, a cancel by users is not really interesting for them. Regarding to metrics, yes they are only specific points in time, that is why metrics and logs need to be collected while things are running.
From my point of view, I do not even understand why the last migration needs to be part of the vmi. Events are not reliable, but they should be reliable enough for ux hints. Collected metrics, logs and events should give a reasonable picture about the migration history.

Along the lines of Roman's last comment:

For as long as you don't cancel/delete something in Kubernetes you very often see the previous attempts, so you kind of have a failure history, but cancel/delete means that you most of the time remove the history.

and

[…] why we would want a detailed history in that sense, if you explicitly cancel a migration. If it runs to success/failure it stays there.

IOW: There are two basic paths for a Migration object after it got created: a) It will complete (fail or succeed) b) An external party cancels it while it is running or deletes it after it completed.
In either case: The object does not go away without user-interaction or after laying around for some time.
Specifically in the case we are discussing here - cancellation - the object is there when the user performs an operation (cancellation) on it, thus it also has the ability to observe the object.
In the other case - when the objects automatically run to completion - then a user can still observe the outcome (aka historical data), because the objects remain (for some time at least).
In short: In any case, an external party can have the knowledge why an object left the cluster.
The gap is only that this knowledge is not maintained over time. But to me this longer term history is not not something that the runtime requires to operate.
Now, otoh I do see that a UI would want this data. I see two ways:

/cancel subresource like we have for restart in order to let cancel a migration (It will run to complete, and will stay in the cluster)
An extra service which provides a configurable history on migration objects (maybe others as well?), we could use DELETE for migration objects, the UI would get historical data for this new service

I'm in favour of (2), as this makes the flow so CLI-natural, and for the UI to work nicely we keep additional data.
Side note on:

Events are not reliable, but they should be reliable enough for ux hints. Collected metrics, logs and events should give a reasonable picture about the migration history.

The UI can also watch objets, which is reliable. But: The history displayed in the UI might be independent of the runtime of the UI itself, which requires something like (1) or (2).

Exactly, for normal flows we keep the history. Just when you want it to go away it would be removed.

/cancel subresource like we have for restart in order to let cancel a migration (It will run to complete, and will stay in the cluster)
An extra service which provides a configurable history on migration objects (maybe others as well?), we could use DELETE for migration objects, the UI would get historical data for this new service

I don't want to build in things and work around the usual DELETE semantic just in case someone comes up with a use-case which so far no one provided.
I don't see the need for a new service. Events, metrics and logs should provide a consistent enough picture. I don't think that we pretend that running as an admin (migrations are for admins) a k8s cluster in production makes any sense without proper metrics and logs collections. If you cancel something in the runtime and need to further analyse what's going you always need that. I still did not see why the other thing is needed in a more pressing manner than when anything else is deleted in k8s. Please just tell me that. Just because UX wants to display it, is for sure no good reason.

@rmohr scheduling needs the information about at least the latest failure. I do not think we need full history, just the most recent attempt

I don't see the need for a new service.

The service I was speaking about can be tied to the UI. I don't see a need for it in the runtime.

scheduling needs the information about at least the latest failure.

I'm not sure if we need a tight coupling. Instead: I can imagine that a component like nod eproblem detector has a kubevirt plugin in order to monitor certain events (like migration failures) to then eventually taint nodes on certain conditions.

sounds ok to me then

An extra service which provides a configurable history on migration objects (maybe others as well?), we could use DELETE for migration objects, the UI would get historical data for this new service

i'd really encourage us not to create another service that needs to maintain a history of runtime state... We're talking about creating another stateful app here. Where does this state live? How is made highly available? My immediate reaction is that this is unnecessary complexity.
If the migration object history is important to us, keep the objects around until the VM is destroyed.

Failure and success are not deleted. Only if it is cancelled.

And that's the problem I have with using delete to cancel migrations. We might be deleting a successful or failed migration object. There's no guarantee the migration is canceled. It could have succeeded/failed at the moment we post the delete.

My point was that I do not see any immediate need to kepe historic data in the runtime.
If a component like i.e. a UI does need a comprehensive history, then it should record the reqquired state histories. The same is true btw for core Kubernetes.
However, I spoke to @jelkosz and it looks like the events we raise will be enough for now.

/remove-lifecycle stale

WOOT!!!


[Automation] Generate Fluent Lite from batch#package-2023-05

[Automation] Generate Fluent Lite from batch#package-2023-05

/azp run java - batch - mgmt - tests

API change check
APIView has identified API level changes in this PR and created following API reviews.
azure-resourcemanager-batch


chore: added dsa resource

Added Algorithm tutorial in data structures section of Database.

Hey @Akshatbhardwaj1! :) I closed this pull request because it's missing the issue number that it closes. Please add this information per the CONTRIBUTING.MD and then I’ll reopen your PR.

i have fixed the typo, pls review it.


Add version: Tableau.Public version 24.1.1062

Microsoft Reviewers: Open in CodeFlow

The download works in my browser, so I'm guessing that Tableau might be blocking the download.


Need to add a "Hide menu bar" setting

I confirm (by marking "x" in the [ ] below):

[x] This is not a troubleshooting question. Troubleshooting questions go here: http://www.mattermost.org/troubleshoot/.
[x] This doesn't reproduce on web browsers (such as in Chrome). If it does, issue reports go to the Mattermost Server repository.
[x] I have read contributing guidelines.

Summary
This application needs a "Hide menu bar" setting to allow a more streamlined interface. Competent users will understand that using the 'Alt' key will show the menu bar again.
Steps to reproduce

Operating System: Windows 10
Mattermost Desktop App version: 3.6.0
Mattermost Server version:  3.6.0  (3.6.2)
Clear steps to reproduce the issue:
--  File > Settings...
-- There is no "Hide menu bar" setting

Expected behavior

File > Settings...
There is a "Hide menu bar" setting

Observed behavior

File > Settings...
There is no "Hide menu bar" setting

Relevant error messages and/or screenshots

Possible fixes
Add a "Hide menu bar" setting for users to allow them to have a more streamlined UI. Intelligent users are able to handle this option without any issues. The UI shouldn't be impaired to avoid issues with inept users.

@mgove131 @haboustak This was causing issues where users who had previously hidden the menu bar were unable to perform the actions as they didn't remember where the menu bar was located.
This particularly caused confusion during early user experience.
We're considering a design where the menu bar would be placed at the top left corner of the screen similar to attached.
Would that work?

@jasonblais Thank you for looking into this! Yes, I think something like that would be great. The main issue is that the menu bar always at the top often stands out and isn't needed most of the time. Having a button to click that is integrated in the UI should be an adequate solution.

Glad to hear! I've added a Needs Design label for this issue so the UI can be finalized.
/cc @yuya-oc

The implementation you had in v3.5.0 is consistent with the native platform use of menus. In general, that's my preference. I'd imagine the menu on macOS isn't as annoying as on Windows. This hamburger menu design will be redundant with the menubar at the top of the screen.
There are probably only a handful of things that are important to the majority of users in the menu. The Settings option comes to mind. I'd consider pulling it out to the top-level using a gear icon. That would then give confused users access to unhide the menu on platforms that support it.

Yeah, I feel a new design is not necessary for macOS. The separated menu bar at top of screen is the common interface in mac apps. Additional menu button might be redundant.
On the other hands, on Linux, the position of menu bar is strongly depending on desktop environments. Recent Unity or GNOME use separated menu bar as well, but there are environments which use a traditional menu bar. So it seems a little hard to determine what is consistent.

I disagree with the idea that the tool bar is needed, even to be consistent with other OS applications. The interface is much cleaner without it there, and this worked fine in v3.5.0. At least put a 'hide/show menu bar' option in the hamburger menu if you aren't going to add a new menu bar button.
Again, it's unfair to punish competent users because some users are unable to understand how a feature works.

To be sure.
On macOS, apps can't control whether the menu bar appears. It's one of system preferences.
And "Hide menu bar" have never existed in Mac version of this app due to this reason.

Making Settings available via icon on the main screen is useful on all platforms and should help users who can't figure out how to unhide the menu. They'd click settings, and they'd find the option.
I'd restore the hide menu option on Linux, so it can be used with window managers that don't have a shared menu bar. Your documentation can outline that hiding the menu requires platform support for hiding it.

@haboustak @mgove131 Completely understand where you're coming from.
We were getting lots of users being confused how to get to the Settings page (some were even blocked from using the app) as they had auto-hidden the menu bar.
So as a temporary solution, we removed the setting, which was only available on Windows and Linux. We realize this isn't ideal but isn't our long-term plan.
What we're thinking of (and please do share feedback on this) is the hamburger menu design which would replace the menu bar, not be an addition to it.
So it would be roughly as follows:

hide the menu bar (always and permanently, to all users)
add the hamburger icon in place of where the Mattermost icon is currently in the window title, for easy access but without hindering the experience for users who don't need it.

I think this could work for all OS systems, although I'm less familiar with macOS and Linux.

In my opinion, it is a good solution for Windows. I'm also less familiar with macOS and Linux.

@jasonblais It also makes sense to want to improve the feature for everyone. If it was problematic for some users, it is reasonable to fix it. The only frustration for me is that it was implemented by removing the feature without a replacement. It was something I used and it was already implemented. But that frustration is mitigated since you are planning to re-implement it.
For me, the solution your are proposing makes sense. It would work for my use case and I think it wouldn't be confusing for other users. My main concern is getting the option back, even something like an option in a config file would be adequate for what I personally need. However, cleanly integrating the options into the UI is a good solution.
Thanks!

@mgove131 @haboustak
Wondering if you'd have examples of other apps that let you hide the menu bar and how this is accomplished (e.g. through a config option, app setting, integrating in the UI, etc.).
I'm just currently researching other apps to find which pattern might work the best for this project. All help is much appreciated.

For me, the old method worked fine. If I needed the menu, pressing Alt brings it back. And while it is hidden, it is not a distraction in the interface. If it is problematic for some users, the option can be hidden in a sub-menu or config file.
I don't have examples from other programs. I do think the screenshot shown earlier is a good, clean solution. My problem is that as is, the menu bar does not feel integrated in the UI and it is distracting.
I believe this was also mentioned, the majority of the options are not needed most of the time. Which is another reason it is nice to have the menu bar hidden.

Here's the proposed design (sorry, the screenshots are a bit blurry)

I'm not sure if the black colour for the hamburger menu bar is too dark, but we can try it out first. If it is, we can consider using  a grey colour matching the plus icon

We're currently using Slack at my job but are considering switching to Mattermost.  The menu bar in the native Slack app on Linux behaves how I think Mattermost v3.5.0 behaved - there is toggle in the menu bar Window >  Always Show Menu Bar. When the menu bar is toggled off it can be shown by hitting alt.
The hambuger option above does look nicer than the current menu bar although, depending on your window manager, may take up an entire row of space across the width of the app. I run AwesomeWM with no window decorations so there is no title bar to incorporate the button into.  I'd rather have that vertical space used by content of the app rather than an empty row containing either a menu or a single button to open a menu.

@yuya-oc FYI I've moved this to 3.9 since there's a higher priorities in the 3.8 milestone.

For others like me who want the menu bar hidden badly enough to find this ticket, but don't want to downgrade to 3.5.0 and lose spell check, the commit that removed ability to hide the menu bar is this one and the way to hack the menu bar away on 3.7.1 is here:

Become root (sudo su - or whatever)

Install the asar archive tool with npm install -g asar.

cd to wherever mattermost is installed (the dpkg on Ubuntu puts it at /opt/Mattermost)

cd resources

asar extract app.asar app will create a folder called app.

Using your favorite editor, find this event handler in the newly-extracted app/main_bundle.js and add the following lines:
  newWindow.setAutoHideMenuBar(true);
  newWindow.setMenuBarVisibility(false);

Re-create app.asar with asar pack app app.asar

There may be lazier/easier fixes, but not being familiar at all with Electron this is the workaround I've found.

Keep in mind how this will act on Linux; on those systems, Electron apps are drawn with a standard titlebar, and integrating with that titlebar is not something I've seen any Electron apps do. Instead, every Electron app that hides the menubar just does the standard autohide behavior like in Atom, VS Code, Slack, etc. and toggles visibility with the Alt key.

I personally do not want the alt key bound to toggle the menu bar, as I use the alt tab shortcut often, and sometimes the menu bar dialogue gets stuck open while I'm using other apps forcing me to go back to slack and press esc.  It would be nice to have the option to simply show or hide the menu bar, and even better to assign our own key binding to display it if the hide option is used.

I'm a competent user and all I want is the native Windows titlebar because Slacks custom drawn one does not work.

thank you drmoose, it is unfortunate there are some people  that think having the menu bar font use as much vertical space as two channels or three message lines is acceptable.

Yes, thank you drmoose. I also feel that it is very unfortunate that people have opinions that differ than my own.

Moving this to Jira: https://mattermost.atlassian.net/browse/MM-14073


[1,6.0-beta01] .DS_Store is not directory! Raw files should be placed in 'composeResources/files' directory.

hi
in macos for generate res class i get the following error :
 .DS_Store is not directory! Raw files should be placed in 'composeResources/files' directory.

you might have copy pasted something to composeResources directory. Delete the directory recreate it and copy paste through Android studio

.Ds_store is a mac file which is used to store folder information

Thank you.
it works.

Fixed by https://github.com/JetBrains/compose-multiplatform/commit/3040ea85bbc81cb6d1e22d6928646509ee8b601f

Please check the following ticket on YouTrack for follow-ups to this issue. GitHub issues will be closed in the coming weeks.


initcontainer in the k8s examples should be updated

Since the falcosecurity/probeloader image is not supported anymore, we need to update the way the initcontainer works here.
Now, the driver can be installed by using the falco-driver-loader script that's provided within official Falco's images.
Also, I believe that we don't need falcoctl in this process and the download URL is not needed anymore here since https://github.com/falcosecurity/falco/pull/1158
Additional context
The new approach is going to be documented soon :point_right: https://github.com/falcosecurity/falco-website/issues/186
See @leodido comments:

https://github.com/falcosecurity/contrib/pull/3#pullrequestreview-400796019
https://github.com/falcosecurity/contrib/pull/3#discussion_r410744569

cc @maxgio92

A new approach for the initcontainer :point_right: https://github.com/falcosecurity/falco/issues/1171

@leogr  thanks, I’d wait then for the driverloader image implementation

See https://github.com/falcosecurity/evolution/issues/25


Do  you guys know  is there any DART language version?

I'm writing a multi-platform program.
Secrets shard generated by C# can't be reconstructed in Dart. There is an SSS256 which is familiar with SecretSharingDotNet, but it does not work.

Hello @shadu120 ,
Ensuring the compatibility of tools and libraries that implement the Shamir Secret Sharing Scheme is difficult. Depending on the tool or library, meta-information may be hidden in the shares. Additionally, each share is a coordinate that can be represented differently depending on the tool/library.
Another aspect is how the algorithm was implemented. For example, some implementations use padding, while others use magic numbers, some use limited char arrays, while others use BigIntegers.
Essentially, you would have to focus on a single library and port it to various programming languages and platforms to ensure compatibility.
Depending on your use case and security level another approach could be SLIP-0039.

I'm working on some cross platform project. I can't find different packages/modules can communicate with each other by using different language.
But thank you very much , I'll try to implement the function myself.


Feature Requests

Some requests!

The ability to arrange panels like File Panel on either left or right side.

Currently:
Folders | Files | Preview | Info/Related
Requested:
Info/Related | Preview | Files | Folders
Or fully modular placement in any order. :)

Ability to see more than 1 file per row in File Panel, wrapping, with a larger maximum panel resize width (for ultrawide and 4K monitors). Example:

Current File Panel:
1
2
3
4
5
6
7
8
Proposed File Panel with 2 images per row:
12
34
56
78
With 3 images per row:
123
456
78
With 4 images per row:
1234
5678

The ability to Quicklook by hovering without clicking a button or key, with customizable delay.

Thanks for this great software.

1:
@Charles7668 has submitted relevant code, and I still need to evaluate its feasibility.
2:
This is a good suggestion, but there are many adjustments needed in the current structure to implement it, so it may not proceed quickly.
3:
I believe that the click action cannot be omitted.
The mechanism of QuickLook is: ‘Get the file selected in the current focus file manager’,
I’m not sure how to know which file the mouse is currently hovering over,
Even if there is a way to get such data, it must be the file manager of the current focus window to work,
That is to say, you have to at least click on the window to make the file manager or desktop the focus window to use it.


 The looped frames only happen on the first loop of a preview (after that it's smooth) and they're always in the actual encoded file. This behavior happens before any setting are applied and with a fresh install/update.

Try latest version, 3.18.8.

Yeah, that fixed it up. Thanks!


[RFC] Add new repair job for Git refs/heads using the reflog

Some users experence torn writes by Git after a crash to their branch refs (.git/refs/heads/**/*) leaving them unable to interact with their branches.
 This change generalises the fix to enable fixing of any ref using the corresponding reflog.
Changes:

Generalise the work done by GitHeadRepairJob into an abstract job GitRefsRepairJob.
Refactor the exising GitHeadRepairJob job to extend the abstract job.
Introduce a new GitHeadsRepairJob that attempts to fix refs/heads/**/*.

Questions:

The only refs we'll now attempt to fix are HEAD, and refs/heads/**/*, not remotes (or tags).
Do we want to try fixing remote refs? Can't these be re-fetched from the remote? (what about tags?)

TODO:

[x] ~Add functional test of the new repair job for corrupt refs/heads/**/*~ Done.

Closing this for now, since it's not actively under development