Add an option to revert changes made by scripts [IMPORTANT]

Add an option to revert changes made by scripts
Merge #299 #380 #382 #387 #389 before this so @nnyyxxxx can start working on the gaming-setup & aurhelper reverts.#387 includes a fix for clipping in the preview.DO NOT MERGE THIS PR UNTIL EVERYTHING ELSE RELATED TO THE SHELL SCRIPTS HAS BEEN MERGED / CLOSED.AFTER MERGING / CLOSING EVERYTHING ELSE @nnyyxxxx WILL COME IN AND UPDATE THE EXISTING / NEW SCRIPTS TO INCORPORATE THIS NEW FUNCTIONALITY INTO THEM.
Type of Change

[x] New feature
[x] Refactoring
[x] UI/UX improvement

Description
This PR refactors every shell script to have run and revert functions & adds TUI functionality for reverting - r keybind.
Impact
Every shell script refactored, somme internal command handling changes.
Issue related to PR

Resolves #240
Resolves #260
Resolves #362

Checklist

[x] My code adheres to the coding and style guidelines of the project.
[x] I have performed a self-review of my own code.
[x] I have commented my code, particularly in hard-to-understand areas.
[x] My changes generate no errors/warnings/merge conflicts.

Credits

@nnyyxxxx - shell scripts

TODO: fix script previews

I'll be working on this with Adam.

I think it would be better if we stored a file containing which scripts have been run (in ~/.local/state), and replacing the displayed scripts with an entry to revert them. An boolean flag should be added (most likely defaulting to true) as to whether any given script supports the feature.

There is no real reason someone would need to run the same script multiple times, and the revert functions will have certain expectations (e.g. some .bak file must exist), which would lead to undefined behavior when run without the initial script being run beforehand. I think the out of the box experience should be prioritized, rather than cramming linutil full of features that will negatively impact UX.
However, there definitely could be cases that the opposite script might be needed, so they should be made available. Perhaps 'r' or another keybind could be used to swap between displaying the default & opposite entries. For example, pressing, or even holding, a keybind could cause changes similar to this.
"Revert Alacritty Setup" => "Alacritty Setup"
"Bash Prompt" => "Revert Bash Prompt"
"AUR Helper" => "Revert AUR Helper"

There is no real reason someone would need to run the same script multiple times, and the revert functions will have certain expectations (e.g. some .bak file must exist), which would lead to undefined behavior when run without the initial script being run beforehand. I think the out of the box experience should be prioritized, rather than cramming linutil full of features that will negatively impact UX.
However, there definitely could be cases that the opposite script might be needed, so they should be made available in some way. Perhaps 'r' or another keybind could be used to swap between displaying the default & opposite entries. For example, pressing, or even holding, a keybind could cause changes similar to this. "Revert Alacritty Setup" => "Alacritty Setup" "Bash Prompt" => "Revert Bash Prompt" "AUR Helper" => "Revert AUR Helper"

I still don't agree with your approach.

I think the revert functionality inside of the scripts is fine, for the rust part, yes that needs improvement. I definitely see where you're coming from but, I think the "R" Keybind functionality is still better for this Revert approach.

rather than cramming linutil full of features that will negatively impact UX.

I disagree with this, I don't think this will negatively impact the UX at all. The revert functionality in the scripts is very minimal and is just a starting point; can be improved upon in the future.

certain expectations (e.g. some .bak file must exist), which would lead to undefined behavior when run without the initial script being run beforehand

I disagree with this as well, take look:

There is a slight issue on how the backups are being handled, I'll make a PR in a bit to fix this problem.

Infinite backup-creation fixed with #389

DO NOT MERGE UNTIL UNDRAFTED -> THIS PR INCLUDES INCOMPLETE REVERT FUNCTIONALITY.

Merge #380 so I can start working on the gaming-setup revert.

@adamperkowski I just finished the last script, DO NOT squash these commits. Also leave this as a draft until you fix the preview handling.

Every script has been tested, no bugs found.

Merge #380 before this so I can start working on the gaming-setup revert.

DO NOT MERGE UNTIL UNDRAFTED -> THIS PR INCLUDES INCOMPLETE REVERT FUNCTIONALITY.

DO NOT MERGE THIS PR UNTIL EVERYTHING ELSE HAS BEEN MERGED / CLOSED, AFTER MERGING / CLOSING EVERYTHING ELSE I WILL COME IN AND UPDATE THE EXISTING / NEW SCRIPTS TO INCORPORATE THIS NEW FUNCTIONALITY INTO THEM.

There are scripts which intentionally shouldn't be reverted that must be handled (e.g. system update; reverting updates should always be done manually since it can be extremely risky). Those need to be handled properly.

There are scripts which intentionally shouldn't be reverted that must be handled (e.g. system update; reverting updates should always be done manually since it can be extremely risky). Those need to be handled properly. I don't think running the script and printing a message is the best solution to that.

Why wouldn't it be the best option? That function is only called when "R" is pressed on the keyboard.

Nobody will know which scripts do and don't support reversion until they try them, which is poor UX. At least if you want to go by this concept, you should dynamically handle adding the 'r' keybind to the list depending on whether reversion is supported for the given script.
Also, for non-script command entries, it's an extremely poor idea to run the same command when the user expects to revert changes, since depending on the script, it could delete backups and render reversion impossible.

Also, for non-script command entries, it's an extremely poor idea to run the same command when the user expects to revert changes, since depending on the script, it could delete backups and render reversion impossible.

I disagree with that, I think our approach is good and when trying to revert via "R" only the functions inside of the revert function get called, I personally don't see a problem with it and I think this is the best approach. Also the backup situation was already fixed via #389

you should dynamically handle adding the 'r' keybind to the list depending on whether reversion is supported for the given script.

I agree with this partially, I think it should be dynamically updated as well, but I still think having an echo even if the user tries to do it and it ouputs "Not supported" Is the best approach to this.

Nobody will know which scripts do and don't support reversion until they try them, which is poor UX. At least if you want to go by this concept, you should dynamically handle adding the 'r' keybind to the list depending on whether reversion is supported for the given script.

For now, all scripts are reafctored to have revert functionality. Linutil mainly depends on sh scripts. When that changes, revert functionality will change as well.

There are scripts which intentionally shouldn't be reverted that must be handled (e.g. system update; reverting updates should always be done manually since it can be extremely risky). Those need to be handled properly. I don't think running the script and printing a message is the best solution to that.

The error message is to mitigate the issue you're referring to and it is being handled properly, not sure what you mean.

There is no real reason someone would need to run the same script multiple times, and the revert functions will have certain expectations (e.g. some .bak file must exist), which would lead to undefined behavior when run without the initial script being run beforehand. I think the out of the box experience should be prioritized, rather than cramming linutil full of features that will negatively impact UX.
However, there definitely could be cases that the opposite script might be needed, so they should be made available in some way. Perhaps 'r' or another keybind could be used to swap between displaying the default & opposite entries. For example, pressing, or even holding, a keybind could cause changes similar to this. "Revert Alacritty Setup" => "Alacritty Setup" "Bash Prompt" => "Revert Bash Prompt" "AUR Helper" => "Revert AUR Helper"

That would bloat the dir up with multiple scripts, I don't think you're considering that Linutil as of right now is still in its infant stage, making a separate revert script for every single script is going to cost a lot, me and Adams approach is much simpler.

I think it would be better if we stored a file containing which scripts have been run (in ~/.local/state), and replacing the displayed scripts with an entry to revert them. An boolean flag should be added (most likely defaulting to true) as to whether any given script supports the feature.

Again that would cost a lot, making a separate script for every single script in Linutil is going to cost a lot.

There is no real reason someone would need to run the same script multiple times

Again only the Revert function is being called, the rest of the script is ignored. This is a much simpler, and more performant approach compared to making a separate script for every single script in Linutil for reverting changes.

making a separate script for every single script in Linutil is going to cost a lot.

I'm not sure what you think I'm proposing. If we add a boolean flag for whether a script is revertable or not, we can execute scripts normally if they don't support it (without needing to modify the script itself whatsoever), and use the revert & run function if they do. We don't need to create extra scripts, and I never said anything along those lines.

Again only the Revert function is being called, the rest of the script is ignored.

This comment was referring to running the main function of the script again, not the revert function.

I'm not sure what you think I'm proposing. If we add a boolean flag for whether a script is revertable or not, we can execute scripts normally if they don't support it (without needing to modify the script itself whatsoever), and use the revert & run function if they do. We don't need to create extra scripts, and I never said anything along those lines..

That is LITERALLY what we are already doing with the keybind logic, I don't understand why you are suggesting that we do the same exact thing we are already doing except with replacing the entries with a (Revert "Script_name") The keybind approach is much similar and better than that + its being displayed in the dynamic hotkey list which I explained to you earlier in this conversation.

This comment was referring to running the main function of the script again, not the revert function.

Not sure what do you mean by "main function" and "running it again" and how is that relevant.

Also LJ your trying to suggest collecting telemetry on the user based on which scripts are run which is a no go in my book.

Also LJ you're trying to suggest collecting telemetry on the user based on which scripts are run which is a no go in my book.

That is an absurd suggestion. Locally storing a list of completed script filenames is not telemetry. Your text editor is not collecting telemetry just because it has a list of recently opened files stored on your system.

Also LJ you're trying to suggest collecting telemetry on the user based on which scripts are run which is a no go in my book.

That is an absurd suggestion. Locally storing a list of completed script filenames is not telemetry. Your text editor is not collecting telemetry just because it has a list of recently opened files stored on your system.

It's not absurd at all, It's what you suggested we do with script entries.

Yes, the 'remote collection and transmission of data'. None of which is occurring by locally storing a file which is never transmitted over the internet.

what are we even discussing now?

what are we even discussing now?

Off-topic.

@lj3954 Here's my opinion on your approach, I think its unnecessary, collecting data and monitoring that data for changes based on which entries the user makes is not the best idea, also our approach is much simpler to this and only requires a keybind. If you could explain to me why this approach is bad maybe I'd understand but your explanations so far are just justifying our approach even more.

