Allow Sync of Subtitles from synced videos

Best Effort Implementation for #39
Adds new Keybind, new Options and simple Event Mechanismum + UI Select Dialog for an Attempt of syncing Subtitles from a video to the asbplayer client (with page object dependant implementations for netflix and /watch path of youtube)
Client (requires repub to github pages):

Propagation of theme without synced video (on extension installed callback)
Propagation after tab was added to registry to trigger bind (and avoid errors in case the page loads quicker than the state update)

New Options:

Preferred Language Codes: Comma separated list of language codes which can be used in conjunction with other options to preselect / auto sync subtitles for specific languages
Autoselection of prefered Language Code (first track with matching code will be selected). Option can be useful if there are multiple tracks for a language so an User would not need to clear the language codes all the time
Auto Sync: automatically triggers the subsync process without User Input
Keep Pause: can be used to continue the video without the need of manually press anything or the play button

Example of manual selection:
https://imgur.com/a/pAWafEK
Example of full automatic sync:
https://imgur.com/a/cGn0Xgu
Version of extension not increased as i don't know if / when you want to release a new one

Thanks for the contribution. I will need some time to review this.

hi,
no worries i am out for the next ~1,5 week by myself. Will leave first high level comments and then come back when i find some time in the new year.

Merged Elements: can make sense i guess - name may even be reused for the subtitle filename instead. Need to check the implementation and if there are issues with the select one - could maybe be renamed to something like VideoDataSyncX etc. Only thing functional wise which comes to my mind right now is the fact it may not work well with a full automatic way as i thought of it. First there is a user interaction required to select the element (which fades out) which can be missed if triggered automatically / can be confusing for a user and second the dialog itself would be skipped with respective found languages (here the automatic naming could be used but it means if someone wants to have a manual name he could not use auto sync). Think also the error messages are currently always displayed on opening

tabs event: On Auto / quick keybind use it was basically always running into the tab not found error. If the event is not applicable i need to recheck this part of the implementation / may need guidance if you already found a way to avoid the race condition as i didn't go that deep into that part of the code

The feature doesn't seem to work unless an asbplayer tab is already open.
Ya i think you are right.. didn't had this case in mind.. needs to work similiar to the video name element which opens the tab with passed data or similiar.

Have a good start in to the next year - will come back later to your points when things settled down ;)

Cool, enjoy your time off!
Responding to your thoughts:

Merged Elements: can make sense i guess - name may even be reused for the subtitle filename instead. Need to check the implementation and if there are issues with the select one - could maybe be renamed to something like VideoDataSyncX etc. Only thing functional wise which comes to my mind right now is the fact it may not work well with a full automatic way as i thought of it. First there is a user interaction required to select the element (which fades out) which can be missed if triggered automatically / can be confusing for a user and second the dialog itself would be skipped with respective found languages (here the automatic naming could be used but it means if someone wants to have a manual name he could not use auto sync). Also the messages maybe in some cases not optimal anymore

Currently, a user interaction is required to select an element if there is more than one video element on the page. We would probably need to improve this logic for pages where we know what the video element is supposed to be. However, it seems that Netflix and YouTube only have one video element so we may not need to do anything. It should be noted that with the current approach we will may an issue for pages that have multiple video elements as the it looks like the auto-syncing will attempt to sync all of the video elements on the page (and I would guess the sync requests may compete for the same asbplayer tab).
You're right, some messages will not be optimal. In fact I think all of them will become unnecessary, namely the new command sync-external-subtitles will and as mentioned above the tabs-updated should no longer  be necessary. I may be missing others.

tabs event: On Auto / quick keybind use it was basically always running into the tab not found error. If the event is not applicable i need to recheck this part of the implementation / may need guidance if you already found a way to avoid the race condition as i didn't go that deep into that part of the code

It makes sense you were running into that issue very frequently as tabs are published to asbplayer tabs automatically only every 1 second, and I think there's some extra time needed for the tab data to be received if the asbplayer tabs have been backgrounded for a while. I would guess that retrieving the subtitle data may often take less than that amount of time. This is actually already an issue when dragging-and-dropping subtitles (or when syncing empty subtitle files) as there is a small window of time after auto-opening an asbplayer tab where the asbplayer instance isn't ready to receive the tab data. We try to work around this by force-publishing the data when auto-opening a tab but it doesn't seem to always work.
Since this issue is breaking auto-sync so often we could fix it in this pull request. However, since this race-condition is already a user-facing bug, I think it would be an easy enough change to make in a separate commit, as well.
For reference, these are my thoughts on a fix that would be isolated to TabRegistry and the client:
Once the sync message is dispatched, we can leave the forwarding of the sync message to an appropriate tab entirely to the background handler. Therefore, in theory there should be a way to avoid this problem with some changes only to TabRegistry. At a high level, I think we could do something like this:

Keep the tabs-updated message but create a background handler that receives the message instead of forwarding it all the way to the video elements.
Modify TabRegistry.videoElements values to include the src strings that each video element has actually synced.
Modify TabRegistry.findAsbplayerTab to include a check for the src of the video element requesting the sync.

@Renji-XD Let me know if you want to tackle the tab data race condition problem. I can also fix this issue in the main branch, if you prefer, as it's already a bug.

@killergerbah if you feel like it and have time go for it - will be anways a couple of days before i am back and you also requested to rebase already the forked repo.. i can then check later what you have changed and how to use it for this change (hopefully without much merge conflicts / effort : > )

I've merged the fix for the race condition into main. It should be a clean rebase for you but you will still to remove the tabs-updated message publishing and handling manually. You should be able to trigger the subtitle fetch without waiting and it should work because of the fix.

Ya, rebase done without anything on top required.
So related to your change - tbh i did not checked the old vs new implementation etc. in detail but i just quickly wanted to test a rebuild before starting any further changes (maybe next week)...
so apparently the error is gone but now it simply opens every time a new asbplayer tab in case there is an early sync request due to the fact that the received tabs is not yet updated at the time of passing this line https://github.com/killergerbah/asbplayer/blob/main/extension/src/services/TabRegistry.js#L77
not sure if i miss sth or if that was sth to be somehow handled by me?

so apparently the error is gone but now it simply opens every time a new asbplayer tab in case there is an early sync request due to the fact that the received tabs is not garantueed to be updated yet by the a heartbeat at the time of passing this line https://github.com/killergerbah/asbplayer/blob/main/extension/src/services/TabRegistry.js#L67

Okay, so this is likely a new bug that comes up because of the nature of the auto-sync.

The original fix worked for the case when the page loads and the user drags-and-drops a subtitle file, or tries to sync an empty one. Usually this manual dragging-and-dropping process takes more than a few seconds, during which time it is likely the video elements of the page will be published to all of the asbplayers.

With your change I am guessing that the subtitles are being retrieved so quickly that it's possible they are being sent before the video elements are synced, as this can take up to a second or so (some amount of time to the heartbeat, and up to a second to publish to the video elements to the asbplayers).

Just to cover all bases, there is another reason a new tab may open even if an asbplayer tab already exists. If a tab is backgrounded for a long time, Chrome stops running the JS as frequently (or at all) in the tab. Thus the heartbeat stops running and the tab disappears from the tab registry. So far I haven't been able to find a solution around this, but this is a separate issue and probably shouldn't be dealt with in this change as this problem has always existed.

So, assuming that the issue is occurring even when the background tab is sending a heartbeat, I believe we will want to fix the race condition described two bullet points above in your change. I'm not immediately sure what a good solution is right now, but if it's possible it would be great to keep all of the tab management/finding logic in the background scripts to avoid any special-case logic.

a potential workaround could may be to move the sync message from synchandler to the tabregistry and just queue the tab, src and subtitle data to the registry in case the tab was not found (while opening a new asbplayer tab in case there is none to start the heartbeat) .. then call a flush method in the heartbeat handler which goes over the queue items and recall the findAsbplayerTab method (up to e. g. 5 ticks before the item is removed with an error)
Under the Assumption that for all normal cases the tab is found immediately and that there will not be that many asbplayer tabs and queued Items otherwise i don't think it would be some heavy footprint even with the 1s interval execution.. not sure if that may bring implications or race conditions.. i quickly tested it and at least the issue i noticed is gone

@Renji-XD Is this a correct interpretation of your solution?

Content script sends sync request.
Sync request handler calls findAsbplayerTab.
a. If findAsbplayerTab fails and TabRegistry.asbplayers map is NOT empty, queue request in background.
b. If findAsbplayerTab fails and TabRegistry.asbplayers map IS empty, open a new tab.
c. If findAsbplayerTab succeeds, stop here.
asbplayer heartbeat handler will call  findAsbplayerTab for all the requests in the queue.

I'm not sure if I interpreted this part of your solution correctly:

(while opening a new asbplayer tab in case there is none to start the heartbeat)

as I'm assuming we do not want to open an asbplayer tab every single time.

yes i think you got what i mean. that was the code i was using to play around

flush is the iteration function called by the asbplayer heartbeat handler on respective interval tick

Okay thanks for clarifying.
I'd like to suggest the following modifications to your approach:

Instead of using syncQueue, which is shared state, use the recursive _anyAsbplayerTab which I believe already implements the behavior you're proposing and keeps all required state local to the function call.
Since _anyAsbplayerTab will recurse on its own every second, you don't need to change the asbplayer heartbeat handler to do anything new.

I believe with this approach the diff will be small. It should look something like this (untested):
    async findAsbplayerTab(videoTab, videoSrc) {
        let chosenTabId = null;
        const now = Date.now();
        let min = null;

        for (const tabId in this.asbplayers) {
            const asbplayer = this.asbplayers[tabId];

            if (this._asbplayerReceivedVideoTabData(asbplayer, videoTab, videoSrc)) {
                const elapsed = now - asbplayer.timestamp;

                if (min === null || elapsed < min) {
                    min = elapsed;
                    chosenTabId = tabId;
                }
            }
        }

        if (chosenTabId) {
            return chosenTabId;
        }

        if (Object.keys(this.asbplayers).length > 0) {
            return new Promise((resolve, reject) => {
                this._anyAsbplayerTab(videoTab, videoSrc, resolve, reject, 0, 5);
            });
        }

        return this._createTab(videoTab, videoSrc);
    }

yes you are right.
do you mind if i remove the min/elapsed part for now (looks like it is anyways always passing the condition) because then the initial lookup could also reuse the _anyAsbplayerTab method

Example
    async findAsbplayerTab(videoTab, videoSrc) {
        const chosenTabId = await new Promise((resolve, reject) =>
            this._anyAsbplayerTab(videoTab, videoSrc, resolve, reject, 0, 1)
        ).catch(() => {});

        return (
            chosenTabId ??
            new Promise(async (resolve, reject) => {
                if (!Object.keys(this.asbplayers).length) {
                    await new Promise(async (resolve) => {
                        chrome.tabs.create(
                            {
                                active: false,
                                selected: false,
                                url: (await this.settings.get(['asbplayerUrl'])).asbplayerUrl,
                                index: videoTab.index + 1,
                            },
                            resolve
                        );
                    });
                }
                this._anyAsbplayerTab(videoTab, videoSrc, resolve, reject, 0, 5);
            })
        );
    }

do you mind if i remove the min/elapsed part for now (looks like it is anyways always passing the condition) because then the initial lookup could also reuse the _anyAsbplayerTab method

