[Bug]: wrong interaction between filters

What happened?
I configured the new " Keep not played for X days" option to 60 days, but I noticed that it would try to delete some movies even when in my opinion it should not.
Here is a specific example:
Nosferatu was added to the server on the 31st of January 2023.
I've watched it recently, the log shows:
[Deb] ItemsAdapter: "Nosferatu" played by "nicola" (01/31/2024 00:20:11)
Since it has been opened in the last 30 days, then the log shows:
[Tra] Filtering.ExpiredFilter: Filtering item "Nosferatu"
[Tra] Filtering.ExpiredFilter: Latest played by "nicola"
[Tra] JunkCollectors.MoviesJunkCollector: "Nosferatu" filtered by Expired
Then when the new filter is applied:
[Tra] Filtering.ExpiredNotPlayedFilter: Filtering item "Nosferatu"
[Tra] Filtering.ExpiredNotPlayedFilter: Not played by anyone since 01/31/2023 00:00:00
And at the bottom:
[Inf] MediaCleanupTask: (Movie) "Nosferatu" will be deleted because no one played it since 01/31/2023 00:00:00
I think this is not intuitive at all (or even wrong). I don't want the plugin to delete something that users are watching, no matter how old the file is.
A solution could be to run the ExpiredNotPlayedFileter first, to collect all the old files, then the ExpiredFilter, overwriting the list if needed. Finally check its most recent play.
Troubleshooting info
* Jellyfin version: 10.8.13
* Plugin version: <IP_ADDRESS>

Configuration

<PluginConfiguration>
  <KeepMoviesFor>30</KeepMoviesFor>
  <KeepMoviesNotPlayedFor>60</KeepMoviesNotPlayedFor>
  <KeepPlayedMovies>AnyUserRolling</KeepPlayedMovies>
  <KeepFavoriteMovies>AnyUser</KeepFavoriteMovies>
  <KeepEpisodesFor>30</KeepEpisodesFor>
  <KeepEpisodesNotPlayedFor>-1</KeepEpisodesNotPlayedFor>
  <KeepPlayedEpisodes>AnyUserRolling</KeepPlayedEpisodes>
  <KeepFavoriteEpisodes>AnyUser</KeepFavoriteEpisodes>
  <DeleteEpisodes>Season</DeleteEpisodes>
  <KeepVideosFor>-1</KeepVideosFor>
  <KeepVideosNotPlayedFor>-1</KeepVideosNotPlayedFor>
  <KeepPlayedVideos>AnyUserRolling</KeepPlayedVideos>
  <KeepFavoriteVideos>AnyUser</KeepFavoriteVideos>
  <KeepAudioFor>-1</KeepAudioFor>
  <KeepAudioNotPlayedFor>-1</KeepAudioNotPlayedFor>
  <KeepPlayedAudio>AnyUserRolling</KeepPlayedAudio>
  <KeepFavoriteAudio>AnyUser</KeepFavoriteAudio>
  <KeepAudioBooksFor>-1</KeepAudioBooksFor>
  <KeepAudioBooksNotPlayedFor>-1</KeepAudioBooksNotPlayedFor>
  <KeepPlayedAudioBooks>AnyUserRolling</KeepPlayedAudioBooks>
  <KeepFavoriteAudioBooks>AnyUser</KeepFavoriteAudioBooks>
  <UsersIgnorePlayed>
    <string>da1c429756594ff6b4719d24d1f65c9c</string>
  </UsersIgnorePlayed>
  <UsersPlayedMode>Ignore</UsersPlayedMode>
  <UsersIgnoreFavorited>
    <string>da1c429756594ff6b4719d24d1f65c9c</string>
  </UsersIgnoreFavorited>
  <UsersFavoritedMode>Ignore</UsersFavoritedMode>
  <LocationsExcluded>
    <string>/run/media/hpuser/hdd1/media/movies</string>
    <string>/run/media/hpuser/hdd1/media/trakt-watchlists</string>
    <string>/run/media/hpuser/hdd1/media/series</string>
  </LocationsExcluded>
  <LocationsMode>Include</LocationsMode>
  <MarkAsUnplayed>false</MarkAsUnplayed>
</PluginConfiguration>

Well it all depends on your Keep while not played by but either way, it's not been 60 days since the time you watched the movie so something is wrong unless you haven't got 60 days set.
Let's use 60 days as my example below and say I watched the movie on the 01/01/2024.
The "Any user" option should delete the movie 60 days after the FIRST watch. So in this case, it would be deleted on 1st March 2024.
The "Any user (latest playback)" option should delete the movie 60 days after the LAST watch. So if I watch the movie on the 01/01/2024 and then you watch it 30 days later, the movie should delete itself on 31st March 2024.

@NicolaSmaniotto It's been highlighted to be that this is due to your media library probably being set to "File creation date" as opposed to "Use date scanned into the library". You can find this at the route /web/index.html#!/librarydisplay.html.

The setting is already "Use date scanned into the library". The metadata is correct.
I understand the difference between "Any user" and "Any user (latest playback)", I don't see how it is relevant to this issue.

@NicolaSmaniotto What Jellyfin shows in "Date added" metadata for "Nosferatu"?

@NicolaSmaniotto What Jellyfin shows in "Date added" metadata for "Nosferatu"?

Nevermind, I figured out the problem. Sorry, busy days at work 😅

Jellyfin metadata

Sorry, I can't upload the file since I don't know where Jellyfin saves it, this is what the admin page shows:

long screenshot

busy days

Don't worry :+1:

@NicolaSmaniotto Could you please test this build?

That build freezes Jellyfin when trying to open the plugin settings. It logs:
[19:38:12] [ERR] [48] Jellyfin.Api.Controllers.DashboardController: Failed to get resource ysis.Web.general.html from plugin Media Cleaner

That build freezes Jellyfin when trying to open the plugin settings

Did you restart Jellyfin after replacing file?

I did not :sweat_smile:
Now the log looks good, it is no longer trying to delete Nosferatu. I'll check it better and report if some other unexpected files appear. Thank you!

I've tried all the combinations of events I could think of:

[x] Added, and expired before someone watched it --> delete
[x] Added, and most recent watch is expired --> delete
[x] Added a long time ago, and most recent watch is expired --> delete
[x] Added a long time ago, but most recent watch is not expired (my Nosferatu example) --> keep
[x] Should be kept for a long time, but most recent watch is expired --> delete
[x] Should be kept for a long time, and most recent watch is not expired --> keep

The last two just confirm that the behavior is the same as before, whether the user sets -1 or a very high amount of days.
Also, I tried with "Keep while not played by" set to "Any user", and it seems to work as well:

[x] Added, and expired before someone watched it --> delete
[x] Added, and first watch is expired --> delete
[x] Added a long time ago, and first watch is expired --> delete
[x] Added a long time ago, but first watch is not expired --> keep
[x] Should be kept for a long time, but first watch is expired --> delete
[x] Should be kept for a long time, and first watch is not expired --> keep

This build seems to fix my issue :+1:

Thanks for comprehensive testing! I'll push an update to release.

Sorry to bother you again, but there is still an issue.
If someone watches a few episodes of a series, but then drops it, the latest version of the plugin (<IP_ADDRESS>) is unable to remove it.
Here is an example: I watched the first episode 30+ days ago. If the plugin is set to keep watched items for 30 days and unwatched forever, something like this is logged:
[Deb] ItemsAdapter: "Series Title | S01E01 | Season 1 | Episode 1" played by "nicola" (02/02/2024 23:51:32)
[Tra] Filtering.ExpiredFilter: Filtering item "Series Title | S01E01 | Season 1 | Episode 1"
[Tra] Filtering.ExpiredFilter: Latest played by "nicola"
[Deb] Filtering.SeriesFilter: "nicola" has watched episodes 1 of 8 in season "Series Title": "Season 1"
[Tra] JunkCollectors.SeriesJunkCollector: "Episode 1" filtered by Series

If I then set both "keep played for" and "keep not played for" to 30 days, something like this is logged instead:
[Deb] ItemsAdapter: "Series Title | S01E01 | Season 1 | Episode Title" played by "nicola" (02/02/2024 23:51:32)
[Tra] Filtering.ExpiredFilter: Filtering item "Series Title | S01E01 | Season 1 | Episode 1"
[Tra] Filtering.ExpiredFilter: Latest played by "nicola"
[Deb] Filtering.SeriesFilter: "nicola" has watched episodes 1 of 8 in season "Series Title": "Season 1"
[Tra] JunkCollectors.SeriesJunkCollector: "Episode 1" filtered by Series
[Tra] ItemsAdapter: "Episode 1" (e5d27649-9eaf-9f7a-cb0c-11de84277e8a) was played by nicola
[Tra] ItemsAdapter: "Episode 2" (401843c4-57b7-c4c7-ee79-d4e35e036b0a) added because not played by nicola
[Tra] ItemsAdapter: "Episode 3" (31ba3fa2-dc57-7696-20f5-307ef417e410) added because not played by nicola
[Tra] ItemsAdapter: "Episode 4" (a407f8e4-0e98-c439-4fb3-58e5f03278d6) added because not played by nicola
[Tra] ItemsAdapter: "Episode 5" (e3ba9466-2977-4394-6752-da127843f7a3) added because not played by nicola
[Tra] ItemsAdapter: "Episode 6" (fc3c721c-783b-5cdf-9894-3e5d15ffa8b6) added because not played by nicola
[Tra] ItemsAdapter: "Episode 7" (4af27cc4-13e4-7b46-4dde-4f66adec009b) added because not played by nicola
[Tra] ItemsAdapter: "Episode 8" (7cbda549-db1a-88d0-0d90-3c7d4f82f632) added because not played by nicola
[Tra] Filtering.ExpiredNotPlayedFilter: Filtering item "Series Title | S01E02 | Season 1 | Episode 2"
[Tra] Filtering.ExpiredNotPlayedFilter: Not played by anyone since 01/31/2024 14:05:22
[Tra] Filtering.ExpiredNotPlayedFilter: Filtering item "Series Title | S01E03 | Season 1 | Episode 3"
[Tra] Filtering.ExpiredNotPlayedFilter: Not played by anyone since 01/31/2024 14:05:18
[Tra] Filtering.ExpiredNotPlayedFilter: Filtering item "Series Title | S01E04 | Season 1 | Episode 4"
[Tra] Filtering.ExpiredNotPlayedFilter: Not played by anyone since 01/31/2024 14:05:15
[Tra] Filtering.ExpiredNotPlayedFilter: Filtering item "Series Title | S01E05 | Season 1 | Episode 5"
[Tra] Filtering.ExpiredNotPlayedFilter: Not played by anyone since 01/31/2024 14:05:12
[Tra] Filtering.ExpiredNotPlayedFilter: Filtering item "Series Title | S01E06 | Season 1 | Episode 6"
[Tra] Filtering.ExpiredNotPlayedFilter: Not played by anyone since 01/31/2024 14:05:06
[Tra] Filtering.ExpiredNotPlayedFilter: Filtering item "Series Title | S01E07 | Season 1 | Episode 7"
[Tra] Filtering.ExpiredNotPlayedFilter: Not played by anyone since 01/31/2024 14:04:56
[Tra] Filtering.ExpiredNotPlayedFilter: Filtering item "Series Title | S01E08 | Season 1 | Episode 8"
[Tra] Filtering.ExpiredNotPlayedFilter: Not played by anyone since 01/31/2024 14:03:37
[Deb] Filtering.SeriesFilter: "[None]" has watched episodes 7 of 8 in season "Series Title": "Season 1"
[Tra] JunkCollectors.SeriesJunkCollector: "Episode 2" filtered by Series
[Tra] JunkCollectors.SeriesJunkCollector: "Episode 3" filtered by Series
[Tra] JunkCollectors.SeriesJunkCollector: "Episode 4" filtered by Series
[Tra] JunkCollectors.SeriesJunkCollector: "Episode 5" filtered by Series
[Tra] JunkCollectors.SeriesJunkCollector: "Episode 6" filtered by Series
[Tra] JunkCollectors.SeriesJunkCollector: "Episode 7" filtered by Series
[Tra] JunkCollectors.SeriesJunkCollector: "Episode 8" filtered by Series