@lj3954 move this somewhere else. This is definitely not the place to debate over telemetry definitions.

@lj3954 move this somewhere else. This is definitely not the place to debate over telemetry definitions.

Please direct this to the one who brought up in the first place the ridiculous idea that I'm suggesting "telemetry" additions: https://github.com/ChrisTitusTech/linutil/pull/384#issuecomment-2351744318.

@lj3954 Here's my opinion on your approach, I think its unnecessary, collecting data and monitoring that data for changes based on which entries the user makes is not the best idea, also our approach is much simpler to this and only requires a keybind. If you could explain to me why this approach is bad maybe I'd understand but your explanations so far are just justifying our approach even more.

From the comments you've posted, it seems I'm either not describing my suggestion in a way you're able to easily understand. I'm working on an implementation right now, which should make it more clear.

Also LJ you're trying to suggest collecting telemetry on the user based on which scripts are run which is a no go in my book.

Local persistence != telemetry
Apt uses a local db to store package/version state, man uses a local db for indexing application man pages, there's a lot of precedence for this type local state persistence, and no one would qualify that type of data recording as telemetry.
On the contrary, if those local db instances were transmitted to a remote server, that would amount to telemetry.

@cartercanedy

move this somewhere else. This is definitely not the place to debate over telemetry definitions.

This is definitely relevant to the conversation about implementation details?

https://github.com/ChrisTitusTech/linutil/pull/384#issuecomment-2351747931 Don't see any relevance here.

@lj3954 What you're suggesting with the local file would require Linutil to constantly loop that file and check for changes and apply changes via tab entries and and selection, which would then make Linutil very slow and less performant. Our approach mitigates this issue via not having to use a file and not having to monitor the users actions in the script.

@lj3954 What you're suggesting with the local file would require Linutil to constantly loop that file and check for changes and apply changes via tab entries and and selection, which would then make Linutil very slow and less performant. Our approach mitigates this issue via not having to use a file and not having to monitor the users actions in the script, via dynamic hotkey list and 'R' keybinding being displayed in that list.

No, we'll apply changes upon script/revert completion, not selection. I don't understand why you'd think otherwise.

Ok, I can see your point in the larger context of that conversation, but I'm still adamant that there should be a bigger discussion about how we want to implement reversion. These kinds of stateful features can very easily turn into messes that wind up with end-users machines getting munched, so robustness is paramount

@lj3954 What you're suggesting with the local file would require Linutil to constantly loop that file and check for changes and apply changes via tab entries and and selection, which would then make Linutil very slow and less performant. Our approach mitigates this issue via not having to use a file and not having to monitor the users actions in the script, via dynamic hotkey list and 'R' keybinding being displayed in that list.

No, we'll apply changes upon script/revert completion, not selection. I don't understand why you'd think otherwise.

"Selection" meaning the same thing as "Completion" not sure where my point was not understood, also that approach would be less performant and more complex. Our approach only depends on whether "r" is pressed or not, and the keybind is displayed in the dynamic hotkey list.

Ok, I can see your point in the larger context of that conversation, but I'm still adamant that there should be a bigger discussion about how we want to implement reversion. These kinds of stateful features can very easily turn into messes that wind up with end-users machines getting munched, so robustness is paramount

If you check the diff files, reversion will not end up with end-users machines getting munched with the #389 Fix, and future PRs can be reviewed and changed preventing configs being munched in the long run.

Your approach is indeed simpler in the implementation. I just don't think that's always better.
In terms of performance, I don't think there will be a significant difference. Reading a file on startup and writing it on command completion will cause minimal performance impact.

Reading a file on startup and writing it on command completion will cause minimal performance impact.

Iterating through that file and appluing TUI changes will cost time.
Also, what if the script changes (let's say it's been reordered, moved or renamed) after a user first ran it? How would your approach handle that?

Your approach is indeed simpler in the implementation. I just don't think that's always better.
In terms of performance, I don't think there will be a significant difference. Reading a file on startup and writing it on command completion will cause minimal performance impact.

I still don't agree with the replacing entries approach though, "R" is perfect for this scenario and IS displayed in the dynamic hotkey list. The dynamic hotkey list gives keybinding information based on selection, and "R" is going to get displayed no matter what so the user will always know how to revert changes. Also like you said before the change with the "R" keybinding going based off of the script contents would be good and I think @adamperkowski should implement that.

At a certain point of complexity, this application might just become a package manager, so we might as well just tell everyone to use nix and call it a day

Reading a file on startup and writing it on command completion will cause minimal performance impact.

Iterating through that file and applying TUI changes will cost time.
Also, what if the script changes (let's say it's been reordered, moved or renamed) after a user first ran it? How would your approach handle that?

Script filename is the best solution in my eyes. It's rare that scripts would be renamed, although of course that could happen and end up breaking that one entry. The tab and directory structure will be disregarded, since it's silly to have 2 scripts with identical names.

Iterating through that file and applying TUI changes will cost time.

Yes, it will. It's just unlikely to be a very major amount of time, where it will significantly affect the performance of the application. There are plenty of other changes that have been made to the project that negatively affect performance.

Reading a file on startup and writing it on command completion will cause minimal performance impact.

Iterating through that file and applying TUI changes will cost time.
Also, what if the script changes (let's say it's been reordered, moved or renamed) after a user first ran it? How would your approach handle that?

Script filename is the best solution in my eyes. It's rare that scripts would be renamed, although of course that could happen and end up breaking that one entry. The tab and directory structure will be disregarded, since it's silly to have 2 scripts with identical names.

Iterating through that file and applying TUI changes will cost time.

Yes, it will. It's just unlikely to be a very major amount of time, where it will significantly affect the performance of the application. There are plenty of other changes that have been made to the project that negatively affect performance.

LJ I just don't think your approach is good, it adds extra unneeded complexity and will affect performance. Please read https://github.com/ChrisTitusTech/linutil/pull/384#issuecomment-2351753918 as well.

Reading a file on startup and writing it on command completion will cause minimal performance impact.

Iterating through that file and applying TUI changes will cost time.
Also, what if the script changes (let's say it's been reordered, moved or renamed) after a user first ran it? How would your approach handle that?

Script filename is the best solution in my eyes. It's rare that scripts would be renamed, although of course that could happen and end up breaking that one entry. The tab and directory structure will be disregarded, since it's silly to have 2 scripts with identical names.

Iterating through that file and applying TUI changes will cost time.

Yes, it will. It's just unlikely to be a very major amount of time, where it will significantly affect the performance of the application. There are plenty of other changes that have been made to the project that negatively affect performance.

LJ I just don't think your approach is good, it adds extra unneeded complexity and will affect performance. Please read #384 (comment) as well.

You're arguing that my solution would affect performance but you want to read script contents at runtime to determine whether it can be reverted. I'm not sure I see the consistency.

Reading a file on startup and writing it on command completion will cause minimal performance impact.

Iterating through that file and applying TUI changes will cost time.
Also, what if the script changes (let's say it's been reordered, moved or renamed) after a user first ran it? How would your approach handle that?

Script filename is the best solution in my eyes. It's rare that scripts would be renamed, although of course that could happen and end up breaking that one entry. The tab and directory structure will be disregarded, since it's silly to have 2 scripts with identical names.

Iterating through that file and applying TUI changes will cost time.

Yes, it will. It's just unlikely to be a very major amount of time, where it will significantly affect the performance of the application. There are plenty of other changes that have been made to the project that negatively affect performance.

LJ I just don't think your approach is good, it adds extra unneeded complexity and will affect performance. Please read #384 (comment) as well.

You're arguing that my solution would affect performance but you want to read script contents at runtime to determine whether it can be reverted. I'm not sure I see the consistency.

It's a change you suggested? Why else would I be mentioning it? https://github.com/ChrisTitusTech/linutil/pull/384#issuecomment-2351698810

Also, what if the script changes (let's say it's been reordered, moved or renamed) after a user first ran it? How would your approach handle that?

Script filename is the best solution in my eyes. It's rare that scripts would be renamed, although of course that could happen and end up breaking that one entry. The tab and directory structure will be disregarded, since it's silly to have 2 scripts with identical names.

That still didn't answer my questions though.
"breaking that one entry" - and what if an entry is broken? Breaks the whole functionality.

Iterating through that file and applying TUI changes will cost time.

Yes, it will. It's just unlikely to be a very major amount of time, where it will significantly affect the performance of the application. There are plenty of other changes that have been made to the project that negatively affect performance.

Well, then it doesn't make sense to knowingly create future performance issues.

Reading a file on startup and writing it on command completion will cause minimal performance impact.

Iterating through that file and applying TUI changes will cost time.
Also, what if the script changes (let's say it's been reordered, moved or renamed) after a user first ran it? How would your approach handle that?

Script filename is the best solution in my eyes. It's rare that scripts would be renamed, although of course that could happen and end up breaking that one entry. The tab and directory structure will be disregarded, since it's silly to have 2 scripts with identical names.

Iterating through that file and applying TUI changes will cost time.

Yes, it will. It's just unlikely to be a very major amount of time, where it will significantly affect the performance of the application. There are plenty of other changes that have been made to the project that negatively affect performance.

LJ I just don't think your approach is good, it adds extra unneeded complexity and will affect performance. Please read #384 (comment) as well.

You're arguing that my solution would affect performance but you want to read script contents at runtime to determine whether it can be reverted. I'm not sure I see the consistency.

It's a change you suggested? Why else would I be mentioning it? #384 (comment)

I suggested a boolean flag in the tab data toml. And either way, you agreed that exactly that would be a good idea, so clearly performance isn't your top concern.

Reading a file on startup and writing it on command completion will cause minimal performance impact.

Iterating through that file and applying TUI changes will cost time.
Also, what if the script changes (let's say it's been reordered, moved or renamed) after a user first ran it? How would your approach handle that?

Script filename is the best solution in my eyes. It's rare that scripts would be renamed, although of course that could happen and end up breaking that one entry. The tab and directory structure will be disregarded, since it's silly to have 2 scripts with identical names.

Iterating through that file and applying TUI changes will cost time.

Yes, it will. It's just unlikely to be a very major amount of time, where it will significantly affect the performance of the application. There are plenty of other changes that have been made to the project that negatively affect performance.

