Clean up static files docs for .NET 9

Description
I see that the Static files in ASP.NET Core doc has been updated for the new optimized static web assets support in .NET 9, but I think we need to do a bit more cleanup for the upcoming .NET 9 release.
Some feedback on the doc as it stands:

The doc says “MapStaticAssets is a middleware”, but I believe that’s incorrect. MapStaticAssets plugs into endpoint routing, right? It’s the older UseStaticFiles that adds a middleware.
The Static files doc currently links back to the What’s new doc for the comparison of MapStaticAssets vs UseStaticFiles, but I think we actually want the link to go the other way. The What’s new docs can link to specific articles for more details, but specific articles really shouldn’t link to What’s new.
The Static files doc starts out talking about MapStaticAssets, but then in switches back somewhat abruptly to older content based on UseStaticFiles. I think we want to lead with content based on MapStaticAssets in one cohesive section and then document the older UseStaticFiles support later on in its own section or maybe even in a separate article. Note that both are still supported, so we need to document both.
The section on Static files authorization says MapStaticAssets is called before UseAuthorization, but I believe that’s incorrect. It was true for UseStaticFiles, but not for MapStaticAssets. We probably need two versions of this section: one for MapStaticAssets and one for UseStaticFiles.
The Blazor docs have their own Static files topic, which also covers a lot of the fundamentals of static files that really apply to any ASP.NET Core app that uses static files. I think we want to elevate as much of this content as possible to ASP.NET Core static files topic and focus the Blazor article and Blazor specific concerns for static files.

@javiercn @mkArtakMSFT @Rick-Anderson @guardrex
Page URL
https://learn.microsoft.com/en-us/aspnet/core/fundamentals/static-files?view=aspnetcore-9.0
Content source URL
https://github.com/dotnet/AspNetCore.Docs/blob/main/aspnetcore/fundamentals/static-files.md
Document ID
3fec6e08-fc99-7a5c-796f-3f2347cad891
Article author
@Rick-Anderson
Related Issues

Per #34000, Add <script type="importmap"></script> to the head of the main layout applies to all ASP.NET  Core web apps.

This was incorrectly labeled due to the link to the Blazor Static Files article in the body of the OP. I currently have an unsophisticated check in place to signal the GH workflow to take action. I've opened #34006 to fix the problem.

The doc says “MapStaticAssets is a middleware”, but I believe that’s incorrect. MapStaticAssets plugs into endpoint routing, right? It’s the older UseStaticFiles that adds a middleware.

Correct

The section on Static files authorization says MapStaticAssets is called before UseAuthorization, but I believe that’s incorrect. It was true for UseStaticFiles, but not for MapStaticAssets. We probably need two versions of this section: one for MapStaticAssets and one for UseStaticFiles.

Correct, assets are endpoints in routing, so only UseRouting() and UseEndpoints() matter order wise, and they are both "implicitly called" by default.

The Static files doc starts out talking about MapStaticAssets, but then in switches back somewhat abruptly to older content based on UseStaticFiles. I think we want to lead with content based on MapStaticAssets in one cohesive section and then document the older UseStaticFiles support later on in its own section or maybe even in a separate article. Note that both are still supported, so we need to document both.

Agree

Can you also put that "MapStaticAssets" only recommended for certain scenario but NOT actual replacement for "UseStaticFile"
I don't think "MapStaticAssets" take into account of having front end with multiple entries where the build is automatically copied to aspnet.core wwwroot
wwwroot/app1/
wwwroot/app2/
...
where each app has its own assets folder
wwwroot/app1/assets/
wwwroot/app2/assets/

This allow me to have "Authorization" per app
UseStaticFile can do that
The doc also don't say anything about this file
staticwebassets.endpoints.json
while MapStaticAssets can point to that file, that file is not for human
A quick test, adding MapStaticAssets after UseStaticFiles, it somehow break the "order"
was thinking if I can use both, UseStaticFile for certain files, otherwise use MapStaticAssets
but MapStaticAssets somehow suppress UseStaticFile even its being put after UseStaticFile
MapStaticAssets is promoted like replacement of UseStaticFile but it only works if you create web application in "old way"

@andrew-vdb Can you clarify what prevents you from using MapStaticAssets with your multiple frontends? How are you doing the copy of the frontend build output? You should be able to use built static files with MapStaticAssets, but you may need to adjust the build order.
Also, can you share how you are currently handling authorization? It should be possible to setup authorization when surfacing your static web assets as endpoints. That's actually one of the benefits of using endpoint routing for the static web assets: you should now be able to use endpoint aware features, like the authorization middleware.
I'm not sure why you're seeing MapStaticAssets suppress UseStaticFiles. Can you please open a GitHub issue in the https://github.com/dotnet/aspnetcore repo that demonstrates that behavior?

what prevents you from using MapStaticAssets with your multiple frontends?

As the documentation say, use UseStaticFile when you need authorization in static file

How are you doing the copy of the frontend build output?

I have 3 projects

vue app (multiple entry)
react app (also multiple entry)
Blazor app
The front end use vite to build
When I build Blazor App, i build in following order, react, vue and then blazor
in vite, i simply set outDir which will put the production build into wwwroot of Blazor app
in development, i use hmr to develop and i have a switch to use hmr or production build during development

can you share how you are currently handling authorization

There are 2 things

UseStaticFile authorization, more or less the code is like below, you can add role check etc
Razor Page authorization
The razor page will contains code that will read "index.html" (the entry point) and render it to the razor page

This means, to access certain part of my web applications
You really need to be authorized to access the razor page
You also will not be able to get my front end code (static files) unless you are authorized
app.UseStaticFiles(new StaticFileOptions()
{
    OnPrepareResponse = ctx =>
    {
        if (ctx.Context.Request.Path.Value.Contains("/ui/"))//Do not use StartWithSegments here!
        {
            if (!ctx.Context.User.Identity.IsAuthenticated)
            {
                ctx.Context.Abort();
                ctx.Context.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
                return;
            }
        }
    },
});

I'm not sure why you're seeing MapStaticAssets suppress UseStaticFiles

https://github.com/dotnet/aspnetcore/issues/58942
Additonal Notes:
When I use vite, css and js already hashed
I even have service-worker to cache those files

Not sure where to put this question, but I expected to find the answer in the docs, so I'll try here - please redirect me if there is a better place or if it has been already answered and I didn't find it.
How to enable the new thumbprint-filename goodness with a plain Blazor WASM app, that doesn't use ASP.NET hosting?
There is neither .UseStaticFiles nor MapStaticAssets, but the wwwroot content is simply copied over to an Nginx or similar for static hosting (in a container). I had expected that both adding the hash to the filename and precompression (that worked with .NET 8 already) would kick in during dotnet publish. What I am seeing is a *.endpoints.json file being created and in the wwwroot the usual files in raw, gz and br version - same as with .NET 8.
=> What am I missing so that I get the filenames with content based hashes and thus proper cache refresh on CSS changes etc. when not hosting Blazor in ASP.NET (not really necessary for just static files, also GH Pages) but any webserver?


Add Django 2.2 support and Drop Django 2.0 support

Django 2.0 has reached EOL on April 1, 2019, see:
https://www.djangoproject.com/download/#ft2

The first commit is part of #198 and only included to have the CI suite run.

@auvipy done :)


only run choo-log in development

Should help boost performance a lil; ref https://github.com/datproject/dat-desktop/issues/152

start using envify to hardcode strings for production
only run choo-log if NODE_ENV is development

@juliangruber see #152

awesomeeeeee!


Failed to get history

[I'm supposed to describe steps to replicate my issue here and if I don't do that, I understand that my issue will be probably ignored.]

Brackets 1.2.0-15697 (win), Git 1.9.4.msysgit.2 & Brackets-Git 0.14.19
Failed to get history
Error: fatal: C:/Users/***/AppData/Local/Temp/fz3temp-1/style.css: 'C:/Users/Haze/AppData/Local/Temp/fz3temp-1/style.css' is outside repository