So in this way the series will never be removed.
Since nobody actually watched it in many days, who started it probably decided not to continue watching it, so the plugin should remove it.
Users who for some reason watch the series really slowly can always add it to their favorites to keep it around.

If someone watches a few episodes of a series, but then drops it, the latest version of the plugin (<IP_ADDRESS>) is unable to remove it.

Yup, that's right. There will be another setting for that case (because I personally use it this way, I don't want to mark all show as favorites 😄 ).

Makes sense, thank you!


Race condition for Client NextPacketID

Currently through FanPool, multiple messages from the the same publisher is processed by the same worker. However, this does not ensure messages from different publisher will be processed by the same worker. As a result, (s *Server) publishToSubscribers can be called concurrently, which in turn calls s.publishToClient, then calls cl.NextPacketID(), all of which can be triggered concurrently by different publishers.
Although it atomically loads/stores packetID, the steps between these 2 operations are not atomic. So it is possible 2 publishers publishing to the same topic or different topics, can result in NextPacketID returning same PacketID to the same subscriber for different packets.
https://github.com/mochi-co/mqtt/blob/f90e52328d3abfebb9289441c18f86bcb245c2da/clients.go#L239
Furthermore, the following can corrupt the InFlight message, as it will just update the Inflight.
https://github.com/mochi-co/mqtt/blob/f90e52328d3abfebb9289441c18f86bcb245c2da/server.go#L831
Either a lock (probably more performant for the use case here) or CompareAndSwapUint32 can be used to eliminate the race condition.
Also, in a corner case, NextPacketID will get stuck in infinite loop if cl.State.packetID = 65535 and cl.State.Inflight contains 1-65535.

Race condition addressed in PR 165


cargo publish panics when running on a procedural macros crate which uses the build-std unstable feature

Problem
I was trying to publish a new version of the uefi-macros crate, and I encountered the following panic upon running cargo publish --target x86_64-unknown-uefi:
thread 'main' panicked at 'no entry found for key', src/tools/cargo/src/cargo/core/compiler/context/compilation_files.rs:340:9
stack backtrace:
   0: rust_begin_unwind
             at /rustc/af140757b4cb1a60d107c690720311ba8e06e7de/library/std/src/panicking.rs:517:5
   1: core::panicking::panic_fmt
             at /rustc/af140757b4cb1a60d107c690720311ba8e06e7de/library/core/src/panicking.rs:93:14
   2: core::option::expect_failed
             at /rustc/af140757b4cb1a60d107c690720311ba8e06e7de/library/core/src/option.rs:1618:5
   3: cargo::core::compiler::context::compilation_files::CompilationFiles::outputs
   4: cargo::core::compiler::context::Context::compile
   5: cargo::ops::cargo_compile::compile_ws
   6: cargo::ops::cargo_package::package_one
   7: cargo::ops::registry::publish
   8: cargo::commands::publish::exec
   9: cargo::cli::main
  10: cargo::main

The project is using the build-std unstable feature, and it seems to be the cause for this issue. If I comment out the build-std line in the cargo config file, I'm successfully able to publish the crate.
Additionally, I had no issue with publishing a new version of the uefi-rs crate, which is a regular library (not proc-macro).
Steps

Check out the code from https://github.com/rust-osdev/uefi-rs/commit/8832fbcd8bbf48be52c68cef46474476863d06d2
Move into the uefi-macros subdirectory and run cargo publish --target x86_64-unknown-uefi
Observe the cargo panic

Possible Solution(s)
The panic message is the same as the one in this issue, so the solution might be similar.
Notes
Output of rustc --version:
rustc 1.56.0-nightly (af140757b 2021-08-22)

Output of cargo --version:
cargo 1.56.0-nightly (e96bdb0c3 2021-08-17)

Contents of the project's .cargo/config:
[unstable]
build-std = ["core", "compiler_builtins", "alloc"]

Thanks for the report!  This doesn't seem to be specific to publishing, but running any build command in a proc-macro project with build-std activated would cause a panic.
I have posted #9834 with a fix.


Remove links to dead / unsupported projects

@benmccann I believe we can merge this docs only PR despite the failed check, as we'll be tackling the problems with tests and outdated deps independently.

Sounds good to me. I'll let you do the merge as I don't have permission 😄


Use button for Android (And android button overhaul)

Android should have a seperate use button.
Android buttons should be overhauled in general. They should use classes instead of the current copy-pasted code.
This would allow for easy button re-arrangements

8dc71f51ba07b9b8b3e4be45a1ad24050c68a1d8


Update about-me.mdx

Bunnyshell created the Environment github-emilia / Ghost1eaas-patch-5:master / PR-6 for PR #6:

There are no public URLs to be exposed.


[core] Rename npm org name from @base_ui to @base-ui

Summary
The npm package convention is to use dash to separate words, not underscore. We had to use underscore @base_ui because no better alternatives was available.
See https://github.com/mui/material-ui/pull/43002 as an example of surprise:

Any reason why @base_ui scope is with an underscore? Feels a bit unusual for npm package naming and different to what we've been doing before with no obvious benefit. I personally find it to work particularly badly with underlines in urls (github, npm, docs,...)

I have flagged it as a breaking change as it's kind of one, but also doesn't have to be truly one.
Solutions
We are working on gaining access to the @base-ui npm org name. Once we get it. We should migrate to it. https://www.notion.so/mui-org/ops-Trademark-Base-UI-88f653d8a8b64cac96fa7546638ecc3d?d=24e76446683d430381fdd0a65c03e3d5

What's the point of having this as a GitHub issue? It's not actionable, as we've already contacted npm and can only wait until they resolve this. I can see a GH issue only when we actually own the org, to update the code.

@michaldudak

There will be a pull request, which will close this issue.
As a developer, I might want to leave this feedback, now, I can find more information about this frustration.


Issue with casting

I almost always have to create a variable to help typecast when using .obs or Get.arguments. Are there any workarounds for this.
Example View Class:
class PostView extends StatelessWidget {
  /*final Post post;
  PostView({this.post});
*/
  @override
  Widget build(BuildContext context) {
    Post post = Get.arguments;
    User user = Get.find<AuthenticationService>().userController.value;
    return Scaffold(
      backgroundColor: backgroundColor,
      body: Padding(
        padding: const EdgeInsets.symmetric(horizontal: 20.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            UIHelper.verticalSpaceLarge(),
            Text(post.title, style: headerStyle),
            Text(
              'by ${user.name}',
              style: TextStyle(fontSize: 9.0),
            ),
            UIHelper.verticalSpaceMedium(),
            Text(post.body),
            Comments(post.id)
          ],
        ),
      ),
    );
  }
}

Example Service Class:
class AuthenticationService {
  Api _api = Get.find<Api>();

  final userController = User.initial().obs;

  Future<bool> login(int userId) async {
    var fetchedUser = await _api.getUserProfile(userId);

    var hasUser = fetchedUser != null;
    if (hasUser) {
      print(fetchedUser.name);
      userController.value = fetchedUser;
    }

    return hasUser;
  }
}

Thanks in advance.

Isn't that the way Flutter works? arguments is of type object so when you want typed properties of it you need to cast it to Post in your case.
The value of .obs is normally the correct type and should not be casted (if it was clear for the compiler what was assigned in the first place).

@stefandevo I get that, just for a bit of context I'm transitioning from using get just as a navigation service to using it for pretty much everything (reactive state, dependency injection) and with the tools, I used previously I didn't have to use as many casts.
Example previous view class:
class PostView extends StatelessWidget {
  final Post post;
  PostView({this.post});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: backgroundColor,
      body: Padding(
        padding: const EdgeInsets.symmetric(horizontal: 20.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            UIHelper.verticalSpaceLarge(),
            Text(post.title, style: headerStyle),
            Text(
              'by ${Provider.of<User>(context).name}',
              style: TextStyle(fontSize: 9.0),
            ),
            UIHelper.verticalSpaceMedium(),
            Text(post.body),
            Comments(post.id)
          ],
        ),
      ),
    );
  }
}

Example previous service class:
class AuthenticationService {
  Api _api = locator<Api>();

  StreamController<User> userController = StreamController<User>();

  Future<bool> login(int userId) async {
    var fetchedUser = await _api.getUserProfile(userId);

    var hasUser = fetchedUser != null;
    if(hasUser) {
      userController.add(fetchedUser);
    }

    return hasUser;
  }
}

The value of .obs is normally the correct type and should not be casted (if it was clear for the compiler what was assigned in the first place)

Not sure what you mean here but the value of my .obs is still an object in my view class.
It would be nice if we could add type parameters at least to the .obs, similar to Get.find<T>(). I could learn to live with Get.arguments.

Looking at the source in rx_impl.dart I see extensions for types like int, etc. So using the .obs on an int does not need cassting. But perhaps on custom classes it does.
@jonataslaw will have to help here :-)

Furthermore, you have much higher benefits if you use the RxController or Controller in your widget tree instead of services only.

What added benefits would I get if say my authentication service extended RxController. Also, I do use GetController in my viewmodels.

No not for the services, but in your widget tree; I see from the snippet above, that you use AuthenticationService directly in the widgetTree. This could be via a Controller (RxController, Controller as base) in such a way to optimize widget re-builds.

True, completely overlooked that, thank you

After moving the variables to the controller, I can't say It's much of an issue now that the controller handles the casting.


Release 4.4.0

I added myself as a recipe maintainer.

Hi! This is the friendly automated conda-forge-linting service.
I just wanted to let you know that I linted all conda-recipes in your PR (recipe) and found it was in an excellent condition.

Circle-ci says there's a sha256 mismatch:
Source cache directory is: /feedstock_root/build_artefacts/src_cache
Downloading source to cache: notebook-4.4.0.tar.gz
Downloading https://files.pythonhosted.org/packages/0f/52/5564e26247b8c17307aabe410bd323cbceb5a2f341ca19ac9ba10d9f107a/notebook-4.4.0.tar.gz
Success
SHA256 mismatch: 'ea889941254bf681419da686ffd2b3226505342bac4a4f4995c6c226acb41883' != '807b83893639895f506a21c44b8b2252c20472500a8b896979e052987c7a01cc'