LJ I just don't think your approach is good, it adds extra unneeded complexity and will affect performance. Please read #384 (comment) as well.

You're arguing that my solution would affect performance but you want to read script contents at runtime to determine whether it can be reverted. I'm not sure I see the consistency.

It's a change you suggested? Why else would I be mentioning it? #384 (comment)

I suggested a boolean flag in the tab data toml. And either way, you agreed that exactly that would be a good idea, so clearly performance isn't your top concern.

Of course? why would we show the "R" keybinding if a script couldn't be reverted.

"breaking that one entry" - and what if an entry is broken

What I mean by broken is that the entry won't default to the state it should. That doesn't break much functionality, and that's why I'm leaving the 'r' key to invert which entries are displayed on the screen.

Well, then it doesn't make sense to knowingly create future performance issues.

#153 must be reverted then, it's better for performance to leave the data within the Rust code. There are several other similar PRs which improved user or developer experience while hurting performance.

"breaking that one entry" - and what if an entry is broken

What I mean by broken is that the entry won't default to the state it should. That doesn't break much functionality, and that's why I'm leaving the 'r' key to invert which entries are displayed on the screen.

Well, then it doesn't make sense to knowingly create future performance issues.

#153 must be reverted then, it's better for performance to leave the data within the Rust code. There are several other similar PRs which improved user or developer experience while hurting performance.

@lj3954 I left the echo statement and revert functions in the script that weren't revertible to be built upon in the future.. No need for the sarcasm.

#153 must be reverted then

I'm sorry, but I don't understand. We're not talking about this. This comment was 100% unncecessary. That's just throwing meaningless words to prove a point.
Not why we are here in the first place. I thought this is about making the utility better and implementing new features, you don't give me that impression. @lj3954

I think this conversation should stop right here.

That's just throwing meaningless words to prove a point.

You claim that we shouldn't make improvements if they hurt performance. I gave you examples of cases where we made significant improvements to user or developer experience in exchange for some performance.

I think this conversation should stop right here.

I think this conversation should stop right here.

I agree. I don't agree with the added complexity and performant hurting suggestions from LJ, this debate has gone for too long.

That's just throwing meaningless words to prove a point.

You claim that we shouldn't make improvements if they hurt performance. I gave you examples of cases where we made significant improvements to user or developer experience in exchange for some performance.

I think this conversation should stop right here.

This is going to be my last message in this debate, adding "R" as a KEYBIND and displaying it IN the DYNAMIC HOTKEY LIST is a much more simpler approach to collecting data on the user based on which entries are selected and then replace current entries with revert entries.

I think this conversation should stop right here.

I agree. I don't agree with the added complexity and performant hurting suggestions from LJ, this debate has gone for too long.

I have repeatedly shown how your argument regarding 'performance' is not consistent whatsoever, since you misinterpreted one of my suggestions to mean something which would have a far greater impact on performance, and still agreed it would be a good idea.

Trying to stop discussion on implementation details is not reasonable behaviour when you're proposing major changes.

Like I said, comments like "clearly performance isn't your top concern" or "153 must be reverted then" have nothing to do with implementation details.

Trying to stop discussion on implementation details is not reasonable behaviour when you're proposing major changes.

Like I said, comments like "clearly performance isn't your top concern" or "153 must be reverted then" have nothing to do with implementation details.

I absolutely won't accept someone arguing that my suggestion should be rejected solely because of performance impacts, when they support several other changes that similarly improve the program while hurting performance. You can't pick whichever argument is convenient at the time.
The one thing you're correct about is that my suggestion would involve more complexity. I've been very transparent in that. I just think the improvement in UX is more important than some complexity in the codebase.

Trying to stop discussion on implementation details is not reasonable behaviour when you're proposing major changes.

Like I said, comments like "clearly performance isn't your top concern" or "153 must be reverted then" have nothing to do with implementation details.

I absolutely won't accept someone arguing that my suggestion should be rejected solely because of performance impacts, when they support several other changes that similarly improve the program while hurting performance. You can't pick whichever argument is convenient at the time.
The one thing you're correct about is that my suggestion would involve more complexity. I've been very transparent in that. I just think the improvement in UX is more important than some complexity in the codebase.

The extra complexity is not needed, some users would actually like to have the option to reinstall instead of the entry being replaced with a revert entry, our approach gives the user 2 options: "R" to revert OR enter to reinstall, mitigating the issue in your more complex approach.

Also @lj3954 Your approach would hurt UX via https://github.com/ChrisTitusTech/linutil/pull/384#issuecomment-2351768316

some users would actually like to have the option to reinstall instead of the entry being replaced with a revert entry

Can you please read my suggestions? I proposed making the 'r' key invert which entries are shown in the UI, which would very much allow users to choose whether they want to run the initial script again.
#338 also poses quite a challenge for your implementation; I'm building mine directly upon it.

@lj3954 Good luck with your implementation then.

some users would actually like to have the option to reinstall instead of the entry being replaced with a revert entry

Can you please read my suggestions? I proposed making the 'r' key invert which entries are shown in the UI, which would very much allow users to choose whether they want to run the initial script again.
#338 also poses quite a challenge for your implementation; I'm building mine directly upon it.

If you're going to do that then don't steal any of my script implementation :) Also R keybinding to invert which entries area shown is not necessary when you could just use R to execute the revert function immediately, basically what you are saying is that you're going to steal our implementation, then change one functionality to invert entries and then post a PR? I don't think that's very sportsman like, + the R Keybinding change adds extra unneeded complexity.

If you're going to do that then don't steal any of my script implementation

Theft, clearly an accurate way to describe using permissively licensed code, especially when released publicly under the same license while even maintaining the original commits & authorship.

when you could just use R to execute the revert function immediately

One of the major gripes I had with that was #338. I expect that PR to be merged. Someone will have to deal with the issues that causes.

then change one functionality to invert entries

I'm adding a lot of complexity, but I'm also apparently "stealing" "your" very simple implementation. Which one is it now?
This is a ridiculous debate, there is no value in it when it's entirely comprised of unfounded accusations.

when you could just use R to execute the revert function immediately

One of the major gripes I had with that was #338. I expect that PR to be merged. Someone will have to deal with the issues that causes.

And what issue will that cause? I assume It's being displayed in the dynamic hotkey list aswell THATS why we have one... I don't get why you want to add extra unneeded complexity onto the existing scripts when its entirely unneeded, #338 with the keybinding functionality to select which ones to execute does it perfectly fine there's no reason to add extra complexity on to it, and now the same thing with this PR you're trying to suggest changes that are just not needed at all.

And what issue will that cause?

You'll need to be able to select both items to be reverted & those to be ran normally, and be able to show those differently.

And what issue will that cause?

It's easy to say that it's simple when you aren't the one writing any part of it.

Never said that #338 was simple but I understand what you mean in:

You'll need to be able to select both items to be reverted & those to be ran normally

https://github.com/lj3954/linutil/tree/add_revertable_commands
Please critique my proposed changes.

https://github.com/lj3954/linutil/tree/add_revertable_commands
Please critique my proposed changes. Specifically, lj3954@78aee43, where all the major changes are made. Other than that, changes to scripts are from this branch, other refactoring in core is from #247, and multi selection is from #338. I've based my changes on those branches because I expect them to be merged regardless, and I don't want to cause any conflicts since they all make major changes.

Yeah I'm good @lj3954 you're just taking my work & Adams working and adding unneeded functionality onto it; I hope chris does not end up merging that... Where is the morality?

you're just taking my work

Yes, by merging your commits onto my branch. Chris is also "taking" your work whenever he merges your PRs, right?

& Adams work

Our implementations are completely unique; I'd like for him to read what I've written and make appropriate comments. I'd of course like to hear input from others as well, such as yourself, but you're of course a third party to the changes within the UI, having not made any within this PR.

Where is the morality?