call: git log -100 --format=%h_._%H_._%an_._%ai_._%ae_._%s_._%b_.nw._ master -- C:/Users/Haze/AppData/Local/Temp/fz3temp-1/style.css
Error: fatal: C:/Users/Haze/AppData/Local/Temp/fz3temp-1/style.css: 'C:/Users/Haze/AppData/Local/Temp/fz3temp-1/style.css' is outside repository
    at Object.exports.toError (file:///C:/Users/Haze/AppData/Roaming/Brackets/extensions/user/zaggino.brackets-git/src/ErrorHandler.js:162:19)
    at NodeConnection.<anonymous> (file:///C:/Users/Haze/AppData/Roaming/Brackets/extensions/user/zaggino.brackets-git/src/Cli.js:176:44)
    at j (file:///C:/Program%20Files%20(x86)/Brackets/www/thirdparty/thirdparty.min.js:559:26911)
    at Object.k.fireWith (file:///C:/Program%20Files%20(x86)/Brackets/www/thirdparty/thirdparty.min.js:559:27724)
    at NodeConnection._receive (/utils/NodeConnection.js:492:34)

need info how to replicate the issue

Sorry, I can't reproduce the issue anymore. I think it may be closed.


[BUG] blob length property metadata always -1 using OpenReadAsync

Describe the bug
We have a code that opens stream for a blob on storage to read its content (steps described below), the blob is a Json file which is sometimes empty, it appears on azure portal with 0B, and can be downloaded and opened.
we always check the blobStream.Length property to know if it's an empty blob or not for handling the file, for some reason no matter if the file empty or not the Length property is -1.
I have read at some places that the -1 is the initialized value of the property, and that FetchAttributesAsync must be called in order to update the metadata .. and I read on Microsoft docs that calling OpenReadAsync automatically calls FetchAttributesAsync, mentioned in these docs under remarks:
OpenReadAsyncDocs
FetchAttributesAsyncDocs
not sure what's happening, whether the problem is with the FetchAttributes call, or something with opening the stream, and why the Length is -1 always.
Expected behavior
the expected behavior is to get length = 0 for empty files and more for non empty files I believe.
Actual behavior (include Exception or Stack Trace)
there is no exception thrown (unless we try to read the stream if the file is empty) but its Length property is -1 as I explained above which wrong.
To Reproduce
we use Azure.Storage.Blobs, we create a blob client with the connection string, and return the blob stream ..
_blobServiceClient = new BlobServiceClient(connectionString);
blobStream = _blobServiceClient.GetBlobContainerClient(container).GetBlobClient(blobName).OpenReadAsync(cancellationToken: cancellationToken);

on the stream returned from OpenReadAsync we check the length .. and handle the file.
if( blobStream.Length == 0 ) continue;  < -- the length is -1 always
if we try to handling the blob stream on empty file we get the error :
The range specified is invalid for the current size of the resource.
RequestId:73a48285-d01e-0095-0e63-ab0479000000
Time:2020-10-26T06:45:14.1563396Z
Status: 416 (The range specified is invalid for the current size of the resource.)
ErrorCode: InvalidRange

Headers:
Content-Range: bytes */0
x-ms-request-id: 73a48285-d01e-0095-0e63-ab0479000000
x-ms-client-request-id: ae5d7b84-a961-44d1-a876-28ca2a3cec50
x-ms-version: 2019-12-12
x-ms-error-code: InvalidRange
Content-Length: 249
Content-Type: application/xml
Date: Mon, 26 Oct 2020 06:45:13 GMT
Server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0

this is the Stack Trace
at Azure.Storage.Blobs.BlobRestClient.Blob.DownloadAsync_CreateResponse(ClientDiagnostics clientDiagnostics, Response response)
   at Azure.Storage.Blobs.BlobRestClient.Blob.<DownloadAsync>d__0.MoveNext()
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Azure.Storage.Blobs.Specialized.BlobBaseClient.<StartDownloadAsync>d__52.MoveNext()
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Azure.Storage.Blobs.Specialized.BlobBaseClient.<DownloadInternal>d__51.MoveNext()
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Azure.Storage.Blobs.Specialized.BlobBaseClient.<<OpenReadInternal>b__70_0>d.MoveNext()
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Azure.Storage.LazyLoadingReadOnlyStream`2.<DownloadInternal>d__15.MoveNext()
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Azure.Storage.LazyLoadingReadOnlyStream`2.<ReadInternal>d__14.MoveNext()
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Azure.Storage.LazyLoadingReadOnlyStream`2.Read(Byte[] buffer, Int32 offset, Int32 count)
   at System.IO.StreamReader.ReadBuffer()
   at System.IO.StreamReader.ReadLine()

....
Environment:

Azure.Storage.Blobs [12.5.1]
Visual Studio 2019 [16.7.6]
Windows 10, .NET

Hi @HassanBadir, we deeply appreciate your input into this project. Regrettably, this issue has remained inactive for over 2 years, leading us to the decision to close it. We've implemented this policy to maintain the relevance of our issue queue and facilitate easier navigation for new contributors. If you still believe this topic requires attention, please feel free to create a new issue, referencing this one. Thank you for your understanding and ongoing support.


kafka: <IP_ADDRESS> -> <IP_ADDRESS>

Motivation for this change
Things done

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

[ ] NixOS
[ ] macOS
[ ] Linux

[ ] Tested compilation of all pkgs that depend on this change using nix-shell -p nox --run "nox-review wip"
[ ] Tested execution of all binary files (usually in ./result/bin/)
[x] Fits CONTRIBUTING.md.

I wasn't able to run the nix-shell -p nox --run "nox-review wip" successfully because of what appears to be an unrelated problem (llvm_40 doesn't exist but the libclc package lambda has the named arg as an input), but I was able to do nix-env -f . -iA nixos.apacheKafka without issue and I verified the SHA256 of the external source:
$ nix-prefetch-url http://ftp.wayne.edu/apache/kafka/<IP_ADDRESS>/kafka_2.12-<IP_ADDRESS>.tgz
downloading ‘http://ftp.wayne.edu/apache/kafka/<IP_ADDRESS>/kafka_2.12-<IP_ADDRESS>.tgz’... [31607/33224 KiB, 3508.3 KiB/s]
path is ‘/nix/store/ridivj2wvc5pvz3h6ilnfqgn2xc7858c-kafka_2.12-<IP_ADDRESS>.tgz’
0py43s6zv8z7wr2lk8403k07xxckl11gla3vs4gr99lixc4whis1


[ERROR] Unable to process playing

Lately I've been seeing a lot of errors in the logs that look like this:
2022-06-13 18:15:00,278 [ERROR] Unable to process playing
Traceback (most recent call last):
  File "/app/plex_auto_languages/plex_alert_handler.py", line 43, in __call__
    alert.process(self._plex)
  File "/app/plex_auto_languages/alerts/playing.py", line 45, in process
    user_plex = plex.get_plex_instance_of_user(user_id)
  File "/app/plex_auto_languages/plex_server.py", line 168, in get_plex_instance_of_user
    matching_users = [u for u in self.get_instance_users() if str(u.id) == str(user_id)]
  File "/app/plex_auto_languages/plex_server.py", line 155, in get_instance_users
    for user in self._plex.myPlexAccount().users():
  File "/usr/local/lib/python3.8/site-packages/plexapi/myplex.py", line 505, in users
    elem = self.query(MyPlexUser.key)
  File "/usr/local/lib/python3.8/site-packages/plexapi/myplex.py", line 183, in query
    raise BadRequest(message)
plexapi.exceptions.BadRequest: (502) bad_gateway; https://plex.tv/api/users/ <!DOCTYPE html>     <title>We're sorry, but something went wrong (500)</title> <link href="/assets/errors.css" media="screen" rel="stylesheet" type="text/css" />

Oops; a 500 error...

That's "Internal Server Error" in geeky language.

We've been notified about this issue and will take a look at it shortly.
          Let us take you to the main page and we can start all over again, shall we?

You can always visit status.plex.tv for current information. Thank you for your patience.

Please let me know any other info you might need.

Also seeing "Unable to process status"
2022-06-14 20:43:55,453 [ERROR] Unable to process status
Traceback (most recent call last):
  File "/app/plex_auto_languages/plex_alert_handler.py", line 43, in __call__
    alert.process(self._plex)
  File "/app/plex_auto_languages/alerts/status.py", line 44, in process
    plex.process_new_or_updated_episode(item.key, EventType.NEW_EPISODE, True)
  File "/app/plex_auto_languages/plex_server.py", line 201, in process_new_or_updated_episode
    user_plex = self.get_plex_instance_of_user(user_id)
  File "/app/plex_auto_languages/plex_server.py", line 168, in get_plex_instance_of_user
    matching_users = [u for u in self.get_instance_users() if str(u.id) == str(user_id)]
  File "/app/plex_auto_languages/plex_server.py", line 155, in get_instance_users
    for user in self._plex.myPlexAccount().users():
  File "/usr/local/lib/python3.8/site-packages/plexapi/myplex.py", line 505, in users
    elem = self.query(MyPlexUser.key)
  File "/usr/local/lib/python3.8/site-packages/plexapi/myplex.py", line 183, in query
    raise BadRequest(message)
plexapi.exceptions.BadRequest: (502) bad_gateway; https://plex.tv/api/users/ <!DOCTYPE html>     <title>We're sorry, but something went wrong (500)</title> <link href="/assets/errors.css" media="screen" rel="stylesheet" type="text/css" />

Oops; a 500 error...

That's "Internal Server Error" in geeky language.

We've been notified about this issue and will take a look at it shortly.
          Let us take you to the main page and we can start all over again, shall we?

You can always visit status.plex.tv for current information. Thank you for your patience.

This has begun happening more and more, practically making the script useless. I've even tried deleting the cache file so it will rebuild from scratch. Any ideas or suggestions?

In both cases this seems to point to an internal server error on Plex side, i.e. the plex.tv server is not reachable or is having issues. What can be done in PlexAutoLanguages is to improve the way these errors are logged but I can't do anything about the availability of Plex own servers...

I do experience it occasionally. It's hit or miss, happens sometimes but I don't really know when or how it triggers.

Just out of curiosity, the Plex URL I have set up in the config file is a local url (i.e. http://<IP_ADDRESS>:34000). Why would it be trying to go through the plex.tv url instead of accessing it locally?
(I'm still getting this regularly, btw)

Just out of curiosity, the Plex URL I have set up in the config file is a local url (i.e. http://<IP_ADDRESS>:34000). Why would it be trying to go through the plex.tv url instead of accessing it locally?

The authentication is always handled by their own servers and is required to be able to access your own instance. All the clients that you use require an internet access even when you are on the same network as your own server.
In the case of PAL, your users are also retrieved from your Plex account, which requires calls to plex.tv. The traceback you provided in this issue clearly states that the issue happens during the call to self._plex.myPlexAccount().users() which retrieves the users of your account. I'm working on caching this information so that PAL can fallback to the cache if the request is not successful, it's a reasonable compromise IMO.

The issue with using the cache first is that for new/updated episodes you want to change the tracks for all your users, so you will not be able to know if you are missing one or more users.
I've implemented and merged (#53) what I think is a good compromise. The cache is always used first but is invalidated every 12 hours. If the refresh goes wrong (the BadRequest you have for example), the previously invalidated cache is used anyway.

@RemiRigal I began seeing the following with the most recent update -
2022-09-09 10:47:21,358 [ERROR] Unable to process playing Traceback (most recent call last):   File "/app/plex_auto_languages/plex_alert_handler.py", line 61, in _process_alerts     alert.process(self._plex)   File "/app/plex_auto_languages/alerts/playing.py", line 79, in process     plex.change_tracks(username, item, EventType.PLAY_OR_ACTIVITY)   File "/app/plex_auto_languages/plex_server.py", line 250, in change_tracks     track_changes.compute(episodes)   File "/app/plex_auto_languages/track_changes.py", line 91, in compute     self._update_description(episodes)   File "/app/plex_auto_languages/track_changes.py", line 121, in _update_description     min_episode_number = min([e.episodeNumber for e in episodes if e.seasonNumber == min_season_number]) TypeError: '<' not supported between instances of 'int' and 'NoneType'
plex version <IP_ADDRESS>29


Fix urls in tutorial

Fix issues such as #428. The cause is that if we don't use the absolute url path, the links only work when accessed via deepspeed.ai. Now I changed the urls (including images) to absolute path for all tutorial pages.

After discussing with @ShadenSmith and @tjruwase, we decided that files in docs should have relative path in order to support local edits. As an alternative solution, we added a real readme under azure to just point to our tutorial on website. On the other hand, I fixed some other real path mistakes in tutorial.


Initialize inputs

set inputs to empty string if null.

looks good! Thank's again for your contribution, I've merged it into master!


Update nodes_main.txt

https://github.com/pocketnetteam/pocketnet.core/issues/194

Don't we want to update chainparamsseeds.h with generate-seeds.py with this updated lists?
Also probably update nodes_test.txt and default port for them.

@lostystyg Yes, it makes sense, I'll run the script when I get to the pc

Don't we want to update chainparamsseeds.h with generate-seeds.py with this updated lists? Also probably update nodes_test.txt and default port for them.

https://github.com/pocketnetteam/pocketnet.core/pull/214/commits/db26e73e92fcedd746f2c2e4eabcd39bd2df1f02


Faulty "Unreachable code" warning on match statement containing a return

Godot version:
v3.1.1.stable.official
OS/device including version:
Ubuntu 18.04.2 LTS
Issue description:
The editor throws a "Unreachable code" warning after a "match" statement that contains a single unused return.
I am aware that this behavior is probably not really new, but the other issues on that are closed while this type of warning still occurs. (see #25955, #26097, #28360)
Steps to reproduce:
Run the following script:
extends Node2D

func _ready():
	var selector = 0
	match selector:
		1:
			return

	print("we reached the unreachable")

The output says:
** Debug Process Started **
OpenGL ES 3.0 Renderer: GeForce GTS 450/PCIe/SSE2
we reached the unreachable

But the editor still receives a warning:
W 0:00:00:0765   Unreachable code (statement after return) in function '_ready()'.
  <Source>       test.gd:9

as a workaround you can add the default case with a "pass" statement
_:
  pass

(still we should consider the warning a bug!)

Something similar to all_have_return flag logic used for if-else can be done for match too I guess.


Which EBS path is shared and private by default

Which EBS path is shared and private by default? I cannot find the related info in the official doc.
After creating a pcluster with basic config (NO any config for shared storage EBS/EFS...), I found:
To access the default shared EBS, we need to cd ~

~/* is shared by the head node and compute nodes, right?
should we install shared software in ~/ ?
I found after installing software in head node, I don't need to export PATH in compute node. May I know how head node and compute nodes shared the PATH env?

To access the default private EBS, we need to cd /

/* is the default private EBS, right?
to run each Sbatch job, in the job script we need to cd to / first to download data and process data independently, right?

What is the best practice in pcluster to

store shared data  / install shared software in shared EBS and shared EFS?
store private data / install private software in private EBS?

Hi @xuanus let me give a first answer.
The following directories are shared between the nodes by default:

/home - This includes the default user home folder (/home/ec2_user on Amazon Linux, /home/centos on CentOS, and /home/ubuntu on Ubuntu).
/opt/intel - This includes Intel MPI, Intel Parallel Studio, and related files.
/opt/slurm - This includes Slurm Workload Manager and related files. (Conditional, only if Scheduler: slurm.)
From: https://docs.aws.amazon.com/parallelcluster/latest/ug/troubleshooting-v3.html#troubleshooting-v3-dirs-must-keep

all the other folders are kept as private.
As suggested in the Best Practices, if you want to share something, it's better to add an additional EBS volume (or EFS or FSx according to your needs) and install the application/software you want to share there:

https://aws.amazon.com/efs/when-to-choose-efs/
https://aws.amazon.com/fsx/when-to-choose-fsx/

Let us know if this answers to your questions.
Enrico


Publish changes for baseUrl for Octokit based on environment

Links to #246 as the missing files being added.


chore: added eventsub_config model

Also, something I am not sure about is if it would be better to split these settings at some point.

Also, something I am not sure about is if it would be better to split these settings at some point.

One thing that might be useful would be to create a separate non-ChangeNotifier object to encapsulate each of the groups that way the top level only includes the keys for each of the items. AudioModel does this: https://github.com/muxable/rtchat/blob/main/lib/models/audio.dart#L12
The equivalent might be doing something like EventConfig and then the EventsubConfigModel can be one EventConfig per type.


weex market 访问不了了，好一段时间了。。。。

https://market.dotwe.org  404

https://market.dotwe.org/ext/list.htm 直接填完整路径

https://market.dotwe.org/ext/list.htm 直接填完整路径

也不行，直接打不开了

烂尾了

This PR/issue doesn't received response since Weex migrated to Apache two years ago and this repository is no longer active yet.
Feel free to ask question in new repository and thanks for your contribution.

This issue is outdated for a long time and will be closed now. You can create a new one if you still have questions.


[ghar] Check "outputs.should_run == true" in "Post test results on PR" step

Summary
For some reason the javascript condition inside the step is not functioning as expected

@bors-libra p=10

@bors-libra r+

:pushpin: Commit b4beaf2 has been approved by sausagee

:hourglass: Testing commit b4beaf27389dd30f6b59d01eb2f1af9265e75124 with merge 32c3b90e64f1109498a264971bb18de88e24d8d4...

@bors-libra r-

@bors-libra r=sausagee

:pushpin: Commit b4beaf2 has been approved by sausagee

:hourglass: Testing commit b4beaf27389dd30f6b59d01eb2f1af9265e75124 with merge 5a60af2d5696e63dbc9e777e0531a31adb171ea3...

:sunny: Test successful - checks-actions_land_blocking_test, checks-circle_commit_workflow
Approved by: sausagee
Pushing 5a60af2d5696e63dbc9e777e0531a31adb171ea3 to master...


Add info about the transformer

Once https://github.com/angular/angular/issues/6956 is fixed, we should link to https://github.com/angular/angular/wiki/Angular-2-Dart-Transformer from any Dart docs on angular.io that discuss transformer arguments in pubspec.yaml. We might even want to create a page on angular.io about just the transformer.

Also... be sure to explain COMMON_DIRECTIVES, CORE_DIRECTIVES, FORM_DIRECTIVES, etc.

Wiki page has a new home: https://github.com/dart-lang/angular2/wiki/Transformer

This issue was moved to dart-lang/site-webdev#258


Add Options to Sort Courses

Sort for 1000,2000,3000, and 4,000 level courses
Filter by Fall, Spring, and Summer, CI, or HI

dropbox created however there are few bugs

going into explore pathways, AI, and remaining, courses can't be sorted


✨(marsha) add new cronjob managing clean_aws_elemental_stack command

Purpose
There is a new management command clean_aws_elemental_stack that should be managed by a cronjob in our k8s.
Proposal

[x] Add new cronjob managing clean_aws_elemental_stack command

@jmaupetit I removed my last commit, I have to investigate why I can't override the cronjob list then in matsuo.
I made a backup of the commit in an other branch and will wotk on it later.
Can you finish the review please considering I will do your suggestion later ?
Thanks


DefaultGeneratorRegistryTest: add tests for invalid types and services

Added tests for erroneous use cases.

@webmozart Annotations added


chore: add Python 3.13

let's see if it now works better, than a few weeks ago 🧐

next try in 1-2 months again 😅


Vaccination Certificate - Censor Logs (EXPOSUREAPP-7097)

Description
This PR adds censoring for vaccination certificate related log data
I hope i caught all possible log messages we could write but if anything is missing please comment
Steps to reproduce

Produce some vaccine cert related logging output
check if it was censored
check if there is any logging left that could go uncensored

Just saw this feature branch. I just have a somewhat related question. Can make it a new issue if you prefer?
At the point of verification, what information is revealed, and is it just verified visually, or recorded? Thanks.


Appstudio update hacbs-test-project-8utz

Pipelines as Code configuration proposal
To start the PipelineRun, add a new comment with content /ok-to-test
For more detailed information about running a PipelineRun, please refer to Pipelines as Code documentation Running the PipelineRun
To customize the proposed PipelineRuns after merge, please refer to Build Pipeline customization

Pipelines as Code CI has failed.There was an error creating the PipelineRun: hacbs-test-project-8utz-on-pull-request-
creating pipelinerun hacbs-test-project-8utz-on-pull-request- in namespace rhtap-demo-njiz-tenant has failed.
Tekton Controller has reported this error: the namespace of the provided object does not match the namespace sent on the request


meiud

meiud created by<EMAIL_ADDRESS>on 2019-10-22 16:01:24

<EMAIL_ADDRESS>replied, what is English for this word? we have it as:meiud, v.t.meiud a iuodel; iuedii, imiud a such; mla meiud, iuedel.

<EMAIL_ADDRESS>replied, Divided as in sectioned out like a pie: banana separated from the stalk.Kemla iuedii a tuu? Have you sectioned the banana?

<EMAIL_ADDRESS>replied, Please can anybody confirm or correct?

<EMAIL_ADDRESS>replied, I think the word is misspelled, specifically the forms meiud and imiud. I
know there are words: mengiud, chemiud, chiuedii and cheliud. They all
refer to twisting something.
J

<EMAIL_ADDRESS>replied, My friend asked her uncle and he wrote this: Al tekoi ra belau ea meiud a such means sel doluil ra such el mla mo merek el mai a techedel.


onCleanup not always called on the server

Describe the bug
When a resource is created outside of the <Suspense> boundary that wraps its data access, the first such resource will not have related onCleanup functions triggered on the server (only the first resource created this way).
Kind of nuanced, and there seems to be some other strange but related behavior at play here as well. Easier to show with some examples.
Here's our resource helper - it just creates and returns a new resource, and registers an onCleanup function:
https://github.com/marbemac/solid-oncleanup-ssr-bug/blob/ef6a572b581791ccabaf6439061b70d6e0c59e91/src/routes/index.tsx#L25-L39
A DataComp component that does not include it's own suspense boundary:
https://github.com/marbemac/solid-oncleanup-ssr-bug/blob/ef6a572b581791ccabaf6439061b70d6e0c59e91/src/routes/index.tsx#L41-L51
A DataCompWithInnerSuspense component that DOES wrap access to the resource data in its own suspense boundary:
https://github.com/marbemac/solid-oncleanup-ssr-bug/blob/ef6a572b581791ccabaf6439061b70d6e0c59e91/src/routes/index.tsx#L53-L67
Scenarios
Render a single DataCompWithInnerSuspense
<DataCompWithInnerSuspense name="DataCompWithInnerSuspense-1" />

Resulting server logs
Note no onCleanup.
call:DataCompWithInnerSuspense-1
call:DataCompWithInnerSuspense-1.resource

Render more than one DataCompWithInnerSuspense
<DataCompWithInnerSuspense name="DataCompWithInnerSuspense-1" />
<DataCompWithInnerSuspense name="DataCompWithInnerSuspense-2" />

Resulting server logs
Note the second comp did have it's onCleanup triggered.
call:DataCompWithInnerSuspense-1
call:DataCompWithInnerSuspense-1.resource
call:DataCompWithInnerSuspense-2
call:DataCompWithInnerSuspense-2.resource
onCleanup:DataCompWithInnerSuspense-2.resource
onCleanup:DataCompWithInnerSuspense-2

Render DataComp + one or more DataCompWithInnerSuspense
<Suspense>
  <DataComp name="DataComp-1" />
</Suspense>

<DataCompWithInnerSuspense name="DataCompWithInnerSuspense-1" />

Resulting server logs
In this case onCleanup IS called for DataCompWithInnerSuspense-1.
Note however that there might be some other weirdness, not sure why the the DataComp logs are triggered again at the end (last 4 lines).
call:DataComp-1
call:DataComp-1.resource
call:DataCompWithInnerSuspense-1
call:DataCompWithInnerSuspense-1.resource
onCleanup:DataComp-1.resource
onCleanup:DataComp-1
onCleanup:DataCompWithInnerSuspense-1.resource
onCleanup:DataCompWithInnerSuspense-1
call:DataComp-1
call:DataComp-1.resource
onCleanup:DataComp-1.resource
onCleanup:DataComp-1

Your Example Website or App
https://github.com/marbemac/solid-oncleanup-ssr-bug
Steps to Reproduce the Bug or Issue

Clone https://github.com/marbemac/solid-oncleanup-ssr-bug.
pnpm install
pnpm dev
Load http://<IP_ADDRESS>:3001
Adjust the components rendered to mess around with the various scenarios described in this issue (https://github.com/marbemac/solid-oncleanup-ssr-bug/blob/main/src/routes/index.tsx#L11-L18)
Reload the page, view server-side logs in terminal

Expected behavior
onCleanup is called consistently.
Screenshots or Videos
No response
Platform

OS: na
Browser: na
Version: 1.6.12

Additional context
Originally ran into this behavior while trying to debug an issue in @tanstack/solid-query. onCleanup is used there to unsubscribe various observables, and the fact that it is not called consistently when on the server is causing problems.

Thanks @ryansolid! Just verified, looks great re the original issue.
One bit of potentially strange behavior persists when the resource is created within the suspense boundary - for example:
<Suspense>
  <DataComp name="DataComp-1" />
</Suspense>

Results in these logs on the server:
call:DataComp-1
call:DataComp-1.resource
onCleanup:DataComp-1.resource
onCleanup:DataComp-1
call:DataComp-1
call:DataComp-1.resource
onCleanup:DataComp-1.resource
onCleanup:DataComp-1

Is it expected for everything to be called twice?
If this is indeed unexpected and you'd prefer I open a separate issue just LMK!

It is expected. On the server we execute more like React. There is no real reactivity. So Suspense boundaries will re-run. It's just so much faster to concat strings than it is to have creative primitives in memory for this case.


0 not being displayed

In my template
{{t "key" count=0}}
in en-US.json
"key": "{count} things"
does not show "0 things" in the dom.  if I change count to 1 it works.
On a related topic, is there support for different "conjugations", like
0 things
1 thing
10 things

Use {num, number} instead.

Related to https://github.com/yahoo/intl-messageformat/pull/136


Enhancment/improve config map property source logging

Issue #400
Added exception to logging.  Let me know if message needs any changing.
Thanks

Thanks! The change itself looks good but I am not sure about the formatting thing... @ryanjbaxter ?


minibatch loss not change

I have use some utterances to test the code, and the program is running well, but the console prints that minibatch loss always during 7~9 and not decrease, accuracy=0, what's wrong about this? Thx!

What dataset are you using for training?

I choose some utterances from internet about 1045 persons ,including 3000 utt, and I want to know which batchsize and epoch do I use to make the better results and let the loss minimize. Thx!

Unfortunately, this question is vague to me. There is n magic number for that. This is base of trial an error. Start with 30 epochs for instance.


Headless mode

[ x] I have definitely checked that there are no proposals for this already in the proposals folder

Summary of feature
It is not a thing that will be used commonly but for some people it will be useful. Creating headless mode could be just use for handling input from controllers. Since Silk.net is very cross platform this could be beneficial.
What headless mean in my point of view. Do not create a window.
Comments

Due to technical restrictions within GLFW (you can't use some of the input functions without a window), we've decided that we can't feasibly implement this in an efficient way and sadly won't be able to get this in :(
Sorry about that :(


Add my own custom widget

Hi! I would like to use Ziggeo as a widget for video recording. How can I create my own widget and add it to the SurveyJS Builder without having to wait for it to be added to this list: https://github.com/surveyjs/widgets#widgets--

@guilhermesad We do not have a tutorial yet. We will work on it.
You may find this issue useful
You may look at microphone widget it was created by @baminmru.
Thank you,
Andrew

Hi @andrewtelnov, thanks for the reply. I had seen these links but I'm actually looking for how to use it in the survey builder. The example on this doesn't seem to show how exactly I can do this integration.

@guilhermesad It is pretty much the same. Here is the example
Thank you,
Andrew

Hello "Edit in Plunker" for this example doesn't work. Because of missed jquery dependency. I've fixed it via adding jquery.  Please see https://plnkr.co/edit/XAOhyVxq5KkBYjOLKVO2?p=preview
And may be you are looking for this code (get from microphone  implementation)
    activatedByChanged: function(activatedBy) {
      Survey.JsonObject.metaData.addClass("microphone", [], null, "empty");
    },

PS the example fix will be available on the site in the next patch relese.

What I'm trying to do is actually quite simple. I have your nodejs repo running and I want to add a new custom option to the editor.
If I for example copy and paste your microphone widget into the editor file the microphone option doesn't show up in the editor.

I've modify my example: https://plnkr.co/edit/XAOhyVxq5KkBYjOLKVO2?p=preview . Now we have one custom widget file which just add as script without any special code and the editor see it.

Thanks! That's useful. I've managed to create my own widget following that example. I appreciate your help.

@andrewtelnov , @tsv2013  may be we need to create a simple tutorial with an example in the README and our site.

Hello!
Is there a way to use the "creator.toolbox.addItem(someJson)" function to connect a custom widget to the form creator?
Or is there some other glue between the survey and the creator?
I'm using your node modules in a ruby app using webpacker. Our package.json pulls in:
"survey-jquery": "^1.0.91",
"survey-creator": "^1.0.91",

Do I need something else? Thanks for any advice.

@JaneCoder

Please review the document about Survey Creator integration. You do not need jquery version here. You need a knockout SurveyJS library version and knockout.
If you need to add custom widgets from our library, then please review this example
If you need to add your own custom widget then this one.

Thank you,
Andrew

Thank you so much!
Is it possible to do it with node modules required in a package.json rather
than script tags as the examples show?
On Wed, Jun 12, 2019 at 12:57 AM Andrew<EMAIL_ADDRESS>wrote:

@JaneCoder https://github.com/JaneCoder

Please review the document about Survey Creator integration
https://surveyjs.io/Documentation/Survey-Creator/?id=Add-Survey-Creator-into-your-Web-Page.
You do not need jquery version here. You need a knockout SurveyJS library
version and knockout.
If you need to add custom widgets from our library, then please
review this example
https://surveyjs.io/Examples/Survey-Creator/?id=customwidgets
If you need to add your own custom widget then this one
https://next.plnkr.co/edit/fXsLf1R88WxxDFaFEnYx?p=preview&preview.

Thank you,
Andrew
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/surveyjs/widgets/issues/44?email_source=notifications&email_token=AAXDETZPMJX6YXCHRV7JHDLP2B63LA5CNFSM4EWK4V3KYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGODXPH4UQ#issuecomment-501120594,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAXDETYF772WCIOBXOQRMQLP2B63LANCNFSM4EWK4V3A
.

Just adding the files doesn't add the custom widgets to the survey creator

Do the custom widgets need to be registered to the Survey Creator?

@kipkiruitoo Custom widgets are registered automatically in SurveyJS Creator after init call.
If you are using SurveyJS Creator with non-knockout platform, e.g. survey-angular, you need to register a custom widget in survey-knockout platform to be visible in SurveyJS Creator, see the https://github.com/surveyjs/surveyjs_angular_cli/blob/master/src/app/survey.creator.component.ts#L8-L20 sample

@tsv2013 Thank you, how is the same done in JQuery version of the creator


File Open Dialog

How to show the file open dialog?
let mut foo: winsafe::IUnknown = winsafe::CoCreateInstance(
  &winsafe::shell::clsid::FileOpenDialog,
  None,
  winsafe::co::CLSCTX::INPROC_SERVER,
).unwrap();

This code runs without errors but doesn't show a file open dialog.

You need the IOpenFileDialog along with something like this.
IOpenFileDialog is not supported yet, but I'm working on it right now, so it'll probably out today.

There you go:
use winsafe::{co, CoCreateInstance, shell};

self.my_button.on().bn_clicked({
    let self2 = self.clone();
    move || {
        let fileo: shell::IFileOpenDialog = CoCreateInstance(
            &shell::clsid::FileOpenDialog,
            None,
            co::CLSCTX::INPROC_SERVER,
        ).unwrap();

        fileo.IFileDialog.SetOptions(
            fileo.IFileDialog.GetOptions().unwrap()
            | co::FOS::FORCEFILESYSTEM | co::FOS::FILEMUSTEXIST,
        ).unwrap();

        fileo.IFileDialog.SetFileTypes(&[
            ("Documents", "*.docx;*.txt"),
            ("Images", "*.jpg;*.png;*.bmp"),
            ("All files", "*.*"),
        ]).unwrap();

        fileo.IFileDialog.SetFileTypeIndex(0).unwrap();

        let user_clicked_ok = fileo.IFileDialog.IModalWindow
            .Show(self2.wnd.hwnd()).unwrap();

        if user_clicked_ok {
            let shi = fileo.IFileDialog.GetResult().unwrap();
            let file_path = shi.GetDisplayName(co::SIGDN::FILESYSPATH).unwrap();
            println!("{}", file_path);
        }
    }
});

If this didn't work for you, please reopen the issue.
Please not that I'm still implementing the related interfaces. I just uploaded the bare mininum to make the code above work. There are a lot of methods.
Also, I'm not 100% sure of this COM implementation. The way it is, you have to call the base interfaces manually (since Rust has no inheritance). For example: instead of fileo.SetOptions(), you must call fileo.IFileDialog.SetOptions(). Maybe it's possible to rework it using traits, I'll check that later.

This works perfectly!


Run actions with old numpy versions.

We should retain compatibility with "old" numpy<2.0 versions for quite a while still.
The actions currently install the newest numpy, which ends up as 2.0 currently.
We should add an action that runs the tests with an older numpy version?

numpy v2 supports python 3.9-3.12, so our python 3.8 actions still run with the old numpy v1.24. We might want to test against numpy v1.26, though.


On rotation to landscape, no longer see the new / old color boxes

On both the devices I used this on within my own app (as a Preference for color selection) it worked great in portrait mode, but whenever I switch to landscape, the saturation color selector square eats up the entire height of the screen and leaves no room for the new/old color boxes (see screen shot), rendering the dialog unusable. One device was a Moto G phone and the other was a Samsung Galaxy Tab 4 (10.1"), both running Android 4.4.2.

Im working on it, the ColorPickerDialog will be replaced by a ColorPickerDialogFragment instead since those AlertDialogs seems to be hard to control... Did not have that on any of my devices, very strange.

Great.. thank you.

Should be ok now, please try the new library.
I have tested on:

LG G3 Android 5.0
HTC Nexus 9 Android 5.0.2
ASUS Transformer TF101 Android 4.4.4
HTC One X Android 4.2.2
Sony Xperia Neo Android 4.0.4
HTC Sensation Android 4.0.3

Looks great thank you. Modified it slightly to work with my preference fragment (not activity) but I like the revised layout & explicit Ok button.

Looks good! I guess I was a bit quick in the last testing since it did look very god on sw320dp displays.
I have fixed that now along with a bunch of other issues. One if them we can se on your screenshot, the select hue value doesn't really match what is shown in the sat/val panel, yellow is seleced, green is show.
Also the demo app is updated with an example how to use the ColorPreference from a PreferenceFragment.

All looks good now apart from one last issue I encountered which was if the initial color was white (-1) then the current / new color panels showed up as black rather than white. Seemed like this bit of code in ColorPickerDialogFragment.onCreateView was filtering out the 'white' case but I dont know why?
		int initColor = getArguments().getInt("init_color");

		if(initColor != -1) {
			mOldColorPanel.setColor(initColor);
			mColorPicker.setColor(initColor, true);
		}

Once I commented out the test of initColor != -1 it all worked fine.

Oh that should not be there, I will remove it imediatelly. I will close this issue now, if you run into any more problems, feel free to open a new one.


Improve brew create --cask + related tools/docs to reduce friction/manual effort/prior knowledge required

Verification

[X] This issue's title and/or description do not reference a single formula e.g. brew install wget. If they do, open an issue at https://github.com/Homebrew/homebrew-core/issues/new/choose instead.

Provide a detailed description of the proposed feature
TODO: I need to go through my 'motivation' section below and extract all of the specific improvements, then update this section. I wanted to make sure I captured this first though, so it didn't get lost.
What is the motivation for the feature?
Note: The following is styled as a walkthrough of the process, frictions, and internal monologue of a new(ish) contributor trying to create a new Cask. I intend to go through it after the fact and extract a more refined list of fixes/improvements as I see them, and include that in the 'proposed feature' section above.

When I was creating a new cask the other day, I found that the official download link (Ref) for the app was unversioned (https://reader-desktop-releases.readwise.io/Reader.dmg):
⇒ brew create --cask https://reader-desktop-releases.readwise.io/Reader.dmg
Cask name [Reader]:
Please run `brew audit --cask --new reader` before submitting, thanks.
Editing /usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask/Casks/r/reader.rb

This generated the following Cask:
cask "reader-example" do
  version ""
  sha256 ""

  url "https://reader-desktop-releases.readwise.io/Reader.dmg"
  name "Reader-example"
  desc ""
  homepage ""

  app ""
end

My next steps would be to figure out all of the things to fill in for the cask, and to do that it would be useful to have the app downloaded, maybe even installed, etc. So next I would usually do a brew install, but with this cask as generated, I can't since it doesn't have a version number:
⇒ HOMEBREW_NO_INSTALL_FROM_API=1 brew install reader-example
Error: Version must not be empty
Please report this issue:
  https://docs.brew.sh/Troubleshooting
Warning: Removed Sorbet lines from backtrace!
Rerun with --verbose to see the original backtrace
/usr/local/Homebrew/Library/Homebrew/version.rb:495:in `initialize'
/usr/local/Homebrew/Library/Homebrew/cask/download.rb:41:in `new'
/usr/local/Homebrew/Library/Homebrew/cask/download.rb:41:in `version'
/usr/local/Homebrew/Library/Homebrew/downloadable.rb:77:in `downloader'
/usr/local/Homebrew/Library/Homebrew/downloadable.rb:87:in `fetch'
/usr/local/Homebrew/Library/Homebrew/cask/download.rb:55:in `fetch'
/usr/local/Homebrew/Library/Homebrew/cask/installer.rb:167:in `download'
/usr/local/Homebrew/Library/Homebrew/cask/installer.rb:70:in `fetch'
/usr/local/Homebrew/Library/Homebrew/cask/installer.rb:99:in `install'
/usr/local/Homebrew/Library/Homebrew/cmd/install.rb:244:in `block in install'
/usr/local/Homebrew/Library/Homebrew/cmd/install.rb:233:in `each'
/usr/local/Homebrew/Library/Homebrew/cmd/install.rb:233:in `install'
/usr/local/Homebrew/Library/Homebrew/brew.rb:86:in `<main>'

So next it's off to the docs to try and figure out how to fix that:

https://github.com/Homebrew/homebrew-cask/blob/master/CONTRIBUTING.md
https://github.com/Homebrew/homebrew-cask/blob/master/.github/PULL_REQUEST_TEMPLATE.md
https://docs.brew.sh/Adding-Software-to-Homebrew#casks

https://docs.brew.sh/Adding-Software-to-Homebrew#creating-the-cask-file
(Doesn't seem to contain anything useful for resolving this)

https://docs.brew.sh/Cask-Cookbook

https://docs.brew.sh/Cask-Cookbook#stanza-version

(Doesn't seem to contain much useful for resolving this in the examples)

https://docs.brew.sh/Cask-Cookbook#version-latest

(Finally, a solution!)

Looks like we could use :latest for now:

version :latest
The special value :latest is used when:

url does not contain any version information and there is no way to retrieve the version using a livecheck, or
having a correct value for version is too difficult or impractical, even with our automated systems. For example, chromium.rb releases multiple versions a day.

So we update our cask:
cask "reader-example" do
  version :latest
  sha256 ""

  url "https://reader-desktop-releases.readwise.io/Reader.dmg"
  name "Reader-example"
  desc ""
  homepage ""

  app ""
end

And try installing again:
⇒ HOMEBREW_NO_INSTALL_FROM_API=1 brew install reader-example
Running `brew update --auto-update`...
==> Downloading https://reader-desktop-releases.readwise.io/Reader.dmg
Already downloaded: /Users/devalias/Library/Caches/Homebrew/downloads/239ed1b40d758fd291e1bc00e9cea281d119f03575da7700482364ebc25636ca--Reader.dmg
Warning: Cannot verify integrity of '239ed1b40d758fd291e1bc00e9cea281d119f03575da7700482364ebc25636ca--Reader.dmg'.
No checksum was provided.
For your reference, the checksum is:
  sha256 "a39d51e7b210b2d59fb6a0e1dd689002a9e642e8e9cecba80c9fd5d9fd057f42"
==> Installing Cask reader-example
==> Moving App 'latest' to '/Applications/latest'
🍺  reader-example was successfully installed!

This seemed to mostly work, and even gave us a useful tip with some copy/pasteable code to fix the sha256 hash, so we will update our cask and reinstall; but before that, it's worth noting that 🐛 the installed app was apparently moved to /Applications/latest, which doesn't seem right:
⇒ ls /Applications/latest
Reader.app/

Since we have no downloaded the *.dmg and installed it, we have access to the *.app; within that we can read the Info plist and (not sure if always?) get the app version, and minimum system version:
⇒ defaults read /Applications/latest/Reader.app/Contents/Info | grep -i version
    CFBundleInfoDictionaryVersion = "6.0";
    CFBundleShortVersionString = "0.1.1";
    CFBundleVersion = "20231213.012331";
    LSMinimumSystemVersion = "10.13";

To make contributors lives easier, surfacing this as easily copy/pasteable notes from brew install would be useful; and reduce manual effort and confusion later on.
Moving on, we update the sha256 and brew reinstall:
cask "reader-example" do
  version :latest
  sha256 "a39d51e7b210b2d59fb6a0e1dd689002a9e642e8e9cecba80c9fd5d9fd057f42"

  url "https://reader-desktop-releases.readwise.io/Reader.dmg"
  name "Reader-example"
  desc ""
  homepage ""

  app ""
end

⇒ HOMEBREW_NO_INSTALL_FROM_API=1 brew reinstall reader-example
==> Downloading https://reader-desktop-releases.readwise.io/Reader.dmg
Already downloaded: /Users/devalias/Library/Caches/Homebrew/downloads/239ed1b40d758fd291e1bc00e9cea281d119f03575da7700482364ebc25636ca--Reader.dmg
==> Uninstalling Cask reader-example
==> Backing App 'latest' up to '/usr/local/Caskroom/reader-example/latest'
==> Removing App '/Applications/latest'
==> Purging files for version latest of Cask reader-example
==> Installing Cask reader-example
==> Moving App 'latest' to '/Applications/latest'
🍺  reader-example was successfully installed!

The install path is still broken, but aside from that, looks good.
Let's do a brew style --fix:
⇒ brew style --fix reader-example
/usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask/Casks/r/reader-example.rb:7:3: C: Cask/Desc: The desc (description) should not be an empty string.
  desc ""
  ^^^^^^^

1 file inspected, 1 offense detected

🐛 Which suggests that there is only an issue with the empty desc; but I also currently have an empty homepage and app, so that doesn't seem right. They should be called out as well.
Let's try brew audit --new:
⇒ brew audit --new reader-example
==> Downloading https://reader-desktop-releases.readwise.io/Reader.dmg
Already downloaded: /Users/devalias/Library/Caches/Homebrew/downloads/239ed1b40d758fd291e1bc00e9cea281d119f03575da7700482364ebc25636ca--Reader.dmg
==> Downloading and extracting artifacts
==> Downloading https://reader-desktop-releases.readwise.io/Reader.dmg
Already downloaded: /Users/devalias/Library/Caches/Homebrew/downloads/239ed1b40d758fd291e1bc00e9cea281d119f03575da7700482364ebc25636ca--Reader.dmg
audit for reader-example: failed
 - Cask should have a description. Please add a `desc` stanza.
 - you should use sha256 :no_check when version is :latest
 - Use `sha256 :no_check` when URL is unversioned.
 - The URL's domain reader-desktop-releases.readwise.io does not match the homepage domain , a 'verified' parameter has to be added to the 'url' stanza. See https://docs.brew.sh/Cask-Cookbook#when-url-and-homepage-domains-differ-add-verified
 - Signature verification failed:
/private/tmp/d20231215-90434-j7g0df: bundle format unrecognized, invalid, or unsuitable

macOS on ARM requires software to be signed.
Please contact the upstream developer to let them know they should sign and notarize their software.
reader-example
  * Cask should have a description. Please add a `desc` stanza.
  * you should use sha256 :no_check when version is :latest
  * Use `sha256 :no_check` when URL is unversioned.
  * The URL's domain reader-desktop-releases.readwise.io does not match the homepage domain , a 'verified' parameter has to be added to the 'url' stanza. See https://docs.brew.sh/Cask-Cookbook#when-url-and-homepage-domains-differ-add-verified
  * line 5, col 2: Signature verification failed:
    /private/tmp/d20231215-90434-j7g0df: bundle format unrecognized, invalid, or unsuitable

    macOS on ARM requires software to be signed.
    Please contact the upstream developer to let them know they should sign and notarize their software.
Error: 5 problems in 1 cask detected.

A little weird that it seems to have repeated the same issues twice.. which at first makes it seem a lot more overwhelming; but we can live with that if we need to.
The audit picks up on a few things:

👌🏻 empty desc (cool, we knew about that from brew style)
🐛❓  2 comments about how we should improve sha256, but this is the first time we're told about :no_check
🐛 The URL doesn't match the homepage domain, and so talks about adding the verified stanza; which sort of feels like a side problem, as the real base problem here is that I haven't set homepage to anything
🐛 Signature verification failed: /private/tmp/d20231215-90434-j7g0df: bundle format unrecognized, invalid, or unsuitable; not sure what caused this, but I assume it probably has something to do with app being blank currently as well? (possibly because it installs to /Applications/latest/Reader.app, and maybe this code is trying to read the latest part as an app? Would need to confirm in code)

Ideally, brew style and/or brew audit should have told me that my homepage and app are empty, and that is causing problems. It probably would have been nice if brew style told me that using version :latest with a sha256 hash isn't allowed (and the --fix of that should maybe assume that I intended version: latest, so update sha256 for me)
As a newer contributor, I'm not even really sure what the differences are between brew style and brew audit, but all the docs say to run them both, so that's what I do.
At this stage, I'm already starting to feel overwhelmed by everything, and need to start digging deeper into the docs to try and figure out what all the new issues I've just been told are about, and how best to resolve them.
So I figure out that I should set my app:
cask "reader-example" do
  version :latest
  sha256 "a39d51e7b210b2d59fb6a0e1dd689002a9e642e8e9cecba80c9fd5d9fd057f42"

  url "https://reader-desktop-releases.readwise.io/Reader.dmg"
  name "Reader-example"
  desc ""
  homepage ""

  app "Reader.app"
end

And then brew reinstall:
⇒ HOMEBREW_NO_INSTALL_FROM_API=1 brew reinstall reader-example
==> Downloading https://reader-desktop-releases.readwise.io/Reader.dmg
Already downloaded: /Users/devalias/Library/Caches/Homebrew/downloads/239ed1b40d758fd291e1bc00e9cea281d119f03575da7700482364ebc25636ca--Reader.dmg
==> Installing Cask reader-example
==> Moving App 'Reader.app' to '/Applications/Reader.app'
🍺  reader-example was successfully installed!

That looks a bit better.
brew style's output hasn't changed, but let's check brew audit --new again too:
⇒ brew audit --new reader-example
==> Downloading https://reader-desktop-releases.readwise.io/Reader.dmg
Already downloaded: /Users/devalias/Library/Caches/Homebrew/downloads/239ed1b40d758fd291e1bc00e9cea281d119f03575da7700482364ebc25636ca--Reader.dmg
==> Downloading and extracting artifacts
==> Downloading https://reader-desktop-releases.readwise.io/Reader.dmg
Already downloaded: /Users/devalias/Library/Caches/Homebrew/downloads/239ed1b40d758fd291e1bc00e9cea281d119f03575da7700482364ebc25636ca--Reader.dmg
audit for reader-example: failed
 - Cask should have a description. Please add a `desc` stanza.
 - you should use sha256 :no_check when version is :latest
 - Use `sha256 :no_check` when URL is unversioned.
 - The URL's domain reader-desktop-releases.readwise.io does not match the homepage domain , a 'verified' parameter has to be added to the 'url' stanza. See https://docs.brew.sh/Cask-Cookbook#when-url-and-homepage-domains-differ-add-verified
 - Upstream defined :high_sierra as the minimum OS version and the cask defined no minimum OS version
reader-example
  * Cask should have a description. Please add a `desc` stanza.
  * you should use sha256 :no_check when version is :latest
  * Use `sha256 :no_check` when URL is unversioned.
  * The URL's domain reader-desktop-releases.readwise.io does not match the homepage domain , a 'verified' parameter has to be added to the 'url' stanza. See https://docs.brew.sh/Cask-Cookbook#when-url-and-homepage-domains-differ-add-verified
  * Upstream defined :high_sierra as the minimum OS version and the cask defined no minimum OS version
Error: 5 problems in 1 cask detected.

Most of the output is the same, but now for the first time it's actually detected there is a minimum required OS version for :high sierra.. cool.. but what do I do with that? Back to the docs I go! 🐛 This should either link to the docs, provide a copy pasteable snippet I can use to fix my cask, or ideally, both. The text could also be improved to make it more understandable (see next paragraph). Ideally this might also be told to me in brew style, but maybe thats OOS of the purpose of that command.
From the audit output: 'Upstream' isn't super useful for a new contributor, and it doesn't really mention macOS anywhere, but hopefully most users know the names of the OS releases to some degree, as they will need to to be able to figure out where in the Cask Cookbook to look.

https://docs.brew.sh/Cask-Cookbook#stanza-depends_on

https://docs.brew.sh/Cask-Cookbook#depends_on-macos
https://docs.brew.sh/Cask-Cookbook#depends_on-parameters

🐛 Sidenote: Kind of confusing that this 'overview' is at the end of the depends_on section and not at the start of it.

So after reading the docs, I figure out that I need to update my cask with depends_on macos: ">= :high_sierra". I've finally added a desc/homepage, and set sha256 :no_check:
cask "reader-example" do
  version :latest
  sha256 :no_check

  url "https://reader-desktop-releases.readwise.io/Reader.dmg"
  name "Reader-example"
  desc "Super informed desc"
  homepage "https://readwise.io/read/download"

  depends_on macos: ">= :high_sierra"

  app "Reader.app"
end

We check brew style and brew audit --new again:
⇒ brew style --fix reader-example

1 file inspected, no offenses detected

⇒ brew audit --new reader-example
==> Downloading https://reader-desktop-releases.readwise.io/Reader.dmg
Already downloaded: /Users/devalias/Library/Caches/Homebrew/downloads/239ed1b40d758fd291e1bc00e9cea281d119f03575da7700482364ebc25636ca--Reader.dmg
Warning: No checksum defined for cask 'reader-example', skipping verification.
==> Downloading and extracting artifacts
==> Downloading https://reader-desktop-releases.readwise.io/Reader.dmg
Already downloaded: /Users/devalias/Library/Caches/Homebrew/downloads/239ed1b40d758fd291e1bc00e9cea281d119f03575da7700482364ebc25636ca--Reader.dmg
Warning: No checksum defined for cask 'reader-example', skipping verification.

And they finally seem happy! Time to open a PR:

https://github.com/Homebrew/homebrew-cask/blob/master/.github/PULL_REQUEST_TEMPLATE.md

(see also https://github.com/Homebrew/homebrew-cask/pull/162382 for some improvements to this)

Let's assume I have checked all the things in the PR template, and everything passes and works well now. Yay, I'm done! (probably)
But nope.. apparently not, as when my PR gets reviewed, I'm told I need:

to add a livecheck block

🐛 (first i've ever heard about this; if it's needed, why didn't brew style and brew audit pick it up? Why wasn't it included in the original template file created by brew create? Back to the docs I go!)

https://docs.brew.sh/Cask-Cookbook#stanza-livecheck
https://docs.brew.sh/Brew-Livecheck

🐛 No Table of Contents for this page? Guess I have to find where the info I need is the old fashioned way
https://docs.brew.sh/Brew-Livecheck#sparkle-strategy-block

This tool looks useful: "$(brew --repository homebrew/cask)/developer/bin/find-appcast" '/path/to/application.app'

🐛 Why is it hidden away in a developer bin commands section rather in a more 'first class' tool place (like brew create/etc)

Apparently it works for appcast, sparkle, electron builder: https://github.com/Homebrew/homebrew-cask/blob/master/developer/bin/find-appcast

🐛 Wouldn't have guessed that from the name
🐛 Why isn't it mentioned for them?

https://docs.brew.sh/Brew-Livecheck#electronbuilder-strategy-block

https://docs.brew.sh/Brew-Livecheck#json-strategy-block

🐛 This is good for a complex example, but apparently the most basic case of this is far simpler; and should be shown as an example:

livecheck do
  url "https://www.example.com/example.json"
  strategy :json do |json|
    json["version"]
  end
end

https://docs.brew.sh/Brew-Livecheck#xml-strategy-block

🐛 Presumably this also has a basic example that could be added like the json one

https://docs.brew.sh/Brew-Livecheck#yaml-strategy-block

🐛 Add basic example as per json/xml

to add a zap block

🐛 (first i've ever heard about this; if it's needed, why didn't brew style and brew audit pick it up? Why wasn't it included in the original template file created by brew create? Back to the docs I go!)

https://docs.brew.sh/Cask-Cookbook#stanza-zap

Ok, makes sense so far, but seems a little complex...
https://docs.brew.sh/Cask-Cookbook#zap-creation

The simplest method is to use @nrlquaker’s CreateZap, which can automatically generate the stanza.

🐛 So the simplest way to do a required thing is to go and install a random 3rd party tool? Weird..
https://github.com/nrlquaker/homebrew-createzap

🐛 That hasn't been updated in 2 years
🐛 That I have to use a 3rd party tap to install: brew tap nrlquaker/createzap

At least there are some manual commands too

Some additional manual ones I have in my own helpers: (Ref)

Note: If that doesn't work well, then the following more manual steps might:

$(brew --repository homebrew/cask)/developer/bin/list_ids_in_app /path/to/application.app

find ~/Library -iname '*FooApp*' 2>/dev/null | sort
find ~/Library -iname '*com.foo.FooApp*' 2>/dev/null | sort
find ~/.config -iname '*FooApp*' 2>/dev/null | sort
find ~/.config -iname '*com.foo.FooApp*' 2>/dev/null | sort
find ~/.local -iname '*FooApp*' 2>/dev/null | sort
find ~/.local -iname '*com.foo.FooApp*' 2>/dev/null | sorts
find / -iname "*FooApp*" | sort
find / -iname "*com.foo.FooApp*" | sort

If I need to do it manually, it's off to another section of the docs to learn more of the syntax:

https://docs.brew.sh/Cask-Cookbook#stanza-uninstall

that I may need to add auto_updates true

🐛 (never seen that before either, back to the docs again!)

🐛 But that's not listed in the Stanza Descriptions.. guess I have to search the page and hope: https://docs.brew.sh/Cask-Cookbook
Ok, apparently it's in 'Optional Stanzas', and that description makes sense I guess: https://docs.brew.sh/Cask-Cookbook#optional-stanzas

Ok, so I try and add a livecheck, but there seems to be no version mentioned on the page itself; and the full livecheck docs are super long and convoluted, so I short of skim through them, try $(brew --repository homebrew/cask)/developer/bin/find-appcast" '/path/to/application.app' which doesn't show anything, and then sort of just give up. brew livecheck just says latest anyways:
⇒ brew livecheck reader-example
reader-example: latest

I go and install the 3rd party createzap tool, run it, and add my zap stanza.
Check brew style, brew audit, etc; and everything seems mostly good at this stage.
In this instance, there was a way to figure out that it had an internal updater (running Proxyman and noticing the update URL on app launch was the only way to find this, there was no UI in the app that showed it), from which we could actually implement a proper livecheck and versioned url, which meant we could also then fix the sha256 hash again; and then had to be manually told to add the auto_updates true again at the end based on all that, because it didn't show up in any brew style / brew audit checks to remind me of that fact.

This app was based on Tauri (an rust app bundler, similar to Electron), which has it's own built in updater functionality:

https://tauri.app
https://tauri.app/v1/guides/distribution/updater/

As a sideproject, I am doing some reverse engineering to figure out if there is a nice way to:

Detect if the app is bundled with Tauri
Detect if it uses the built in updater functionality
Extract the update check URL

If I can figure out a way to do that properly, then this should ideally be added into $(brew --repository homebrew/cask)/developer/bin/find-appcast" '/path/to/application.app' (which IMO, should ideally be refactored into a more 'canonical' helper command akin to brew create; and ideally brew create / brew install / brew audit / similar should proactively raise awareness of how to do it (or just silently run it and generate a better starting template, etc)
How will the feature be relevant to at least 90% of Homebrew users?
This would reduce the 'prior knowledge', manual 'friction', and PR review back and forth required for successfully contributing a new Cask.
In doing so, it will make the lives of new contributors easier, and reduce the burden on maintainers in having to manually explain these things to people.
What alternatives to the feature have been considered?
Leaving things as they are, and making the contributor manually figure out all the steps required.

Some related background context from another issue:

Not sure if we want to add this here or in the cookbook/acceptable casks, but I would want to mention that new casks should contain a working livecheck and a zap.
Originally posted by @razvanazamfirei in https://github.com/Homebrew/brew/pull/16327#discussion_r1425405155

Does brew create add those lines? If not, it should. If so (and enforced by brew audit which we point to): it seems fine as-is.
Originally posted by @MikeMcQuaid in https://github.com/Homebrew/brew/pull/16327#discussion_r1426430910

Does brew create add those lines? If not, it should. If so (and enforced by brew audit

To my knowledge, it doesn't currently. I raised this (and some other related frictions) in an issue I opened today:

https://github.com/Homebrew/brew/issues/16342

Originally posted by @0xdevalias in https://github.com/Homebrew/brew/pull/16327#discussion_r1427576722

Hey @0xdevalias, thanks again for the issue. Some requests:

Please hold off creating any more issues. The last 3/23 issues on this repo are by you in the last 2 days as well as a PR which has more activity than any others. It's just becoming a little hard to keep up with it all 😅
Can you try to edit down the issue so that it e.g. fits on a single screen and contains a single ask? Right now it's formatted more like a discussion with general ideas (and may be a better fit instead as a discussion). If I wanted to "implement" this issue: I'd have no real idea where to start given the volume of text here.

TODO: I need to go through my 'motivation' section below and extract all of the specific improvements, then update this section. I wanted to make sure I captured this first though, so it didn't get lost.

Can you do any TODOs before opening the issue rather than afterwards? It's important to try to minimise the time taken for maintainers to be able to triage and, where appropriate, implement these issues.
Thanks again ❤

Please hold off creating any more issues. The last 3/23 issues on this repo are by you in the last 2 days as well as a PR which has more activity than any others. It's just becoming a little hard to keep up with it all 😅

@MikeMcQuaid Respectfully, I would much rather it take however long it takes for someone to get back to me about an issue I open, than to be told not to open it. While I'm sure it's not your intent, this comes across super micromanagey and unappreciative, and doesn't feel good. It makes me not want to contribute, because the time/effort I am putting in to improve things (of which everything I have opened is relevant and related) isn't appreciated, but instead is treated as "no, bad, stop".
Someone opening an issue doesn't mean you need to jump on it straight away, just like someone sending an email doesn't require an immediate response. Embrace async.

e.g. fits on a single screen and contains a single ask?

@MikeMcQuaid That really depends how you define 'single ask'. It is improving a flow/experience, that requires touching multiple parts. That is the single ask. Another way you could think of it is like an epic. It would be a lot more verbose and confusing and spammy if it were split up across multiple unrelated issues; which is why I contained it here as I did.
I can hide it in an expandable if it's that big of an issue for you, but then that will need to be explicitly expanded before a basic 'find in page' would pick up anything within it, which is why I explicitly chose not to.

If I wanted to "implement" this issue: I'd have no real idea where to start given the volume of text here.

@MikeMcQuaid The 'long content' is in the 'What is the motivation for the feature?' section of the PR; it is giving the motivation.
For someone looking to implement, that would seem to be what the 'Provide a detailed description of the proposed feature' section is for.

Can you do any TODOs before opening the issue rather than afterwards? It's important to try to minimise the time taken for maintainers to be able to triage and, where appropriate, implement these issues.

@MikeMcQuaid While I understand what you are asking for here, it kind of falls a bit into the 'micromanagey' space again, and the similar "doesn't require an immediate response" / "embrace async" that I outlined above.
Many (most? all?) of the improvements are already marked with 🐛 in the 'What is the motivation for the feature?'; so it already captures relevant and meaningful improvements as is. I wanted to capture them while they are fresh in my mind, and as they interrelate with the work I am already doing.

Respectfully, this kind of 'praise sandwich' ("Thanks but also not really thanks and actually just stop".) comes across super backhanded, disingenuine, and a little condescending. I would rather you just be direct and not wrap it in false niceties.

@0xdevalias These niceties were not false; I do genuinely appreciate the work you're doing, including this issue ❤! I do not expect you to know in advance our preferred ways of working on this project are. That said: at this point we are not interested in your thoughts or advice in how this project should be run differently/better.
I wrote a back-and-forth on a bunch of your points but I'm not sure that's actually helpful.
This message is veering back into the bad footing we started on, let's avoid that please. It's completely fair to say "this message makes me feel X". It's not fair to accuse me of being false.
Given this is not the first time I've tried to give feedback gently and not had a good response: I think you have two choices at this point:

When we ask you to adjust your approach to contribution: feel free to communicate hurt feelings and ask for clarification if it's unclear but do not argue, suggest to us how the project should be run differently or e.g. quote back documents at me that I wrote myself. For better or worse: we decide how Homebrew is run, not you. When you've got a lot of PRs merged under your belt: your views on how this project can be better run may be taken more seriously.
Decide that you don't want to work on Homebrew the way we want to work and move on from contributing to the project.

I would be sad to see 2) be the case but: if it's the best thing for you and your situation I will completely understand. I think we can get to a better way of working but it needs to have you accept that you're right now this back-and-forth is more damaging to the project than it is helpful.

I completely agree with @MikeMcQuaid.
What I am surmising from the original post is that some of the documentation for creating casks can be improved and updated to reflect evolving practices. I've opened a PR to address that.

What I am surmising from the original post is that some of the documentation for creating casks can be improved and updated to reflect evolving practices. I've opened a PR to address that.

@razvanazamfirei Documentation improvements are definitely useful, but the primary issues highlighted there (which I plan to extract and summarise further when I am able to focus my time/energy on the actual task rather than replying to meta conversations around them) are more around (off the top of my head):

the fact that brew create / brew style / brew audit don't really align to the 'expected flow' when creating a new cask, and require the user to know and do many more manual things that should be automated as part of that flow
maybe a bug or point of refinement in brew install (and thus probably also brew reinstall / related) when app isn't set
the fact that the main suggested way of creating a zap stanza is a 3rd party tool that hasn't been updated in 2 years, and that that would seem to be useful functionality to be included within the project (and if so, could be used to make brew create or similar better again)
no doubt some others bits that I will catch when I parse through it again to update the 'detailed description of the proposed feature' section

@MikeMcQuaid At this stage I honestly have no idea if me investing the time to respond like this is helping or hindering; but I genuinely hope the former. Put in an 'expandable' to reduce 'off topic noise' on the issue thread. To be candid, I'm genuinely super tired of having to invest this level of time/energy and the feeling of having to 'walk on eggshells' around you though; so I really hope this helps get to a point where that feeling isn't there anymore.

Feedback

These niceties were not false; I do genuinely appreciate the work you're doing, including this issue

@MikeMcQuaid Fair enough, I appreciate that.

That said: at this point we are not interested in your thoughts or advice in how this project should be run differently/better.

@MikeMcQuaid At the risk of going further 'off topic' here.. can you be more specific? As that statement sort of generalises to cover majority of potential contributions/improvements/feature suggestions/etc. Which again has a feeling of "don't contribute".

I wrote a back-and-forth on a bunch of your points but I'm not sure that's actually helpful.

@MikeMcQuaid Depending on what it was you wrote, and how willing you are to work to understand why there seems to be so much miscommunication/misunderstanding between us; it may actually be valuable. Often specifics can be more useful than overly generalised 'sweeping' statements (or at least, in tandem with them). Obviously that doesn't need to be here on this thread, you're more than welcome to email it to my commit address/similar as you referred to the other day. (Ref)

This message is veering back into the bad footing we started on, let's avoid that please.

@MikeMcQuaid I would also very much prefer that.

It's completely fair to say "this message makes me feel X". It's not fair to accuse me of being false.

@MikeMcQuaid The focus of my statement (Ref) was less "you are definitely being false", and more "this comes across as" (eg. my perception/feelings, based on how it was phrased). I linked to the 'praise sandwich' page as context to define how I was using the term, and also because it speaks to some of the issues that can arise in how it can be perceived when things are phrased as [POSITIVE][NEGATIVE][POSITIVE] (regardless of the intent of the author):

In spite of the speaker's intention, it can be rejected if the criticized person detects that the praises were insincere and just a vehicle for the criticism or if the person prefers straightforward communication.

Given this is not the first time I've tried to give feedback gently and not had a good response

@MikeMcQuaid (I don't really know how to speak to this without risking you perceiving it as me trying to 'veer back into bad footing'/similar; but it feels important to do so. It feels like you can be quick to jump to defining something as "not a good response" and similar, even when the basis of that conclusion may be based in misunderstanding/miscommunication and perception derived from that, rather than intent/objective truth. One of the biggest causes of friction in our interactions has seemed to be based on/rooted in this. I was genuinely impressed with how you responded (Ref) to some earlier feedback (Ref), and I thought it boded well; but then telling me not to create issues/contribute above (Ref) basically jumped straight back into the original frictions.)

I think you have two choices at this point:

When we ask you to adjust your approach to contribution: feel free to communicate hurt feelings and ask for clarification if it's unclear but do not argue, suggest to us how the project should be run differently or e.g. quote back documents at me that I wrote myself. For better or worse: we decide how Homebrew is run, not you. When you've got a lot of PRs merged under your belt: your views on how this project can be better run may be taken more seriously.

I genuinely feel like a lot of the points you make here are more rooted in 'misunderstanding/miscommunication and perception derived from that' (as mentioned above).
You say it's ok to communicate hurt feelings and ask for clarification; but then when I do that (sometimes, not always), you seem to deem it as arguing/suggesting how to run the project/etc.
I don't know how you interpreted it (aside from seemingly 'poorly' based on your above comments), but my intent in referring to those documents and the sections within them was because, from my perception, based on what you said above, they seemed relevant to the current situation. You said "It's just becoming a little hard to keep up with it all"; which is why I was trying to say that just because I've opened an issue doesn't mean I need it to be responded to instantly/etc. (Ref)
I then communicated (Ref)how being told not to open issues/contribute comes across; and asked that if what you are saying there is a project rule, that it be documented in the appropriate locations so that it is visible to people ahead of time; which would avoid us having to have these back and forths.
Finally, I communicated (Ref) my perception/experience/feelings of how the things you were telling me to do seem at odds with some of the things specifically outlined in the code of conduct. If the code of conduct is wrong/outdated/etc and this is 'how things are', again, that's fine; but please actually update it to say so. Or alternatively, if that's not how it is, then (again, at the risk of you misinterpreting me here again), please reflect on whether you truly feel that is in alignment with the parts I referred to.  I am literally only communicating my individual experience of it.
I think if there was one single thing that would remove a majority of the misinterpretations/miscommunications/friction between us, it would be to look at any interaction we have through a lens of me sharing my individual experience, and that any suggestion/otherwise made is done so not because I am "telling you how to run your project", but purely in a "here's an idea; take it or leave it" way.

Decide that you don't want to work on Homebrew the way we want to work and move on from contributing to the project.
I would be sad to see 2) be the case but: if it's the best thing for you and your situation I will completely understand.

This remains to be seen.
After our original friction, I was pretty done with it; though unfortunately homebrew is so widespread that I couldn't really avoid it even if I tried. After your response (Ref) to my feedback (Ref) the other day, I was really impressed, and had a positive outlook to it. After your comments here telling me to stop contributing (Ref), it flipped that back to a "not sure that I want to" again (to the point that my initial feeling was to close all of my open issues/PRs, delete the branches, and write off the time/energy cost I'd put into it).
I suspect it will really depend on how you react to this feedback.

I think we can get to a better way of working but it needs to have you accept that you're right now this back-and-forth is more damaging to the project than it is helpful.

I don't want this back and forth, and I'm not asking for this back and forth. It's actively detrimental to me as well, and my time/energy/motivation that I would much rather spend on doing actually meaningful things rather than trying to explain how what I have written has seemingly been misinterpreted, and then that misinterpretation seemingly reacted to as though it was the objective truth. At the risk of this being taken the wrong way again, I genuinely ask you to reflect on what I said above RE: 'misunderstanding/miscommunication and perception derived from that'

RE: https://github.com/Homebrew/brew/pull/16327#issuecomment-1858045498
(Replying to this here as I want to batch it all together and get it out of the way; but also because it's somewhat relevant to some of the things I say above as well)

Just to be very explicit about where we are at: I appreciate this PR here but I am definitely having to spend too much time/energy right now trying to convince you to argue less, give me less life/open source maintenance advice and seek clarification without needing to critique my communication many of the times.

@MikeMcQuaid I won't reply to this in detail as I have already explained the points above (both about me also being tired of having to spend this time/energy; and also the 'misunderstanding/miscommunication and perception derived from that' stuff) and I am once again concerned that you're going to take this the wrong way; but it feels important to say.
It's hard for me to say for sure without more specific examples, but I feel like your comments here about 'argue', 'life/open source maintenance advice', and 'critique communication' may largely be based in 'misunderstanding/miscommunication and perception derived from that'; and that perhaps the conclusions/assumptions you are drawing aren't the objective truth, and they may not represent my intent either.
What you deemed as me 'veering back into the bad footing' in our original engagement (Ref) was me attempting to highlight the areas of seemed misinterpretation/miscommunication, so that we could rectify it. Which (at the risk of you getting annoyed at me for 'giving life advice') is an important part of communicating effectively, and allows each person to update their 'mental models' in a way that they can interpret things better, rather than drawing potentially incorrect conclusions about it.

@0xdevalias To avoid further back-and-forth: I'm going to answer specific questions, provide one additional comment and we can leave it at that.

That said: at this point we are not interested in your thoughts or advice in how this project should be run differently/better.

@MikeMcQuaid At the risk of going further 'off topic' here.. can you be more specific? As that statement sort of generalises to cover majority of potential contributions/improvements/feature suggestions/etc. Which again has a feeling of "don't contribute".

To be as specific as I can:

wanted: PRs like https://github.com/Homebrew/brew/pull/16327 to improve documentation
unwanted: any comments like "Embrace async, and remember to slow down", opening any more issues, reviewing PRs you didn't create

Specifically on 'life advice', I assume you're referring to what I said in this comment? (Ref) Which if so; might be worth knowing that the intent of sharing that was less 'life advice' and more "I really hope that this will genuinely help avoid having to have these interactions again, as from my perspective, it appears to be one of the root causes of them".

Yes, that (e.g. "knowing when to just walk away from the keyboard/take a breath when things feel too stressful/emotions feel high") among other similar sentiments in many of your comments.

After our original friction (Ref), I was pretty done with it; though unfortunately homebrew is so widespread that I couldn't really avoid it even if I tried. After your response (Ref) to my feedback (Ref) the other day, I was really impressed, and had a positive outlook to it. After your comments here telling me to stop contributing (Ref), it flipped that back to a "not sure that I want to" again (to the point that my initial feeling was to close all of my open issues/PRs, delete the branches, and write off the time/energy cost I'd put into it).
...
I don't want this back and forth, and I'm not asking for this back and forth. It's actively detrimental to me as well, and my time/energy/motivation that I would much rather spend on doing actually meaningful things rather than trying to explain how what I have written has seemingly been misinterpreted, and then that misinterpretation seemingly reacted to as though it was the objective truth. At the risk of this being taken the wrong way again, I genuinely ask you to reflect on what I said above RE: 'misunderstanding/miscommunication and perception derived from that'

As you have stated that:

you are super tired
you were done with Homebrew but feel unable to avoid it
you felt that it was worth closing all open issues/PRs but changed your mind
you don't want this back and forth
it's actively determintal to you

it does not seem these continued interactions are beneficial for you.
Similarly as I have tried to repeatedly communicate that I'd like to see a behaviour and interaction changes from you and we've been unable to get them (quite possibly due to my poor communication or another failing on my side): the only outcome I see here that benefits both you and Homebrew is a temporary block. I hope that we can all take some time and future interactions, post-block, will be more positive.
I regret that it has got to this point and that we were not able to get to a better outcome. The fault there is at least in part mine.
Take care of yourself, genuinely, and I hope this helps. Sorry ❤

@0xdevalias Additional information has been raised with me privately that show that some problematic behaviour has continued after you have been blocked. As a result, the block is now permanent. Again, take care of yourself and: sorry ❤


chore(4.5): release 1.8.36

:robot: I have created a release beep boop
1.8.36 (2024-07-19)
Bug Fixes

update image tag of upgrade job (#646) (644a7ad)

This PR was generated with Release Please. See documentation.

:robot: Created releases:

v1.8.36
:sunflower:


Constant Folding

Any plans to allow for constant folding or the definition of other types of analyses from Python?
Happy to contribute, but for a full PR think I would need some guidance.

I've done some constant folding with snake egg on my branch here.
When creating the egraph on the python side you can hand it an eval function.
This eval function takes in an operator and a argument list then returns a value if constant folding can occur, and None if it cannot.
My project using this has the snake_egg related files in here.
I can make a PR, but it may take a bit.

Very cool, just what I was looking for.
Shall I close this?

Let's keep it open until we merge Ian's solution

Closed by #3.


Refactor WriteSingleClusterData and all dependent functions to take ConcreteAttributePath instead of ClusterInfo

as the input argument.

https://github.com/project-chip/connectedhomeip/blob/f0f5de0d79ae1c51d7fddbf70900ebac0acd899a/src/app/util/ember-compatibility-functions.cpp#L812-L817

This issue was generated by todo-issue based on a TODO comment in f0f5de0d79ae1c51d7fddbf70900ebac0acd899a.

WriteSingleClusterData takes ConcreteDataAttributePath now.


Minor bugs in Code and Display changes

->In the dashboard, we're seeing Welcome + user_email which shouldn't be the case, instead display the user_name.
->In the Database, previous teams are storing the user's email in the tasks table as a foreign key, which shouldn't be the case. Instead we need to store the user_id as the foreign key which can be accessed in the other parts of the code.
->There are a lot of email references in the code which needs to be replaced with the user_id.
->There's  a temp field in the database which isn't used anywhere in the code which needs to be removed.

As shown above, now I've updated the email with user_id foreign key which makes sense.
Now, below image also shows that I've added tasksList field which actually contains all the taskIds of that particular user. This makes it easy when we're trying to access the tasks specific to that user in code.


Portis Not working for signup on mobile

On Mobile - try signing up for a new account on Portis after submitting it takes user right back to the portis signup screen (no act gets created)

@chwy tested on iPhone + safari and it worked fine.
What device/browser are you having issues with?

Joey and tom on iphone safari and I am on chrome on Galaxy s10

@andrewdamelio -- Do you have cookie / popup blocking already excluded for the v2.augur.net domain by chance? Worth checking --- @bthaile is on iOS 13.4.1 in safari and is getting a login loop when attempting to login with Portis.

I do not!

@Chwy5 @pgebheim I updated to 13.4.1 and don't see the issue.
@bthaile do you remember, are you clicking Allow or Disallow for email display on Portis signup?

@Chwy5 @pgebheim @bthaile
Ok i think figured out whats going on here.
It seems like the second Portis modal (Allow/Disallow) gets blocked by the market list loading - it waits until Syncing Complete - SDK Ready
So if you create a Portis account and syncing is still happening after you finish you will get stuck here until Sync is finished.

Once Sync is complete, you should see the next steps

Since on mobile safari syncing sometimes takes forever this issue appears more so there than on desktop.
In terms of a fix, i'm not sure what the right UX is, especially with the limitation of he Portis iframe not being under our control.
Easy fix could be to disable (only) the signup button, until Augur is fully loaded to avoid getting the permissions window blocked.

Is there a reason we need to await for syncing to complete to continue?

@pgebheim FYI i took a look at this yesterday, looks like we don't have the issue with Fortmatic/Torus so it isn't related to what i was thinking above..
Going to look into the Portis flow today to see if what could be block / waiting on SDK there.

@andrewdamelio Status on this?

ready to be tested again -- working for me now after some of the onboarding fixes

Working for me. Closing


Error to start de server closed when charge luckperm

https://pastebin.com/7MMZ0htN
need help plz

Are you using SportSpigot?

This has been fixed already afaik (13ebc87b29db80b097dbe3ca785811db4666c7e7) - please update LP.

https://luckperms.net/download


Nproblem

Here:

We solved the N+1 problem when fetching
We used Capybara to write integration tests for each view in our project.
User index page:
I can see the username of all other users.
I can see the profile picture for each user.
I can see the number of posts each user has written.
When I click on a user, I am redirected to that user's show page.
user show page:
I can see the user's profile picture.
I can see the user's username.
I can see the number of posts the user has written.
I can see the user's bio.
I can see the user's first 3 posts.
I can see a button that lets me view all of a user's posts.
When I click a user's post, it redirects me to that post's show page.
When I click to see all posts, it redirects me to the user's post's index page.
User post index page:
I can see the user's profile picture.
I can see the user's username.
I can see the number of posts the user has written.
I can see a post's title.
I can see some of the post's body.
I can see the first comments on a post.
I can see how many comments a post has.
I can see how many likes a post has.
I can see a section for pagination if there are more posts than fit on the view.
When I click on a post, it redirects me to that post's show page.
User post index page:
I can see the user's profile picture.
I can see the user's username.
I can see the number of posts the user has written.
I can see a post's title.
I can see some of the post's body.
I can see the first comments on a post.
I can see how many comments a post has.
I can see how many likes a post has.
I can see a section for pagination if there are more posts than fit on the view.
When I click on a post, it redirects me to that post's show page.
here you can see the log before and after solving n+1 problem:

Hi team,
My name is Nicolae Pop, and I am a Senior Code Reviewer at Microverse.
Please note that for this milestone, the requirement was to work in pair-programming on the repositories of all team members and submit the PR for review individually, using your own repository.
Please always check the Work and Submission Mode section in the project requirements.

@Grandi0z and @najibullahjafari, the approvals from your dashboard for this milestone will be reverted. Please work as a team to complete this milestone in your repositories too, and when ready, please ask again for a review using a PR from your own repository.
Good Luck!:four_leaf_clover:


[FLINK-16812][jdbc] support array types in PostgresRowConverter

What is the purpose of the change
commit 1: fix bug that StringUtils.arrayToString() should consider Object[] lastly, otherwise it will take byte[][] as Object[] and produce wrong string
commit 2: support array types in PostgresRowConverter
Brief change log
Verifying this change
with UTs added
Does this pull request potentially affect one of the following parts:

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

Documentation

Does this pull request introduce a new feature? (yes)
If yes, how is the feature documented? (docs)

docs will added later

@wuchong @huafengw pls take a look

@wuchong addressed comments. pls take another look