Hum it worked locally. Checking.

OK, the culprit is my conda cache.

4.4.1 is up now with checksum: dfadef2babd7c04c6c257df7d07d7ba587e503dbb4e4c95305f9a95b8d3a9765

Circle passed, and I don't imagine the others will show anything new for such a tiny release, so I'll go ahead and merge.


Wait to fill trains more

Phoenix C64 says:
"I know this mod is more about traffic related to roads... but I know it also affects trains to some degree as I had to turn off TMPE at one point because it was affecting my trains in some bad way. (spend 3h. trouble shooting the problem and disabling TMPE fixed the issue)
Now, I currently have a big complaint about trains: trains only take 1-2 cargo trucks as a load and bottleneck my train network with 7-13% filled trains.
Could TMPE have an option so trains don't spawn until they have an X% of load (let's say 50%)"

Quite some times i observe the same effect with cargo ships and trucks (especially when i upgraded the capacity of trucks using AVO :-))

From a related issue: #123

Fix that cargo trains drive with around with really low loads of cargo. (1 - 30 %)
Automatically select appropriate vehicle for load --> a van for a small load, a truck for a large load. (i've made difference in capacity in AVO, sadly i get trucks loaded for 50%, instead of a van, loaded for 100%), while vans would probably mean faster delivery.

moved


Is it not possible to disable XLSX output?

FileFlattener seems to have the right logic, but in cli.py, it looks like xlsx is always set.

Aha, you can do --xlsx ''.


Graphics.Input crashes if Text is not imported

Buttons from Graphics.Input do not work.
The following code :
import Graphics.Input (button)
import Signal (channel, send)

chan = channel ""

badButton =
  button (send chan "") "+"

causes the following error :
Cannot read property 'make' of undefined

Open the developer console for more details.

Note: this problem also exists in the latest commits.

Note: I encountered this problem as I tried to answer this thread on the mailing list: https://groups.google.com/forum/#!topic/elm-discuss/7aG8wS2jnBI
Kinda weird to try to explain the relationship between buttons and signals when buttons don't work.

Actually, there's even a more minimal example of the bug:
import Graphics.Input (button)

badButton = button

This seems to be true of all functions in the Graphics.Input package.
import Graphics.Input

badButton =  Graphics.Input.dropDown

yields the same error.

Thanks for the reports, if you want to take a swing at it that'd be great. I am relatively overloaded, so it is not feasible for me to address every issue that comes up immediately.
As an aside about mailing list / issue protocol, can you try to do more drafting and revising such that we don't get 3+ messages in a row that could have been one? Both here and on the mailing list it makes it much harder to follow the thread of conversation, you have to do a lot of summarizing in your mind that could have been done by the author. I hope this is not offensive to say, it's just that it makes things artificially difficult.

No offense taken. I'll try my best. Sometimes I write several messages in a row because I had several thoughts in a row spread across the day.
In this case, I just reported the error and didn't think I could find anything but then found a few more things along the way.
Now, that said, I found why this has happened:
The following code totally works.
import Text
import Graphics.Input (button)

okButton = button

This might be potentially an issue for elm-compiler. Basically, in the Native Javascript, Graphics.Input requires the use of Text but not in the Elm code. Well, there is an import Native.Text but I suspect it to be somewhat broken or something went wrong in the code generation.
If it is in fact the case that it's the compiler's fault, then this is beyond my expertise. Maybe I'll modify the import line to import Text instead of import Native.Text but that sounds like just patching one instance of a bug rather than solving a deeper problem.

It seems that in the end there's already such an issue in elm-compiler. It seems to be a bug in elm-make. I'm thus closing the issue here and move the findings to elm-compiler.

I think @mgold fixed this bug in the latest version of core. Is there a closed issue about adding a Text import?

You mean this? https://github.com/elm-lang/core/pull/96
I tried using button with the newer code, which I'm assuming includes the pull request you're mentioning, and it persists there too. I think it's as you described it here: https://github.com/elm-lang/elm-compiler/issues/864
There's something wrong with elm-make.

Actually, I take that back, it's fixed. What I saw was a different bug o_0.
If you're interested, it's caused by the following code:
import Graphics.Input exposing (button)
import Port exposing (Port, message)

port num : Port Int

b = button (message num.address 0) ""

which yields :
Cannot read property 'arity' of undefined

Open the developer console for more details.

Probably has to do with implementation changes happening in 0.15 so that looks like something we can find and fix.

Seems right to me -- the import Text has been fixed but this arity stuff is new.


Feature for python 3.8

Add enum name check for python 3.8, since this feature is deprecated in 3.8

Codecov Report

Merging #48 into dev will not change coverage.
The diff coverage is 100.00%.

@@            Coverage Diff            @@
##               dev       #48   +/-   ##
=========================================
  Coverage   100.00%   100.00%
=========================================
  Files            1         1
  Lines          163       167    +4
=========================================
+ Hits           163       167    +4

Impacted Files
Coverage Δ

named_enum/__init__.py
100.00% <100.00%> (ø)

Continue to review full report at Codecov.

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


Navigator nested between NestedScrollView and CustomScrollView leads to a non scrolling NestedScrollView

Expected behaviour:
The nested scroll view scrolls normaly if the custom scroll view gets scrolled and thus scrolls the appbar with it.
Actually happening:
Only the custom scrollview scrolls, but not the appbar (=nested scrollview).
Wanted Behaviour can be achieved by either not using a customscrollview or not using a navigator (both no option in my case). This implementation worked before null safety if it helps in any case.
Code example:
import 'dart:math';
import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: TestScreen(),
    );
  }
}

class TestScreen extends StatefulWidget {
  @override
  _TestScreenState createState() => _TestScreenState();
}

class _TestScreenState extends State<TestScreen> {
  GlobalKey<NavigatorState> get navigatorKey =>
      GlobalKey<NavigatorState>();

  @override
  void initState() {
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: NestedScrollView(
          physics: BouncingScrollPhysics(),
          headerSliverBuilder: (context, innerBoxIsScrolled) => [
            SliverOverlapAbsorber(
                handle:
                    NestedScrollView.sliverOverlapAbsorberHandleFor(context),
                sliver: SliverAppBar(
                  title: Text("title"),
                  pinned: true,
                  floating: false,
                  snap: false,
                  expandedHeight: 200,
                ))
          ],
          // body: DemoPage(),
          body: Navigator(
              key: navigatorKey,
              onGenerateRoute: (settings) =>
                  MaterialPageRoute(builder: (context) => DemoPage())),
        ));
  }
}

class DemoPage extends StatelessWidget {

  Color generateRandomColor1() {
    // Define all colors you want here
    const predefinedColors = [
      Colors.red,
      Colors.green,
      Colors.blue,
      Colors.black,
      Colors.white
    ];
    Random random = Random();
    return predefinedColors[random.nextInt(predefinedColors.length)];
  }

  @override
  Widget build(BuildContext context) {
    // return Container(
    //   color: Colors.red,
    //   height: 1000,
    //   width: 500,
    //   child: Center(
    //     child: RaisedButton(
    //       child: Text("Press"),
    //       onPressed: () {
    //         Navigator.of(context)
    //             .push(MaterialPageRoute(builder: (context) => DemoPage()));
    //       },
    //     ),
    //   ),
    // );
    return CustomScrollView(slivers: [
      SliverToBoxAdapter(
        child: Container(
          color: generateRandomColor1(),
          height: 1000,
          width: 500,
          child: Center(
            child: Column(
              mainAxisSize: MainAxisSize.min,
              children: [
                RaisedButton(
                  child: Text("Press"),
                  onPressed: () {
                    Navigator.of(context)
                        .push(MaterialPageRoute(builder: (context) => DemoPage()));
                  },
                ),
                RaisedButton(
                  child: Text("pop"),
                  onPressed: () {
                    Navigator.of(context).pop();
                  },
                ),
              ],
            ),
          ),
        ),
      )
    ]);
  }
}

flutter doctor:
[√] Flutter (Channel stable, 2.0.4, on Microsoft Windows [Version 10.0.19042.867], locale de-DE)
    • Flutter version 2.0.4 at C:\flutter\flutter
    • Framework revision b1395592de (10 days ago), 2021-04-01 14:25:01 -0700
    • Engine revision 2dce47073a
    • Dart version 2.12.2

[!] Android toolchain - develop for Android devices (Android SDK version 29.0.3)
    • Android SDK at C:\Users\gabfa\AppData\Local\Android\sdk
    • Platform android-29, build-tools 29.0.3
    • Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)
    X Android license status unknown.
      Run `flutter doctor --android-licenses` to accept the SDK licenses.
      See https://flutter.dev/docs/get-started/install/windows#android-setup for more details.

[X] Chrome - develop for the web (Cannot find Chrome executable at .\Google\Chrome\Application\chrome.exe)
    ! Cannot find Chrome. Try setting CHROME_EXECUTABLE to a Chrome executable.

[√] Android Studio (version 4.1.0)
    • Android Studio at C:\Program Files\Android\Android Studio
    • Flutter plugin can be installed from:
       https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
       https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)

[√] VS Code (version 1.55.1)
    • VS Code at C:\Users\gabfa\AppData\Local\Programs\Microsoft VS Code
    • Flutter extension can be installed from:
       https://marketplace.visualstudio.com/items?itemName=Dart-Code.flutter

[√] Connected device (2 available)
    • Android SDK built for x86 (mobile) • emulator-5554 • android-x86    • Android 10 (API 29) (emulator)
    • Edge (web)                         • edge          • web-javascript • Microsoft Edge 89.0.774.75

! Doctor found issues in 2 categories.

@Gafielt
Ran your code sample, but I am not sure how to know what's the expected vs actual behavior is using press and pop buttons ?
Can you provide a video / gif of the issue indicating expected vs actual behavior ?

Thanks for these details. This helped to clearly replicate the issue.

flutter doctor -v
[✓] Flutter (Channel stable, 2.0.4, on Mac OS X 10.15.4 19E2269 darwin-x64,
    locale en-GB)
    • Flutter version 2.0.4 at /Users/dhs/documents/fluttersdk/flutter
    • Framework revision b1395592de (7 days ago), 2021-04-01 14:25:01 -0700
    • Engine revision 2dce47073a
    • Dart version 2.12.2

[!] Xcode - develop for iOS and macOS
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 12.3, Build version 12C33
    ! CocoaPods 1.9.3 out of date (1.10.0 is recommended).
        CocoaPods is used to retrieve the iOS and macOS platform side's plugin
        code that responds to your plugin usage on the Dart side.
        Without CocoaPods, plugins will not work on iOS or macOS.
        For more info, see https://flutter.dev/platform-plugins
      To upgrade see
      https://guides.cocoapods.org/using/getting-started.html#installation for
      instructions.

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
[✓] Android Studio (version 4.1)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build
      1.8.0_242-release-1644-b3-6915495)

[✓] VS Code (version 1.55.0)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.20.0