I think in it's beneficial to keep the original for loop even if it seems to repeat some code. Trying to reuse _anyAsbplayerTab changes the behavior of the code so that it's calling an async function to perform a calculation that can be done synchronously.
Alternatively, if you want to reduce duplicated code in that class then you could extract the loop into its own function and instead reuse it from _anyAsbplayerTab.

ok, so i will try to do the changes this week.
To multiple Videos per Site i think it is a fair assumption that this feature will only work on single video pages (which should cover most of platforms). It is anways not garantueed you will have a site implementation which is able to identify which video binding belongs to which data etc. and also it should not be that big pain for an user to go to the main page of the video platform in case of embeddables or similar in my opinion. Worst case he can still drag&drop subtitle files there.
To sum up changes:

code changes as per pr comments
small fix to the tabregistry
remove subsync/video-name container / ui elements and merge them to a new VideoDataSync one which allows to set name and select subtitle for sync (which is set to off on non supported sites). Any Error Message will be shown as last element above buttons

I will remove the alert and make the dialog nonblocking. What is your preference in terms of behavior of data loading on subsync supported sites:

Display Dialog Title and Spinner + disabled Elements until Subtitle Data is loaded (worst case name cannot be set independantly in case of missing response - timeout is not a good alternative i think as it cannot be predicted how long the subtitle will be loaded e. g. on a slow vpn connection)
Spinner besides disabled subtitles Input with off as selected value (as long as loading), other elements enabled, name will be replaced by returned data (can be confusing if user started to type before response returned and then his input is gone)
Spinner besides disabled subtitles Input with off as selected value (as long as loading), other elements enabled, name will be only replaced by returned data if nothing entered yet (some users may never know there is an autofill when they always start typing)

think that was all we discussed so far

To multiple Videos per Site i think it is a fair assumption that this feature will only work on single video pages (which should cover most of platforms). It is anways not garantueed you will have a site implementation which is able to identify which video binding belongs to which data etc. and also it should not be that big pain for an user to go to the main page of the video platform in case of embeddables or similar in my opinion. Worst case he can still drag&drop subtitle files there.

Sure, I agree that we don't need to address the multiple-videos-per-site possibility for now. However, I think it would be ideal if subtitle fetching is triggered at a page level rather than at a Binding (per-video-element) level as the extension could start behaving badly if YouTube suddenly decided to add a second video element (for example, a separate video element for ads).

code changes as per pr comments
small fix to the tabregistry
code removal for new keybind (will be the existing toggle-video-select)
remove subsync/video-name container / ui elements and merge them to a new VideoDataSync one which allows to set name and select subtitle for sync (which is set to off on non supported sites). Any Error Message will be shown as last element above buttons

In the interest of simplifying UX, I would like to propose:

Remove "keep pause" option. We already have behavior for this that is implemented by the Anki dialog. That behavior is: put video back whatever state it was in before the dialog was requested. I believe this is the most reasonable behavior and dialogs should consistently implement it. Currently, the video-select dialog does NOT implement that behavior (bug) so implementing the correct one could be a separate change.
Keep the style of English used throughout the software consistent. I noticed in documentation and help you are capitalizing nouns - please stay consistent with the rest of the software.
(P2) Simplify the new subtitle sync options. I believe we only new option we need is the "auto sync" toggle. The selection of the language does not need to be configured as this can be inferred from what the user actually chooses to sync. The dialog can be displayed if the last synced language code is not available for some reason. If the user for some reason wants to change the language code they always have the option of opening the dialog manually through Ctrl+Shift+F, but I think it's safe to assume that this case should be very rare.
(P2) As mentioned above, it would be ideal if subtitle fetching is triggered at a page level rather than at a Binding (per-video-element) level as this could protect us from bugs and save us time in case we ever want to implement auto sync on pages that have multiple video elements (like Amazon Prime).

I will remove the alert and make the dialog nonblocking. What is your preference in terms of behavior of data loading on subsync supported sites (think 3 is potentially the best):

Yes I agree 3 sounds the most reasonable.

i added one more change to how bindings are added / removed which you may check if you can think of implications.
I had my tests running with bookmarked playlists / videos but after updating the pr i kept the extension running and later i noticed an odd case on youtube. When you enter via the main page and hover a video they actually insert an video element. When unhovering they keep the element (with unset src) and carrying it across all navigations which lead to the odd behavior that on triggering a sync you had to select the video element manually again as there were now multiple bindings on one page - also it occurs that the image sometimes overlapped each other so that you could not interact with it etc.
I added the condition that the video needs to have an actual value for the src or a source children with a src

i added one more change to how bindings are added / removed which you may want to
check if you can think of implications.
I had my tests running with bookmarked playlists / videos but after updating the pr i kept the extension running and later i noticed an odd case on youtube. When you enter via the main page and hover a video they actually insert an video element. When unhovering they keep the element (with unset src) and carrying it across all navigations which lead to the odd behavior that on triggering a sync you had to select the video element manually again as there were now multiple bindings on one page - also it occurs that the image sometimes overlapped each other so that you could not interact with it etc. When entering youtube via a video / playlist / search or reloading the tab this behavior was back to normal.
I added the condition that the video needs to have an actual value for the src or a source children with a src in order to be valid for having a binding

i think your assumption is correct - i also had this on rare occasions when i was really speedy and pressed the keybind while elements / video were still building up / after navigation .
I think it was related to https://github.com/killergerbah/asbplayer/blob/main/extension/src/services/FrameBridgeClient.js#L72 (not sure if you looked at errors and can confirm your case). As the frameid is asynchronously set in a resolved promise and is awaited in the sync class i was a bit confused on what is the cause.. but as it was not happening often and only in a time window of couple of seconds after page load i did not spent time on it xD
Let me check again if i see other causes

Hi,
one more unfortunate issue i found with automatic syncing and fullscreen. When enabled and you use a (slower) connection like vpn it seems the time between video changes pass the time in which chrome clears the user activity state..
as the dialog is skipped the request to put the element back in fullscreen will throw with an error ("...API can only be initiated by a user gesture...").. you can catch it but there will always be a warning printed in the error section of the extension page...
so what is your preference here:

New Option to restore Fullscreen which needs to be manually enabled/disabled by user (most likely unclear to user what it is doing / when he should use it)
Simply catch and ignore the warning (fullscreen will not work on slow connections, can produe a lot of entries in the error section i guess)
Always skip to restore fullscreen on auto sync (trying to track any user interactivy seems odd - user need to retrigger fullscreen by himself in this case with autosync)
Simply skip the need of executing the keybind and always show the dialog (similiar to if the last synced language is not available).

Hey @Renji-XD , why is there a need to exit fullscreen in the first place? Can we just let the sync happen without exiting full screen?


Refactoring. Change project structure

Instead of trying to implement MVC-pattern, I implement objects with common functionality like gzserver, gzstorage, gzHttpClient, jstemplate.

Coverage decreased (-3.7%) to 65.511% when pulling 6ab910e33d58a0615e55b881df2599680179afe9 on refactoring into 7f1e90993d8d9de05a41e0b23a5389dd42236212 on master.


Augmentation of diversity by shuffling tiles

Hi,
In your paper you mention diversity augmentation by giving shuffled tiles of the original image to the generator ; have you implemented this anywhere in github?
Thank you.

Yes. You could refer to util/random_tile.py to produce enough images composed by random tiles and then feed them to the well-trained models to yield diverse results.

All right, thank you.


Create Audio Sink in Unity

Hi,
I would like to receive audio from the browser in Unity. I see it is possible to add a sink to a track passed to OnTrack using the AudioTrackInterfaceExtension::AddSink() method. However, at present there is no class implementing IAudioTrackSinkInterface that allows native code to callback a managed OnData method?
So to receive audio I must:

Create a native class DelegatingAudioSinkInterface that subclasses webrtc::AudioTrackSinkInterface.
Have the subclass override OnData and callback into a managed object using a function pointer passed in on construction (as the DelegatingVideoSyncInterface does).
Create a managed DisposableAudioSinkInterface class, that constructs DelegatingAudioSinkInterface using a C api.
DisposableAudioSinkInterface should receive a IManagedAudioSink object, and retrieve the function pointers from this to pass via the C api to the new DelegatingAudioSinkInterface.
The C api should return a C pointer to DelegatingAudioSinkInterface, which stores it and returns it through the Ptr member, implementing IAudioTrackSinkInterface.
The DisposableAudioSinkInterface can then be passed to the AudioTrackInterfaceExtension AddSink method.

There is already a managed type AudioTrackSinkInterface, that is created by the AddSink callback from a native pointer passed from DelegatingAudioSourceInterface. This should not be used because that sink is owned by WebRTC. Instead a new disposable class should be created to manage the lifetime of the managed sink.
Is this correct?

I'm sorry to tell you that would not work well.
tl; dr: The audio processing is required to be in real time and the garbage-collector Unity depends on is not really good at such a workload.
 Each threads managed by Mono runtime holds references to allocated objects, and the garbage collector marks those references so that it does not free the objects still referenced.  (Note: you still depend on Mono runtime even if you use IL2CPP; IL2CPP only replaces the IL evaluation feature of the runtime.) The mark process requires the threads to be stopped (i.e., to "stop the world"). See the following article to learn how the behavior can be observed (and the incremental garbage collection mitigates the impact):
https://blogs.unity3d.com/2018/11/26/feature-preview-incremental-garbage-collection/
Now, let's get back to WebRTC. webrtc::AudioTrackSinkInterface.OnData is called from a special thread with a high priority to minimize audio disruptions because humans are sensitive for them. One problem is the thread is not managed by Mono runtime. Fortunately, Mono provides a solution for this case: call mono_thread_attach() to let Mono manage the thread.
https://www.mono-project.com/docs/advanced/embedding/#threading-issues
However, this also causes other two problems:

mono_thread_attach() is the function Unity manages and hard to refer to it for an external library.
The thread will be affected by "stop-the-world", which is not good for real-time processing.

The later problems is critical and the very reason I decided not to implement IManagedAudioSink.
It still does not mean you have to abandon audio completely. There are possible alternative solutions:

Do it completely in C++ if you do not need Unity for audio processing.
Implement a native audio plugin, an infrastructure Unity provides for real-time audio, if you need to incorporate WebRTC with Unity's audio. See https://docs.unity3d.com/Manual/AudioMixerNativeAudioPlugin.html.

The later option introduces a dependency on Unity. Either way, the implementation will be more application-dependent and not be suitable to live in this repository.

Hi, Thank you for explaining.
I believe I understand: OnData callbacks are made from a thread unknown by mono, meaning they may try to access variables being moved by the GC. To prevent this, mono must be given control of the thread, but this is difficult and introduces side-effects.
(The problem does not occur for video because OnFrame is called by one of the threads that are wrapped?)
Could another thing to try then be to receive OnData though a delegate [1] that limits access to pinned objects? This could then attempt to marshal the data into OnFilterRead().
Obviously that is out of scope of this repository.
However, what about just the C API?
If I,

Create a DelegatingAudioSinkInterface class that stores a function pointer for the OnData callback,
Create a C API that creates/destroys this object (create call taking only a function pointer retrieved with GetFunctionPointerForDelegate)

This should follow the existing binding conventions?
However, no DisposableAudioSinkInterface or IManagedAudioSink would be created. Instead, the pointer returned by (2) could be passed to an instance of AudioTrackSinkInterface, which in turn could be provided to the IAudioTrackInterface.AddSink() extension.
This would be done in application code through PInvoke.
A native plugin could also find the address of the function to interact with it, without needing to link explicitly.
Would that work?
[1] Through a delegate that is kept around longer than the sink, or a static method.