It is unbelievable to me that you think there's any sort of moral issue with what I'm doing. The only thing I've written is a competing UI/UX implementation to that written by @adamperkowski. Your script changes are independent of that, both UIs run them (nearly) identically. I've dropped just one commit of yours (https://github.com/ChrisTitusTech/linutil/pull/384/commits/9a5839ea34b3fe97587b6294d999f08f36bda165), since scripts not supporting reversion are handled within the UI instead.

Chris is also "taking" your work whenever he merges your PRs, right?

There's a key difference between Chris merging a PR that someone has opened and made changes by themselves with intention of it getting merged and you opening a PR with nyx's code in it. (doesn't matter if it says nyx is the author, still i didn't see "yeah sure you can use my work" from nyx)

I'd of course like to hear input from others as well, such as yourself

... just to ignore it again?

The only thing I've written is a competing UI/UX implementation to that written by @adamperkowski

Again, we're not here to compete.

still i didn't see "yeah sure you can use my work" from nyx

The MIT license the code is contributed under explicitly gives me all permissions I need to include the code. I'm sorry, I don't need written permission to use someone's work with the rights the license grants me, that is absurd and would slow the development of any open source project to a complete halt.
It's true he doesn't agree with my changes- well, purports to. Perhaps he just dislikes how I've disagreed with him on certain things. Whatever the case, writing code does not give one complete control over the implementation details relating to how the code is used. Would there be a difference if I made my PR after this one was merged, only removing your code and adding mine? I would doubt that.

... just to ignore it again?

I'm looking for input on what I've written, not nonsense about how I've "stolen" his work by bringing his commits to my branch with full credit given.

Again, we're not here to compete.

We're here to offer competing solutions to the same problem. Rejecting all competition doesn't help anyone, a project is only going to improve more if multiple people are able to suggest different ideas, that the merits of are then discussed. This discussion has led to improvements suggested to both solutions. For example, dynamically displaying 'r' in the keyboard shortcuts depending on whether or not the script supports reversion. That idea wouldn't have come up without this discussion.

still i didn't see "yeah sure you can use my work" from nyx

The MIT license the code is contributed under explicitly gives me all permissions I need to include the code. I'm sorry, I don't need written permission to use someone's work with the rights the license grants me, that is absurd and would slow the development of any open source project to a complete halt.
It's true he doesn't agree with my changes- well, purports to. Perhaps he just dislikes how I've disagreed with him on certain things. Whatever the case, writing code does not give one complete control over the implementation details relating to how the code is used. Would there be a difference if I made my PR after this one was merged, only removing your code and adding mine? I would doubt that.

... just to ignore it again?

I'm looking for input on what I've written, not nonsense about how I've "stolen" his work by bringing his commits to my branch with full credit given.

Again, we're not here to compete.

We're here to offer competing solutions to the same problem. Rejecting all competition doesn't help anyone, a project is only going to improve more if multiple people are able to suggest different ideas, that the merits of are then discussed. This discussion has led to improvements suggested to both solutions. For example, dynamically displaying 'r' in the keyboard shortcuts depending on whether or not the script supports reversion. That idea wouldn't have come up without this discussion.

@lj3954 Again morality != law , and if you're going to make a separate PR at least have the morality to rewrite the revert functions I made.. Don't just take my work without explicit permission, this is disrespectful especially when it's a "competition between 2 PRs" and once again morality != law.

The MIT license the code is contributed under explicitly gives me all permissions I need to include the code. I'm sorry, I don't need written permission to use someone's work with the rights the license grants me, that is absurd and would slow the development of any open source project to a complete halt.

I'm sorry but how many times am I supposed to repeat myself. We do not accuse you of beaking MIT license's terms. We said we have a MORAL issue with you taking nyx's code KNOWING nyx is against it.

I'd invite everyone to read https://github.com/ChrisTitusTech/linutil/pull/401#issuecomment-2351828878 for the end of this discussion about 'theft'.

I'd also invite everyone to read my (multiple) replies.

To be refactored

Closed for now, I'm going to keep working on this and maintain it with adam. We'll make a new PR in a month or so.


Error in simple example, PySceneDetect Python Interface

In the documentation for PySceneDetect here , the sample program returns the error  NameError: name 'video_fps' is not defined . I believe that the correction would be changing it to video_framerate. Is there a better place to raise such an issue? :fearful:

Created a pull request with correction #15

Hi @SoumitraAgarwal - indeed you are correct!
I've accepted your pull request (0c359d9fae48a948bba11a7b9f42ca597956c7b0), thank you for bringing this to my attention.  Best regards!


Plumb through multiple stamp names for each deployment that occurred for a single ASE

Sometimes an ASE can have more than one deletion or failed deployment which results in more than one stamp (ugly name). Some of our detectors need those stamp names to run some detection on but this will require a change on AppLens.

This is irrelevant now. Detectors such as stamp deployment detector will just take the friendly name, wont need stamp name. And for detectors such as MultiRoleCPuDetector, only send current active stamp and not the previously deleted stamp names as customer are only interested in the active problem and not a past problem.


Feature: custom client and partial document

Hello guys.
I've been using the tornadoes for some of our projects and we came up with two features:

Use custom HTTP client: we use https://github.com/globocom/tornado-alf for authenticated requests

Updating Partial: There is an option in ElasticSearch that is partial update. It does not override the whole doc as put option does.

I implemented both in this PR. Feel free to review

@scorphus Sure! let me do it.

Thank you, @cristianoliveira! 👍


shared should only be allowed on global variables

In general, Slang's checking of modifiers/qualifiers is fairly lax right now, so doing this enforcement would be a good chance to tighten some of that up.

We also need to make sure that if the same resource is declared in multiple places, it uses the same modifier

We also need to make sure that if the same resource is declared in multiple places, it uses the same modifier

Slang should be able to enforce that within a single Program, but it seems to be that there is a bigger issue here, where all the different RT programs you are going to bind at once need to agree on what the global root signature will be (the shared parameters and their layout), and checking that would be at a scope larger than what Slang typically sees at one time.
The context for anybody who is following along at home: the DirectX Raytracing (DXR) API introduces a distinction between a "global" and "local" root signature, where the global signature is for parameters that will be shared by all RT programs (so the arguments get passed via the ordinary root binding slots), while the local signature is potentially different for each entry point and determine which arguments get stored in the shader table alongside the entry points.
Slang is exposing the shared modifier (which used to be a hint for the D3D effect system) to serve as a hint to the user about which parameters are supposed to go into the global root signature (with the implication that all others should go into the local one).
From a language perspective, it would be nice if we could have a more "clean" way to specify multiple entry points that will all share some global parameter blocks. I don't see anything particularly easy to do without major changes to the HLSL entry point syntax, though.

Falcor verifies that ParameterBlock definitions match between different shader stages

It's not about that part (and Slang now checks parameter block definitions between stages of a single Program).
I'm talking about the case where you bind two different hit groups (each an RtProgram, IIRC), and they disagree about which parameter blocks are shared (or just disagree about what goes inside a shared parameter block). Do you do that kind of checking on the entire RT "scene" or "program collection" or whatever the abstraction is for "all the programs you might call together."

The way Falcor handles it is:
(a) For each collection of programs (RtProgram) we go over all the internal programs and create a single ProgramReflection object from the shared resources
(b) The programs has to agree on bind-locations and layout (that's the tricky part to manage)
I think the best option is to force people to create an RtProgram object from a single file. They can then use #include to share code between different programs

Closing. The shared keyword is now deprecated/legacy.


Migrate old PRs

PRs in VBA-Content > VBA-Docs

:warning: Validation status: warnings

File
Status
Preview URL
Details

api/Excel.Application.Intersect.md
:warning:Warning
View
Details

api/Excel.Application.Union.md
:warning:Warning
View
Details

api/Excel.Range.ColumnWidth.md
:warning:Warning
View
Details

api/Excel.Range.HorizontalAlignment.md
:warning:Warning
View
Details

api/Excel.Range.Text.md
:warning:Warning
View
Details

api/Excel.Range.VerticalAlignment.md
:warning:Warning
View
Details

api/Excel.Worksheet.Delete.md
:warning:Warning
View
Details

api/Excel.Worksheet.Range.md
:warning:Warning
View
Details

Language/Reference/User-Interface-Help/collection-object.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/miscellaneous-constants.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/resume-statement.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/select-case-statement.md
:white_check_mark:Succeeded
View

api/Excel.Range(object).md
:white_check_mark:Succeeded
View

api/Excel.Application.Intersect.md

Line 82: [Warning] Invalid file link:(~/api/application-union-method-excel.md).
Line 82: [Warning] Invalid file link:(~/api/worksheet-range-property-excel.md).

api/Excel.Application.Union.md

Line 78: [Warning] Invalid file link:(~/api/application-intersect-method-excel.md).
Line 78: [Warning] Invalid file link:(~/api/worksheet-range-property-excel.md).

api/Excel.Range.ColumnWidth.md

Line 30: [Warning] Invalid file link:(~/api/range-autofit-method-excel.md).
Line 51: [Warning] Invalid file link:(~/api/range-width-property-excel.md).
Line 52: [Warning] Invalid file link:(~/api/range-autofit-method-excel.md).

api/Excel.Range.HorizontalAlignment.md

Line 28: [Warning] Invalid file link:(~/api/xlhalign-enumeration-excel.md).

api/Excel.Range.Text.md

Line 32: [Warning] Invalid file link:(~/api/range-value-property-excel.md).
Line 48: [Warning] Invalid file link:(~/api/range-value-property-excel.md).

api/Excel.Range.VerticalAlignment.md

Line 28: [Warning] Invalid file link:(~/api/xlvalign-enumeration-excel.md).

api/Excel.Worksheet.Delete.md

Line 35: [Warning] Invalid file link:(~/api/application-displayalerts-property-excel.md).

api/Excel.Worksheet.Range.md

Line 97: [Warning] Invalid file link:(~/api/application-intersect-method-excel.md).
Line 97: [Warning] Invalid file link:(~/api/application-union-method-excel.md).

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

:warning: Validation status: warnings

File
Status
Preview URL
Details

api/Excel.Application.Intersect.md
:warning:Warning
View
Details

api/Excel.Application.Union.md
:warning:Warning
View
Details

api/Excel.Range.ColumnWidth.md
:warning:Warning
View
Details

api/Excel.Range.HorizontalAlignment.md
:warning:Warning
View
Details

api/Excel.Range.Text.md
:warning:Warning
View
Details

api/Excel.Range.VerticalAlignment.md
:warning:Warning
View
Details

api/Excel.Worksheet.Delete.md
:warning:Warning
View
Details

api/Excel.Worksheet.Range.md
:warning:Warning
View
Details

Language/Reference/User-Interface-Help/collection-object.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/miscellaneous-constants.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/resume-statement.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/select-case-statement.md
:white_check_mark:Succeeded
View

api/Excel.Range(object).md
:white_check_mark:Succeeded
View

api/Excel.Application.Intersect.md

Line 82: [Warning] Invalid file link:(~/api/application-union-method-excel.md).
Line 82: [Warning] Invalid file link:(~/api/worksheet-range-property-excel.md).

api/Excel.Application.Union.md

Line 78: [Warning] Invalid file link:(~/api/application-intersect-method-excel.md).
Line 78: [Warning] Invalid file link:(~/api/worksheet-range-property-excel.md).

api/Excel.Range.ColumnWidth.md

Line 30: [Warning] Invalid file link:(~/api/range-autofit-method-excel.md).
Line 51: [Warning] Invalid file link:(~/api/range-width-property-excel.md).
Line 52: [Warning] Invalid file link:(~/api/range-autofit-method-excel.md).

api/Excel.Range.HorizontalAlignment.md

Line 28: [Warning] Invalid file link:(~/api/xlhalign-enumeration-excel.md).

api/Excel.Range.Text.md

Line 32: [Warning] Invalid file link:(~/api/range-value-property-excel.md).
Line 48: [Warning] Invalid file link:(~/api/range-value-property-excel.md).

api/Excel.Range.VerticalAlignment.md

Line 28: [Warning] Invalid file link:(~/api/xlvalign-enumeration-excel.md).

api/Excel.Worksheet.Delete.md

Line 35: [Warning] Invalid file link:(~/api/application-displayalerts-property-excel.md).

api/Excel.Worksheet.Range.md

Line 97: [Warning] Invalid file link:(~/api/application-intersect-method-excel.md).
Line 97: [Warning] Invalid file link:(~/api/application-union-method-excel.md).

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


fix: pluginMinifyHtmlLiterals

fixed the pluginMinifyHtmlLiterals

@nchanged
All ok now?
Tried it on my project and its minifying

@vegarringdal I am actually thinking it's much better to do it with a transformer. But I will merge it now, and after the docs have been completed we will re-visit this one ;-)


enhancement: Vertical speed, and Ground speed

These would be a nice addition.

I will look in to it

This will be pretty hard to add, because of space. Did you think it as an option for the current speed measurement? or a new field?

maybe have a "pick 3" for the left side?
Pitch angle
Air Speed
Ground Speed
Vertical Speed
Coordinates
once you pick 3 the other 2 options gray out.

Hmm sounds like a good solution. WIll look into how you do it in YACL.


Setup repo

Codecov Report

:exclamation: No coverage uploaded for pull request base (master@4b274df). Click here to learn what that means.
Patch has no changes to coverable lines.

Additional details and impacted files
@@            Coverage Diff             @@
##             master        #1   +/-   ##
==========================================
  Coverage          ?   100.00%
==========================================
  Files             ?         4
  Lines             ?        73
  Branches          ?        14
==========================================
  Hits              ?        73
  Misses            ?         0
  Partials          ?         0

Flag
Coverage Δ

unittests
100.00% <0.00%> (?)

Flags with carried forward coverage won't be shown. Click here to find out more.
Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

:umbrella: View full report at Codecov.
:loudspeaker: Do you have feedback about the report comment? Let us know in this issue.


Add TLSv1.3 support for Opera 57

Opera 57 now supports TLSv1.3 by default without having to enable a flag (https://blogs.opera.com/desktop/changelog-for-57/#b3098.1)

Thanks!


Add exclude folders option

Hi @Quberik thanks for PR.
Can you elaborate the real need of such functionality? For example, there is gulp-filter plugin. You can filter folders and files with it, and then pipe to gulp-flatten.


Amortize HttpRequestStream & DuplexPipeStream ReadAsync calls

if _pipeReader.TryRead fails to get the data synchronously defer to an IAsyncEnumerable<int> that is allocated once on the first failure. (Use case WebSockets/SignalR over TLS)
Before

After

I used an IAsyncEnumerable as then the code very closely mimics the original read loop; other than adding yield before the returns and a slightly modified behaviour for the finally clause.
Resolves: https://github.com/aspnet/AspNetCore/issues/11940
/cc @stephentoub @davidfowl @halter73

Hide whitespace shows the change in the main methods better https://github.com/aspnet/AspNetCore/pull/11942/files?w=1

What's the single-threaded CPU overhead of this approach?

What's the single-threaded CPU overhead of this approach?

Looks good; it only engages the AsynEnumerable when there is no data and goes back to sync when there is data:
InMemoryTransportBenchmark
              Method |     Mean |     Error |     StdDev |   Median |     Op/s | Allocated |
 ------------------- |---------:|----------:|-----------:|---------:|---------:|----------:|
-          Plaintext | 84.22 us | 3.2848 us |  9.1020 us | 86.95 us | 11,874.2 |     352 B |
+          Plaintext | 79.11 us | 3.8055 us | 10.8573 us | 83.59 us | 12,641.1 |     348 B |
- PlaintextPipelined | 11.52 us | 0.2011 us |  0.1783 us | 11.46 us | 86,778.7 |     368 B |
+ PlaintextPipelined | 10.50 us | 0.2045 us |  0.1913 us | 10.46 us | 95,220.7 |     355 B |

Changed to use ManualResetValueTaskSourceCore as it makes it a bit simplier

Rebased

@davidfowl @jkotalik Can you also take a look at this PR? It LGTM.

Rebased (and merged to make rebasing easier) added feedback

Rename _mrvts to _valueTaskSource for @jkotalik

@anurse @davidfowl I assume you feel this isn't worth the risk for 3.0, right?

I would agree. We are moving branches to 5.0 on Monday and can take it there then.

@anurse One thing I think this PR uncovered is that we aren't counting bytes retrieved from PipeReader.TryRead towards the request body rate limit. This could potentially cause read rate timeouts when there shouldn't be if you mix TryRead and ReadAsync. I should have communicated this to you sooner, but I forgot. Sorry about that.
This wasn't a problem before 3.0, because TryRead was only used internally by RequestBody.DrainAsync() which already has a strict 5 second timeout, and resets the request body rate calculations if it completes successfully. I'm working a smaller less-risky PR to try to fix just this in 3.0.
When working on the smaller PR, I also noticed we regressed behavior wrt double counting examined but unconsumed bytes in the request body. Before we exposed a BodyReader, this issue would have been difficult/impossible to catch with a functional test, but we should have had better unit tests for this.
Here's the PR: https://github.com/aspnet/AspNetCore/pull/12639

Rebased

@halter73  #12639 fixed the counting, but still needs the timing change
Error message
Moq.MockException : \nExpected invocation on the mock should never have been performed, but was 32 times: h => h.OnTimeout(It.IsAny<TimeoutReason>())\r\n\r\nConfigured setups: \r\nITimeoutHandler h => h.OnTimeout(It.IsAny<TimeoutReason>())\r\n\r\nPerformed invocations: \r\nITimeoutHandler.OnTimeout(TimeoutReason.ReadDataRate)\r\nITimeoutHandler.OnTimeout(TimeoutReason.ReadDataRate)\r\nITimeoutHandler.OnTimeout(TimeoutReason.ReadDataRate)\r\nITimeoutHandler.OnTimeout(TimeoutReason.ReadDataRate)\r\nITimeoutHandler.OnTimeout(TimeoutReason.ReadDataRate)\r\nITimeoutHandler.OnTimeout(TimeoutReason.ReadDataRate)\r\nITimeoutHandler.OnTimeout(TimeoutReason.ReadDataRate)\r\nITimeoutHandler.OnTimeout(TimeoutReason.ReadDataRate)\r\nITimeoutHandler.OnTimeout(TimeoutReason.ReadDataRate)\r\nITimeoutHandler.OnTimeout(TimeoutReason.ReadDataRate)\r\nITimeoutHandler.OnTimeout(TimeoutReason.ReadDataRate)\r\nITimeoutHandler.OnTimeout(TimeoutReason.ReadDataRate)\r\nITimeoutHandler.OnTimeout(TimeoutReason.ReadDataRate)\r\nITimeoutHandler.OnTimeout(TimeoutReason.ReadDataRate)\r\nITimeoutHandler.OnTimeout(TimeoutReason.ReadDataRate)\r\nITimeoutHandler.OnTimeout(TimeoutReason.ReadDataRate)\r\nITimeoutHandler.OnTimeout(TimeoutReason.ReadDataRate)\r\nITimeoutHandler.OnTimeout(TimeoutReason.ReadDataRate)\r\nITimeoutHandler.OnTimeout(TimeoutReason.ReadDataRate)\r\nITimeoutHandler.OnTimeout(TimeoutReason.ReadDataRate)\r\nITimeoutHandler.OnTimeout(TimeoutReason.ReadDataRate)\r\nITimeoutHandler.OnTimeout(TimeoutReason.ReadDataRate)\r\nITimeoutHandler.OnTimeout(TimeoutReason.ReadDataRate)\r\nITimeoutHandler.OnTimeout(TimeoutReason.ReadDataRate)\r\nITimeoutHandler.OnTimeout(TimeoutReason.ReadDataRate)\r\nITimeoutHandler.OnTimeout(TimeoutReason.ReadDataRate)\r\nITimeoutHandler.OnTimeout(TimeoutReason.ReadDataRate)\r\nITimeoutHandler.OnTimeout(TimeoutReason.ReadDataRate)\r\nITimeoutHandler.OnTimeout(TimeoutReason.ReadDataRate)\r\nITimeoutHandler.OnTimeout(TimeoutReason.ReadDataRate)\r\nITimeoutHandler.OnTimeout(TimeoutReason.ReadDataRate)\r\nITimeoutHandler.OnTimeout(TimeoutReason.ReadDataRate)

Stack trace
   at Moq.Mock.VerifyCalls(Mock targetMock, InvocationShape expectation, LambdaExpression expression, Times times, String failMessage)
   at Moq.Mock.Verify[T](Mock`1 mock, Expression`1 expression, Times times, String failMessage)
   at Moq.Mock`1.Verify(Expression`1 expression, Times times)
   at Moq.Mock`1.Verify(Expression`1 expression, Func`1 times)
   at Microsoft.AspNetCore.Server.Kestrel.Core.Tests.Http2TimeoutTests.DATA_Received_TooSlowlyOnSecondStream_AbortsConnectionAfterNonAdditiveRateTimeout() in /_/src/Servers/Kestrel/test/InMemory.FunctionalTests/Http2/Http2TimeoutTests.cs:line 775
--- End of stack trace from previous location where exception was thrown ---

Probably want to hold on this for now until https://github.com/dotnet/coreclr/pull/26310 is evaluated

Probably want to hold on this for now until dotnet/coreclr#26310 is evaluated

I'll welcome your help evaluating it :)

I asked @halter73 what the deal is here and he said "oooh, this is a spicy one, but now that we're in 5.0, we can look at it". 😉
@davidfowl @halter73 Let's re-open this now that 5.0 is open
@benaadams can you rebase?

dotnet/coreclr#26310 did get merged, so adding IAsyncEnumerable<int> ReadAsyncAwaited probably doesn't make sense any more.

Agreed; but it still needs to be evaluated as my be backed out https://github.com/dotnet/coreclr/issues/27403
/cc @sebastienros

My hope is that the functionality from #27403 remains and ends up being enabled by default in .NET 5.  But I need help from folks in vetting that and coming back with perf numbers from workloads to justify it.
Even if that ships on-by-default, though, there's potentially value in optimizing critical cases with hand-rolled implementations, if doing so can, for example, do a more efficient job of caching than the built-in caching.  And as any such hand-rolled implementation involves a ton more code, it would need to be so much better that it was worth the maintenance / bug risk that is likely in such complicated code.  I don't know if this particular case / implementation meets that bar.

(btw, I've implemented an analyzer to help flag cases of ValueTask misuse that can cause problems as more and more such caching is applied: https://github.com/dotnet/roslyn-analyzers/pull/3001)

@benaadams can you rebase to resolve conflicts?
@halter73 @jkotalik are we good to merge this once conflicts resolved (and failing builds either kicked into submission or fixed ;))

We should make the pipelines change @benaadams

We should make the pipelines change @benaadams

What changes exactly are you referring to?

@benaadams @davidfowl @halter73 https://github.com/dotnet/coreclr/pull/26310 has been merged now. Do we still want this change? I'd like to clean it up if not.

No it isn't needed currently.

Sweet! Thanks!


suddenly no more sound over HDMI?

Hi,
I installed wsl2 and docker desktop. It works but then suddenly when I want to watch YouTube videos/Netflix/Spotify, I cannot hear any sound through my tv. I check if my tv and speaker is broken with my ps4 and it works. Also, when I access the pc remotely, I have sound in TeamViewer. btw I reinstalled windows to check if PC HDMI port or cable is broken but everything works but when I install again Docker Desktop its not working again. Please Help !
Thanks!

got the problem solved!
https://social.technet.microsoft.com/Forums/en-US/416ff4fc-8e9c-400c-978d-2e43e23b901c/intel-display-audio-and-hyper-v?forum=win10itprovirt

got the problem solved!
https://social.technet.microsoft.com/Forums/en-US/416ff4fc-8e9c-400c-978d-2e43e23b901c/intel-display-audio-and-hyper-v?forum=win10itprovirt

Your URL can't be opened. Could you explain what was the solution on your case?

got the problem solved!
https://social.technet.microsoft.com/Forums/en-US/416ff4fc-8e9c-400c-978d-2e43e23b901c/intel-display-audio-and-hyper-v?forum=win10itprovirt

Link is not working, I have the same sound problem with wsl


feat(utils): appendHiddenInput

Describe pull-request
Adds a utils method for appending a hidden input for form elements. This can be used by our own input element that needs has a shadowDOM.
Solving issue
Fixes: #

Really nice! 🙌  Maybe the parameter "attributes", could be called something like "otherAttributes" or something like that just to make it extra clear and easy to follow.


Update cluster conditions only if they have been changed

Currently we always send a request to update cluster conditions, even if they haven't changed. It leads to creation of multiple fake events, that the cluster status was updated.
This commit sends these requests only if there are real changes in cluster conditions.

Lets rebase this on top of #49 when it merges.

/retest

/retest

This change landed in #50. We should close it.

/close


ImportError: cannot import name 'dense_features' from 'tensorflow.python.feature_column'

from tensorflow.python.feature_column import dense_features
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: cannot import name 'dense_features' from 'tensorflow.python.feature_column'

tensorflow==1.14.0
Python==3.7.3
What is the issue in this case?

I have the same issue with tensorflow 1.14.0, and trying to run a returnn config file

I am able to replicate the issue in TF-1.14 also issue not replicating in TF-Nightly.Thanks!

@oanush could you pls link the TF-Nightly colab  again correctly? :)

Just to check, what versions of tensorflow and tensorflow_estimator are being used?

@aiwalter Dense_feature is not there in the TF1.14 repository.  You can check the feature_column folder here.
I could import the dense_features without any issues using tf-nightly and TF2.0rc0. Here is the gist with TF1.14. Here is the gist with TF2.0.
Did you see this with any TensorFlow tutorials on TF website? Thanks!

@aiwalter
i have met the same question. Do you resovle it?

@mihaimaruseac
python 3.6
tensorflow is 1.14.0
tensorflow.estimator is 1.14.0
And I have met the same problem.In morning ,my program can run.But now it not. I want to know reason

@aiwalter
I resovle the problem.
Reinstall tensorflow  and tensorflow estimator

@NancyLele thx, it works now for me as well, however Ia am wondering because its the same tf and tf estimator version still
@jvishnuvardhan no, everything fine. I got this issue via deeppavlov

Do you use nightly?

Fixed this issue by reinstall tensorflow_estimator:
sudo -H pip3 uninstall  tensorflow_estimator
sudo -H pip3 install  tensorflow_estimator

Fixed this issue by reinstall tensorflow_estimator:
sudo -H pip3 uninstall tensorflow_estimator
sudo -H pip3 install tensorflow_estimator

thx!

Automatically closing this out since I understand it to be resolved, but please let me know if I'm mistaken.Thanks!

I hit this same issue with tf-nightly-gpu (tb-nightly-1.15.0a20190911, tf-nightly-gpu-1.15.0.dev20190730,  tf-estimator-nightly-1.14.0.dev2019092301) Also tried with tensorflow_estimator 2.0, same error.

File "/vol0/dan/tfn/lib/python3.6/site-packages/tensorflow_core/contrib/init.py", line 39, in
from tensorflow.contrib import compiler
File "/vol0/dan/tfn/lib/python3.6/site-packages/tensorflow_core/contrib/compiler/init.py", line 21, in
from tensorflow.contrib.compiler import jit
File "/vol0/dan/tfn/lib/python3.6/site-packages/tensorflow_core/contrib/compiler/init.py", line 22, in
from tensorflow.contrib.compiler import xla
File "/vol0/dan/tfn/lib/python3.6/site-packages/tensorflow_core/contrib/compiler/xla.py", line 22, in
from tensorflow.python.estimator import model_fn as model_fn_lib
File "/vol0/dan/tfn/lib/python3.6/site-packages/tensorflow_core/python/estimator/model_fn.py", line 26, in
from tensorflow_estimator.python.estimator import model_fn
File "/vol0/dan/tfn/lib/python3.6/site-packages/tensorflow_estimator/init.py", line 10, in
from tensorflow_estimator._api.v1 import estimator
File "/vol0/dan/tfn/lib/python3.6/site-packages/tensorflow_estimator/_api/v1/estimator/init.py", line 10, in
from tensorflow_estimator._api.v1.estimator import experimental
File "/vol0/dan/tfn/lib/python3.6/site-packages/tensorflow_estimator/_api/v1/estimator/experimental/init.py", line 10, in
from tensorflow_estimator.python.estimator.canned.dnn import dnn_logit_fn_builder
File "/vol0/dan/tfn/lib/python3.6/site-packages/tensorflow_estimator/python/estimator/canned/dnn.py", line 23, in
from tensorflow.python.feature_column import dense_features
ImportError: cannot import name 'dense_features'

That is because tf-nightly has been frozen at 9/11 whereas estimator nightly hasn't.
You can also use the 2.0 nightly preview instead, the 2.0 release candidate, or the 1.15 candidate.
Once 2.0 is fully released, nightlies will be unfrozen again.

I hit this issue with tf_1.14 and 1.15. And also tried this with tf_estimater 2.0. Tried reinstalling tensorflow too. But still could not resolve this issue.
ERROR:root:Internal Python error in the inspect module.
Below is the traceback from this internal error.
Traceback (most recent call last):
File "/home/vipin/.local/lib/python3.6/site-packages/IPython/core/interactiveshell.py", line 3319, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "", line 4, in
from alexnet import AlexNet
File "/home/vipin/Downloads/MT2019005/alexnet.py", line 2, in
import tensorflow as tf
File "/home/vipin/.local/lib/python3.6/site-packages/tensorflow/init.py", line 99, in
from tensorflow_core import *
File "/home/vipin/.local/lib/python3.6/site-packages/tensorflow_core/init.py", line 106, in
from tensorflow.python.data.ops.optional_ops import OptionalSpec
ImportError: cannot import name 'OptionalSpec'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/vipin/.local/lib/python3.6/site-packages/IPython/core/interactiveshell.py", line 2034, in showtraceback
stb = value.render_traceback()
AttributeError: 'ImportError' object has no attribute 'render_traceback'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/vipin/.local/lib/python3.6/site-packages/IPython/core/ultratb.py", line 1151, in get_records
return _fixed_getinnerframes(etb, number_of_lines_of_context, tb_offset)
File "/home/vipin/.local/lib/python3.6/site-packages/IPython/core/ultratb.py", line 319, in wrapped
return f(*args, **kwargs)
File "/home/vipin/.local/lib/python3.6/site-packages/IPython/core/ultratb.py", line 353, in _fixed_getinnerframes
records = fix_frame_records_filenames(inspect.getinnerframes(etb, context))
File "/usr/lib/python3.6/inspect.py", line 1490, in getinnerframes
frameinfo = (tb.tb_frame,) + getframeinfo(tb, context)
File "/usr/lib/python3.6/inspect.py", line 1448, in getframeinfo
filename = getsourcefile(frame) or getfile(frame)
File "/usr/lib/python3.6/inspect.py", line 696, in getsourcefile
if getattr(getmodule(object, filename), 'loader', None) is not None:
File "/usr/lib/python3.6/inspect.py", line 733, in getmodule
if ismodule(module) and hasattr(module, 'file'):
File "/home/vipin/.local/lib/python3.6/site-packages/tensorflow/init.py", line 50, in getattr
module = self._load()
File "/home/vipin/.local/lib/python3.6/site-packages/tensorflow/init.py", line 44, in _load
module = _importlib.import_module(self.name)
File "/usr/lib/python3.6/importlib/init.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "", line 994, in _gcd_import
File "", line 971, in _find_and_load
File "", line 941, in _find_and_load_unlocked
File "", line 219, in _call_with_frames_removed
File "", line 994, in _gcd_import
File "", line 971, in _find_and_load
File "", line 955, in _find_and_load_unlocked
File "", line 665, in _load_unlocked
File "", line 678, in exec_module
File "", line 219, in _call_with_frames_removed
File "/home/vipin/.local/lib/python3.6/site-packages/tensorflow_core/init.py", line 106, in
from tensorflow.python.data.ops.optional_ops import OptionalSpec
ImportError: cannot import name 'OptionalSpec'

@kvtheckrock pip list should display all packages from the ecosystem at the same version and not mixing nightly and releases. Please open a new issue if that is the case and you still have issues, and please fill in the issue template.

ImportError                               Traceback (most recent call last)
 in
----> 1 from keras.models import load_model
2
3
4
5 lbl=['Close','Open']
c:\users\hp\appdata\local\programs\python\python37\lib\site-packages\keras_init_.py in
1 from future import absolute_import
2
----> 3 from . import utils
4 from . import activations
5 from . import applications
c:\users\hp\appdata\local\programs\python\python37\lib\site-packages\keras\utils_init_.py in
4 from . import data_utils
5 from . import io_utils
----> 6 from . import conv_utils
7
8 # Globally-importable utils.
c:\users\hp\appdata\local\programs\python\python37\lib\site-packages\keras\utils\conv_utils.py in
7 from six.moves import range
8 import numpy as np
----> 9 from .. import backend as K
10
11
c:\users\hp\appdata\local\programs\python\python37\lib\site-packages\keras\backend_init_.py in
85 elif _BACKEND == 'tensorflow':
86     sys.stderr.write('Using TensorFlow backend.\n')
---> 87     from .tensorflow_backend import *
88 else:
89     # Try and load external backend.
c:\users\hp\appdata\local\programs\python\python37\lib\site-packages\keras\backend\tensorflow_backend.py in
4
5 import tensorflow as tf
----> 6 from tensorflow.python.framework import ops as tf_ops
7 from tensorflow.python.training import moving_averages
8 from tensorflow.python.ops import tensor_array_ops
ImportError: cannot import name 'ops' from 'tensorflow.python.framework' (unknown location)
can any one help me out?

Please open new issue and fill in issue template


[website][upgrade]feat: docs migration - 2.7.1 / Reference

(If this PR fixes a github issue, please add Fixes #<xyz>.)
Fixes #
(or if this PR is one task of a github issue, please add Master Issue: #<xyz> to link to the master issue.)
Master Issue #11766
Motivation
Explain here the context, and why you're making that change. What is the problem you're trying to solve.
Modifications
Click to Preview
Verifying this change

[ ] Make sure that the change passes the CI checks.

(Please pick either of the following options)
This change is a trivial rework / code cleanup without any test coverage.
(or)
This change is already covered by existing tests, such as (please describe tests).
(or)
This change added tests and can be verified as follows:
(example:)

Added integration tests for end-to-end deployment with large payloads (10MB)
Extended integration test for recovery after broker failure

Does this pull request potentially affect one of the following parts:
If yes was chosen, please highlight the changes

Dependencies (does it add or upgrade a dependency): (yes / no)
The public API: (yes / no)
The schema: (yes / no / don't know)
The default values of configurations: (yes / no)
The wire protocol: (yes / no)
The rest endpoints: (yes / no)
The admin cli options: (yes / no)
Anything that affects deployment: (yes / no / don't know)

Documentation
Check the box below and label this PR (if you have committer privilege).
Need to update docs?

[ ] doc-required
(If you need help on updating docs, create a doc issue)

[ ] no-need-doc
(Please explain why)

[x] doc
(If this PR contains doc changes)

Incorrect:
There are some tables not shown correctly (below are just a few examples)
https://deploy-preview-58--pulsar-next.netlify.app/docs/2.7.1/reference-configuration


More control

Implements #10
todo:

document
upgrade tile-decorator dep to a real release once https://github.com/mapbox/tile-decorator/pull/12 is merged & released
add tests for outputProps

This'll be another breaking change - remove keepKeys, requiredKeys, keepKeysRedis, and requiredKeysRedis and instead switch to json objects sourceProps, redisProps, and outputProps


How to support fgprof endpoint?

Recently fgprof is added to Thanos in endpoint /debug/fgprof. I am wondering how to enable scraping this endpoint at the same time with profile.
fgprof is similar to pprof profile, so I can configure something like below to enable fgprof, but this cannot enable profile at the same time.
scrape_configs:
- job_name: 'conprof'
  scrape_interval: 1m
  scrape_timeout: 1m
  profiling_config:
    pprof_config:
      profile:
        path: /debug/fgprof
        enabled: true
  static_configs:
  - targets: ['localhost:6060']

Yeah, I've been thinking about this as well, I haven't made up my mind about it yet. An escape could be "additional profiles" that are basically free form, or maybe any profile should be free form, instead of the predefined ones we have right now. What do you think?

I'm on similiar boat, the only exception is the tracing part which is not actually pprof. So maybe there should be two types, pprof and tracing?

I'd be curious to know if we could instead "discover" the profiles a target has available. Naively this should be pretty straight forward if all profiles are registered and visible in the /debug/pprof index page. It does appear that this could be possible if pprof.Profiles() returns custom profiles as well. It does look like pprof.NewProfile does register new profiles created. It doesn't look like fgprof currently does this, but I think it's worth investigating.

On related note, do we really need to collect always all type of profiles / pprof resources?
What about overall, ability to specify which profiles to scrape per scrape job? :thinking: Would this be useful @brancz ?
This will satisfy fgprof and maybe extra, other profiles someone can have. Of course by default, if not set we can use discovery like you proposed (:

It's already configurable but defaults to all.

I see. Adding fgprof to conprof as well so we can play with it: https://github.com/conprof/conprof/pull/74

@brancz What would be the basic scrape config to collect all the profiles including the fgprof?

Currently that's not really possible, what you can do though is change the profile endpoint (the "normal" cpu profile to be /debug/fgprof. I'm still discussing with the go team if we can find a solution that would allow us to auto-discover the profiles available, should that not lead anywhere though, then we can discuss other strategies I would say.

In the mean time I've worked on #165 and #169 was just merged allowing to add more custom profile types.
This works now:
  - job_name: 'awesome-app'
    scrape_interval: 10s
    static_configs:
      - targets: [ 'localhost:10902' ]
    profiling_config:
      pprof_config:
        ...
        fgprof:
          enabled: true
          path: /debug/fgprof

Adding the last part conprof should start scraping that endpoint now too. Let me know if you have problems if not.

Additionally, FYI, it seems like there was no consensus to try to add fgprof to the /debug/pprof page in some way:
https://github.com/golang/go/issues/41324#issuecomment-708535428


Create input "create_database_internet_gateway_route"

This will allow easy creation of publicly accessible RDS endpoints instead of having to add a separate aws_route resource next to/outside of the module "vpc { .. }" block.
Default value is false for full backward compatibility.

v1.49.0 has been released with this feature.


Jekyll site

I will create a Jekyll site

@Guardiola31337 You can assign to me this issue please? I don't have permission ;) Thanks

@israelperezglez weren't you an ΛRROW maintainer yet?
I've just added you!
Now, you should be able to assign tickets across the different repositories of the ΛRROW org.

@Guardiola31337 perfect, thanks ;)


Parameters not getting flattened in operation

Describe the issue
When generating attestation, creationparams under (create)[https://github.com/Azure/azure-rest-api-specs/blob/f0e5030929b9bbeacc13249c309b5b14cbbdedef/specification/attestation/resource-manager/Microsoft.Attestation/preview/2018-09-01-preview/attestation.json#L112] is not getting flattened.
It's mentioned both in the readme and in my command line, since this was an issue a while ago
Comparison between old autorest and autorest v3 generated code:

** REQUIRED **
ModelerFour version: 4.9.234
AutoRest-core version: 3.0.6246
CommandLine : autorest ../azure-rest-api-specs/specification/attestation/resource-manager/readme.md --use=. --python-sdks-folder=../azure-sdk-for-python/sdk --python --python-mode=update --keep-version-file --multiapi --payload-flattening-threshold=2
OpenAPI/Swagger file: https://github.com/Azure/azure-rest-api-specs/blob/master/specification/attestation/resource-manager/Microsoft.Attestation/preview/2018-09-01-preview/attestation.json

I'm curious why this should be flattened?
AttestationServiceCreationParams has three properties: location, tags, properties
https://github.com/Azure/azure-rest-api-specs/blob/master/specification/attestation/resource-manager/Microsoft.Attestation/preview/2018-09-01-preview/attestation.json#L492
and AttestationServiceCreationSpecificParams doesn't have x-ms-client-flatten so it doesn't get it's properties flattened up to the parent?


Create UT for CreateWithReference

As requested in #38 by @wgershwitz .

This is now covered with end-to-end tests.


installation trouble

Hello! i am new to python so just installing that was a hassle. i was wondering if this script works for  plex media player or just plex media server.
Right now it continuously mentions that it is listening and ready, but i can't seem to find a way to trigger it to work.
any help would be great, thanks!

The script connects to your Plex Media Server and listens for alerts. You can use any client, including Plex Media Player, to play something from this server. The script then communicates with Discord and sets your rich presence. The script has to be running on the same machine as your Discord client. If it's still not working, could you send me a screenshot of the console output?

The script connects to your Plex Media Server and listens for alerts. You can use any client, including Plex Media Player, to play something from this server. The script then communicates with Discord and sets your rich presence. The script has to be running on the same machine as your Discord client. If it's still not working, could you send me a screenshot of the console output?

I see so i install this on the server.
Does discord update globally for me? Say i was watching on a different computer with the same discord account, would both clients show "one Piece" in example?

I see so i install this on the server.

You don't need to install it alongside the server. It has to be on the same machine as your Discord client.

Does discord update globally for me? Say i was watching on a different computer with the same discord account, would both clients show "one Piece" in example?

Haven't tried it but I think it'll work fine.

Should be running on the PC with Discord. It'll connect to your Plex server, and just show what anyone is playing. If you share you server with others you can set listenForUser = "PlexUserNameHere" to only show what you're watching.
Here's all the instructions step, by step:

Install Python 3 if not already installed:
https://www.python.org/downloads/windows/
Get pip:
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
py -3 get-pip.py
py -3 -m pip install --upgrade pip
Install Discord Rich Presence for Plex Requirements:
py -3 -m pip install plexapi
py -3 -m pip install websocket-client==0.48.0
Download or clone: https://github.com/Phineas05/discord-rich-presence-plex
After Extracting the contents from GitHub. Add your configuration(s) into the plexConfigs list in the discordRichPresencePlex.py file on line 30.
Example:
plexConfigs = [
plexConfig(serverName = "PlexServerNameHere", username = "PlexUserNameOrEmailHere", password = "PlexPasswordHere"), blacklistedLibraries = ["Extras", "Music"]),
plexConfig(serverName = "PlexServerNameHere", username = "PlexUserNameOrEmailHere", token = "ServerTokenHere", listenForUser = "PlexUserHere")
]
token (not required if password is set) - A X-Plex-Token associated with the above account. In some cases, myPlexAccessToken from Plex Web App's HTML5 Local Storage must be used. To retrieve this token in Google Chrome, open Plex Web App, press F12, go to "Application", expand "Local Storage" and select the relevant entry. Ignores password if set.
listenForUser (optional) - The script will respond to alerts originating only from this username. Defaults to username if not set.
More infor in the README.md
Then start it with:
py -3 -m discordRichPresencePlex.py
You can always make a bat file to start it instead.
Just place these two lines in a bat file at the same location as discordRichPresencePlex.py:
cd /d "%~dp0"
py -3 -m discordRichPresencePlex.py
cd /d "%~dp0" just points to bat file to the location it got opened in.
If you for some reason wanna run it as admin you can make a shortcut of the bat, and set the shortcut to run as admin.

Should be running on the PC with Discord. It'll connect to your Plex server, and just show what anyone is playing. If you share you server with others you can set listenForUser = "PlexUserNameHere" to only show what you're watching.
Here's all the instructions step, by step for Windows 64-bit. (Mostly the same for others):

Install Python 3 if not already installed:
https://www.python.org/downloads/windows/
Click Latest Python 3 Release - Python X.X.X
Then on the page scroll down, and get Windows x86-64 executable installer.
Run the installer, and make sure Add Python X.X to PATH is ticked on when installing.
Get pip (use CMD or PowerShell to enter commands):
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
py -3 get-pip.py
py -3 -m pip install --upgrade pip
Install Discord Rich Presence for Plex Requirements:
py -3 -m pip install plexapi
py -3 -m pip install websocket-client==0.48.0
Download or clone: https://github.com/Phineas05/discord-rich-presence-plex
After Extracting the contents from GitHub. Add your configuration(s) into the plexConfigs list in the discordRichPresencePlex.py file on line 30.
Example of two servers. One using username, password, and library blacklist.
Another using server token, and listen for user:
plexConfigs = [
plexConfig(serverName = "PlexServerNameHere", username = "PlexUserNameOrEmailHere", password = "PlexPasswordHere", blacklistedLibraries = ["UnwantedLibraryNameHere", "Extras", "Music"]),
plexConfig(serverName = "PlexServerNameHere", username = "PlexUserNameOrEmailHere", token = "ServerTokenHere", listenForUser = "PlexUserNameHere")
]
token (not required if password is set) - A X-Plex-Token associated with the above account. In some cases, myPlexAccessToken from Plex Web App's HTML5 Local Storage must be used. To retrieve this token in Google Chrome, open Plex Web App, press F12, go to "Application", expand "Local Storage" and select the relevant entry. Ignores password if set.
listenForUser (optional) - The script will respond to alerts originating only from this username. Defaults to username if not set.
blacklistedLibraries (list, optional) - Alerts originating from blacklisted libraries are ignored.
More info in the README.md
Then start it with:
py -3 -m discordRichPresencePlex.py
You can always make a bat file to start it instead.
Just place these two lines in a bat file at the same location as discordRichPresencePlex.py:
cd /d "%~dp0"
py -3 -m discordRichPresencePlex.py
cd /d "%~dp0" just points to bat file to the folder location it's in.
If you for some reason wanna run it as admin you can make a shortcut of the bat, and set the shortcut to run as admin.

Note: You have to have enable Game Activity in Discord User Settings, and actually play something from the Plex server for it to show. Shouldn't matter if it's in a browser or the Plex Media Player.
Also if you can't use Curl, make sure Windows is up to date or download GitForWindows.
Then use Git BASH for the command. Else you can manually get get-pip.py with Ctrl+S in you browser.
it's recommended you use Notepad++ to edit discordRichPresencePlex.py instead of regular Notepad.
If you have issues try running it as administrator to see if that fixes it.
You can also download, and run Rapid Environment Editor as Admin.
See if your system environment variable PATH has any issues or duplicates.
Else try uninstalling Python (all versions) and start over from the start.
Also if you failed to add the path to Python when it installed you can do it manually or with REE.
To manually add to PATH run sysdm.cpl>Advanced tab>Environment Variables>Under System vars
find, and click Path. Then "Edit", and paste the Python path between others with ; separating them.
Python should be installed here if not changed: %LocalAppData%l\Programs\Python\PythonXX (XX=Ver)
If you've tried the script before. Completely clean out the site-packages dir and reinstalling the dependencies or start over fresh.

Closing this issue as there is no response from the author for a long time after solutions were posted. Feel free to re-open if you still need help.


function discards outer type-check on union type

TypeScript Version:  2.2.0-dev.20170113
Code
class test1 {
	someProp;
}
class test2 {
	anotherProp;
}

let myTest: test1 | test2;
if (myTest instanceof test1) {
	// valid
	myTest.someProp;

	// invalid, someProp does not exist on type 'test2'
	() => myTest.someProp;

	// meaning if you have a eg. forEach
	[].forEach(() => {
		// you will need an instance check here too
		// invalid
		myTest.someProp;

		// valid
		if (myTest instanceof test1)
			myTest.someProp;
	})
}

Expected behavior:
I expected typescript to know myTest was instanceof test1 inside the function. It did not give these errors in typescript 1.8
Actual behavior:
It lost this knowledge inside the function.

Possible duplicate of https://github.com/Microsoft/TypeScript/issues/9998

#9998 / #11498

Ah, yes, probably. My search for similar issues was not good enough it seems. Thanks!
Interesting read.


Winnie’s site is down

Your issue
@winniebosy’s site (https://bosibori.netlify.app/) is down on Netlify it seems, breaking the ring.
The social media links are still fine, though.
Related to /data/members/Winnie%20Bosibori.json
Code of conduct

[X] I agree to follow this project's code of conduct

Thanks for reporting this, @FMJansen. I've moved @winniebosy entry into a new removed/ directory in data/. See https://github.com/ericwbailey/a11y-webring.club/pull/82.
I'm thinking this is a good intermediary measure between being listed and complete deletion, where the site might be temporarily 404ing, but may not be permanently offline. I'm using social presence as part of this decision.
I would also eventually like to incorporate this kind of thing into what https://github.com/ericwbailey/a11y-webring.club/pull/40 proposes.

Oh both sound really fair!

@ericwbailey  Facing some issues with the site but I will be back up soon

Looks like the website is back up, right @winniebosy? :D

Closed via https://github.com/ericwbailey/a11y-webring.club/pull/92. Welcome back! 🙌

Thanks Eric


add command to group selected nodes

This PR aims to add group and ungroup commands for selected nodes.
Close #10

I have short timeframes to work on contributions like these (~30mn at a time), so it'll take me some time to complete this. I'm starting by trying to make the command work well destructively before converting to undo and redo

Grouping is now working. There's an error that triggers for some nodes that I need to look into, probably due to the order of the undo redo methods. It's a minor thing, doesn´t prevent the feature from working.
Next up is ungrouping.

Hi, I added ungrouping this morning. There are still some non-blocking undo errors to fix before merging, but could you tell me if the behavior is what you'd expect? I made a short recording with voice to showcase how it works right now:
https://www.dropbox.com/scl/fi/folfj182wbru6xg06wij8/2023-06-03-grouping-and-ungrouping.mp4?dl=0&rlkey=34o7o111yizp5huj9227ik4ew
Please let me know if you'd like anything to work differently as part of this PR.
When I next have a moment to work on this I'll work on fixing the undo errors that appear in the output.

Yes, this is working great!
But I just push a commit for:

Maintain order of grouped nodes after undo/redo
Ensure name of group node always readable
Select group node after grouping

Let me know if you are fine with the changes
https://github.com/imjp94/gd-blender-3d-shortcuts/assets/11486079/4aee5d4b-78ed-4bf3-bbaf-fe9e2d8dad87
Not sure if this happens to you, but sometime it just don't work. It's pretty random, I am not sure what is causing this bug.
https://github.com/imjp94/gd-blender-3d-shortcuts/assets/11486079/4e633b6c-773d-49cb-8ba8-8a11058ae00e

Thanks for adding changes, they're great!

Not sure if this happens to you, but sometime it just doesn't work. It's pretty random, I am not sure what is causing this bug.

I think it's because I put the input code in _forward_gui_input(), so the shortcut only works when the mouse cursor is hovering the viewport. Moving the code to _input() should fix this.

Just fixed it!

All good!
Should be ready to merge after the errors are resolved

I could fix the errors when ungrouping nodes. There's one kind of error I don't know how to fix right now: UndoRedo history mismatch: expected 0, got 2.
I'll be away for ~2 days but I'll look into it once I'm back

I'm sorry for the delay, we're swamped with work. It's still on my todo but we have to prioritize our work to ensure we have enough money until the end of the year. So I'm not forgetting this, I'll try to get to it as soon as possible.

Don't worry about that, just take you time =)
These projects are pretty much in "maintenance mode", I am grateful that there are many contributors contributing bugfix and adding new feature for me.
But there are some issues with ungroup node, which I might had overlooked last time:

Undo "Ungroup Group Node" doesn't bring back the group node and its children

https://github.com/imjp94/gd-blender-3d-shortcuts/assets/11486079/213ba400-7775-478d-a40c-ecbe96b37c09

Children of "group node" are not inserted to "group node" position after ungrouped. When ungrouping nodes. The "group node" is removed and its children are added to the back of the list. I think it would makes more sense if the children are inserted at "group node" original position.

Btw, I have pushed a commit to remove the "!is_inside_tre()" error when undo "Group Node".

Thanks for taking the time to test and review :). Great catches!
I'm keeping this in my open Github notifications. I've got to find time to tackle it. I'll get to it as soon as possible (which, probably, isn't gonna be very soon..!)