[✓] Connected device (3 available)
	  • SM A260G (mobile)            • 5200763ebcfa861f • android-arm    • Android
      8.1.0 (API 27)
    • Darshan's iphone (mobile) • 21150b119064aecc249dfcfe05e259197461ce23 • ios
      • iOS 14.4.1
    • macOS (desktop)           • macos                                    •
      darwin-x64     • Mac OS X 10.15.4 19E2269 darwin-x64
    • Chrome (web)              • chrome                                   •
      web-javascript • Google Chrome 89.0.4389.114

! Doctor found issues in 1 category.

any news?

This is just my question and my project is waiting Flutter team to fix this isuue ...

Is this issue in progress of solving in flutter or not ?

Would be very helpful to get information about it.

Sharing my current workaround: I set the physics property for all pages to NeverScrollableScrollPhysics(). The body must have a widget with a fixed length, so I wrap the navigator with a widget with height property whose state I change depending on the current page displayed (as well as media query for responsive design). Not ideal, but a workaround nonetheless.

Sharing my current workaround:
Set the physics property for all pages to NeverScrollableScrollPhysics(). The body must have a widget with a fixed length, so wrap the navigator with a widget with a height property. For responsive design, change the state of the height property depending on media queries of the current page displayed.

Actually contents get non-scrollable

@TomPetrov @Gafielt  @hosseinhadi @darshankawar
There are 2 solutions:
First, get innerController of NestedScrollView and pass it by PrimaryScrollController widget
Second, access the state of NestedScrollView from your widget( below Navigator), get innerController of NestedScrollViewState  and assign that innerController to your scrollable widget
First way example:
...
class _TestScreenState extends State<TestScreen> {
  GlobalKey<NavigatorState> get navigatorKey =>
      GlobalKey<NavigatorState>();

  @override
  void initState() {
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: NestedScrollView(
          physics: BouncingScrollPhysics(),
          headerSliverBuilder: (context, innerBoxIsScrolled) => [
            SliverOverlapAbsorber(
                handle:
                    NestedScrollView.sliverOverlapAbsorberHandleFor(context),
                sliver: SliverAppBar(
                  title: Text("title"),
                  pinned: true,
                  floating: false,
                  snap: false,
                  expandedHeight: 200,
                ))
          ],
          // body: DemoPage(),
          body: Builder(builder: (context) {
                var scrollController = PrimaryScrollController.of(context);
return Navigator(
              key: navigatorKey,
              onGenerateRoute: (settings) =>
                  MaterialPageRoute(builder: (context) => PrimaryScrollController(controller: scrollController!,
                     child: Scaffold(body:ListView(
                            children:[
                            /// children
                            ],
                             ),
                               ),
                  ))),
        );
}
        );
  }
}

I think that Navigator does not pass innerController of NestedView

@II11II is right.
This is because the inner scroll view is expected to inherit the PrimaryScrollController. The PrimaryScrollController that the NestedScrollView creates is how the outer and inner scroll views are kept in sync. By putting a navigator in between, another PrimaryScrollController is introduced, so the inner scroll view does not inherit the right PrimaryScrollController that it is supposed to in order for the NestedScrollView to work.


[BUG] Key Vault adding escape characters on values.

Describe the bug
Key Vault value of secret\@! will return as secret\\@!
Expected behavior
Key Vault value returns without additional escape characters.
Setup (please complete the following information):

OS: Linux / MacOS
Version of the Library use: com.azure:azure-security-keyvault-secrets:jar:4.2.3

Information Checklist
Kindly make sure that you have added all the following information above and checkoff the required fields otherwise we will treat the issuer as an incomplete report

[x] Bug Description Added
[x] Repro Steps Added
[x] Setup information Added

Azure Key Vault Secrets GET requests are serviced with a response that includes JSON body that escapes especial characters, such as forward slashes \ -> \\. Calls to get secrets with the Azure Key Vault Secrets SDK internally handle deserialization of said JSON object and allow for users to access the original unescaped value through KeyVaultSecret.getValue().
I created a secret in a Kay Vault with name test-escaped-secret and value secret\@! and wrote some code to demonstrate this:
String keyVaultUrl = "https://<your-key-vault-name>.vault.azure.net/";

SecretClient secretClient = new SecretClientBuilder()
    .vaultUrl(keyVaultUrl)
    .credential(new DefaultAzureCredentialBuilder().build())
    .httpLogOptions(new HttpLogOptions().setLogLevel(HttpLogDetailLevel.BODY_AND_HEADERS))
    .buildClient();

KeyVaultSecret secret = secretClient.getSecret("test-escaped-secret");

System.out.printf("Secret name: %s, secret value: %s\n", secret.getName(), secret.getValue());