I believe I understand: OnData callbacks are made from a thread unknown by mono, meaning they may try to access variables being moved by the GC. To prevent this, mono must be given control of the thread, but this is difficult and introduces side-effects.

Yes, that's right.

(The problem does not occur for video because OnFrame is called by one of the threads that are wrapped?)

Actually, OnFrame has the same problem. A C++ class, webrtc::VideoBuffer and its .NET binding, Pixiv.Webrtc.VideoBuffer are added to workaround this. The example code which resides at examples/unity polls the pointer webrtc::VideoBuffer holds to maintain the reference to the latest frame provided by OnFrame. This works because skipping a few frames is often fine for video.

Could another thing to try then be to receive OnData though a delegate [1] that limits access to pinned objects? This could then attempt to marshal the data into OnFilterRead().

I cannot be sure about that. Mono creates a bunch of metadata of a thread when mono_thread_attach is called and there is no clear way to ensure it does not refer to them when you do not call mono_thread_attach. I'm also not sure if static fields are really "static"; maybe the underlying memory region is managed by the GC. (Also remember: Unity can break assumptions you have. In fact, I was forced to dig into https://github.com/Unity-Technologies/mono a few times when I was developing a Unity app.)

However, what about just the C API?
If I,

Create a DelegatingAudioSinkInterface class that stores a function pointer for the OnData callback,

Create a C API that creates/destroys this object (create call taking only a function pointer retrieved with GetFunctionPointerForDelegate)

This should follow the existing binding conventions?
However, no DisposableAudioSinkInterface or IManagedAudioSink would be created. Instead, the pointer returned by (2) could be passed to an instance of AudioTrackSinkInterface, which in turn could be provided to the IAudioTrackInterface.AddSink() extension.
This would be done in application code through PInvoke.
A native plugin could also find the address of the function to interact with it, without needing to link explicitly.
Would that work?

I belive that would work. However, I recommend you just to link this library or to modify it. Linking the library has an obvious benefit that it can make sure the function actually exist at the build time. Modifying this library is completely fine, too; I'm somewhat certain that reworking a patch to make it consistent with WebRTC's update is easier than maintaining your own build infrastructure.


Document why Inventory Tool and Themes are deleted

Trello card
Document why we have decided to remove the Inventory Tool and
Theme filtering from the Audit Tool.

@pmanrubia – I've made some edits. Happy for you to rebase and merge.

Thank you @andrewgarner for your review. I have merged your changes.


scrapy-playwright connect to remote firefox instance

Currently, scrapy-playwright only supports Chromium for connecting to remote browser instances over CDP (Chrome DevTools Protocol). Firefox is quite effective in bypassing detections against some anti-bot measures. Is there any possibility to add support for connecting to remote Firefox instances? I understand that it's not possible over CDP, but Playwright provides a connect() method which allows connecting to remote Firefox instance. I have tried it with browserless platform, its working fine but scrapy-playwright only support connect_over_cdp() method at the moment.

Sounds like a good feature to have, thanks for the request.

Released as v0.0.38. See the PLAYWRIGHT_CONNECT_URL and PLAYWRIGHT_CONNECT_KWARGS settings.


409 bug display in solo mod

Some bug fixes:
No more raise if wrong arguments
Display text player
Duplicate Entities stopped in solo

Codecov Report

Merging #412 (d3d7a5c) into master (f26172c) will decrease coverage by 0.12%.
The diff coverage is 0.00%.

@@            Coverage Diff             @@
##           master     #412      +/-   ##
==========================================
- Coverage   14.71%   14.58%   -0.13%
==========================================
  Files         151      151
  Lines        4573     4600      +27
  Branches     2536     2554      +18
==========================================
- Hits          673      671       -2
- Misses       3346     3371      +25
- Partials      554      558       +4

Impacted Files
Coverage Δ

AdminPanel/main.cpp
0.00% <0.00%> (ø)

Client/ClientRoom.cpp
0.00% <0.00%> (ø)

Client/main.cpp
0.00% <0.00%> (ø)

Room/main.cpp
0.00% <0.00%> (ø)

Server/main.cpp
0.00% <0.00%> (ø)

libs/ArgumentHandler/ArgumentHandler.cpp
0.00% <0.00%> (ø)

libs/ArgumentHandler/ArgumentHandler.hpp
0.00% <ø> (ø)

libs/GraphicECS/SFML/Systems/UpdateLifeText.cpp
0.00% <0.00%> (ø)

...bs/R-TypeLogic/Server/Systems/CollidableSystem.cpp
27.27% <0.00%> (-3.68%)
:arrow_down:

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.


fixing 2704 -- Rename LanguageViewLocationExpanderOption to LanguageV…

…iewLocationExpanderFormat

:shipit:  after addressing minor comments.

Thanks @kirthik ! Checked in 8cb2aae4f5ce7899c123e41bdc53b7ab0e9a3008.


[testng] implement as a test listener instead of requiring inheritance

One-line summary
implement as a test listener instead of requiring inheritance
Description
This is ~the same as~ similar to what we did for JUnit 4 & JUnit 5; unlike the others I couldn't make the startup happen automatically before the test's before hook (@BeforeMethod) executes. So, you have to explicitly tell the listener class to start things, and because the values are stored in the test context you have to explicitly pull them out to use them.
Update: Turns out Context was not completely Thread Safe, so I had to re-re do it the way JUnit 5 was redone storing sessions as a unique key in the context. Created a separate SessionContext to manage everything since we can't use a constructor for the Listener and it stopped making sense to put all the unrelated things into that listener class.
Reasoning:
We need to make it easier for people to add this into their existing code
That means we don't want to force a specific inheritance on the user
Using a Listener instead of a SuperClass should make this more extensible/compatible
Types of Changes

New feature (non-breaking change which adds functionality)

Considerations
This should be easier to work with, but TestNG gets complicated quickly with XML files and ThreadLocals
The implementation here is using TestContext to store the session and driver variables to get around Threading limitations
I even added a parameterized example as proof of concept.
Ideally this is included as part of Sauce Bindings 2.0
I need to make sure toggling local/remote works

Marking as draft while I verify that this is doing what it needs to in the larger test suite.

Got this verified working. Needed to add ThreadLocal still in the test parts. Need to either always pull driver and session from context or use ThreadLocal, and the latter is more common.


Crash on Start !!

Issue Description:
Note: If this bug occurs in a modpack, please report this to the modpack author. Otherwise, delete this line and add your description here. If you are using an unreleased version of Ender IO (e.g. for 1.8.9), please don't open an issue for features that have not been announced as "finished" or "working".
What happens:
When i started my old world. I crash at the start. I don't know what happened.
But i created a new world. Nothing happened.
Report file :
""Chisel: Errors like "[FML]: Unable to lookup ..." are NOT the cause of this crash. You can safely ignore these errors. And update forge while you're at it.
EnderIO: Found the following problem(s) with your installation:
* The RF API that is being used (1.7.10R1.0.2 from ) differes from that that is reported as being loaded (1.7.10R1.1.0 from excompressum-mc1.7.10-1.1.143.jar).
It is a supported version, but that difference may lead to problems.
* An unknown AE2 API is installed (rv3 from appliedenergistics2-rv3-beta-6.jar).
Ender IO was build against API version rv2 and may or may not work with a newer version.
This may have caused the error. Try reproducing the crash WITHOUT this/these mod(s) before reporting it.Chisel: Errors like "[FML]: Unable to lookup ..." are NOT the cause of this crash. You can safely ignore these errors. And update forge while you're at it.
EnderIO: Found the following problem(s) with your installation:
* The RF API that is being used (1.7.10R1.0.2 from ) differes from that that is reported as being loaded (1.7.10R1.1.0 from excompressum-mc1.7.10-1.1.143.jar).
It is a supported version, but that difference may lead to problems.
* An unknown AE2 API is installed (rv3 from appliedenergistics2-rv3-beta-6.jar).
Ender IO was build against API version rv2 and may or may not work with a newer version.
This may have caused the error. Try reproducing the crash WITHOUT this/these mod(s) before reporting it.""

Steps to reproduce:

...

Affected Versions (Do not use "latest"):

EnderIO:1.7.10_<IP_ADDRESS>8_beta
EnderCore:1.7.10_<IP_ADDRESS>_beta
Minecraft: 1.7.10
Forge: releae forge-<IP_ADDRESS>4

Your most recent log file where the issue was present:
[pastebin/gist/etc link here]
https://drive.google.com/file/d/0B2jjHSitThJWeTJaU3lVMzhhN2c/view?usp=sharing

got o wyldmods.simpleachievements


Permission Denied when running pipework as a cron job

I was trying to use pipework to bind a docker container with a given interface and ip address on startup. This worked fine when run as a root user, but failed to work when I set up a cronjob (even as a root).
cannot open network namespace "16324": Permission denied
After a lot of research, I found a solution -
It turns out that SE Linux was enforcing some rule, so had to turn it off.
so running setenforce 0 and restarting docker service, worked for me!

I think it's just a default SELinux policy that prevents to manipulate some system objects from a cron job.
I'll close this issue, but thanks a lot for reporting it, that's very useful!


node-sass 3.5.0 beta

Any chance we could consider a pre-release version/tag that uses the big node-sass/libsass upgrade:
https://github.com/sass/node-sass/releases/tag/v3.5.0-beta.1   ?
It would be great if the gulp-sass community could start testing the big changes in the beta.  Not sure how much work it would be to update the dependencies and flag a pre-release.
Thanks so much.

We already have this.
npm install node-sass@beta
On Feb 2, 2016 5:24 AM, "btwolfe79"<EMAIL_ADDRESS>wrote:

Any chance we could consider a pre-release version/tag that uses the big
node-sass/libsass upgrade:
https://githubcom/sass/node-sass/releases/tag/v350-beta1 ?
It would be great if the gulp-sass community could start testing the big
changes in the beta Not sure how much work it would be to update the
dependencies and flag a pre-release
Thanks so much
—
Reply to this email directly or view it on GitHub
https://github.com/dlmanning/gulp-sass/issues/435.

Apologies I misread the which repository this was. We'll release a beta soon.

v2.3.1 has been release with<EMAIL_ADDRESS>


Change the way how CSs are assigned to loci in SuSiE

Currently we use the standard approach assigning CSs based on ordered PIPs and its cumulative sum.
However it has sense to experiment with other approaches including into account the LD with the lead variant. For example order SNPs by PIP*R2_with_lead and then select first 99% by cumulative sum of PIPs. It potentially can improve the purity of CSs and the total number of CSs we obtain.

Finngen credible sets have problems. Their pipeline orders credible sets by purity instead of log(BF). This is a legacy decision on their part which has knock on consequences, especially for the inclusion of variants into 95% or 99% credible sets:
Some variants appear in different credible sets. For example the top variant in 95% credible set 1 will also be assigned to 99% credible set 2 instead of 1.
|          trait|                rsid| cs|cs_99|             alpha1|              alpha2| |ANTIDEPRESSANTS|chr10_118081733_G...|  1|    2|  0.812342679128655|4.04201788934286e-05|
In some cases, this can result in there being a credible set 2 ..., with no credible set 1 at the locus.
Need to investigate eQTL-catalogue credible sets too.


feat: token reputation

This PR implements token-based reputation. It is inclusive of a draft (unsubmitted) EIP located in research, the minimal ITokenReputation interface, and associated adjustments to other contracts and tests.
In relation to the EIP, the following provides more detail and can be found at research/eip-draft_token_reputation.md:

This is the core EIP for token-based reputation. It is a minimal interface that simply has staking & unstaking methods along with events; the design is to be as lightweight as possible and hone in on metadata having the "value" and storing reputation using indexed events / data availability.
There is an ERC-165 interface ID, which should be correct for the supplied token reputation contract—the code to generate this ID was with type(ITokenReputation).interfaceId, which is 0x88832242.
With a partial goal of EIP acceptance, the majority of the EIP focuses on non-Tableland specific features and includes real-world usage by OpenSea today. OS disables transfers on a Stake event as long as it includes a tokenId parameter; it can include additional params and still works as expected (according to the OS support team). The Unstake event will re-enable sales.
At the end of the EIP, two example implementations are provided. The first is generic but at least names the ERC721 token and baseURI with Tableland.
The second example is very Tableland specific (SQLHelpers, TablelandDeployments, gateway query) and tries to sort of justify the Tableland-specific example using the comments to explain what the dynamic metadata does at a high level.

This example is fully functional (you can deploy the code) but, perhaps, isn't the "most real" implementation; however, an EIP must be as generic as possible, so this was the ultimate idea with the attempt.
The contract creates a pilot sessions like setup and inserts/updates table data; the tokenURI queries the Tableland gateway with a select statement that forms a basic attributes array, calculating Reputation with a naive end_time minus start_time (i.e., no aggregate sum; just a basic example of a row's reputation score).

With the ITokenReputation.sol contract, it has been implemented by the TablelandRigs.sol contract. This was easier than doing so in TablelandPilots.sol as the function signature was more aligned to the core Rigs contract. It was rather straightforward to drop it in, which is a good sign from a usability standpoint (only took a few mins to adjust the exist train / pilot / park methods and tests). Note that this does not change any core contract logic but only method names; external apps like The Garage are affected since the Rigs Garage functions are now different. Lastly, a couple of tests were also added.
Closes REA-2, REA-3.

This isn't a comment on the code, so much as a comment on the EIP; it seems weird for a reputation token to be salable. That almost seems to defeat the point of it being a reputation token, no? How should I read that?

Very good stuff! Finally diving in here.

I should probably add these thoughts to the EIP itself, assuming this helps clarifies the EIP's line of thinking! Perhaps the naming convention could be changed to help?

These are great point @dtbuchholz. Def sound worth adding to the EIP

@sanderpick before I make an "official" EIP PR, I just wanted to double check the draft looks good to go.

@dtbuchholz can you remind me why we are removing the training concept? Is it because it's not compatible with the opensea supported stake events?
If we drop it, can owners re-pilot with the default pilot? it would be cool if they could because it would be like a badge of early support.

@sanderpick I'm still open to keeping training, but I think it's because we created it to buy us time and don't really need it. From a lore perspective though, I'm split because training is an interesting concept. The most recent changes I made here obviously removed training, but the original PR kept it in there--i.e., there aren't compatibility issues and can still exist with OS Stake events / token rep EIP.
To provide some clarity on the comment about backwards compatibility, this was the original setup for the pilot data (but I should probably add Local Tableland tests to double check it's all good):

Currently training with trainer pilot == 1
Completed training and then re-piloted with a trainer == 2

If we do drop training, everyone (including the Rigs that never tried to train) gets a stock/default pilot in this current setup and can also re-pilot with it--the UI would have to make changes to account for this, though, along with other fn sig changes. But, I did debate using SQL to determine a "fancy" or "boring" stock/default pilot, which aligns with your early adopters desire.
So, historical session data stores actively piloted with or re-piloted trainers == 1 or 2: the early adopters. With training dropped, we could could use SQL to check for sessions with a 1 that completed training (the session never ended) or for any sessions with a 2--these could get the "fancy" Dispatch stock pilot. We'd probably have to store a block.number to check "only sessions prior to block X are valid" here.
For anything after block X, these Rigs get the "boring" stock/default pilots (the image we use today). That is, the metadata can hold these as attributes and also dynamically render the image based on the SQL response. (This is, in part, why I decided to use 1 as the value for all stock pilots.)

Makes sense. Thanks for the detail. I'm coming around to your current setup, ie, removed training and make the stock pilot available to everyone. We have a bunch of community rigs that haven't ever been trained... would be a bummer to devalue those by not giving them a cool stock pilot. We could always add some additional metadata to indicate "early adopters" that could be shown w/ a badge or something since all the data is there to make that distinction.

We have a bunch of community rigs that haven't ever been trained... would be a bummer to devalue those by not giving them a cool stock pilot

@sanderpick a couple of ideas:

We put all of these in training, fly for 172800 blocks, and then park them; thus, they'll all have completed training and future-proof for some early adopters setup. We can deploy the changes in this PR to mainnet after this occurs.
Create a snapshot of these tokens and store them in a static table on some chain—maybe Polygon or Optimism, which adds to our cross-chain story (i.e., we'd eventually have Rigs tables on Ethereum, Arbitrum One, Filecoin, and Polygon/Optimism). The "early adopters" table. We could choose to do this with all of the early adopter Rigs (not just the community ones) that have completed training, too, to make the query I noted above a bit easier.

Needless to say, this adds a bit of complexity. Related to your other comment—should I deploy the current changes in this PR to the Mumbai contract, or wait until we sift out some of these details before doing so? (I guess that depends on option 1 vs. 2.)

Appreciate all of that feedback! I've adjusted things accordingly and deployed these upgraded contracts to Mumbai.

Appreciate all of that feedback! I've adjusted things accordingly and deployed these upgraded contracts to Mumbai.

Sweet! I'll take a look at the updates today

Hey guys, I'm looking through linear and trying to align work that needs shipping. How many weeks out should I put this work?

@sanderpick the contracts/tests should be good to go...and I can make the official EIP repo PR whenever but figured I'd wait to see if the Garage UI ran into hurdles before doing so. Or, I can just do that now if it makes sense to.
So, should I just merge this to staging and let the voting PR rebase onto this PR's changes? i.e., Linear ship date == the same time as voting?

That sounds like a good plan. I believe you're still waiting for some feedback on your changes from Daniel (no rush, btw). Makes sense to me to launch these together.

I don't know if I'm lost here but I'm kind of wondering: if we do remove the owner parameter from the Stake and Unstake events (see my comment below), isn't what we are proposing here kind of an 'implementation subset' of what EIP-5753 and EIP-5058 supports? Is it possible that we should be supporting one of those EIPs instead of adding another somewhat similar proposal?
Another reason that makes me think that might be correct is that the actual reputation score isn't part of the interface. We propose that including the reputation score in the NFT metadata is optional, and since the reputation score isn't queryable on-chain there is no 'ethereum-level' interoperability. So it kind of feels more natural to me to have the spec focus on things that are needed for things to be composable on-chain; marketplaces need to know if a token is locked or not to function properly, but they can't use the reputation score if it isn't on-chain or part of the metadata spec

fair points. with eip-5753 in mind, i suppose our EIP is basically implementing the same functionality but changing the events and also dropping getter for if a token is locked or not. but, if we were to support 5753 or 5058, then we'd throw out this whole proposal (unless there's a different EIP approach we could take). in full transparency, one goal of our EIP is to simply submit the proposal to help with general Tableland visibility.

fair points. with eip-5753 in mind, i suppose our EIP is basically implementing the same functionality but changing the events and also dropping getter for if a token is locked or not. but, if we were to support 5753 or 5058, then we'd throw out this whole proposal (unless there's a different EIP approach we could take). in full transparency, one goal of our EIP is to simply submit the proposal to help with general Tableland visibility.

Yeah. I think lockable tokens and having a standard/EIP for that makes sense, and if 5753 and 5058 didn't already exist this EIP would have been great for that.
I also think it could make sense to have an EIP for a 721-extension for NFT token reputation that focuses solely on that and not the locking/unlocking part (reputation could come maybe be earned in other ways, not just staking NFTs). That feels more composable as well, like implement 721 if you make NFTs, implement 5753 if the tokens are lockable, implement XYZ if the tokens have a reputation score associated with them. But it's not 100% clear to me that NFTs themselves having a reputation tied to them makes sense. For Rigs the holder that stake the Rig earns the reputation and not the Rig, and that feels much more logical to me. It would feel a bit weird to propose a standard that we don't implement haha

closing this as it is no longer being implemented


Use Azure CLI 2.0

In module 9 old CLI is used. New one was released (https://docs.microsoft.com/en-us/cli/azure/overview?view=azure-cli-latest)
This is quote from MS site:

This topic describes how to install the Azure CLI 1.0. This CLI is deprecated and should only be used for support with the Azure Service Management (ASM) model with "classic" resources. For Azure Resource Manager (ARM) deployments, use Azure CLI 2.0.

You can read at https://github.com/MicrosoftLearning/20532-DevelopingMicrosoftAzureSolutions/issues/179 that the team is working in a new course versions that should release soon.

@tiagocostapt thank for update.
Do You have any information when it might get released?
I'm in the middle of course right now (for which I had to pay of course) and it's bit disappointing that I can't finish Labs because of those materials.
I have some $$ left on my Azure so as soon as new version will be released I'd like to go thru all of labs ones again.

I teach the course and I'm currently teaching that course and my next module is Mod10 I always demo to my students how to create new Azure AD Directories in the new Portal. The lab is possible to take in the current Portal, your trainer just need to adapt it. You can read more information at: https://docs.microsoft.com/en-us/azure/active-directory/get-started-azure-ad on how the Azure AD service works and how to create the new directory that is asked on the lab. In resume you just need to go to the "+ Create a resource" option in the portal and type "Azure Active Directory" then you can create you new Azure AD.

We are working on an update of the entire course right now to fix this and the update is due before the end of March.
This update will include a push of the Azure CLI labs to CLI 2.0.
The biggest challenge with this update is restructuring the repository so that it works identically to the MicrosoftLearning/20535-ArchitectingMicrosoftAzureSolutions repository. That involves adding a Docker image, creating a Node.js build script and finally reshuffling the content.

I created a new release (1.2.1) based on @Pablites commits and have released it here: https://github.com/MicrosoftLearning/20532-DevelopingMicrosoftAzureSolutions/releases/tag/C-v.1.2.1
This is going to be the last release for 20532C until we release 20532D towards the end of March.

@seesharprun awesome news!
looking forward for new release. I definitively must do all labs again.
BTW do You plan to migrate to .NET Core?
Also it would be grate to include steps to move Contoso.Events.Worker into Azure (now it is standalone app, ideally it should be Web Worker, or something similar - Event Grid and Functions, I'm all new to this, so don't know yet what would be best solution). My idea is to have whole solution published to Azure without anything on-premise.
Also SignalR could be included. Now when You go to course in Admin App You must refresh site after a while to see links. Ideally Web Worker should do its work and it should notify Admin App using SignalR.
That would be awesome addition :)

Officially, we don't have plans to .NET Core as part of the D release
Unofficially, when I did epic/sprint planning, we sorted goals by priority and this was the highest-priority stretch goal. There's a very good chance that the next set of labs will use .NET Core.
As for your other suggestions:

Contoso.Events.Worker will be an Azure Function in the D release.  Those are going away in the D release.
We thought about including SignalR but it didn't make the cut for the D release. The primary reason was that we already have a SignalR lab in the ASP.NET course. The other issue we ran into was that many students would have trouble adding the correct settings into the Function App so that it could call the SignalR hub. The Function App will need a URL, preferably stored in App Settings, pointing it to the Web App where the hub is hosted. I still want to see this happen.

As a quick follow-up. Running .NET Core on Azure Functions (for SignalR support) is not quite ready yet. The .NET Core version of SignalR is still in alpha and the .NET Core runtime for Azure Functions is still in beta.
We can come back and re-open the discussion around adding SignalR to the lab application once both of those services are formally released and there's more documentation around them.


Predicate library

This PR bundles the predicate library within the repo via git-subtree, and iterates on it.
TODO

[x] Figure out a way for closure-based predicate to borrow the data they close over
[x] Figure out how to express the combinators so that they work over predicates which borrow data
[x] Add ability to convert predicates to assertions
[ ] Hide all trait bounds behind common interface
[ ] Add more boolean combinators (==, >, >=, <=, <=>, xor, etc.)
[ ] Figure out how to recover tagging for predicates which borrow data

[ ] Referenced an issue explaining the need for the change
[ ] Updated all relevant documentation in docs
[ ] Updated all code comments where relevant
[ ] Wrote tests
[ ] Updated CHANGES.md

Codecov Report

Merging #205 into master will increase coverage by 1.1%.
The diff coverage is 57.5%.

@@           Coverage Diff            @@
##           master    #205     +/-   ##
========================================
+ Coverage    39.8%   40.9%   +1.1%
========================================
  Files          98     101      +3
  Lines        3522    3859    +337
  Branches      559     597     +38
========================================
+ Hits         1404    1581    +177
- Misses       1722    1868    +146
- Partials      396     410     +14

Impacted Files
Coverage Δ

pred/src/inspect/dot.rs
0.0% <0.0%> (ø)

tendermint/src/rpc/id.rs
0.0% <0.0%> (ø)

pred/src/lib.rs
78.5% <78.5%> (ø)

pred/src/inspect.rs
84.5% <84.5%> (ø)

tendermint/src/lite/verifier.rs
69.3% <100.0%> (-0.7%)
:arrow_down:

light-node/src/application.rs
29.5% <0.0%> (-7.7%)
:arrow_down:

tendermint/src/serializers.rs
54.3% <0.0%> (-3.5%)
:arrow_down:

tendermint/src/signature.rs
30.0% <0.0%> (-1.6%)
:arrow_down:

tendermint/src/hash.rs
59.5% <0.0%> (-1.5%)
:arrow_down:

tendermint/src/chain/id.rs
62.6% <0.0%> (-1.0%)
:arrow_down:

... and 13 more

Continue to review full report at Codecov.

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

Codecov Report

Merging #205 into master will not change coverage by %.
The diff coverage is n/a.

@@          Coverage Diff           @@
##           master    #205   +/-   ##
======================================
  Coverage    41.6%   41.6%
======================================
  Files         101     101
  Lines        3937    3937
  Branches      596     596
======================================
  Hits         1639    1639
  Misses       1889    1889
  Partials      409     409

Continue to review full report at Codecov.

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

Is there an issue where one can read more about the motivation behind creating this library?

Have you thought about using conditional compilation to enable/disable certain matchers and using traits to allow mock types? (writing here since there's no issue)
 //////////////////////////////////////////////////////////////////////////////
    // ensure the header validator hashes match the given validators
    #[cfg(validator_hash_matches=true)]
    if header.validators_hash() != vals.hash() {
        return Err(Kind::InvalidValidatorSet {
            header_val_hash: header.validators_hash(),
            val_hash: vals.hash(),
        }
        .into());
    }
    #[cfg(next_validator_hash_matches=true)]
    if header.next_validators_hash() != next_vals.hash() {
        return Err(Kind::InvalidNextValidatorSet {
            header_next_val_hash: header.next_validators_hash(),
            next_val_hash: next_vals.hash(),
        }
        .into());
    }
    //////////////////////////////////////////////////////////////////////////////

We had a call today with @brapse and @melekes, and came to the conclusion that this library brings in too much code and complexity in exchange for very little reward, ie. only introspection.
We thus decided to drop it, and replace it with plain functions wrapped in a trait to allow for mocking purposes. We'll keep the predicates themselves, as well as the three traits which encapsulate crypto operations.


Tests for CASSANDRA-8502

Why put this here and not in paging_tests.py?

Other than moving this to paging_tests.py, can you change the @since annotation to read 2.0.6, since that is when static columns were introduced?
Other than that, +1. I'll add the doxygen tags myself after merge.

Okay, should be good to go.

+1.


fix: CI/CD tests sometimes fail if deployment takes longer than default Task timeout

This PR doubles the task timeout window for Package & Plugin deployments within tests.
The hope is that some of the occasional deployment timeout failures can be avoided by simply extending the wait time.
(In response to a PR earlier today in which a single failure related to deployment timeouts happened.)

@eob do you think this is an indication that we should add something like either: task.wait_forever() or task.until_succeed_or_failed() ?

@douglas-reid I sat on it for the day to see if I had an opinion, and I think I'm completely agnostic.
It's just a few LoC change -- LMK if you think that's a better route and I'll update this PR to be that instead.
If yes, my vote between the two would be  wait_forever with the implicit semantics of throwing on failure or returning on success.

@douglas-reid I sat on it for the day to see if I had an opinion, and I think I'm completely agnostic.
It's just a few LoC change -- LMK if you think that's a better route and I'll update this PR to be that instead.
If yes, my vote between the two would be wait_forever with the implicit semantics of throwing on failure or returning on success.

No worries. I've just run across this before personally, and always end up writing something like:
   state = task.state
   while state not in [TaskState.succeeded, TaskState.failed]:
        try:
            task.wait()
            state = task.state
        except:
           ...

or whatever and have thought about adding a shorthand for that if others started stumbling too.


Hierarchy slicer, power bi

Hi Jan,
I'm using your hierarchy slicer, find it very useful, really nice add on to the standard visualizations. Have a problem with blanks in the hierarchy, I see you have it in your dev pipeline - do you have an ETA for the next release?
Thanks and regards
Ger

Hi,
Thanks for the feedback and in the next major release this item will be included.
-JP

In the next 1-2 weeks a new version of the HierarchySlicer will be available for everybody and that version has support for ragged hierarchies.


why not change an icon

Describe the change
A clear and concise description of your proposal.
Screenshots
If applicable, add screenshots to help explain the issue.
Info (please complete the following information):

OS [e.g. macOS, Linux, Windows, iOS]:
Browser [e.g. Chrome, Safari, Firefox]:

Code snippet

Not sure!


Target files:

content/ja/docs/concepts/cluster-administration/kubelet-garbage-collection.md
content/ja/docs/concepts/workloads/controllers/garbage-collection.md

These files was removed #28870 from en.
The description of garbage collection was moved other pages by that pr.
In ja, the updated files in #28870 is following status now.
I think the above two files can already be removed.

File name
Update in #28870
Status in Ja

content/ja/docs/concepts/architecture/garbage-collection.md
Newly added
Added in #31063

content/ja/docs/concepts/cluster-administration/kubelet-garbage-collection.md
Deleted
Should delete

content/ja/docs/concepts/containers/images.md
Modified
Modified in #35809

content/ja/docs/concepts/overview/working-with-objects/finalizers.md
Newly added
Added in #38768

content/ja/docs/concepts/overview/working-with-objects/owners-dependents.md
Newly added
Added in #38794

content/ja/docs/concepts/workloads/controllers/garbage-collection.md
Deleted
Should delete

content/ja/docs/reference/glossary/finalizer.md
Newly added
Added in #38768

content/ja/docs/reference/glossary/garbage-collection.md
Newly added
Added in #39948 (Under review)

content/ja/docs/tasks/administer-cluster/use-cascading-deletion.md
Newly added
Added in #39960

static/_redirects
Modify
common

Thank you for summarizing, great job!
/assign
/approve


[SMB] Add the --qwinsta option to list remote RDP/Console sessions

Adding the --qwinsta option to list remote RDP/Console sessions:
nxc smb <IP_ADDRESS>/24 -u Administrateur -p Defte@WF --qwinsta

Works both with admin and non admin users :)

👍
however kerberos will no work with this option (currently) but it's seems implemented in the tsts class :)


Test of wiping and restarting a peer on the working Iroha

let me know about results of that explicitly please

@Mingela The problem is reproducible, but only on the LTS branch. On the dev branch, it's already fixed.


Add workaround for NetworkDiscovery test

Due to issues such as #772, the node may end up connecting to itself.
Similar to https://github.com/hewison-chris/agora/commit/0a66f8ba682ce9c13c1fb27e24d1538c47c60f28

Integration failure is unrelated (I hope that's fixed soon too..). Rest of the CI is green, merging.


What role does zookeeper play in a cluster. I found that instead of setting up zookeeper, I only need to configure multiple addresses on UI and agent

Please answer these questions before submitting your issue.

Why do you submit this issue?
[ ] Question or discussion
[ ] Bug
[ ] Requirement
[ ] Feature or performance improvement

Question

What do you want to know?

Bug

Which version of SkyWalking, OS and JRE?

Which company or project?

What happen?
If possible, provide a way for reproducing the error. e.g. demo application, component version.

Requirement or improvement

Please describe about your requirements or improvement suggestions.

There is distributed aggregation. Zookeeper or other coordinators are required, this is not about load balance.


unable to remove 0.49.1 before install cause no find the powertoyssetup-0.49.1-x64.msi

Microsoft PowerToys version
0.53.1
Running as admin

[X] Yes

Area(s) with issue?
Installer
Steps to reproduce
[1A80:5D48][2022-01-09T08:46:39]i001: Burn v<IP_ADDRESS>16, Windows v10.0 (Build 22000: Service Pack 0), path: C:\Users\xxxx\AppData\Local\Temp{96BAA54C-6C82-4CDD-91CB-F97DBAB30B94}.cr\2022-01-07-22-51-32-PowerToys-PowerToysSetup-0.53.1-x64 (1).exe
[1A80:5D48][2022-01-09T08:46:39]i000: Initializing string variable 'InstallFolder' to value '[ProgramFiles64Folder]PowerToys'
[1A80:5D48][2022-01-09T08:46:39]i000: Initializing version variable 'DetectedPowerToysVersion' to value '<IP_ADDRESS>'
[1A80:5D48][2022-01-09T08:46:39]i000: Initializing version variable 'TargetPowerToysVersion' to value '0.53.1'
[1A80:5D48][2022-01-09T08:46:39]i000: Initializing version variable 'DetectedWindowsBuildNumber' to value '0'
[1A80:5D48][2022-01-09T08:46:39]i009: Command Line: '"-burn.clean.room=D:\download\2022-01-07-22-51-32-PowerToys-PowerToysSetup-0.53.1-x64 (1).exe" -burn.filehandle.attached=572 -burn.filehandle.self=548'
[1A80:5D48][2022-01-09T08:46:39]i000: Setting string variable 'WixBundleOriginalSource' to value 'D:\download\2022-01-07-22-51-32-PowerToys-PowerToysSetup-0.53.1-x64 (1).exe'
[1A80:5D48][2022-01-09T08:46:39]i000: Setting string variable 'WixBundleOriginalSourceFolder' to value 'D:\download'
[1A80:5D48][2022-01-09T08:46:39]i000: Setting string variable 'WixBundleLog' to value 'C:\Users\xxxx\AppData\Local\Temp\PowerToys_(Preview)x64_20220109084639.log'
[1A80:5D48][2022-01-09T08:46:39]i000: Setting string variable 'WixBundleName' to value 'PowerToys (Preview) x64'
[1A80:5D48][2022-01-09T08:46:39]i000: Setting string variable 'WixBundleManufacturer' to value 'Microsoft Corporation'
[1A80:63FC][2022-01-09T08:46:39]i000: Setting numeric variable 'WixStdBALanguageId' to value 1033
[1A80:63FC][2022-01-09T08:46:39]i000: Setting version variable 'WixBundleFileVersion' to value '<IP_ADDRESS>'
[1A80:5D48][2022-01-09T08:46:39]i100: Detect begin, 2 packages
[1A80:5D48][2022-01-09T08:46:39]i000: Setting version variable 'DetectedPowerToysVersion' to value '<IP_ADDRESS>'
[1A80:5D48][2022-01-09T08:46:39]i000: Setting string variable 'DetectedWindowsBuildNumber' to value '22000'
[1A80:5D48][2022-01-09T08:46:39]i000: Setting numeric variable 'HasDotnet3122' to value 1
[1A80:5D48][2022-01-09T08:46:39]i052: Condition 'HasDotnet3122' evaluates to true.
[1A80:5D48][2022-01-09T08:46:39]i103: Detected related package: {425A33F8-930E-4F8C-8D4F-62854CCAECC3}, scope: PerMachine, version: <IP_ADDRESS>, language: 0 operation: MajorUpgrade
[1A80:5D48][2022-01-09T08:46:39]i103: Detected related package: {425A33F8-930E-4F8C-8D4F-62854CCAECC3}, scope: PerMachine, version: <IP_ADDRESS>, language: 0 operation: MajorUpgrade
[1A80:5D48][2022-01-09T08:46:39]i101: Detected package: DotnetRuntime, state: Present, cached: None
[1A80:5D48][2022-01-09T08:46:39]i101: Detected package: PowerToysSetup_0.53.1_x64.msi, state: Absent, cached: None
[1A80:5D48][2022-01-09T08:46:39]i052: Condition 'TargetPowerToysVersion >= DetectedPowerToysVersion OR WixBundleInstalled' evaluates to true.
[1A80:5D48][2022-01-09T08:46:39]i052: Condition 'DetectedWindowsBuildNumber >= 18362 OR WixBundleInstalled' evaluates to true.
[1A80:5D48][2022-01-09T08:46:39]i199: Detect complete, result: 0x0
[1A80:63FC][2022-01-09T08:46:42]i000: Setting numeric variable 'EulaAcceptCheckbox' to value 0
[1A80:63FC][2022-01-09T08:46:46]i000: Setting string variable 'InstallFolder' to value 'C:\Program Files\PowerToys'
[1A80:63FC][2022-01-09T08:46:49]i000: Setting numeric variable 'EulaAcceptCheckbox' to value 1
[1A80:5D48][2022-01-09T08:46:49]i200: Plan begin, 2 packages, action: Install
[1A80:5D48][2022-01-09T08:46:49]w321: Skipping dependency registration on package with no dependency providers: DotnetRuntime
[1A80:5D48][2022-01-09T08:46:49]i000: Setting string variable 'WixBundleRollbackLog_PowerToysSetup_0.53.1_x64.msi' to value 'C:\Users\xxxx\AppData\Local\Temp\PowerToys(Preview)x64_20220109084639_000_PowerToysSetup_0.53.1_x64.msi_rollback.log'
[1A80:5D48][2022-01-09T08:46:49]i000: Setting string variable 'WixBundleLog_PowerToysSetup_0.53.1_x64.msi' to value 'C:\Users\xxxx\AppData\Local\Temp\PowerToys(Preview)_x64_20220109084639_000_PowerToysSetup_0.53.1_x64.msi.log'
[1A80:5D48][2022-01-09T08:46:49]i201: Planned package: DotnetRuntime, state: Present, default requested: Present, ba requested: Present, execute: None, rollback: None, cache: No, uncache: No, dependency: None
[1A80:5D48][2022-01-09T08:46:49]i201: Planned package: PowerToysSetup_0.53.1_x64.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, cache: Yes, uncache: No, dependency: Register
[1A80:5D48][2022-01-09T08:46:49]i299: Plan complete, result: 0x0
[1A80:5D48][2022-01-09T08:46:49]i300: Apply begin
[1A80:5D48][2022-01-09T08:46:49]i010: Launching elevated engine process.
[1A80:5D48][2022-01-09T08:46:51]i011: Launched elevated engine process.
[1A80:5D48][2022-01-09T08:46:51]i012: Connected to elevated engine.
[2C0C:067C][2022-01-09T08:46:51]i358: Pausing automatic updates.
[2C0C:067C][2022-01-09T08:46:51]i359: Paused automatic updates.
[2C0C:067C][2022-01-09T08:46:51]i360: Creating a system restore point.
[2C0C:067C][2022-01-09T08:46:51]i361: Created a system restore point.
[2C0C:067C][2022-01-09T08:46:51]i370: Session begin, registration key: SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall{4811dc76-6e69-4ea4-bbc7-6efe982d1f36}, options: 0x7, disable resume: No
[2C0C:067C][2022-01-09T08:46:51]i000: Caching bundle from: 'C:\Users\xxxx\AppData\Local\Temp{57D8D3F5-8E46-41D4-AED0-293BF6108D8C}.be\PowerToysSetup-0.53.1-x64.exe' to: 'C:\ProgramData\Package Cache{4811dc76-6e69-4ea4-bbc7-6efe982d1f36}\PowerToysSetup-0.53.1-x64.exe'
[2C0C:067C][2022-01-09T08:46:51]i320: Registering bundle dependency provider: {4811dc76-6e69-4ea4-bbc7-6efe982d1f36}, version: <IP_ADDRESS>
[2C0C:067C][2022-01-09T08:46:51]i371: Updating session, registration key: SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall{4811dc76-6e69-4ea4-bbc7-6efe982d1f36}, resume: Active, restart initiated: No, disable resume: No
[2C0C:69BC][2022-01-09T08:46:51]i305: Verified acquired payload: PowerToysSetup_0.53.1_x64.msi at path: C:\ProgramData\Package Cache.unverified\PowerToysSetup_0.53.1_x64.msi, moving to: C:\ProgramData\Package Cache{A1CFFC67-F040-4D85-989C-ECDE6E44F202}v0.53.1\PowerToysSetup-0.53.1-x64.msi.
[2C0C:067C][2022-01-09T08:46:51]i323: Registering package dependency provider: {A1CFFC67-F040-4D85-989C-ECDE6E44F202}, version: 0.53.1, package: PowerToysSetup_0.53.1_x64.msi
[2C0C:067C][2022-01-09T08:46:51]i301: Applying execute package: PowerToysSetup_0.53.1_x64.msi, action: Install, path: C:\ProgramData\Package Cache{A1CFFC67-F040-4D85-989C-ECDE6E44F202}v0.53.1\PowerToysSetup-0.53.1-x64.msi, arguments: ' ARPSYSTEMCOMPONENT="1" BOOTSTRAPPERINSTALLFOLDER="C:\Program Files\PowerToys"'
[2C0C:067C][2022-01-09T08:48:25]e000: Error 0x80070643: Failed to install MSI package.
[2C0C:067C][2022-01-09T08:48:25]e000: Error 0x80070643: Failed to execute MSI package.
[1A80:5D48][2022-01-09T08:48:25]e000: Error 0x80070643: Failed to configure per-machine MSI package.
[1A80:5D48][2022-01-09T08:48:25]i319: Applied execute package: PowerToysSetup_0.53.1_x64.msi, result: 0x80070643, restart: None
[1A80:5D48][2022-01-09T08:48:25]e000: Error 0x80070643: Failed to execute MSI package.
[2C0C:067C][2022-01-09T08:48:25]i318: Skipped rollback of package: PowerToysSetup_0.53.1_x64.msi, action: Uninstall, already: Absent
[1A80:5D48][2022-01-09T08:48:25]i319: Applied rollback package: PowerToysSetup_0.53.1_x64.msi, result: 0x0, restart: None
[2C0C:067C][2022-01-09T08:48:25]i329: Removed package dependency provider: {A1CFFC67-F040-4D85-989C-ECDE6E44F202}, package: PowerToysSetup_0.53.1_x64.msi
[2C0C:067C][2022-01-09T08:48:25]i351: Removing cached package: PowerToysSetup_0.53.1_x64.msi, from path: C:\ProgramData\Package Cache{A1CFFC67-F040-4D85-989C-ECDE6E44F202}v0.53.1
[2C0C:067C][2022-01-09T08:48:25]i372: Session end, registration key: SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall{4811dc76-6e69-4ea4-bbc7-6efe982d1f36}, resume: None, restart: None, disable resume: No
[2C0C:067C][2022-01-09T08:48:25]i330: Removed bundle dependency provider: {4811dc76-6e69-4ea4-bbc7-6efe982d1f36}
[2C0C:067C][2022-01-09T08:48:25]i352: Removing cached bundle: {4811dc76-6e69-4ea4-bbc7-6efe982d1f36}, from path: C:\ProgramData\Package Cache{4811dc76-6e69-4ea4-bbc7-6efe982d1f36}
[2C0C:067C][2022-01-09T08:48:25]i371: Updating session, registration key: SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall{4811dc76-6e69-4ea4-bbc7-6efe982d1f36}, resume: None, restart initiated: No, disable resume: No
[1A80:5D48][2022-01-09T08:48:26]i399: Apply complete, result: 0x80070643, restart: None, ba requested restart:  No
✔ Expected Behavior
and there is no more chance to reinstall 0.49.1 cause "a new version is already installed".
❌ Actual Behavior
No response
Other Software
No response

Please see the instructions in https://github.com/microsoft/PowerToys/issues/14056#issuecomment-954360405 and https://github.com/microsoft/PowerToys/issues/14056#issuecomment-954409283 and see if this helps :)

Microsoft PowerToys version
0.53.1
Running as admin

[x]  Yes

Area(s) with issue?
Installer
Steps to reproduce
[1A80:5D48][2022-01-09T08:46:39]i001: Burn v<IP_ADDRESS>16, Windows v10.0 (Build 22000: Service Pack 0), path: C:\Users\xxxx\AppData\Local\Temp{96BAA54C-6C82-4CDD-91CB-F97DBAB30B94}.cr\2022-01-07-22-51-32-PowerToys-PowerToysSetup-0.53.1-x64 (1).exe [1A80:5D48][2022-01-09T08:46:39]i000: Initializing string variable 'InstallFolder' to value '[ProgramFiles64Folder]PowerToys' [1A80:5D48][2022-01-09T08:46:39]i000: Initializing version variable 'DetectedPowerToysVersion' to value '<IP_ADDRESS>' [1A80:5D48][2022-01-09T08:46:39]i000: Initializing version variable 'TargetPowerToysVersion' to value '0.53.1' [1A80:5D48][2022-01-09T08:46:39]i000: Initializing version variable 'DetectedWindowsBuildNumber' to value '0' [1A80:5D48][2022-01-09T08:46:39]i009: Command Line: '"-burn.clean.room=D:\download\2022-01-07-22-51-32-PowerToys-PowerToysSetup-0.53.1-x64 (1).exe" -burn.filehandle.attached=572 -burn.filehandle.self=548' [1A80:5D48][2022-01-09T08:46:39]i000: Setting string variable 'WixBundleOriginalSource' to value 'D:\download\2022-01-07-22-51-32-PowerToys-PowerToysSetup-0.53.1-x64 (1).exe' [1A80:5D48][2022-01-09T08:46:39]i000: Setting string variable 'WixBundleOriginalSourceFolder' to value 'D:\download' [1A80:5D48][2022-01-09T08:46:39]i000: Setting string variable 'WixBundleLog' to value 'C:\Users\xxxx\AppData\Local\Temp\PowerToys_(Preview)x64_20220109084639.log' [1A80:5D48][2022-01-09T08:46:39]i000: Setting string variable 'WixBundleName' to value 'PowerToys (Preview) x64' [1A80:5D48][2022-01-09T08:46:39]i000: Setting string variable 'WixBundleManufacturer' to value 'Microsoft Corporation' [1A80:63FC][2022-01-09T08:46:39]i000: Setting numeric variable 'WixStdBALanguageId' to value 1033 [1A80:63FC][2022-01-09T08:46:39]i000: Setting version variable 'WixBundleFileVersion' to value '<IP_ADDRESS>' [1A80:5D48][2022-01-09T08:46:39]i100: Detect begin, 2 packages [1A80:5D48][2022-01-09T08:46:39]i000: Setting version variable 'DetectedPowerToysVersion' to value '<IP_ADDRESS>' [1A80:5D48][2022-01-09T08:46:39]i000: Setting string variable 'DetectedWindowsBuildNumber' to value '22000' [1A80:5D48][2022-01-09T08:46:39]i000: Setting numeric variable 'HasDotnet3122' to value 1 [1A80:5D48][2022-01-09T08:46:39]i052: Condition 'HasDotnet3122' evaluates to true. [1A80:5D48][2022-01-09T08:46:39]i103: Detected related package: {425A33F8-930E-4F8C-8D4F-62854CCAECC3}, scope: PerMachine, version: <IP_ADDRESS>, language: 0 operation: MajorUpgrade [1A80:5D48][2022-01-09T08:46:39]i103: Detected related package: {425A33F8-930E-4F8C-8D4F-62854CCAECC3}, scope: PerMachine, version: <IP_ADDRESS>, language: 0 operation: MajorUpgrade [1A80:5D48][2022-01-09T08:46:39]i101: Detected package: DotnetRuntime, state: Present, cached: None [1A80:5D48][2022-01-09T08:46:39]i101: Detected package: PowerToysSetup_0.53.1_x64.msi, state: Absent, cached: None [1A80:5D48][2022-01-09T08:46:39]i052: Condition 'TargetPowerToysVersion >= DetectedPowerToysVersion OR WixBundleInstalled' evaluates to true. [1A80:5D48][2022-01-09T08:46:39]i052: Condition 'DetectedWindowsBuildNumber >= 18362 OR WixBundleInstalled' evaluates to true. [1A80:5D48][2022-01-09T08:46:39]i199: Detect complete, result: 0x0 [1A80:63FC][2022-01-09T08:46:42]i000: Setting numeric variable 'EulaAcceptCheckbox' to value 0 [1A80:63FC][2022-01-09T08:46:46]i000: Setting string variable 'InstallFolder' to value 'C:\Program Files\PowerToys' [1A80:63FC][2022-01-09T08:46:49]i000: Setting numeric variable 'EulaAcceptCheckbox' to value 1 [1A80:5D48][2022-01-09T08:46:49]i200: Plan begin, 2 packages, action: Install [1A80:5D48][2022-01-09T08:46:49]w321: Skipping dependency registration on package with no dependency providers: DotnetRuntime [1A80:5D48][2022-01-09T08:46:49]i000: Setting string variable 'WixBundleRollbackLog_PowerToysSetup_0.53.1_x64.msi' to value 'C:\Users\xxxx\AppData\Local\Temp\PowerToys(Preview)x64_20220109084639_000_PowerToysSetup_0.53.1_x64.msi_rollback.log' [1A80:5D48][2022-01-09T08:46:49]i000: Setting string variable 'WixBundleLog_PowerToysSetup_0.53.1_x64.msi' to value 'C:\Users\xxxx\AppData\Local\Temp\PowerToys(Preview)_x64_20220109084639_000_PowerToysSetup_0.53.1_x64.msi.log' [1A80:5D48][2022-01-09T08:46:49]i201: Planned package: DotnetRuntime, state: Present, default requested: Present, ba requested: Present, execute: None, rollback: None, cache: No, uncache: No, dependency: None [1A80:5D48][2022-01-09T08:46:49]i201: Planned package: PowerToysSetup_0.53.1_x64.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, cache: Yes, uncache: No, dependency: Register [1A80:5D48][2022-01-09T08:46:49]i299: Plan complete, result: 0x0 [1A80:5D48][2022-01-09T08:46:49]i300: Apply begin [1A80:5D48][2022-01-09T08:46:49]i010: Launching elevated engine process. [1A80:5D48][2022-01-09T08:46:51]i011: Launched elevated engine process. [1A80:5D48][2022-01-09T08:46:51]i012: Connected to elevated engine. [2C0C:067C][2022-01-09T08:46:51]i358: Pausing automatic updates. [2C0C:067C][2022-01-09T08:46:51]i359: Paused automatic updates. [2C0C:067C][2022-01-09T08:46:51]i360: Creating a system restore point. [2C0C:067C][2022-01-09T08:46:51]i361: Created a system restore point. [2C0C:067C][2022-01-09T08:46:51]i370: Session begin, registration key: SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall{4811dc76-6e69-4ea4-bbc7-6efe982d1f36}, options: 0x7, disable resume: No [2C0C:067C][2022-01-09T08:46:51]i000: Caching bundle from: 'C:\Users\xxxx\AppData\Local\Temp{57D8D3F5-8E46-41D4-AED0-293BF6108D8C}.be\PowerToysSetup-0.53.1-x64.exe' to: 'C:\ProgramData\Package Cache{4811dc76-6e69-4ea4-bbc7-6efe982d1f36}\PowerToysSetup-0.53.1-x64.exe' [2C0C:067C][2022-01-09T08:46:51]i320: Registering bundle dependency provider: {4811dc76-6e69-4ea4-bbc7-6efe982d1f36}, version: <IP_ADDRESS> [2C0C:067C][2022-01-09T08:46:51]i371: Updating session, registration key: SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall{4811dc76-6e69-4ea4-bbc7-6efe982d1f36}, resume: Active, restart initiated: No, disable resume: No [2C0C:69BC][2022-01-09T08:46:51]i305: Verified acquired payload: PowerToysSetup_0.53.1_x64.msi at path: C:\ProgramData\Package Cache.unverified\PowerToysSetup_0.53.1_x64.msi, moving to: C:\ProgramData\Package Cache{A1CFFC67-F040-4D85-989C-ECDE6E44F202}v0.53.1\PowerToysSetup-0.53.1-x64.msi. [2C0C:067C][2022-01-09T08:46:51]i323: Registering package dependency provider: {A1CFFC67-F040-4D85-989C-ECDE6E44F202}, version: 0.53.1, package: PowerToysSetup_0.53.1_x64.msi [2C0C:067C][2022-01-09T08:46:51]i301: Applying execute package: PowerToysSetup_0.53.1_x64.msi, action: Install, path: C:\ProgramData\Package Cache{A1CFFC67-F040-4D85-989C-ECDE6E44F202}v0.53.1\PowerToysSetup-0.53.1-x64.msi, arguments: ' ARPSYSTEMCOMPONENT="1" BOOTSTRAPPERINSTALLFOLDER="C:\Program Files\PowerToys"' [2C0C:067C][2022-01-09T08:48:25]e000: Error 0x80070643: Failed to install MSI package. [2C0C:067C][2022-01-09T08:48:25]e000: Error 0x80070643: Failed to execute MSI package. [1A80:5D48][2022-01-09T08:48:25]e000: Error 0x80070643: Failed to configure per-machine MSI package. [1A80:5D48][2022-01-09T08:48:25]i319: Applied execute package: PowerToysSetup_0.53.1_x64.msi, result: 0x80070643, restart: None [1A80:5D48][2022-01-09T08:48:25]e000: Error 0x80070643: Failed to execute MSI package. [2C0C:067C][2022-01-09T08:48:25]i318: Skipped rollback of package: PowerToysSetup_0.53.1_x64.msi, action: Uninstall, already: Absent [1A80:5D48][2022-01-09T08:48:25]i319: Applied rollback package: PowerToysSetup_0.53.1_x64.msi, result: 0x0, restart: None [2C0C:067C][2022-01-09T08:48:25]i329: Removed package dependency provider: {A1CFFC67-F040-4D85-989C-ECDE6E44F202}, package: PowerToysSetup_0.53.1_x64.msi [2C0C:067C][2022-01-09T08:48:25]i351: Removing cached package: PowerToysSetup_0.53.1_x64.msi, from path: C:\ProgramData\Package Cache{A1CFFC67-F040-4D85-989C-ECDE6E44F202}v0.53.1 [2C0C:067C][2022-01-09T08:48:25]i372: Session end, registration key: SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall{4811dc76-6e69-4ea4-bbc7-6efe982d1f36}, resume: None, restart: None, disable resume: No [2C0C:067C][2022-01-09T08:48:25]i330: Removed bundle dependency provider: {4811dc76-6e69-4ea4-bbc7-6efe982d1f36} [2C0C:067C][2022-01-09T08:48:25]i352: Removing cached bundle: {4811dc76-6e69-4ea4-bbc7-6efe982d1f36}, from path: C:\ProgramData\Package Cache{4811dc76-6e69-4ea4-bbc7-6efe982d1f36} [2C0C:067C][2022-01-09T08:48:25]i371: Updating session, registration key: SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall{4811dc76-6e69-4ea4-bbc7-6efe982d1f36}, resume: None, restart initiated: No, disable resume: No [1A80:5D48][2022-01-09T08:48:26]i399: Apply complete, result: 0x80070643, restart: None, ba requested restart: No
✔ Expected Behavior
and there is no more chance to reinstall 0.49.1 cause "a new version is already installed".
❌ Actual Behavior
No response
Other Software
No response


initial proof-of-concept api to query a wallet balance, given only an EncryptedSecretKey

Description
from nodejs:
> cbor.encode(cbor.decode(fs.readFileSync("/home/clever/.local/share/Daedalus/testnet/Secrets/secret.key"))[2][0]).toString("hex")
this will read a given secret.key file, extract the 0th wallet EncryptedSecretKey, and then print it out as hex
curl --cert tls/client/client.pem --cacert tls/server/ca.crt https://localhost:8090/api/internal/query-balance -X POST -d '"RAWHEXHERE"' -H "Content-Type: application/json; charset=utf-8"
{"data":{"balance":1884697408},"status":"success","meta":{"pagination":{"totalPages":1,"page":1,"perPage":1,"totalEntries":1}}}

you can then throw that hex directly at cardano, without importing any wallets, and without using any spending pw, and just query the current balance of the given key
https://github.com/input-output-hk/daedalus/pull/1268 can then use this new api, to get the balance of secrets, before knowing the pw
this also serves as an example of how to start with DEVOPS-1148

Linked issue

Type of change

[ ] 🐞 Bug fix (non-breaking change which fixes an issue)
[ ] 🛠 New feature (non-breaking change which adds functionality)
[ ] ⚠ Breaking change (fix or feature that would cause existing functionality to change)
[ ] 🏭 Refactoring that does not change existing functionality but does improve things like code readability, structure etc
[ ] 🔨 New or improved tests for existing code
[ ] ⛑ git-flow chore (backport, hotfix, etc)

Developer checklist

[ ] I have read the style guide document, and my code follows the code style of this project.
[ ] If my code deals with exceptions, it follows the guidelines.
[ ] I have updated any documentation accordingly, if needed. Documentation changes can be reflected in opening a PR on cardanodocs.com, amending the inline Haddock comments, any relevant README file or one of the document listed in the docs directory.
[ ] CHANGELOG entry has been added and is linked to the correct PR on GitHub.

Testing checklist

[ ] I have added tests to cover my changes.
[ ] All new and existing tests passed.

QA Steps

Screenshots (if available)

How to merge
Send the message bors r+ to merge this PR. For more information, see
docs/how-to/bors.md.

{"data":{"balance":1884697408,"walletId":"2cWKMJemoBamKb8mbQxL4we5QPZzuzp1QbsVFFEAnstGN4yMaaWz5bVyoD14EKDizvd8c"},"status":"success","meta":{"pagination":{"totalPages":1,"page":1,"perPage":1,"totalEntries":1}}}
and the last push now includes the wallet id, so daedalus can tell if its already imported or not

the /api/internal/import-wallet can now accept a rawSecret instead of a filePath
it has the same format as the query-balance api, and will let you import a raw EncryptedSecretKey without wrapping it in a UserSecret


Shopping cart v2

Better, but still needs resubmitting

@loringalta Take a look at the comments. In particular, focus on the names of your files. Your scenarios are much improved, but take a look at the comments on these. Let me know if you have any questions.


Fixed issues with references and checks

Hi @dave-deep, looking good - thanks for the contribution. There were more errors but your fixes were a good start!

Hi @dave-deep, looking good - thanks for the contribution. There were more errors but your fixes were a good start!

Thanks @eKoopmans Will try to contribute more on other open issues (if any)


feat(cli): binds GraphQL Config to GraphQL Yoga [Don't merge]

DON'T MERGE!

@ardatan we can rebase and get this one in too now ? :)


ZeroDivisionError on Sidonia no Kishi

http://www.datafilehost.com/d/6af541dd
Attempting to run sushi produces the error
ZeroDivisionError: Weights sum to zero, can't be noramlized.

Yeah, for some reason Sushi's audio search just doesn't work properly with Sidonia (not only this ep but various others). I'm afraid this issue cannot be fixed easily and I'll have to find some new way to improve search accuracy, which by the looks of it is not happening any time soon.

In this case, the shift is really 1 second. So, the second check:
abs_diff(new_time - original_time, last_shift) > ALLOWED_ERROR is not necessary. Removing this check will produce correct output without error


[Tooltip] Supress warning if button is disabled and title is empty

[x] I have followed (at least) the PR section of the contributing guide.

Closes https://github.com/mui-org/material-ui/issues/13756

@rfbotto Well done 👍


FIXED: Eliminate the security vulnerability inherited from 3rd party hoek package

UPDATED: The coveralls and the serverless-offline packages are updated to the latest version to get rid of the security vulnerability in<EMAIL_ADDRESS>

Coverage remained the same at 100.0% when pulling d1e2c629681e0c3cf15c551c29b06e7b634e950f on update-packages into 3085e4209a2d0486d4c12b4a24c088e3e7149cfa on master.


chore(e2e): Reduce flake in e2e tests by waiting for migrations to complete

Superseded by https://github.com/electric-sql/electric/pull/1256.


still https://github.com/go-gitea/gitea/issues/20793

Description
No response
Gitea Version
v1.22.3
Can you reproduce the bug on the Gitea demo site?
Yes
Log Gist
No response
Screenshots
No response
Git Version
No response
Operating System
No response
How are you running Gitea?
systemd
Database
None

Please describe your problem.

Please describe your problem.

This bug reappeared:
https://github.com/go-gitea/gitea/issues/20793

But that's outdated. If you need help, you should describe your problem.

But that's outdated. If you need help, you should describe your problem.

The [proxy] configuration of gitea is invalid

Maybe this can solve your problem: https://github.com/go-gitea/gitea/issues/31733

We close issues that need feedback from the author if there were no new comments for a month. :tea:


does pytest close and remove mkstemp file handles?

The simulation_test.py script uses temporary files.
https://github.com/ngnrsaa/qflex/blob/c7038b0e06d2f9312a3b5db41dcd9a244f276220/tests/python/simulation_test.py#L268
The documentation of mkstemp mentions that the user is responsible for removing the files. The handles are not removed with something like below
os.close(fd)
os.unlink(path)

Is this intended behaviour?

This is fixed in the patch I uploaded in #289.  mkstemp isn't optimal for this use case.


Fix misspellings

The command "DCO_VERBOSITY=-q ../project/script/validate/dco" exited with 1.

The command "DCO_VERBOSITY=-q ../project/script/validate/dco" exited with 1.

@dvrkps you need to sign it off by git commit -s.
And could you please to combine two commits into one?
Basically, we do prefer to use one commit in or. Thanks!


MinnowBoard MAX Instructions: Add direct download link

Task Description
Page: https://github.com/solettaproject/soletta/wiki/MinnowBoard-MAX-Instructions
Now we have downloadable releases for the Galileo boards so we should add direct downloads to the top of the page
Dependencies
None

done

@bdilly Just a quick note, that address is not valid anymore, the content lives in https://github.com/solettaproject/soletta/wiki/Building-Soletta-for-MinnowBoard-MAX. It'd be nice to guarantee that there are no broken links pointing to the old page.
I will try to check this next week but help is always appreciated.


Unable to proxy HTTPS requests to local static files

Our original requirement was to proxy some HTTPS requests to local static files, but after testing, the configuration local location rule was invalid.
Does this module support configuring location rules to map local directories?
Use environment: nginx 1.14.2 + rewrite path

Does this module support configuring location rules to map local directories?

No. Because:

The CONNECT request does not include URI. This request only tells proxy_connect module where the backend server is (backend server host or ip address).
The raw stream, which is proxied in the CONNECT tunnel, will not be parsed.

Note that this module is used to create  4-layer TCP tunnel, there is no way to get someting about 7 layer information.


Fixes #1203: Inconsistent spaces (minute vs hour)

Description
Fixed a typo in "minutes" line to make it consistent with hours and days.
Related issues and discussion
#1203

@mostafa07  you have just made changes in strings.xml file ,there are also multiple values files(values-xx/strings.xml) so there also you have to make changes same like this
for your reference make changes in all those  values-xx/strings.xml flies  where plurals have used

@iml-v That's not compulsory, since we have an automated system that updates the translations automatically.
Thus: ok for merging.

#closes issue #1203
thank you for your help


Fix plantseg get paths

This PR takes care of a minor fix to get_plantseg_paths. GTG from my side!

I'll go ahead and merge this. This is a minor fix in the input argument orders.


Fix names and nullability when creating RecordBatch from MapArray

Description
When creating a RecordBatch with one of the columns being a MapArray, there are issues with naming of sub-columns, as well as nullability of the "elements/key_value" sub-column.
Related Issue(s)

closes #1257

Documentation
See https://www.rustexplorer.com/b/o7bfm4 for a breaking example.
I initially thought that the issue is specifically for array with 0-length maps, but nullable mismatch happens even when all of the map elements have values.

Thanks for the pull request! @balbok0 would you be able to take your failing example and turn that into a unit or integration test so we don't have this regression in the future?

I’d like for us to fix this, but I also hope we can find a way to simultaneously support older PyArrow versions in the Python bindings.

@wjones127 are there some specific pyarrow versions you have in mind? I wasn't able to find a specific arrow-cpp/pyarrow version that changed the naming scheme.

Added failing example as a test.

Oh and could you rebase? We just fixed some of the deprecation warnings.

Thanks for comments! I applied changes and rebased. Lmk if there is anything else that needs to done before merge.


Add @idata(iterable) decorator-function.

The purpose is to replace the construct below:
@data(*[a for a in foo if a > 0])

With this typing & memory-efficient alternative:
@data(a for a in foo if a > 0)

(*) It is a minor change that should not interfere with the possible re-write of the library in other branches.

The flake8 fails in the TC class is unrelated to my modifications to the code.

[Current coverage][cc-pull] is 100%

Merging [#40][cc-pull] into [master][cc-base-branch] will decrease coverage by n/a%

@@           master     #40   diff @@
=====================================
  Files           1       1
  Lines          88      90     +2
  Methods         0       0
  Branches        0       0
=====================================
+ Hits           88      90     +2
  Misses          0       0
  Partials        0       0

Powered by Codecov. Last updated by [7deff64...1796646][cc-compare]
[cc-base-branch]: https://codecov.io/gh/txels/ddt/branch/master?src=pr
[cc-compare]: https://codecov.io/gh/txels/ddt/compare/7deff64010264223e7449f8f0507c27a812645a1...17966466896c75c84d9b235df68399ee6af13c39
[cc-pull]: https://codecov.io/gh/txels/ddt/pull/40?src=pr

Sorry, this fell off my radar.
Looks good. The flake8 issue is solved in master, so a rebase would fix it.
I'd love to see some test and documentation.

May I take over this PR?

Of course!

BTW in terms of memory efficiency: since ddt is not (nor wants to be) a test runner, in order for the test runner to work properly it has to make the class look like it has one different test method per data value - these extra methods are created dynamically at class load time, not at test execution time. Meaning that the whole generator data will have to be materialised in memory anyway, hence there will not be the typical memory savings of other scenarios where generators are used.
If you need to test with large datasets, ddt is not going to be a memory efficient approach.

@ankostis FYI this is my current thinking about where to take this library, that use iterable test data as the base concept https://github.com/txels/ddt/issues/44#issuecomment-237557049

@txels rebased, and all tests pass, as promised.
Thanks for the explanation of the no-memory-gains for this PR,
so we are only left with the typing gains :-)

Release in 1.1.1
Sorry about the delay in releasing.


Missing Saw Recipes for Forestry

as per title

Probably due to no case for a wildcard value. Testing a potential fix right now.


refactor(dpg): remove anonymous model codes in csharp generator

Description
remaining part of #3962
Checklist
To ensure a quick review and merge, please ensure:

[ ] The PR has a understandable title and description explaining the why and what.
[ ] The PR is opened in draft if not ready for review yet.

If opened in draft, please allocate sufficient time (24 hours) after moving out of draft for review

[ ] The branch is recent enough to not have merge conflicts upon creation.

Ready to Land?

[ ] Build is completely green

Submissions with test failures require tracking issue and approval of a CODEOWNER

[ ] At least one +1 review by a CODEOWNER
[ ] All -1 reviews are confirmed resolved by the reviewer

Override/Marking reviews stale must be discussed with CODEOWNERS first

Regen preview: https://github.com/Azure/azure-sdk-for-net/pull/41050
No code change.