By setting the HttpLogDetailLevel to BODY_AND_HEADERS, we can see the following logs:
[main] INFO com.azure.identity.EnvironmentCredential - Azure Identity => EnvironmentCredential nvoking ClientSecretCredential
[main] ERROR com.azure.identity.implementation.IntelliJCacheAccessor - IntelliJ Authentication not available. Please log in with Azure Tools for IntelliJ plugin in the IDE.
[main] INFO com.azure.security.keyvault.secrets.SecretAsyncClient - Retrieving secret - test-escaped-secret
[main] INFO com.azure.security.keyvault.secrets.SecretService.getSecret - --> GET https://REDACTED.vault.azure.net/secrets/test-escaped-secret/?api-version=REDACTEDTry count: 1(empty body)--> END GET
[reactor-http-nio-1] INFO com.azure.security.keyvault.secrets.SecretService.getSecret - <-- 401 https://REDACTED.vault.azure.net/secrets/test-escaped-secret/?api-version=REDACTED (2518 ms, 87-byte body)Response body:{"error":{"code":"Unauthorized","message":"Request is missing a Bearer or PoP token."}}<-- END HTTP
[ForkJoinPool.commonPool-worker-3] INFO com.azure.identity.ClientSecretCredential - Azure Identity => getToken() result for scopes [https://vault.azure.net/.default]: SUCCESS
[ForkJoinPool.commonPool-worker-3] INFO com.azure.identity.DefaultAzureCredential - Azure Identity => Attempted credential EnvironmentCredential returns a token
[ForkJoinPool.commonPool-worker-3] INFO com.azure.security.keyvault.secrets.SecretService.getSecret - --> GET https://REDACTED.vault.azure.net/secrets/test-escaped-secret/?api-version=REDACTEDTry count: 1(empty body)--> END GET
[reactor-http-nio-1] INFO com.azure.security.keyvault.secrets.SecretAsyncClient - Retrieved secret - test-escaped-secret
[reactor-http-nio-1] INFO com.azure.security.keyvault.secrets.SecretService.getSecret - <-- 200 https://REDACTED.vault.azure.net/secrets/test-escaped-secret/?api-version=REDACTED (91 ms, 271-byte body)Response body:{"value":"secret\\@!","id":"https://REDACTED.vault.azure.net/secrets/test-escaped-secret/db52e3efdca54fbfa45b3653d66096dd","attributes":{"enabled":true,"created":1608240403,"updated":1608240403,"recoveryLevel":"Recoverable+Purgeable","recoverableDays":90}}<-- END HTTP
Secret name: test-escaped-secret, secret value: secret\@!

So although the values can contain escaped characters in the HTTP response provided by the server, the SDK takes care of that for the user.

@darinhoward if you found behavior different to what I described above, would you mind sharing some sample code where this can be reproduced?
I guess it is possible that if you use a different serializer implementation than the default one offered by our clients, the behavior I described could be different, although it would take a bit of effort to deviate from such regular scenarios.

@vcolin7  I believe my setup when running into the error was not using the version I specified - I'm not able to replicate the issue either with your sample nor with my code using the latest keyvault version. Thank you for your help on this.


Support --filter-files in options

According to http://timothycrosley.github.io/isort/docs/configuration/options/#filter-files is not supported in the config
Tells isort to filter files even when they are explicitly passed in as part of the command

Type: Bool
Default: False
Python & Config File Name: Not Supported
CLI Flags:

    --filter-files

I'd like to set this option in this config file so that all of my Isort configurations are in the same place.
My use case involves

pre-commit hook
PyCharm file watcher
and just running isort ./**/*.py -c if I wanted.

Currently I have to remember to pass in --filter-files to these other tools otherwise files I want to exclude with be included. Instead I'd like to store all my Isort config files in one place and have that be respected.
p.s. the behavior in 5.0 where it loudly fails on the unsupported options is much better 👍 ty for adding that, I was going crazy on 4.x trying to figure out where I was messing up and now its much clear.

This was just deployed with version 5.2.0 of isort. Thanks!
~Timothy

Hazaa, ty for the update!


anchor locks ship in air even when weight is greater than balloons can support

This issue occurs when only Valkyrien Skies and addons are installed and no other mods

[X] I have tested this issue and it occurs when no other mods are installed

Minecraft Version
1.18
Eureka version
1.5.0-beta.1+f1aec78e18
Mod Loader
Fabric
Issue description
If you make a ship then power the anchor, you can add more weight than the balloons/buoyancy can support but it will remain floating in place until unpowered. It'd be expected that the ship would slowly sink when there's too much weight as usual. Even with a powered anchor.
https://github.com/ValkyrienSkies/Eureka/assets/101488091/2ed85938-50ac-46ee-bd28-6e224a885d5e
Issue reproduction

create a ship with a helm and anchor
power the anchor
add more weight ie: gold block
ship will remain in place even though it wouldn't be able to support it's weight

Logs
No response

This is intentional. (not my choice tho)


Set specific path to custom app.yaml file?

Hi! Would it be possible to set a specific path to custom app.yaml file? We have two app.yaml files which are used in different contexts!

I've added the possibility to configure the path in my fork: https://github.com/dovidio/app-yaml-env-compiler
You can use my action meanwhile, e.g.:
        uses: dovidio/app-yaml-env-compiler@master
        env:
          DB_URL: ${{ secrets.CLOUD_SQL_JDBC_URL }}
        with:
          appyamlpath: './src/main/appengine/app.yaml'

I've added the possibility to configure the path in my fork: https://github.com/dovidio/app-yaml-env-compiler
You can use my action meanwhile, e.g.:
        uses: dovidio/app-yaml-env-compiler@master
        env:
          DB_URL: ${{ secrets.CLOUD_SQL_JDBC_URL }}
        with:
          appyamlpath: './src/main/appengine/app.yaml'

@dovidio Thanks for the fork. Unfortunately this action does not work properly due to a bug on this line: https://github.com/dovidio/app-yaml-env-compiler/blob/800bbc605335977e212440a4c729e16a646aebee/main.go#L62. Judging by the code you modified I believe you forgot to write the changes to the app.yaml back to the specified file path. You essentially are reading the app.yaml from the custom directory but not writing the file back to the custom directory. In any case for future readers, I've found a fork of your action that does the correct thing: https://github.com/gaspb/app-yaml-env-compiler


Chaning PR template to encourage testing and flake8

What do these changes do?

Related issue number
N/A

[x] passes git diff upstream/master -u -- "*.py" | flake8 --diff
[x] passes black --check modin/

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/Modin-Performance-PRB/408/
Test PASSed.


added a forced password reset attack option

added the attack option for the python branch
poc:

Hello,
Thanks for your contribution.
Merging
:sunflower:


Bug: In Chat View No Text is shown for some particular response

Actual Behaviour
No Cell for Message type TABLE
Expected Behaviour
Some Cell showing Data for the same should be their.

Yes, the design wasn't decided for this.

Yes, the design wasn't decided for this.

so what is expected design . can we make it same as android?

Yes, we can do that.

@chashmeetsingh I would like to work on this.

@chashmeetsingh I would like to work on this.
i am working on this


Date/Time Issue - Can't Format

I've been staring at this for more hours than I'd care to admit now, and I am about to give up. I had the script working really well, but keep running into this error: TypeError: Cannot find function getTime in object. I've tried every conceivable format for the date/time object, copying directly from the example spreadsheet, typing it in manually, etc. The trick seems to be (in the example) to get the time showing up in the formula bar but not in the actual cell, though I can't figure out how this is done. Pretty much all of my events are 'all day', so I have the end time field blank. I am really at the end of my rope! Any guidance would really be appreciated. My spreadsheet is here: https://www.dropbox.com/s/qgvgr7ymng28v6q/Daily Deals.xlsx?dl=0
Thank you!

I'm looking at this issue today. Looks like a prior change caused the problem. Sorry about that.

I was spending too much time wrestling with this issue and finally decided to just remove the code on my site that published the start/end time of an event in the rare occasion that they needed to be specified. I was using a conditional shortcode with Simple Calendar (http://docs.simplecalendar.io/event-template-tags/#tablepress-6).
I tried using the additional column for ‘all day event’ and setting the values to ‘TRUE’, but that didn’t seem to have any effect. The behavior was very unpredictable, and the script seemed to be very picky about the date format sometimes, and not others. It turned out that leaving the end date field blank was not acceptable, so now I have it as the same date as the start time, but wasn’t able to get it to create the events as ‘all day’. It just creates them with a start/end time of 12am - 12am.
It’d be nice if the Google Calendar could be accurate just in case I decide to publish the events elsewhere using Zapier. Now I am cheating sort of because I’ve configured Simple Calendar to just show that day’s event, ignoring the times. It is a great script anyway. I tried Zapier first, but ran into all kinds of problems. I was even able to modify it so that 2 websites/calendars can be managed from a single Google Sheet, with a unique tab/worksheet for each. Anyway, any assistance with this annoying issue would be appreciated!

This issue should be fixed now.

Thanks!
        http://stoneagefarmacy.com/

On Dec 3, 2016, at 4:56 PM, Dave Parsons<EMAIL_ADDRESS>wrote:
This issue should be fixed now.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub https://github.com/Davepar/gcalendarsync/issues/12#issuecomment-264674053, or mute the thread https://github.com/notifications/unsubscribe-auth/ATsdzPAlO_eaOit-RnGuf0IKphUVkqApks5rEgGYgaJpZM4K-gwO.


Docker Terminal doesn't launch the VM if set to use iTerm

Hi,
I just reinstalled the latest Docker Toolkit that includes Kitematic. The quick launch terminal asked to use iTerm or Terminal. I selected iTerm and it launched iTerm, but the docker agents did not launch. I can not user the docker terminal at all now because it doesn't see the docker agents.

Can you provide us with the output of:
env | grep -i docker
docker version
which docker
As an FYI this is more of a Kitematic related board - Toolbox related issues (such as the quick-launch terminal) are better within the Toolbox repo: https://github.com/docker/toolbox/issues

How did you 'set' your terminal to be iTerm?

When I wiped the old version of the toolbox and re-installed from scratch, the first time I ran the quick terminal it asked if I wanted to use iTerm or Terminal. Since I prefer iTerm, I selected iTerm. Now, I can't use the Quick Terminal at all. But, I can get a terminal from Kitematic to work.

Forgot it does that - I just tried on mine (I use iTerm daily) and selected the 'iTerm' option (not always)
a new tab was opened in my existing window and I got the docker prompt.
Clicking on 'iTerm (always)' had the exact same effect.
Do you have any special scripts? What happens when you click on the Quickstart Terminal?

When I run Quickstart Terminal, it open/brings to front my iTerm with my
normal OhMyZsh prompt. I try a docker command and it says:
Cannot connect to the Docker daemon. Is the docker daemon running on this
host?
But, when I open with Terminal from Kitematic, it works fine. Kitematic only
launches with Terminal.
Richard

On Jan 6 2016, at 1:20 am, French Ben<EMAIL_ADDRESS>wrote:

Forgot it does that - I just tried on mine (I use iTerm daily) and selected
the 'iTerm' option (not always)
a new tab was opened in my existing window and I got the docker prompt.
Clicking on 'iTerm (always)' had the exact same effect.

Do you have any special scripts? What happens when you click on the
Quickstart Terminal?

—
Reply to this email directly or [view it on GitHub](https://github.com/docker/
kitematic/issues/1330#issuecomment-169087562).![](https://github.com/notificat
ions/beacon/ACX0xy7VtyxuVp0XEwhl8MZcZL_asYhqks5pXADxgaJpZM4G8Nhj.gif)

From this:
"When I run Quickstart Terminal, it open/brings to front my iTerm with my normal OhMyZsh prompt"
Can you do that and then issue:
env | grep -i docker
Also can you check your OMZ shell preferences to confirm that you don't have any docker related mods in it?

That line returns nothing and there isn't anything in my .zshrc regarding
Docker. Like I said before, it doesn't launch the docker daemon nor setup any
environment when ran with iTerm.

On Jan 7 2016, at 12:32 am, French Ben<EMAIL_ADDRESS>wrote:

From this:
"When I run Quickstart Terminal, it open/brings to front my iTerm with my
normal OhMyZsh prompt"
Can you do that and then issue:
env | grep -i docker

Also can you check your OMZ shell preferences to confirm that you don't have
any docker related mods in it?

—
Reply to this email directly or [view it on GitHub](https://github.com/docker/
kitematic/issues/1330#issuecomment-169397803).![](https://github.com/notificat
ions/beacon/ACX0x-JQdiek7V-_TqW_mSv55Qw2rLSQks5pXUcggaJpZM4G8Nhj.gif)

My point is that your OhMyZsh may be over-writing some of the env/shell variables that are created with the QuickStart Terminal.
The fact that you don't get anything when you run env | grep -i docker is an indicative that something is being over-written.
Unfortunately I am not familiar with your particular shell mod and thus can't help much. My only advice is to disable OhMyZsh and see if the QuickStart Terminal works with iTerm + Zsh.
For comparison, I use iTerm + Zsh + Zprezto and never had any issues.

BTW: It still doesn't work. I removed my ohmyzsh and tried to start with the QuickStart Terminal and it still doesn't work. The quickstart terminal doesn't launch doesn't start the VM at all it set for iTerm. It just brings iTerm to the forground. I'm using iTerm Build 2.9.20160105-nightly which changes how an outside process can sent command to the terminal.

Aha! You've put the finger on it. The information I was missing was the nightly - If you switch to the stable version everything will work as expected.

I was using iTerm2 3.0 (beta) and had the same issue. Switched back to latest stable release of iTerm2 (2.1.4). And it worked. (Had some unexpected error launching Quickstart Terminal first time. But launching it a second time did the trick).

@snappyjig Recent PR #1717 was merged that should fix the above.


Support for textinput field

Could have been nice if this would have been textinput where in there is dynamic entry of text data, rather than giving autolink component stored text.
I need a similar kind of thing as in while user is typing in the text field, the text automatically links to URLs, phone numbers, emails,hashtags. etc.
Please help regarding this.

As far as I know, RN doesn't support elements within a TextInput so there's no way to wrap the links and listen for clicks. Given that the value prop for the TextInput component is a string, I don't think what you're asking for is possible without doing some sort of trickery, like overlaying a Text element or as they type.

Or is there any way that we can change the color of the text with hashtag/email/, without clicks only.
Just change the color on the TextInput field.

I believe styles apply to the entire TextInput as well so you can't apply colors to just one part of the text. Maybe I'm wrong, but as far as I know, there's no way to do what you're asking without another component

Ok will check
If you get to know how to do it, please share


Update sun altitude

altitude: sun altitude above the horizon in radians, e.g. 0 at the horizon and PI/2 at the zenith (straight over your head)
https://github.com/mourner/suncalc

I knew my altitudes seemed wrong!
I think this is supposed to be (sunPos.altitude * 180) / Math.PI however, right?

To convert from radians to degrees, multiply magnitude in radians by 180/PI. - Wikipedia

Math.abs(sunPos.altitude * 90 / (Math.PI / 2) its the same. Yes, is correct!

Ah yes...math...you are right! 😆 Think it just confused me because it was different from azimuth.


Add cli support

To enhance this boilerplate further add support for cli toolkit, which will act as a project generator and will be easier to maintain its features.

TODO

[x] Initial scaffolding generation
[ ] Controller generation command
[ ] Model generation command
[ ] Service generation command
[ ] Validation generation command
[ ] Auto unit tests generation
[ ] Auto integration tests generation


Add a QRCode button that one can scan on the phone to open the podcast inside of apps.

I am more familiar with Android apps, so I will use them as an example.
Say one is browsing the website and finds an interesting podcast. The website could have a button that generates a QRCode pointing to the podcast's webpage on podcastindex.org. Apps could then register a link handler for the domain and open the podcast page inside the app.
This makes it easier to subscribe. Instead of having to search for the podcast on the phone again you can just scan a QR Code.

There has been discussions about how to create a standardized link that any app could use. I'm not sure the current state of that discussion.
Here is one thread about the idea in the namespace repo.
https://github.com/Podcastindex-org/podcast-namespace/issues/330

Thanks for letting me know! This is definitely an interesting conversation to follow!


App doesn't record tap on bottom nav item, but maestro marks as successful

Jetpack Compose app, code for the UI component in question:
BottomNavigationItem(
            selected = selectedItem == Screen.FAVORITES,
            onClick = { if (selectedItem != Screen.FAVORITES) navController.navigate(R.id.favoritesFragment) },
            icon = {
                Icon(Icons.Filled.Favorite, contentDescription = null)
            },
            label = { Text("Favorites", modifier = Modifier.semantics { contentDescription = "Favorites" }) }
        )

Test yaml:
appId: dev.sanskar.pokedex
---
- launchApp
- tapOn: "Favorites"

Observed Behavior:
https://user-images.githubusercontent.com/22092047/189587494-6662100b-77cb-48c6-81f6-17d3ca314e37.mp4
Even tried with a test tag (#101). Modified UI Code:
BottomNavigationItem(
            selected = selectedItem == Screen.FAVORITES,
            onClick = { if (selectedItem != Screen.FAVORITES) navController.navigate(R.id.favoritesFragment) },
            icon = {
                Icon(Icons.Filled.Favorite, contentDescription = null)
            },
            label = {
                Text(
                    "Favorites",
                    modifier = Modifier
                        .testTag("favorites_bottom_nav")
                        .semantics { testTagsAsResourceId = true
                        }
                ) }
        )

Test yaml:
appId: dev.sanskar.pokedex
---
- launchApp
- tapOn:
    id: "favorites_bottom_nav"

The same behavior is observed.
In both cases, I can see "text" : "Favorites", in the output of maestro hierarchy.
Here's the hierarchy output for the first case:
hiearchy.txt

Note that Maestro will try to tap the Favorites button as soon as it sees it, which in this case might be during the loading phase. Could that perhaps be the reason? What happens if you press the "Favorites" button manually while the content is loading? Judging by the fact that test succeeded, it could indeed find the view, so the issue is somewhere else.

default behavior.webm
Even if the favorites item is clicked during the loading phase, the fragment would switch at least. That wasn't the case here.

@sanskar10100 If you are trying to use testTag, verify that testTagsAsResourceId semantics is enabled.
https://developer.android.com/jetpack/compose/testing#uiautomator-interop
I faced the same issue and turned out that I missed enabling this semantic property for the composable subtree.

Thanks for taking the time to raise this issue! There has been a lot of improvements and fixes on Maestro since this was raised so we’ll go ahead and close this one out as part of an issue cleanup - if you still experience issues, please open a new issue with reproduction steps. Thanks again for using maestro!


Generic Switch Not Working

I have a Raspberry Pi 4 with HA and I'm trying to make a switch for my rpi fan.
My code is this:
switch:
    - platform: rpi_gpio
      switches:
      - port: 2
        name: "RPi Fan"

I have a 2 pin 5V fan, and have connected ground to pin 6 and the power to pin 3 (port 2).
This successfully creates a switch in HA however toggling it does nothing.
I'm new to this whole thing so any help would be greatly appreciated!

The GPIO pins on the raspberry PI are 3.3V and you shouldn't draw current from them (max 3mA), this is not enough for powering any standard 5V fan (even very small ones).
The common way is to have a FET between the fan and the GPIO, however I am not using RPI4 for GPIOs, I suggest to look at community forums, there are even ready made kits for that.

The fan works perfectly fine using a 3V3 pin though? Or does that not matter when it comes to GPIO

The GPIO can't supply the current for the fan.


Step towards experimental group of settings in ADMX Policies

Proposed Changes

Given the ever-increasing number of WAU users, it would be beneficial to separate experimental settings from those already in production. The proposed pull request brings such a possibility.
I hope that this will be the foundation for future settings that will not conflict with those already tested in this way.

Related Issues

issue link
In the attached example, a text field has been added indicating the name of the non-default repository name that WAU could use when calling winget.exe sub-commands. The logic in PS1 scripts will be provided in the next commits.

Setting Enabled
Setting disabled

BR
AD

@KnifMelti
May I ask yo to take a look at the structure I think that it is following the schema for ADMX/ADML files, but I'd love to get a 2nd opinion. It is my first time with those files.
Thanks in advance.
AD

Looks like it's working, I'm no expert.
The thing I know is that revision="4.8" must be increased in both files for every new version to get the domain to import and overwrite the previous

Very well.
I'd like to leave that 4.8 for now.. Maybe something new pops up in the meantime.
.. E.g. separate winget repo for system and user contexts.. etc.. etc..

Trailing commits carry that custom winget repo name logic which relies on our new GP setting.

What about setting 'Winget' as the default source, which could be changed via settings or GPO as suggested here?
Second question: what happens when an experimental feature (and the corresponding GPO settings) is approved and moves to the root?

Q1

What about setting 'Winget' as the default source, which could be changed via settings or GPO as suggested here?

A1
It is already set in that PR.
Entire logic is in expanded Winget-Upgrade.ps1 file
#region Winget Source Custom
    # Default name of winget repository used within this script
    [string]$DefaultWingetRepoName = 'winget';

    # Defining custom repository for winget tool (only if GPO management is active)
    if($Script:WAUConfig.WAU_ActivateGPOManagement) {
        if($null -eq $Script:WAUConfig.WAU_WingetSourceCustom) {
            [string]$Script:WingetSourceCustom = $DefaultWingetRepoName;
        }
        else {
            [string]$Script:WingetSourceCustom = $Script:WAUConfig.WAU_WingetSourceCustom.Trim();
        }
        Write-ToLog "Selecting winget repository named '$($Script:WingetSourceCustom)'";
    }
#endregion Winget Source Custom

it calls Get-WingetOutdatedApps function which received a new param
       #Get outdated Winget packages
       Write-ToLog "Checking application updates on Winget Repository named '$($Script:WingetSourceCustom)' .." "yellow"
       $outdated = Get-WingetOutdatedApps -src $Script:WingetSourceCustom;

That function checks if repo name is not empty
#Function to get the outdated app list, in formatted array

function Get-WingetOutdatedApps {

Param(
    [Parameter(Position=0,Mandatory=$True,HelpMessage="You MUST supply value for winget repo, we need it")]
    [ValidateNotNullorEmpty()]
    [string]$src
)
# etc etc
    #Get list of available upgrades on winget format
    $upgradeResult = & $Winget upgrade --source $src | Where-Object { $_ -notlike "   *" } | Out-String
# etc etc

Q2

Second question: what happens when an experimental feature (and the corresponding GPO settings) is approved and moves to the root?

A2
If by root you mean master branch, which will trigger all actions and new release will be deployed to world to be consumed by 6M unsuspecting souls?
.. Nothing
That expansion of the logic basically converts a static string into script:variable.
Experimental part of GPO settings is not colliding with anything currently present in latest release of WAU.
Your question proves one point, we need those experimental settings.
There is no way we will come up with a new mechanism which will be able to distinguish execution context and b able to recognize non-PROD environments.
Experimental features are easy to control and can be easily promoted to become a part of main product.
If everything is tested enough, then it is just a matter of readdressing a particular GPO option to show outside of experimental node.

Last two commits (3584e24 and 050d176) prove that I am prone to writing incomplete code, i missed the winget word when it was used as constant.
Now everything should be parameterized.
.. i think
AD
P.S. I hope that there will be no need to fix anything else.
P.P.S I'll be gone for holidays till the end of 2024. this PR - if not merged - could be parked till 2025 Q1.

Regarding my Q1, I was thinking of setting the Winget source as a (default) registry value. This way, it would be automatically overwritten by the GPO setting without requiring any extra work or new function. :)

We are hitting two birds with one stone now:

custom repo name defined in one place and referenced in Winget-Upgrade.ps1 once (with possibility of making that global default value in the future OFC)
experimental settings for the future (interesting for more advanced application of WAU in bigger companies with more complex processes and ecosystem)

IMHO it is worth it.


Added a python program to convert minutes to days

Why:

Closes #4313
What's being changed:
Added a python program to convert minutes to days

@akansharai2023
Please link the language-specific issue by edit the first comment.
Thank you!


how to get all matching fields, the path is uncertain

Example:
{
    "k1": {
        "text": "m1",
        "v": 1
    },
    "k2": {
        "child": {
            "text": "n2",
            "v": 1
        }
    },
    "k3": {
        "v": 1
    }
}

example in  jsonPath:
express: $..text
output: ["m1","n2"]

@litao09h, were you ever able to figure this out? I'm looking to do the same thing

@litao09h @liveFreeOrCode
As far as I know it's not possible to do it for the generic case of arbitrary depths.
But if you know in advance the possible depths where the field is present though then it becomes doable with a bit of a verbose query. For example for the specific case above with depth 1 and 2 a query of the form:
[@values.#.text,@values.#.@values.#.text].@flatten:{"deep":true}

gives you:
["m1","n2"]

The [] around is a multipaths to create a new object, and the @flatten is needed to remove all the empty lists for the part of the query for depth two.


Custom node component for perfect encapsulation

Please describe the feature that you want to propose
My idea is simple:
Right now for encapsulating the behaviors of the nodes in the flow we can define a custom hook and then, using the reactFlowProvider context (useReactFlow instance) we can encapsulate the logic of the nodes... but in the end you always end up writing code in the flow.
for instance:

Yes I made my custom hook but now I have to write this code to manage that specific node behaviour in the flow.
My idea is if we had a CustomNode component which we can use to manage events that would be unecessary and get better encapsulation... for instance:
interface CustomNodeWrapperProps {
  onDelete?: (node: Node) => void;
  onDragStart?: (node: Node) => void;
  onDragEnd?: (node: Node) => void;
  onSelect?: (node: Node) => void;
  children: React.ReactNode;
  // ... other event handlers
}

const CustomNodeOne = ({ data, ...props }: CustomNodeOneProps) => {
  const handleDelete = useCallback((node: Node) => {
    // Node-specific deletion logic
    if (node.data.type === 'collapsed_group') {
      // Handle collapsed group deletion
      const groupData = node.data as CollapsedGroupNodeData;
      // Delete contained nodes...
    }
  }, []);

  const handleDragStart = useCallback((node: Node) => {
    // Node-specific drag start logic
  }, []);

  return (
    <CustomNodeWrapper
      onDelete={handleDelete}
      onDragStart={handleDragStart}
      // ... other event handlers
    >
      <div className="custom-node">
        {/* Node content */}
      </div>
    </CustomNodeWrapper>
  );
};

I don't understand what the requirement for React Flow would be in this case.
One of the deliberate goals of the library is to not opt-out of Reacts lifecycle (e.g., by using our own renderer) so you can use all the features you could use in any other React project as well.
Your solution seems very sensible. You could also wrap your flow (and subsequently all your nodes) with a context so you can implement more fine grained overarching functionality.
The solution you propose might not be ideal, because internally we would have to loop over all of the nodes individual  functions when executing something like deleting a node.

Even simpler and more straightforward: You can export a set of functions like you defined in CustomNodeWrapperProps for every custom node type and just use them in your handler functions based on the type of the node.


cirq.Simulator.compute_amplitudes not well documented

We should add some documentation on how to use cirq.Simulator.compute_amplitudes . There is no documentation in https://cirq.readthedocs.io/en/stable/generated/cirq.Simulator.html , or in the simulator tutorial https://cirq.readthedocs.io/en/stable/simulation.html

The method is documented at https://cirq.readthedocs.io/en/stable/generated/cirq.Simulator.html: it's listed under "Methods", and clicking on it links to the full method documentation. Though it does look like that documentation could be expanded a bit.
As for adding it to the tutorial, I think it would make a much more compelling example once Cirq has a tensor network simulator that does not explicitly store the entire wavefunction.

We've moved to new docs infra and this appears to have more complete docs now.


Where are the extracted game files of XCI image

I used nstool -x ./extract_dir/ C:\Users\frank\Downloads\Digimon_Story_Cyber_Sleuth_Hackers_Memory_JPN_V1.0.2_Switch-xci.com.xci
It extracted successfully, but I don't know where the extracted game files are....

Where is nstool on your computer? It looks like “extract_dir” would be extracted to the same place nstool is.

Thank you I already did it with yuzu emulator.... but I discovered it works only if you put the nstool in the System32 folder I guess the extract dir would appear there as a folder? I guess?

If you put nstool in system32 then “extract_dir” will be in whatever directory you navigated to with command prompt when you extracted the game rom. Which is usually your user directory.


Sychronization

Hi,
When I try to synchronize two cameras, I find that the depth_frame of the secondary camera is None all the time, but I can get the color_frame. Could you give me some tips on that? Thank you!

Which camera are you using, on what platform, and can you provide a code snippet or log?


Swipe remove with in-place undo and "leave-behind" from enhancement issue #43

Swipe remove with in-place undo and "leave-behind" from enhancement issue #43
This replaces PR #44 which accidently rebased master into the branch.
See discussion in #43
This adds swipe in two directions to the sample app in a separate activity, while preserving ability to drag (optional). Different swipe directions can be specified with optionally different actions along with icons and background color. Undo of said actions is also possible and included in the example. The undo option is also in place and times out of 3s in the example. A future update could let that stay until scrolled like in the gmail app.
Example app:

@mattiasbe seems fine this time ;)

Thank you so much!

As already discussed I may will look / or probably you to create a proper API for it, so it can be easily used from within the lib.
A thing here --> I will move the helper to a new "module" which can then be used as an addon dependency. So they can be published without depending on each other, it will also allow me to remove the support-design dependency from the core.

Sounds great!

I'm using FastAdapter in one of our Projects and need something similar to this.
@mikepenz  Do you have a eta of this implementation, or is it worth to rebuild something like this?
Awesome work guys.

@jonas-arkulpa I'm sure @mikepenz will do it as fast as he's able to do it. Good development - and even life besides computer - takes time. :)
You wrote that you're using FastAdapter, maybe you could write some sentences in this thread? https://github.com/mikepenz/FastAdapter/issues/41

@jonas-arkulpa you can already use the merged code which is used inside the sample. Regarding the addition into a new module. I can't give an eta for this at the moment, but will try to do this really soon ;)

@Rainer-Lang I didn't want to hurry, I know that even the best developers need time. ;)
I was just looking for a proper way to accomplish my given problem and found this thread.
@mikepenz I already pulled your sample code but I'm not sure if I should implement it this way or wait for the proper implementation.
Also my current problem is somewhat different:
I want to display buttons behind the swiped view item like in the following screenshot.
I found a lot of information about button leave behinds with only dead ends.
Like Paul Burke's article on Medium, where he mentions multiple times that he will cover this in part 3, which is't existing jet.
So I'll try it with this solution and report back if you want.

@jonas-arkulpa  You can do that specific layout in your image fairly easy with https://github.com/daimajia/AndroidSwipeLayout and fastadapter (that's how I do that in current project where I want buttons instead). Just don't use the FastAdapter withOnClickListener. Set it yourself when creating the viewholder on the top layer.
Terminology: As I understand it, the "leave-behinds" pattern is not about buttons, it's for showing what happens when you swipe.

@mattiasbe I discovered AndroidSwipeLayout today, because you also contributed to this project, but I wasn't sure if it is the best combination with FastAdapter.
So thanks for your clarification, I will try it this way.
I know that buttons behind the view do not follow material standards but it's in the design specification for this project.

@jonas-arkulpa the thing is. The helper classes for the swipe feature are now part of the fastadapter-extensions module. As of the way the FastAdapter works. There may will never be an item which by default comes with this functionality. As of the current definition it will always require some implementation in the Item itself.
The FastAdapter provides the items and list handling, and all of the additional required stuff, and the developer of the app using the FastAdapter will then provide the data and the logic how to display a specific items. And this is the thing where the implementation for the swipe has to go.
I hope this answer helps.
@mattiasbe as already mentioned. the 2 helper classes are now part of the extensions module

@mattiasbe It's great! I just tried the example. :+1: Thank you for your effort.


Rework: Signed-Releases: Separate Score Calculation of Provenance and Signatures (+ rename evaluation)

Provenances can be signed to produce signed provenance. But in current implementation, we slightly ignore this possibility and check whether artifact is signed or have provenance. I think this is not? correct.
We currently assign maximum point (which is 10) when a provenance found: https://github.com/ossf/scorecard/blob/d334409bf987e7f62a0c13812fe99b02e3a0b23d/checks/evaluation/signed_releases.go#L72-L89
Problem: Basically it checks whether provenance is provided, if it is, it skips the signature check.
My proposal here is that, having a (provenance or other artifacts) should not be count as full point, instead we should reduce the point to half. If provenance is:

signed, give it maximum 10 points
non-signed, give it 5 points

Example:

10: To achieve maximum point for Signed-Releases, expect at least: signed sbom + signed provenance + all binaries are signed
8: unsigned sbom, unsigned provenance, all binaries are signed
6: no sbom, no provenance: all binaries are signed

Points are for representational purpose.
This is a follow-up issue for the SBOM idea: #1476 and #2605 (That's because SBOMs can be also signed.)
NIT: Lastly, maybe we should think renaming of signed_releases to releases since signing is an optional process. Currently, that evaluation function does not check whether all artifacts are signed, but still increases the point if extension provided. But what evaluation name says is signed releases. It's slightly open to misunderstanding due to naming.
Please correct me if I think wrong or missed something. In overall, does it make sense?

Thanks for the issue. A few thoughts:

SBOM: I would say it's hard in general to force users to have an SBOM for the releases, unless they are releasing an "application", as opposed to a library. Unless there is consensus in the community that an "empty SBOM" is for libraries? Do you know?
SLSA vs signed binaries: provenance is an improvement over binary signing, as it provides not only a signature on the artifact, but also the origin / source of the artifact. This is why the check currently gives a 10 if there is provenance

/remove-lifecycle stale


Test only

Dont merge.

Was just grabbing https://app.netlify.com/sites/sonobuoy/deploys ; once a netlify site is previewable the links to this page go away and it is hard to find if you dont have it saved.


Zip & Deploy function does not display all web apps in quick picks

All of my apps do not appear in the quick pick prompt.  At the cited lines, it is checking for Linux and app, however my app appears to only have 'app' in its kind field instead of 'app,linux'
https://github.com/Microsoft/vscode-azureappservice/blob/b5b415525d5195c6696e007234fddbd1854aa417/src/webAppZipPublisher.ts#L175-L176

This is by design, currently we are only targeting Linux web apps.

This seems like an easy place to remove the validator and add a warning to the effect of

Hey, we're only investing development effort into the Linux web apps side right now, so here be dragons if you want to use this with a web app running on Windows - PR's accepted! 😄

I agree, seems like either we should support windows apps or make it clear we don't.

This has been merged. We will display linux and windows web apps on deploy See #183


Fix a couple of small code issues in the readme

Changed the state name property to name, provide a default value for filteredStates, and a couple of minor fixes.

 Thank you for your submission, we really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.Lindsey seems not to be a GitHub user. You need a GitHub account to be able to sign the CLA. If you have already a GitHub account, please add the email address used for this commit to your account.You have signed the CLA already but the status is still pending? Let us recheck it.


Problem has incorrect path if zig build outputs ./a/relative/path

I see the following occurring:

This extension runs the zig build command in VSCode's current directory, using all absolute names (the binary by doing its own PATH lookup presumably, the --build-file because of the VSCode default ${workspaceDirectory}/build.zig).
That directory is my home directory normally, when I start VSCode from Ubuntu's starter.
In that case only, for a reason I don't know, zig build outputs file names in compile errors as ./whatever/my/project/dir/somefile.zig, so relative to my home directory.  (Otherwise it outputs them as absolute file paths.)  So only when zig build is started in the home directory, the output looks like this:

./projects/zig-mm/src/verify.zig:110:5: error: enum field not found: 'Constan'
    Constan: void,
    ^

This extension gets confused by those relative file names: it seems to ignore the leading dot (.), thinks the problem is in the file /whatever/my/project/dir/somefile.zig (absolute path) which does not exist of course.
Therefore the problems are not shown in the editors, and clicking on them does not work (and gives me a confusion 'Create FIle' option).

When I start VSCode (code) from the command line, from my workspace directory, things work perfectly fine.
So there seem two bugs here:

The lesser one is that I would prefer zig build to be run with the workspace directory as the current directory, so that the workspace's zig-cache/ directory is used.
The larger one is that relative paths starting with . should be correctly resolved.

This is with version 0.2.5, which VSCode says is the latest one currently, and with Zig 0.7.0.

The problem seems to be that vscode.Uri.file("./a/b") returns an object with path: "/./a/b"?

I just tested this with Zig 0.10.0 which gave me relative file paths and the issues appears to have been fixed. Probably got fixed by 73fec94e4777162d39f54460c7fb6a246852c9a3 or 8757c63fb29edefa856f32e661d1d152c2db3107.


Build mode explicitly checks file stamps in watch mode rather than using file watcher events

Bug Report
In a monorepo with composite projects, adding -b slows down the --watch mode reaction time, even when tsc -b --watch is run inside some packages/shared/ project which has 0 references in its tsconfig.json. The compilation time is like 3.4s vs. 0.3s when used without -b on a small sub-project, and is way higher for large projects (or even when tsc -b --watch is executed in the root).
In both of these cases, tsBuildInfoFile is utilized (and successfully updated).
🔎 Search Terms
tsc watch build slow
I found https://github.com/microsoft/TypeScript/pull/42960, but not sure it's about the same topic: it says nothing about --build and non-build modes.
🕗 Version & Regression Information
@next 4.4.0-dev.20210716
💻 Code
$ tsc -b --watch --extendedDiagnostics # SLOW

FileWatcher:: Triggered with ...AssetType.ts 1:: WatchInfo: ... Elapsed:: 0.9445369839668274ms ...
[8:20:21 PM] File change detected. Starting incremental compilation...

Files:                        1014
Lines of Library:            27948
Lines of Definitions:       205178
Lines of TypeScript:         15524
Lines of JavaScript:            63
Lines of JSON:                   0
Lines of Other:                  0
Nodes of Library:           119542
Nodes of Definitions:       701795
Nodes of TypeScript:         53084
Nodes of JavaScript:           286
Nodes of JSON:                   0
Nodes of Other:                  0
Identifiers:                297572
Symbols:                    183176
Types:                        1262
Instantiations:                193
Memory used:               293087K
Assignability cache size:      174
Identity cache size:             6
Subtype cache size:             42
Strict subtype cache size:       0
I/O Read time:               0.10s
Parse time:                  1.60s
ResolveModule time:          0.34s
ResolveTypeReference time:   0.11s
Program time:                2.39s
Bind time:                   0.85s
Check time:                  0.09s
transformTime time:          0.03s
commentTime time:            0.01s
printTime time:              0.15s
Emit time:                   0.15s
Source Map time:             0.01s
I/O Write time:              0.00s
Total time:                  3.48s

[8:20:25 PM] Found 0 errors. Watching for file changes.

$ tsc --watch --extendedDiagnostics # FAST

FileWatcher:: Triggered with .../AssetType.ts ... Elapsed:: 0.6002329587936401ms ...
[8:21:50 PM] File change detected. Starting incremental compilation...

Synchronizing program
CreatingProgramWith::
  roots: [".../AppPaywall.ts",".../AppRoutes.ts",...lots of other paths here]
  options: {"composite":true,"incremental":true,"allowJs":true,"skipLibCheck":true,"jsx":2,"module":1,"removeComments":false,"moduleResolution":2,"experimentalDecorators":true,"pretty":true,"noErrorTruncation":true,"resolveJsonModule":true,"sourceMap":true,"declaration":true,"declarationMap":true,"target":6,"esModuleInterop":true,"noImplicitReturns":true,"strict":true,"typeRoots":[".../node_modules/@types",".../packages/shared/@types"],"tsBuildInfoFile":".../packages/shared/dist.tsc/tsconfig.tsbuildinfo","rootDir":".../packages/shared/src","outDir":".../packages/shared/dist.tsc","paths":{},"lib":["lib.es2019.d.ts","lib.dom.d.ts"],"pathsBasePath":".../packages/shared","watch":true,"extendedDiagnostics":true,"configFilePath":".../packages/shared/tsconfig.json"}

Files:                        1014
Lines of Library:            27948
Lines of Definitions:       205178
Lines of TypeScript:         15524
Lines of JavaScript:            63
Lines of JSON:                   0
Lines of Other:                  0
Nodes of Library:           119542
Nodes of Definitions:       701795
Nodes of TypeScript:         53079
Nodes of JavaScript:           286
Nodes of JSON:                   0
Nodes of Other:                  0
Identifiers:                297571
Symbols:                    183175
Types:                        1260
Instantiations:                193
Memory used:               290998K
Assignability cache size:      174
Identity cache size:             6
Subtype cache size:             42
Strict subtype cache size:       0
I/O Read time:               0.00s
Parse time:                  0.01s
ResolveModule time:          0.00s
Program time:                0.03s
Bind time:                   0.01s
Check time:                  0.12s
transformTime time:          0.04s
commentTime time:            0.01s
printTime time:              0.17s
Emit time:                   0.18s
Source Map time:             0.01s
I/O Write time:              0.00s
Total time:                  0.33s

[8:21:51 PM] Found 0 errors. Watching for file changes.

🙁 Actual behavior
tsc -b --watch compiles a single changed file way slower than tsc --watch.
🙂 Expected behavior
They work at comparable speeds.

$ cat packages/shared/tsconfig.json
{
  "extends": "../../tsconfig.base.json",
  "include": [
    "src/**/*"
  ],
  "compilerOptions": {
    "composite": true,
    "tsBuildInfoFile": "dist.tsc/tsconfig.tsbuildinfo",
    "rootDir": "src",
    "outDir": "dist.tsc",
    "paths": {},
    "module": "commonjs",
    "lib": [
      "es2019",
      "DOM"
    ],
  }
}

$ cat ./tsconfig.base.json
{
  "compilerOptions": {
    "composite": true,
    "incremental": true,
    "allowJs": true,
    "skipLibCheck": true,
    "jsx": "react",
    "module": "esnext",
    "removeComments": false,
    "moduleResolution": "node",
    "experimentalDecorators": true,
    "pretty": true,
    "noErrorTruncation": true,
    "resolveJsonModule": true,
    "sourceMap": true,
    "declaration": true,
    "declarationMap": true,
    "target": "es2019",
    "esModuleInterop": true,
    "noImplicitReturns": true,
    "strict": true,
    "typeRoots": [
      "./node_modules/@types",
      "./packages/shared/@types"
    ]
  },
}

Thanks for reporting this - would you be able to profile the compiler? Minimally just with generateCpuProfile? We have instructions on this section of our performance page.

The same for me. It happens on every project which I tried.

@DanielRosenwasser You can try it here: https://github.com/deftomat/typescript-build-watch-perf
On my PC, it took 2.5s with -b and 0.3s without it.

@DanielRosenwasser is the set repro created by @deftomat helpful here, or you would prefer us to generate some more input? This particular GitHub issue is kinda deal breaker for us... we would love to switch to single-tsc build-watch process for the entire monorepo, but we can't due to this perf aspect, so we have to run one tsc instance for each of inter-dependent projects in the monorepo (more than 5 so far) and suffer from them being watch-rebuilt with errors multiple times (until it finally settles) after pulling from Git, when multiple monorepo projects change at the same time. With -w -b being as fast as -w, this problem would go away and significantly simplify the dev experience.

Sorry for the delay. I (unnecessarily?) spent a bit of time in pprof and basically saw that findSourceFile and parsing were taking a decent amount more time. This should've been obvious from a glance at your original issue.
I tossed a console.log in parseSourceFile and found that it was getting called on every .d.ts in node_modules which I found suspicious. I'm not sure if there's a reason we can't retain source files in node_modules when programs share the same settings in --build --watch scenarios.

@dko-slapdash Have you tried with 4.4 RC?  It includes a bunch of fixes specifically for closing the gap between project-mode and build-mode perf.

I'd be pretty surprised if #43995 wasn't a factor.

@deftomat Can you tell me more about your repro steps?  Which project are you building when you don't pass -p?  I assume it's not the root tsconfig, since that contains 0 files.
Ignoring watch mode for a second, here's what I'm seeing:
typescript-build-watch-perf>npx tsc -p packages\api\tsconfig.json -extendedDiagnostics
Files:                        1392
Lines of Library:             8664
Lines of Definitions:       359151
Lines of TypeScript:            70
Lines of JavaScript:             0
Lines of JSON:                   0
Lines of Other:                  0
Nodes of Library:            23282
Nodes of Definitions:       682027
Nodes of TypeScript:           273
Nodes of JavaScript:             0
Nodes of JSON:                   0
Nodes of Other:                  0
Identifiers:                244853
Symbols:                    106616
Types:                          76
Instantiations:                  0
Memory used:               225349K
Assignability cache size:        0
Identity cache size:             0
Subtype cache size:              0
Strict subtype cache size:       0
I/O Read time:               0.18s
Parse time:                  1.67s
ResolveModule time:          0.42s
ResolveTypeReference time:   0.00s
Program time:                2.45s
Bind time:                   0.62s
Total time:                  3.07s

typescript-build-watch-perf>npx tsc -b packages\api\tsconfig.json -extendedDiagnostics
Files:                        1392
Lines of Library:             8664
Lines of Definitions:       359151
Lines of TypeScript:            70
Lines of JavaScript:             0
Lines of JSON:                   0
Lines of Other:                  0
Nodes of Library:            23282
Nodes of Definitions:       682027
Nodes of TypeScript:           273
Nodes of JavaScript:             0
Nodes of JSON:                   0
Nodes of Other:                  0
Identifiers:                244853
Symbols:                    106616
Types:                          76
Instantiations:                  0
Memory used:               223277K
Assignability cache size:        0
Identity cache size:             0
Subtype cache size:              0
Strict subtype cache size:       0
I/O Read time:               0.18s
Parse time:                  1.73s
ResolveModule time:          0.75s
ResolveTypeReference time:   0.00s
Program time:                2.87s
Bind time:                   0.56s
Total time:                  3.43s

i.e. Build mode is ~10% slower, rather than the 8X you're seeing.  This is with 4.5.0-dev.20210813.
Also, you mention "recompilation" - what edit should I be making to see those incremental build times?
Thanks!

@dko-slapdash Have you tried with 4.4 RC?

@amcasey Just tried 4.4.0-beta. Still the similar effect. Below is a screencast which illustrates that sitting in a leaf monorepo package, tsc -b --watch takes ~4s to unfreeze after a change (between "file change detected" and , and tsc --watch takes less than a second to unfreeze. By "leaf" I mean that there are no other packages dependent on this one.
https://user-images.githubusercontent.com/46383452/129407708-2537f334-4439-497e-859c-2ce3abb09bf6.mp4
// packages/worker/tsconfig.json
{
  "extends": "../../tsconfig.base.json",
  "include": [
    "src/**/*"
  ],
  "compilerOptions": {
    "tsBuildInfoFile": "dist/tsconfig.tsbuildinfo",
    "rootDir": "src",
    "outDir": "dist",
    "paths": {
      "slapdash-shared/dist/*": [
        "../shared/src/*"
      ],
      "slapdash-server/dist/*": [
        "../server/src/*"
      ],
    },
    "lib": [
      "es2019",
      "esnext.asynciterable",
      "DOM"
    ],
    "module": "commonjs",
  },
  "references": [
    {
      "path": "../shared"
    },
    {
      "path": "../server"
    },
  ]
}

// tsconfig.base.json is the same as mentioned in the initial post

@dko-slapdash Thanks for the update!  I believe I have a reliable repro, so I've already started profiling.  Unfortunately, this looks separate from \the issues we fixed in the RC.

My first impression is that all the extra time is spent on file existence checks. 😢

Seeing the same behavior. While this is being investigated, is there a version that does not have this problem?

@xasopheno I tried a few and they all behave like the latest one.

I'm pretty sure this isn't new.  It looks like regular watch mode is depending on file watchers to catch file changes and build-mode watch is redoing the mtime checks every iteration.  An issue like that is generally baked in from the beginning.

@amcasey You think that the extra time is all explained by file mtime checks? On our end, the difference in --watch mode with and without -b is huge - 3 seconds; I personally doubt that mtime checks for all the files takes extra 3 seconds (we don't have that many of them, only a little over a thousand). Our usecase is very similar to what https://github.com/microsoft/TypeScript/issues/45082#issuecomment-889878579 writes about.

@dko-slapdash It's not just the mtime calls, it's the file system traversal and then the state updates that make up the staleness check.  But based on profiling both, my assessment was that, yes, that explains most/all of the extra time.
Out of curiosity, how did you could your mtime checks?

Seeing the same performance difference.
Some complementary info (maybe another issue): I've noticed that in build mode all files are reemited, whereas in watch mode, only the modified files are reemited.

@amcasey do you think it would be possible, design wise, to get the same speed than watch mode?
(I can see how watching the root might provide a way to consolidate file statuses without rechecking all of those via the file system for instance..)

@sledorze My intuition is yes, but it's a pretty complex area and it might be an expensive change.

@amcasey thanks for the reply
That's decouraging teams to use monorepos with tsc; they're using some alternative setup, transpiling via esbuild / swc in ordre to have fast feedback.
In some particular context relying on compiler code transforms (with runtime impact), this transpilers are not enough.
from your answer, do you think it may be scheduled in the mid (if not short) term, knowing the possible impact ?

@sledorze Sorry for the frustrating experience.  I can't make any promises but of course this will be considered as we draw up the iteration plan for the next release.

So when it came to checking file stamps, it was about checking the output file stamps, right? I've opened https://github.com/microsoft/TypeScript/issues/46677 as a possible strategy to circumvent this.

I believe this is the same issue as https://github.com/microsoft/TypeScript/issues/31932

If people here would be willing to try out tomorrow's nightly build, we'd appreciate the feedback!


List Tasks according to New Design

Tasks or To-Dos should be listed according to the new design.

@SauveJeanLuc I would like to work on it

@Snehil0603 , Yup, It's yours.

@Snehil0603 are you adding the checkbox, remove icon and the edit icon too? Or, are you just working on the container and the list of tasks?

Just added them but with no functionality for this stage.
Their functionality will be another PR's  Job.

@Snehil0603 I would like to know if you're working on it or not.

@SandeshGC I am working on it

Ok, are you just adding the icons ? or the functionalities too?

@SandeshGC I will not be adding functionalities

Okay, then I will start working after your PR is merged.

I see that @adi-uchiha  and @Snehil0603 have done a great job. I will just unassign myself.