feat(gzip-compression): first version

Can be enabled with --gzip-compression flag (disabled by default)
Only compresses text-based responses (JSON, SVG+XML, CSS, HTML, Javascript)
Only compresses content >= 1400 bytes (gziphandler library default)
Uses default gzip compression level (6)

Note: due to the gzip compression itself, which is done on-the-fly, there is an extra latency when serving large content. However this latency is compensated by the smaller size of the content to actually transfer. The benefit of gzip compression is specially noticeable on slow networks (see below).
Fixes #3638

Benchmarks
The following illustrates the transferred content size and time taken with and without gzip compression enabled.
# plain content, SVG data
$ curl -s http://localhost:9999/0cb5a5c0d251c109458c85c6afeffbaa.svg | wc -c
715890
real    0m0.015s

# gzip compression, SVG data
$ curl -s -H "Accept-Encoding: gzip" http://localhost:9999/0cb5a5c0d251c109458c85c6afeffbaa.svg | wc -c
239694
real    0m0.095s

# plain content, JavaScript data (main code)
$ curl -s http://localhost:9999/main.7b942c935272cd8dcf21.js | wc -c
2953957
real    0m0.017s

# gzip compression, JavaScript data (main code)
$ curl -s -H "Accept-Encoding: gzip" http://localhost:9999/main.7b942c935272cd8dcf21.js | wc -c
379262
real    0m0.096s

# plain content, JavaScript data (vendor code)
$ curl -s http://localhost:9999/vendor.7b942c935272cd8dcf21.js | wc -c
6632330
real    0m0.022s

# gzip compression, JavaScript data (vendor code)
$ curl -s -H "Accept-Encoding: gzip" http://localhost:9999/vendor.7b942c935272cd8dcf21.js | wc -c
1371396
real    0m0.323s

# plain content, CSS data (main code)
$ curl -s http://localhost:9999/main.7b942c935272cd8dcf21.css | wc -c
23304
real    0m0.013s

# gzip compression, CSS data (main code)
$ curl -s -H "Accept-Encoding: gzip" http://localhost:9999/main.7b942c935272cd8dcf21.css | wc -c
4684
real    0m0.014s

On slow networks (for example via VPN links), despite the added latency of gzip compression, the loading times are significantly reduced when using gzip compression. Note how the biggest content (vendor JavaScript bundle) gets significantly reduced.
Plain content (~ 12 secs total time)

Gzip compression (~5 secs total time)

I just realised that during my testing using yarn build the assets don't get minified but in production they do. This means that the provided benchmark does not apply for production artifacts that are already compressed.

I benchmarked again with minified assets and gzip compression is still beneficial :)
# plain content, JavaScript data (vendor code)
$ curl -s http://localhost:9999/vendor.b9a69c1f6b66dbf34d09.js | wc -c
1839354
real    0m0.015s

# gzip compression, JavaScript data (vendor code)
$ curl -s -H "Accept-Encoding: gzip" http://localhost:9999/vendor.b9a69c1f6b66dbf34d09.js | wc -c
539318
real    0m0.106s

The good news is that the minified content has much less latency than non-minified and the compression is still good (~29%).

Implementation is looking good, I like it.
I'm not sure if there is an interest in providing this via a flag, IMO we should decide that it's either gonna be beneficial for most or all of our userbase and enable the feature directly. Or maybe to default to gzip enabled with a way to disable it.
I think we'll need to do some testing here and we'll need to deploy it in multiple environments to see if it make any difference. On one side the loading time from 4.5sec to 1.5sec sounds great, on the other side the vendor code loading time going from 0m0.015s to 0m0.106s kinda worries me (~ 7x the original time).
I'm also curious about existing deployments that are using a reverse proxy setup + gzip enabled on the reverse proxy layer, what will happen here?

Implementation is looking good, I like it.

Thanks, I'm very new to GoLang so I appreciate the comment :)

I'm not sure if there is an interest in providing this via a flag, IMO we should decide that it's either gonna be beneficial for most or all of our userbase and enable the feature directly. Or maybe to default to gzip enabled with a way to disable it.

Gzip compression is usually a trade-off between network speed and compression speed. Not every network/server-machine combination is the same and thus enabling it or not depends on each user's conditions and preference. This is the reason for almost every web server that I know (many from this list) to implement gzip compression as an opt-in instead of opt-out. I would strongly advise on following the same practice in Portainer.

I think we'll need to do some testing here and we'll need to deploy it in multiple environments to see if it make any difference.

Yes! Definitively! My local testing only represents one case and if you have the machinery to test in multiple environments that's much better. I don't expect gzip compression to help in every case because of the mentioned trade-off.

On one side the loading time from 4.5sec to 1.5sec sounds great, on the other side the vendor code loading time going from 0m0.015s to 0m0.106s kinda worries me (~ 7x the original time).

Yes, again, the trade-off between network speed vs compression speed. In general slower networks + strong CPUs will show much better performance because despite taking more time for compressing, the total time compression + transmission is still less than original transmission as shown before. In my case due to the current world-wide situation I'm forced to work much more using my company's VPN in which gzip compression makes a significant difference.
If really interested on better performance, there is another option to consider as well: compress the assets on disk with gzip and serve them in this format directlly, thus avoiding re-compression over and over of the same static content. This eliminates the compression latency of big assets such as the vendor javascript/CSS.

I'm also curious about existing deployments that are using a reverse proxy setup + gzip enabled on the reverse proxy layer, what will happen here?

In deployments where there is a proxy in front of Portainer doing gzip compression and even SSL termination, then gzip compression in Portainer itself shoud not be used. Like with SSL, gzip compression should be moved entirely to the reverse proxy. This is another reason to have a flag for gzip compression and default it to false.
The main reason for me to implement this feature in Portainer is precisely to cater for these deployments that do not use reverse proxies in front of Portainer. In this case, and similar to the built-in SSL options, gzip compression comes handy and is very simple to enable.

Take your time to test and check this PR more carefully as you need. There is no rush! Any questions/suggestions are very welcome too.

what will happen here?

I realised that I did not answer the question directly. What happens here depends on the reverse proxy. Some might decompress the content from Portainer and re-compress again (dumber proxies), others might be smarter and pass-through the already compressed data.

If really interested on better performance, there is another option to consider as well: compress the assets on disk with gzip and serve them in this format directlly, thus avoiding re-compression over and over of the same static content. This eliminates the compression latency of big assets such as the vendor javascript/CSS.

I just found out a Go module that implements that suggestion: https://github.com/lpar/gzipped
It is a drop-in replacement for the FileServer handler and plays nicely with gziphandler so we get the best of both worlds: pass-trough compressed files (i.e. static assets) or on-the-fly compressed data (i.e. dynamic JSON responses).
The only caveat is that it doesn't support directory indexes so I'll check if Portainer requires it. I will experiment with it a bit and let you know if it's worth it 👍.

Nice, keep us posted !

First prototype testing shows (as expected) good results.
In this benchmark, files are pre-compressed on disk (this can be done during deployment in Yarn/Grunt):
-rw-r--r--. 1 root root 2953957 May 12 09:46 main.7b942c935272cd8dcf21.js
-rw-r--r--. 1 root root  373981 May 12 09:46 main.7b942c935272cd8dcf21.js.gz
-rw-r--r--. 1 root root 6632330 May 12 09:46 vendor.7b942c935272cd8dcf21.js
-rw-r--r--. 1 root root 1356687 May 12 09:46 vendor.7b942c935272cd8dcf21.js.gz

I'm using the assets without minification here but as shown before after minification there is still further compression gain anyway.
Then Portainer picks the correct available file according to requested compression without having to repeatedly compress on-the-fly the static assets:
# plain content, vendor code (Javascript)
$ time curl -s http://localhost:9999/vendor.7b942c935272cd8dcf21.js | wc -c
6632330
real    0m0.023s

# gzip compressed, vendor code (Javascript)
$ time curl -s -H "Accept-Encoding: gzip" http://localhost:9999/vendor.7b942c935272cd8dcf21.js | wc -c
1356687
real    0m0.015s

# plain content, main code (Javascript)
$ time curl -s http://localhost:9999/main.7b942c935272cd8dcf21.js | wc -c
2953957
real    0m0.016s

# gzip compressed, main code (Javascript)
$ time curl -s -H "Accept-Encoding: gzip" http://localhost:9999/main.7b942c935272cd8dcf21.js | wc -c
373981
real    0m0.014s

Because the only difference between these two is now only transmission time (no compression time for static assets), the compressed request is now always better than the uncompressed version.
I will polish the implementation and send another commit to this PR with this.

Just a heads-up, I submitted a PR yesterday to upstream lpar/gzipped to fix a minor compliance issue so it integrates nicely with Portainer. As soon as it is merged I will update this PR with the new funcionality for on-disk compressed assets so you can take a look.

@hhromic no rush, it is not planned to have a look and potentially integrate this feature before 2.0 (which is planned for release end of June).

Sure! No rush from my side either, I def want to implement this feature correctly and well-tested.
Thanks for giving it a chance in the first place 👍

@deviantony @itsconquest
I fully finished a revised first version of this feature now. I edited the original PR description.
In summary, I implemented:

On-the-fly HTTP compression (disabled by default, enable with --compresion)
Pre-compressed asset files serving (always enabled, due to almost no CPU cost)
Automatic compression of static asset files in Webpack during client building

The automatic asset files compression does not replace uncompressed files, but instead places pre-compressed files alongside the uncompressed ones for maximum compatibility. For example:
main.d0d9ade597a8341b903f.css
main.d0d9ade597a8341b903f.css.gz
main.d0d9ade597a8341b903f.js
main.d0d9ade597a8341b903f.js.gz
vendor.d0d9ade597a8341b903f.js
vendor.d0d9ade597a8341b903f.js.gz
vendor.vendor.css
vendor.vendor.css.gz

The on-the-fly HTTP compression is mostly useful for large dynamic JSON responses from Portainer.
This PR is now ready for you to test and review. I'll be looking forward for your comments and feedback. In my local tests the feature is working really nice with reduced content transfers.
As said before, no rush from my side! Hope you find this a nice feature.

Great job @hhromic ! I'll add this to our review pipe for 2.0

Hope you find this a nice feature
Solid PR, I look forward to reviewing this

Great job for the PR @hhromic, much appreciated! Before merging the PR, can you please resolve the conflicts and add a boolean parameter for the file handle to honor the cli "compression" flag? Thank you.

Hi @yi-portainer, thanks for your feedback. I will try to come back to this at my earliest.
I used to have my own Portainer "dev" container to develop for Portainer but I lost it. I saw there is an official dev workflow from you guys based on Docker now? Could you point me to any new information? Thanks!

Hi @yi-portainer, thanks for your feedback. I will try to come back to this at my earliest.
I used to have my own Portainer "dev" container to develop for Portainer but I lost it. I saw there is an official dev workflow from you guys based on Docker now? Could you point me to any new information? Thanks!

We had some very good initiatives in this PR, if a containerized dev environment is what you are looking for? Do note that it is still in experiment and not yet ready for day to day consumption (hence not officially documented yet), so please be careful when playing with it.


KeyError: 'o_0' in baselin.py

got a Keyerror when using the baseline algorithm
File c:\Users\g7morsj22l\Documents\02_Code_Repos\3d-bpp\src\baseline.py:174, in baseline(superitems_pool, pallet_dims, tlim, num_workers)
    172 layer_pool = layers.LayerPool(superitems_pool, pallet_dims)
    173 for l in range(max_layers):
--> 174     if sol[f"o_{l}"] > 0:
    175         superitems_in_layer = [s for s in range(n_superitems) if sol[f"z_{s}_{l}"] == 1]
    176         layer = utils.build_layer_from_model_output(
    177             superitems_pool, superitems_in_layer, sol, pallet_dims

Hi there,
Could you provide more information as to how to reproduce the error, the full exception traceback and your local environment?
Thanks,
Alessio.

I also encountered this problem, which should be related to the parameters of the CpSolver parameters. The 20-second time might be too short. When I set 'tlim' to None, the program ran for more than 40 minutes without producing any results. However, after commenting out lines 130,131, 132 in baseline.py, I reran the program, and it completed in 2 minutes and produced the results.

Interesting, thanks for sharing your solution.


Celestia Kurtosis Package

### Tasks
- [x] Confirm GM tutorial with celestia light node
- [x] Confirm GM tutorial with celestia light node in docker
- [ ] Confirm GM tutorial with celestia light node kurtosis package

Update
Currently dealing with an issue connecting to a celestia node in docker. I've been testing running the celestia light node in docker and running the GM tutorial against it to validate that all the commands work prior to moving to kurtosis.
However I keep getting connection refused messages.
error while initializing BlockManager: RPC client error: sendRequest failed: Post "http://localhost:26658": read tcp <IP_ADDRESS>:49362-><IP_ADDRESS>:26658: read: connection reset by peer
Error intercepting command:  failed to run entrypoint: exit status 1

The docker run command in the celestia docs doesn't publish any ports, so I've tested add -p 7980:7980 and -p 26658:26658 but with no impact.

some other data points.
when running the light node directly you can curl the port and get the following
% curl http://<IP_ADDRESS>:26658/
{"error":{"code":-32600,"message":"Invalid request"},"id":null,"jsonrpc":"2.0"}

when running the light node in docker and do the same curl command you get the following:
% curl http://<IP_ADDRESS>:26658/
curl: (56) Recv failure: Connection reset by peer

Adding 26658 to the exposed ports in the dockerfile and adding -p 26658:26658 to the docker command changes the error to
error while initializing BlockManager: RPC client error: sendRequest failed: Post "http://<IP_ADDRESS>:26658/": EOF

just adding the -p flag to the docker run command has the same result.

Updated docker command to get GM working
docker run -p 26658:26658 -e NODE_TYPE=$NODE_TYPE -e P2P_NETWORK=$NETWORK \
	-v /Users/matt/.docker_data/celestia-light-arabica:/home/celestia \
    ghcr.io/celestiaorg/celestia-node:v0.18.1-arabica \
    celestia $NODE_TYPE start --core.ip $RPC_URL --p2p.network $NETWORK

Ports
-p 26658:26658

Only 2121 is exposed by default in the celestia node docker file. As such we need to use the -p flag to expose the ports on run time.
This resolved the first error:
error while initializing BlockManager: RPC client error: sendRequest failed: Post "http://localhost:26658": read tcp <IP_ADDRESS>:49362-><IP_ADDRESS>:26658: read: connection reset by peer

Node Config
The next error was this:
error while initializing BlockManager: RPC client error: sendRequest failed: Post "http://<IP_ADDRESS>:26658/": EOF

And you could see it with curl as well. see example above
For this the celestia da node config needed to be updated for the url being used for the RPC. This was 2 part.
First we needed to persist the data itself in order to access the node config:
-v /Users/matt/.docker_data/celestia-light-arabica:/home/celestia

In this /Users/matt/.docker_data/celestia-light-arabica is the folder I created on my local machine to store the data and /home/celestia is the folder in the docker container where node data is stored.
After doing this, the config.toml file for the node needs to be modified from this:
[RPC]
  Address = "localhost"
  Port = "26658"
  SkipAuth = false

to this:
[RPC]
  Address = "<IP_ADDRESS>"
  Port = "26658"
  SkipAuth = false

This is because the docker networking is mapping to <IP_ADDRESS> which localhost will not auto forward to in this situation.

Next steps for getting it working in kurtosis.

[ ] Dynamically set Auth Token
[ ] Dynamically set DA height
[ ] Dynamically update the RPC address in the node config file

Updated docker command
docker run -p 26658:26658 -e NODE_TYPE=$NODE_TYPE -e P2P_NETWORK=$NETWORK \
    --rm --name celestia-$NODE_TYPE-$NETWORK \
    -v /Users/matt/.docker_data/celestia-light-arabica:/home/celestia \
    ghcr.io/celestiaorg/celestia-node:v0.18.1-arabica \
    celestia $NODE_TYPE start --core.ip $RPC_URL --p2p.network $NETWORK

need to initialize the cel_key and fund the address of the light node

Current long term blocker is how to persist data with the kurtosis packages.
Shouldn't be a blocker for the tutorials as starting the node and rolling fresh each time isn't too big a deal.

Closing due to issue with persisted data on kurtosis.


SR-7266: Avoid nesting of ReversedCollection

Applying reversed() two times should return original collection.

First round of fixes for the SR-7266, to avoid nesting multiple ReversedCollections and instead return the original collection with two consecutive .reversed() functions.
Does not yet fix the .lazy use case.

Resolves SR-7266.

Hi there, I started looking at this bug last weekend with a solution to the lazy scenario, which you can find at this gist: https://gist.github.com/danielctull/ec521f3fc2aadabb17d38f716e55c5f7
It seems tricky to constrain LazyCollectionProtocol in a way to overload a version of the reversed() function when the lazy's base is itself a ReversedCollection. I've been meaning to raise this as a PR, to see whether the additional protocol would justified for use only in this scenario.

Hi, yes, I also ended up with having to create ReversedCollectionProtocol for the lazy case. It's now updated to the PR.

As a side question to the reviewers, is there a reason why these internal variables are public?
LazySequence.swift:  public var _base: Base
Reverse.swift:             public let _base: Base

As @moiseev said, I have a branch which adds tests and availability attributes which you can see in this comparison of master:SR-7266.

My first starterbug so please bear with me :)
@moiseev:

I amended the comments to align with @danielctull
added availability and inline
added the testcase for non-lazy variant from @danielctull
I don't know if you meant this, but the PR now only contains the non-lazy case, which means it does not add or use the new ReversedCollectionProtocol at all.

Hi @Moximillian! I've sent you a more long winded email but to paraphrase here: Because I'm a little vain and I'd like to be able to have recognition for my work, I split my test commit into the regular and lazy checks and rebased that into your branch. You can see this here: https://github.com/danielctull-forks/swift/commits/SR-7266-avoid-nesting-reversed. It keeps all of you other changes, but allows me to be the committer for the test additions.
You could either reset my branch or cherry-pick my commit dbdd74a8a8fcf6f70cc9810fe81b5efaa18bd57e and force push to your fork to update this PR.

Cool, cheers @Moximillian. I think this line to run the test was lost when I split out the lazy tests earlier, if you want to merge this one in too: 110655befd06952c82f4f28406476da573962d8c
I ran these on the previous branch (before you squashed) and it ran fine! 😁

Cherry-picked the missing line as well

@swift-ci Please test

@swift-ci Please Test Source Compatibility

@swift-ci Please test

@swift-ci Please Test Source Compatibility

For the record. The binary size difference is negligible.


Fix: (elfeed-search-set-filter) Treat empty string as nil

The docstring says that, when the new filter is nil, it will be reset to the default value, but when called interactively, if the user entered an empty filter string, the empty string prevented the default filter from being restored.

It's true that there's no way to pass nil as the argument interactively.
However, an empty string is still a valid filter: "show me everything."
After this change, the empty filter could still be achieved with a
whitespace string (" "), but that's awkward and not obvious. The empty
string and nil are distinct values, even in this context.
 It's a buffer local variable, so its value is discarded with the
buffer. If that's inconvenient, it's trivial for anyone to make their
own binding that actually does call elfeed-search-set-filter with nil.
In fact, it's pretty common to bind specific keys to specific filter
strings (i.e. "a" sets the filter to "@1-month +audio").

Good point, I didn't realize that an empty string means to show everything.
A couple of ideas:

Add a command to reset to default filter.
Make elfeed-search-live-filter reset to the default filter when called with a universal argument.

If you are interested in either of those, I can submit a PR for them.  Otherwise I'll just add a command in my own config.
Thanks.


develop -> master

Commits since 05/27, sorted by commit message prefix
chore(deps): bump pillow from 9.1.0 to 9.1.1 (#647) (dependabot[bot])
chore: add 'hifld' to list of acceptable models for ModelImmutables (Daniel Olsen)
chore: add zenodo_get to list of dependencies (Ben RdO)
chore: bump version to 0.5.4 (Jen Hagg)
chore: remove hifld from list of supported model (#644) (Ben RdO)
chore: update fs-azureblob to support new storage account (#660) (jenhagg)
chore: update remote fs for scenario object (Jen Hagg)
chore: use extra components PyPS-Eur files from zenodo (#655) (Ben RdO)
docs: fix docstring in grid module (Ben RdO)
docs: fix docstring in scenario_grid module (Ben RdO)
docs: fix docstrings (Jen Hagg)
docs: update list of data that can be loaded (Ben RdO)
feat: access model immutables for Europe (Ben RdO)
feat: add HIFLD grid class (Daniel Olsen)
feat: add attributes to AbstractGrid class (Ben RdO)
feat: add division attribute in model immutables (Ben RdO)
feat: add get_profile to MockAnalyze (Ben RdO)
feat: add pypsa-eur grid model (Ben RdO)
feat: add state_abbr mapping (Ben RdO)
feat: augment list of exported methods (#664) (Ben RdO)
feat: create an abstract grid class for model enclosed in CSV files (#627) (Ben RdO)
feat: factor out check_and_format_interconnect and interconnect_to_name (Ben RdO)
feat: factor out check_model (Ben RdO)
feat: factor out plant constants (Ben RdO)
feat: factor out storage constants (Ben RdO)
feat: factor out zone constants (Ben RdO)
feat: update Grid class to enable HIFLD grids (Daniel Olsen)
feat: use factory pattern to instantiate the builder from grid model (#635) (Ben RdO)
feat: use new storage account (Jen Hagg)
fix: add conversion factor for co2 emissions when exporting to pypsa (#653) (Fabian Hofmann)
fix: add missing rename in grid to pypsa exporter (#649) (Ben RdO)
fix: cast Int64Index single element to int (Ben RdO)
fix: correct interconnects in test_helpers (Ben RdO)
fix: correct list of loadzones for Texas as state or interconnect (Ben RdO)
fix: keep delayed evaluation of ssh fs (Jen Hagg)
fix: pass grid instead of grid.dcline (#645) (jenhagg)
fix: replace "energy_price" by "energy_value" in storage template (#663) (BainanXia)
fix: swap ERCOT and Texas in interconnect mapping (Ben RdO)
fix: typo in column name (#651) (jenhagg)
fix: typo while renaming (Jen Hagg)
fix: unindent methods in Analyze class (Ben RdO)
perf: pass minimal multifs based on the context (Jen Hagg)
refactor: change access to storage and plant constants (Ben RdO)
refactor: enable european grid model in check functions (Ben RdO)
refactor: move function and read all CSV files in the CSVReader object (Ben RdO)
refactor: move grid model and model immutables setting in their respective model (Ben RdO)
refactor: move tests (Ben RdO)
refactor: move/rename logic used to build  grid from REISE output (Ben RdO)
refactor: move/rename logic used to build grid from CSV files (Ben RdO)
refactor: move/rename logic used to export to engines (Ben RdO)
refactor: remove dependency on ModelImmutables object in create state (Ben RdO)
refactor: remove function used to add columns to data frames (Ben RdO)
refactor: simplify constructor parameters (Jen Hagg)
refactor: use get to access values in dictionary (Ben RdO)
refactor: use powerset function (Ben RdO)
test: add tests for area_to_loadzone (Ben RdO)
test: add tests for check functions (Ben RdO)
test: add tests for interconnect_to_name (Ben RdO)
test: ensure get_profile is correctly implemented (Ben RdO)

Do we want to follow the same template we use for v0.5.3?

Do we want to follow the same template we use for v0.5.3?

This process is a bit awkward.. I think we have to generate the release notes based on master branch, which would require merging this first. For 0.5.3 I probably edited the PR description retroactively.


Release v1.2.0

@cirulls
I think we're getting close to releasing v1.2.0 because

The outstanding pull requests #321 or later will not interest the end users so much until we reach #345.
#475 by @galtm will surely benefit many users, but we need some time to finish it.

Can you review the project board?

As for the release note, we may want to mention or highlight

New features: To try out the new Ant build support (for XQuery, code coverage and JUnit) on oXygen, Wiki would help.
Bug fixes: #59 has been fixed
Tests: Now we have more than 100 tests running on CI.

@cirulls
Added these missing items to the relnote draft:

New features: #283
Bug fixes: #319
Tests: #320
Documentation: #508

@cirulls
Do you have ETA?
Since we don't employ any branching model, master is stopped until we make a go/no-go decision.

Sorry for the delay, I was away for a week and I'm catching up. I will work on this during the weekend and make the release on Sunday, I hope it's fine.

Glad you come back! Sunday is fine. These two weeks may be considered as a good code-freeze period.

@AirQuick : I updated the draft release notes for v1.2.0. Please have a look and, if necessary, make changes. I plan to push the publish release button on Sunday if everything is fine with you.
After the release, I usually do the following to promote it:

post a message on the XSpec mailing list
promote the new release on xml.com
post a message on the xml mailing list
ask @yamahito and @cmarchand to tweet about the new release

The draft looks good to me. Thanks for the streamlined and neat work.

Thanks for checking the text, I just released v1.2.0. And thanks for your sterling work!

I posted a message on the XSpec mailing list and sent a news item to xml.com, hopefully it will be published soon. I tried to subscribe to the xml-dev mailing list to post a message but I haven't received a confirmation yet, I'll wait a day. If it doesn't work, can I ask @yamahito to post a message on the xml-dev mailing list?
@yamahito and @cmarchand: I know you are active on social media, would you mind tweeting about the new XSpec release v1.2.0?

I can not see the maven artifact published on maven central.
Did you mvn -Prelease deploy?
If not, I can do it for you, but it has to be included in publication proceedings.
Twit posted.

@cirulls Looks like we need to update our fresh doc :smiley:

@cmarchand: no, I didn't push it to Maven central. I'll follow your instructions on the wiki and will try to do it tonight (GMT), that would be a good way to test the documentation. If I'm stuck I may ask for your help.
And of course, I'll add the procedure to the release workflow.

@cmarchand: I started following your instructions on the wiki and created a JIRA issue on Sonatype: https://issues.sonatype.org/browse/OSSRH-46240  I could log in using the credentials you once gave me for user xspec-io. In the issue I used the Group Id top.marchand, I'm not sure if you want me to use that one (I do have a domain name myself which I control and at some point it will be good to use the xspec.io domain). Please have a look at the issue and let me know if there is anything incorrect. I guess the next step is to wait for Sonatype to provide the URLs of the repositories where to deploy.

@AirQuick : I added a step to deploy to Maven Central in the release workflow: https://github.com/xspec/xspec/wiki/Release-Workflow/_compare/3bb6e8a8e610e391772f3ac495209fed1983bad0...e661d8d0c04c1e6e2dccefc5b66f97d22a8074aa

The sonatype part has already be done. As I own top.marchand, you won't have a positive answer.
io.xspec has been registered for XSpec, I credentials you have should allow you to publish to sonatype.
So, you need the GPG part (publish your certifiacte/key), to configure your ~/.m2/settings.xml, and to type the command mvn -Prelease deploy
That should be enough.

@cmarchand: thanks for letting me know. I'll give it another go tonight and will keep you posted. It's good that I do it to get familiar with the procedure so that at least two people know to publish the maven central.

I think this issue can be closed since it refers to release v1.2.0 and I managed to publish the artifact to Maven Central for the v1.4.0 release.


Broken link on Docs for Testing

https://facebook.github.io/react-native/docs/testing.html#integration-tests-ios-only
The link to "IntegrationTestsApp.js" is broken

@niftylettuce Thanks for reporting it!
Submitted a PR updating all the links under testing. Should be merged soon.


Carousell Buttons with no tags

https://swiss.github.io/styleguide/de/teaser.html#05-teaser-05-carousel

Focus and focus vertical are displayed as carousel on mobile. In this case, labels are missing on the "previous" and "next" buttons

Ok, validated


AttributeError: dlsym(0x7fdd104666a0, EVP_CIPHER_CTX_reset): symbol not found

Checklist

[x] installed pyethapp inside a virtualenv

System/environment

OS: OS X 10.12.6
python version: 2.7.13 (by Homebrew)
pyethapp version: 1.5.0
installation method (pip & pypi/git & setup.py): pip

Build dependencies
automake, libtool, pkg-config, libffi, gmp, openssl installed by Homebrew with default parameters and has latest versions:
$ brew upgrade automake libtool pkg-config libffi gmp openssl
Error: automake 1.15.1 already installed
Error: libtool 2.4.6_1 already installed
Error: pkg-config 0.29.2 already installed
Error: libffi 3.2.1 already installed
Error: gmp 6.1.2 already installed
Error: openssl 1.0.2l already installed

Expected behaviour
Run without failure.
Observed behaviour
Failed to run. Exits with error:
$ pyethapp
Traceback (most recent call last):
  File "/Users/sitin/.virtualenv/crypto/bin/pyethapp", line 7, in <module>
    from pyethapp.app import app
  File "/Users/sitin/.virtualenv/crypto/lib/python2.7/site-packages/pyethapp/app.py", line 15, in <module>
    from devp2p.app import BaseApp
  File "/Users/sitin/.virtualenv/crypto/lib/python2.7/site-packages/devp2p/app.py", line 8, in <module>
    from devp2p import crypto
  File "/Users/sitin/.virtualenv/crypto/lib/python2.7/site-packages/devp2p/crypto.py", line 16, in <module>
    import pyelliptic
  File "/Users/sitin/.virtualenv/crypto/lib/python2.7/site-packages/pyelliptic/__init__.py", line 43, in <module>
    from .openssl import OpenSSL
  File "/Users/sitin/.virtualenv/crypto/lib/python2.7/site-packages/pyelliptic/openssl.py", line 310, in <module>
    OpenSSL = _OpenSSL(libname)
  File "/Users/sitin/.virtualenv/crypto/lib/python2.7/site-packages/pyelliptic/openssl.py", line 144, in __init__
    self.EVP_CIPHER_CTX_reset = self._lib.EVP_CIPHER_CTX_reset
  File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ctypes/__init__.py", line 375, in __getattr__
    func = self.__getitem__(name)
  File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ctypes/__init__.py", line 380, in __getitem__
    func = self._FuncPtr((name_or_ordinal, self))
AttributeError: dlsym(0x7fdd104666a0, EVP_CIPHER_CTX_reset): symbol not found

Steps to reproduce
Install to a clean virtual environment and execute pyethapp.

Encountered the same issue. Tried rolling back pyelliptic version to 1.5.7, which produced the following issue
(https://github.com/ethereum/pyethapp/issues/257)

Me too. Appears to be a duplicate of #249.


s3: Determine object size with HEAD; simple and compatible with S3 clones

HEAD <obj> [go-aws-head] determines the object meta data directly,
including object size.  It is simpler than creating a listing with
a single object.  It is also compatible with s3proxy [s3proxy-repo],
which refused to list individual objects.  The same might be true for
other S3 clones.
Compatibility may become important to implement alternative object
storage backends (see GitHub issue #46).
[go-aws-head] http://docs.aws.amazon.com/sdk-for-go/api/service/s3/S3.html#HeadObject-instance_method
[s3proxy-repo] https://github.com/andrewgaul/s3proxy
Signed-off-by: Steffen Prohaska<EMAIL_ADDRESS>

Merged. Thank you Steffen!


Feature/activate all cluster nodes

Implemented in https://github.com/Cerebellum-Network/cere-ddc-sdk-js/pull/113


New ADC DMA implementation

I'd like to get some feedback on a new DMA driver I have been working on.
This exposes an interface that allows for one shot dma sessions, where a whole block of samples are transferred at once, but the DMA session ends after this block has completed.
The current DMA implementation sets up a continuous DMA transfer, which makes it hard to reason about the soundness of the buffer, since it is possible the DMA controller could be writing to the memory that is accessed by the CPU.
I have left the existing DMA implementation untouched in this branch. I would like some feedback on this approach, to see if the APIs that are exposed seem reasonable.
I have also only updated one example to use this new code, it is in adc_dma.rs. The other dma examples all use the existing interface. These will need to be updated before this branch can merge.

Thanks, @apgoetz, I'll take a look later. Feel free to ping me, if it takes too long.

Closing for inactivity and because #127 provided an alternative fix for #104.
@apgoetz, feel free to re-open (or open a new pull request), if you want to pick this back up.


Add Emscripten port

Suggested changes allow to build sample code with Emscripten toolchain.
Links to prebuilt samples added to README.md.
Prebuilt samples available in gh-pages branch (you can merge it too and change links in README.md to your repo).
Cc: @kripken @sbc100

@danginsburg, what do you think of these suggestions? Is there a chance for a merger?

Looks good to me, please could we merge to enable emscripten support?


General User Experience Issues

Here's a list of problems/issues I had with using the app.

When in full screen, the top toolbar does not go away.
The Volume control resets when you go to the next video.  The app should remember my volume setting and have it there with each new video I open.
The space bar on my keyboard should pause & play the video.  This is a universal with good media players, and is frustrating when it doesn't work.
Films should have "watch trailer" option attached to them instead of having trailers sitting somewhere else, detached from the full film.
The home page loses its place when you go back to it.  If the home page had hundreds of options on it, it would be really annoying to have to scroll all the way down to wherever you were last browsing before you clicked on something.
Currently, when clicking on anything, it checks for availability then says "Content Not Available."  But it's for stuff that should really be available, like big movie trailers and things that make you wonder, "If this isn't available, then what in the world IS available?"  Basically, anything that shows up as the first thing you see on the home page should be available.

System Configuration
daemon (lbrynet)	0.10.3
wallet (lbryum)	2.7.22
interface	0.12.0
Platform	Windows (Windows-7-6.1.7601-SP1)

Thank you for your detailed feedback.  If you are on our slack channel (slack.lbry.io), PM me (@jiggytom) and I'll send some LBC your way.
RE 6, this is something we will be getting rid of soon.

Thanks @BootstrapMusic! As Tom said, 6 is happening. 4 will be some time. But the rest are low-hanging fruit.
@tzarebczan can you split 1, 2 3, and 5 into separate tickets and mark them all as contributor friendly?
Please be more specific about what 1 means as well, that is contrary to my experiencing hitting the full screen button in the player.
I'm going to close this, since this ticket is really multiple separate issues. If you'd like a tip for this contribution, DM me on our Slack as kauffj.

@tzarebczan please close this when it's been split

Will do!

@BootstrapMusic you meant the Edit/Help/Developer toolbar for issue 1 right?

Yes, he also DM'ed me on Slack.
On Wed, Jun 28, 2017 at 4:30 PM, Thomas Zarebczan<EMAIL_ADDRESS>wrote:

@BootstrapMusic https://github.com/bootstrapmusic you meant the
Edit/Help/Developer toolbar for issue 1 right?
—
You are receiving this because you modified the open/close state.
Reply to this email directly, view it on GitHub
https://github.com/lbryio/lbry-app/issues/292#issuecomment-311779712,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAgZVuQzHyOt6cAjwy4HitsiIfkkPn8Rks5sIrfHgaJpZM4OGG7b
.

--
Jeremy Kauffman, Founder, LBRY http://lbry.io/
(267) 210-4292
Build LBRY: get https://lbry.io/get, follow https://twitter.com/lbryio,
like https://facebook.com/lbryio

Yes.  It doesn't go away on full screen.
Thanks
Adam Winter
The Bootstrap Music Co.
206-430-4425
<EMAIL_ADDRESS>www.bootstrapmusic.com
On Wed, Jun 28, 2017 at 1:39 PM, Jeremy Kauffman<EMAIL_ADDRESS>wrote:

Yes, he also DM'ed me on Slack.
On Wed, Jun 28, 2017 at 4:30 PM, Thomas Zarebczan <
<EMAIL_ADDRESS>wrote:

@BootstrapMusic https://github.com/bootstrapmusic you meant the
Edit/Help/Developer toolbar for issue 1 right?
—
You are receiving this because you modified the open/close state.
Reply to this email directly, view it on GitHub
https://github.com/lbryio/lbry-app/issues/292#issuecomment-311779712,
or mute the thread
<https://github.com/notifications/unsubscribe-auth/
AAgZVuQzHyOt6cAjwy4HitsiIfkkPn8Rks5sIrfHgaJpZM4OGG7b>
.

--
Jeremy Kauffman, Founder, LBRY http://lbry.io/
(267) 210-4292
Build LBRY: get https://lbry.io/get, follow <https://twitter.com/lbryio

,
like https://facebook.com/lbryio

—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/lbryio/lbry-app/issues/292#issuecomment-311782645,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AcWDwSXh5jWVZWRmeSbUGnY0XXBRTxgJks5sIroegaJpZM4OGG7b
.

#312 #311  #310 #308  Have been opened. Closing this one. Thanks again @BootstrapMusic


Can't import global stylesheet in _document.js using next-css

[x] I have searched the issues of this repository and believe that this is not a duplicate.

Expected Behavior
Using the new next-css module in dev mode, I'd like to globally import a css stylesheet and figured out the correct place could be _document.js.
import '../css/style.css';
Current Behavior
It looks like importing css works only in components or in pages.
Production is unaffected by this problem as we're using a different strategy: https://github.com/zeit/next-plugins/tree/master/packages/next-css#production-usage
Your Environment

Tech
Version

next
5.0

node
9.5

OS
MacOS

browser
Chrome

Confirmed same issue with next-sass, I've had to place it into pages/**.js

_document is not client rendered. So it won't be included with style-loader. Would work with server rendered styles like in https://github.com/zeit/next-plugins/pull/9 though. But I'm guessing you don't want this 😄

Regarding the original issue, check https://github.com/zeit/next-plugins/tree/master/packages/next-css#without-css-modules

Note: CSS files can not be imported into your _document.js. You can use the _app.js instead or any other page.

Since then we have added _app.js which wraps all pages and renders on both sides.
Regarding your issue, this is a completely different issue and has been fixed in next@canary + @zeit/next-css@canary (or -sass -less -stylus if you're using that) so it will be part of Next 7.

thanks.. so its another bug.

@timneutkens its funny because i upgraded to Canary:

it works on Firefox
crashes on chrome : Unhandled Rejection (TypeError): Cannot read property 'call' of undefined

the page loading is very slow.
Any idea ?


Problem with getIPBasedCountry and isValidVATNumber

Hi,
I try to make use of VatCalculator in Laravel but got this error when running locally:
ErrorException in VatCalculator.php line 136:
file_get_contents(http://ip2c.org/::1): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
when I run:
$countryCode = VatCalculator::getIPBasedCountry();
I think I installed it correctly because this works: VatCalculator::calculate( 10.00, 'PL' );
Also VatCalculator::isValidVATNumber('NL 123456789 B01'); returns nothing.
Thx.

getClientIP() returns ::1, what is $_SERVER[ 'REMOTE_ADDR' ].

Hi,
The problem is that your local server address is <IP_ADDRESS> or localhost, or even ::1.
Since your PHP server is running locally it only knows about your local IP address, which of course can't be resolved to a country.
About the "isValidVATNumber" issue - what ia the response? It can either throw an exception or return true/false.

Thank you for a quick response.
The problem was that I wanted to echo the result and when vat was invalid it echoed nothing. It works correctly with if.
Thanks. And excuse me for bothering. :)

No problem :)


Breadcrumb & header compliance fixes

This PR addresses required fixes to get breadcrumbs and navigation to basic compliance with site findability standards. For more information please see https://review.learn.microsoft.com/en-us/help/platform/navigation-overview?branch=main. Thank you!

@snoviking I believe this repo is owned by members of your team. Can you please review and merge this or help me find someone who can? Thanks!

@tfosmark Could you review and merge this?


Improve go dependency update management

Virtually not limit dependabot PR count
Do not track go.work.sum

Don't mind me, testing around with prow


Update aws-java-sdk-kinesis, ... to 1.11.778

Updates

com.amazonaws:aws-java-sdk-kinesis
com.amazonaws:aws-java-sdk-s3
com.amazonaws:aws-java-sdk-sqs

from 1.11.772 to 1.11.778.
I'll automatically update this PR to resolve conflicts as long as you don't change it yourself.
If you'd like to skip this version, you can just close this PR. If you have any feedback, just mention me in the comments below.
Configure Scala Steward for your repository with a .scala-steward.conf file.
Have a fantastic day writing Scala!

Ignore future updates
Add this to your .scala-steward.conf file to ignore future updates of this dependency:
updates.ignore = [ { groupId = "com.amazonaws" } ]

labels: library-update, semver-patch

Codecov Report

Merging #302 into master will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##           master     #302   +/-   ##
=======================================
  Coverage   46.76%   46.76%
=======================================
  Files          24       24
  Lines         278      278
=======================================
  Hits          130      130
  Misses        148      148

Continue to review full report at Codecov.

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


docs(README.md): add benchmark link

Show off the peak performance achievement is a very good thing to be proud of and it makes people want to try to experiment or using it.

I'm gonna closing this PR for now. Unless an objective benchmark that can reflex majority real world use case exists any benchmark link would not be included in this project.


Report total time at max active threads

These metrics are needed as a part of an internal project for thread scaling.
Total time spent at max active threads will be joined with worker cpu utilization to see if we are bounded by the # of parallel work items, ultimately to reduce worker idleness.

Thank you for your contribution! Follow this checklist to help us incorporate your contribution quickly and easily:

[ ] Mention the appropriate issue in your description (for example: addresses #123), if applicable. This will automatically add a link to the pull request in the issue. If you would like the issue to automatically close on merging the pull request, comment fixes #<ISSUE NUMBER> instead.
[ ] Update CHANGES.md with noteworthy changes.
[ ] If this contribution is large, please file an Apache Individual Contributor License Agreement.

See the Contributor Guide for more tips on how to make review process smoother.
To check the build health, please visit https://github.com/apache/beam/blob/master/.test-infra/BUILD_STATUS.md
GitHub Actions Tests Status (on master branch)

See CI.md for more information about GitHub Actions CI.

assign to next reviewer

You can run ./gradlew :runners:google-cloud-dataflow-java:worker:spotlessApply from the top level of the directory to fix the formatting issues

Still working on this?

assign to next reviewer

@bvolpato do you mind giving this a look? Java is not in my wheelhouse

Run Java PreCommit

Once the last workflows pass I will merge. Thank you!


chore(sponsors): Fix sponsor display order and sizing

📝 Changed routes:

/sponsors

(view full size)

Commit 2fc6f92adf836326b604c9e5e16b4f6d68fef949 (https://hackportal-hackutd-pw92mme7d-acmutd.vercel.app).


Remove inline asm statements from architecture generic code

This makes porting to a new architecture very hard. I originally intended it to be a temporary hack until we get a CPU abstraction layer but it's spread too far.

Fixed by #14


Update role-based-access-control-create-custom-roles-for-internal-ext…

…ernal-users.md
typo (quality > qualify)

@kentfieldUoR Thanks for catching the mistake.
@andreicradu I'm fixing this with some other issues in a PR against the private repo.
#please-close


Allow user/account.yaml overrides + implemented more robust theme init

I stumbled across this minor issue, when trying to extend the base user/accounts.yaml configuration. It turned out that there were some edge cases, that loadLanguages Themes.php#L256 was called, but theme:// was actually not registered yet. This PR fixes this. It further allows now overriding the user/account.yaml file that will be shown in Admin plugin and allows to use the theme:// scheme inside the actual theme itself via, e.g.
# Grav streams
streams:
  schemes:
    blueprints:
      type: ReadOnlyStream
      prefixes:
        '':
          - 'theme://blueprints'

Thanks, i was actually aware of this, but hadn't had time to look into it.


Added another check condition if it's safari on iOS.

Fixes #
I confirm I have read the contributing guidelines and signed the Contributor License Agreement.
Description
On the relatively latest safari on iOS, it keeps trying to load image via _loadImageBitmapFromBlob method.
        if (hasContents) {
            // ImageBitmap interface can load iage
            if (this.device.supportsImageBitmap) {
                this._loadImageBitmapFromBlob(new Blob([asset.file.contents]), callback);
                return;
            }
            url = {
                load: URL.createObjectURL(new Blob([asset.file.contents])),
                original: url.original
            };
        }

According to the code from webgl-graphics-device, it shouldn't be loaded via the method.
Somehow, checking 'Safari' isn't working as expected.
Added additional check condition when it is ios device.
Affected files are

platform.js
webgl-graphics-device.js

Hi @figo2264 ,
Thanks so much for this PR! I was looking at the same issue for another user and have submitted this PR to address it. I added logic to detect more generally which browser is currently running. Are you ok for me to close this PR in favour of the other?
Thanks!

@slimbuck Sure. You can close my PR since it's duplicated.
FYI, my issue was happening only in Safari browser on iPhone. It was working fine with iPad and Mac environment.

Thanks @figo2264.
I believe the ipad has the option "request desktop site" enabled by default. So depending on whether that is enabled or not the old way of detecting safari (window.safari) might have been working for you.
Will you be able to test it works once it's merged?

@slimbuck Don't worry. I've temporarily fixed my issue with my code and now it works fine.
I will test once after your PR is merged..

Closing in favour of https://github.com/playcanvas/engine/pull/5383


GreatExpectations: Rename ParentRunFacet key

Problem
OpenLineage spec defines the ParentRunFacet with the property name parent but Great Expectations integration creates a lineage event with parentRun. Same issue was in Airflow integration before #1036, but was fixed in #1037 and #2130.
Solution
One-line summary:
Rename ParentRunFacet key from parentRun to parent in Great Expectations integration. For backward compatibility keep the old name.
Checklist

[X] You've signed-off your work
[X] Your pull request title follows our guidelines
[X] Your changes are accompanied by tests (if relevant)
[ ] Your change contains a small diff and is self-contained
[ ] You've updated any relevant documentation (if relevant)
[X] Your comment includes a one-liner for the changelog about the specific purpose of the change (if necessary)
[ ] You've versioned the core OpenLineage model or facets according to SchemaVer (if relevant)
[ ] You've added a header to source files (if relevant)

SPDX-License-Identifier: Apache-2.0
Copyright 2018-2023 contributors to the OpenLineage project

Currently I don't see any tests for Great Expectations compairing emitted events with expected ones.

Codecov Report
All modified and coverable lines are covered by tests :white_check_mark:

Project coverage is 84.03%. Comparing base (2cc09ec) to head (9c77351).

:exclamation: Your organization needs to install the Codecov GitHub app to enable full functionality.
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #2661      +/-   ##
==========================================
- Coverage   84.84%   84.03%   -0.82%
==========================================
  Files          59       54       -5
  Lines        3398     3225     -173
==========================================
- Hits         2883     2710     -173
  Misses        515      515

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.

It should rename rather than add new key, shouldn't it? :)

It would mean changing the key without any transition period for great expectations users. But maybe since we are removing old name everywhere (spark, airflow) that's actually what should be done.

I can remove old key, if needed

GE is not really maintained and parentRun was deprecated across OpenLineage long time ago. I would just remove it.

Ok, removed


empty workspace error

@CelsiaSolaraStarflare
I changed the code so that the application normally closes immediately when the last tab is closed. Does that work for you too?

@SchBenedikt , this does not work for me. It closes the tab bar but you can simply reopen on the file menu.

Nevermind, it is working. I think this is good!


Dispatch Thread Dead Unexpectedly

I never reproduce this problem in sand box environment. The sendAttemptLimit is set to 8000. So every 8000 msgs sent to APNS successfully, ApnsConnection will be reconnected.
The stack trace is thrown by shutdownGracefully() method in ApnsConnection class. It's code is as follows:

I have the same exception in our push service:
Dispatch thread for 0nvnphkmxw6m17ujypcajmg2iib5nn9fp1rjogd26wy93y09:gateway.push.apple.com died unexpectedly. Please file a bug with the exception details.
java.util.NoSuchElementException: idleStateHandler
	at io.netty.channel.DefaultChannelPipeline.getContextOrDie(DefaultChannelPipeline.java:907)
	at io.netty.channel.DefaultChannelPipeline.remove(DefaultChannelPipeline.java:304)
	at com.relayrides.pushy.apns.ApnsConnection.shutdownGracefully(ApnsConnection.java:626)
	at com.relayrides.pushy.apns.ApnsConnection.sendNotification(ApnsConnection.java:581)
	at com.relayrides.pushy.apns.PushManager$1.run(PushManager.java:277)
	at java.lang.Thread.run(Thread.java:745)

Any progress for this issue?
We will add a try catch block for removing handler to fix it temporary.

Can you tell me more about your configuration? Have you configured connections to close after a period of inactivity? Does this happen every time a connection closes?
Thanks!

The configuration as below(in clojure):
(doto
      (PushManagerConfiguration.)
    (.setConcurrentConnectionCount 2)
    (.setConnectionConfiguration
     (doto (ApnsConnectionConfiguration.)
       (.setSendAttemptLimit (Integer/valueOf 10))
       (.setCloseAfterInactivityTime (Integer/valueOf 300))
       (.setGracefulShutdownTimeout (Integer/valueOf 100))))))

We configure connections to be closed after 300 seconds of inactivity.It doesn't happen every time when a connection closes,but it happens every time when we want to push too many notifications (over 1 millions)

@killme2008 As a bit of a science experiment, would you mind giving things a try without direct buffers? @sunng87 explains how to disable direct buffers in a separate issue.
Thanks!

Hi, @jchambers
We disables direct buffer right now -Dio.netty.noPreferDirect=true
P.S.  sunny is my colleague.

It seems like there's a chance this might have been fixed by https://github.com/netty/netty/issues/3364. We bumped to Netty 4.0.26 in #154; would you mind giving that a shot and seeing if it resolves this issue?
Thanks for your patience!

OK, thanks for your reminding.We will  try it.
2015-03-04 1:39 GMT+08:00 Jon Chambers<EMAIL_ADDRESS>
It seems like there's a chance this might have been fixed by
netty/netty#3364 https://github.com/netty/netty/issues/3364. We bumped
to Netty 4.0.26 in #154 https://github.com/relayrides/pushy/pull/154;
would you mind giving that a shot and seeing if it resolves this issue?
Thanks for your patience!
—
Reply to this email directly or view it on GitHub
https://github.com/relayrides/pushy/issues/144#issuecomment-76994523.

--
庄晓丹
Email<EMAIL_ADDRESS><EMAIL_ADDRESS>Site:           http://fnil.net
Twitter:      @killme2008

Looks like this was just a weird race condition. Although I haven't been able to reproduce the failure you're seeing, it should be fixed by ffc6fea.


Apply Prettier formatting to HIP Repo and Other fixups

added hyphen in "HIP-##"
capitalize "Hotspot"
swap HTML tables for markdown tables
rename image directories to match HIP file names, fixup links
optimize images with ImageOptim

thank you sam!

god bless you @samgutentag


Fix --only-hook[s] typo

The docs say --only-hooks but the CLI and reference docs use --only-hook .
I would create a PR but I'm not sure which one to use and how to regenerate the docs.

That's completely a mistake from me indeed !
I'm fixing this right now. In order to know which one to use, when there is a doubt, the information from the mookme --help are the most up-to-date since it is generated by commander (our CLI helper) itself. (it is --only-hook)
I did not have time yet to elaborate the contribution guide and developer's documentation but now that there is an external contributor this becomes critical, so I will address this ASAP.
In the meantime, the documentation is written in vuepress and stored under the docs package. If you intend to generate the documentation in your local environment, you just have to cd into that package, run npm i and then npm run dev.
I invite you to consult the documentation of Vuepress in order to have a better understanding of the structure of this package :)

You'll have it here : https://github.com/Escape-Technologies/mookme/pull/17


AssetTargetFallback doesn't work for transitive dependencies - workaround

If you get a NU1701 warning for package A...and package A pulls in package B and package C as dependencies, B and C will not be properly pulled in for use into your project.
Fixes:

contact package A author to update the package to work more naturally for the TFM of your project (add netstandard2.0 and/or netcoreapp3.1 tfm support)
workaround the outdated package and this problem by directly referencing A, B, and C.

FYI - @nkolev92

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: 377ae860-386f-149f-c5e0-410d3aa89dbc
Version Independent ID: 2b145147-fd3f-d1aa-2694-071a31542d9a
Content: NuGet Errors and Warnings Reference
Content Source: docs/reference/errors-and-warnings/NU1701.md
Product: nuget
GitHub Login: @zhili1208
Microsoft Alias: lzhi

This works nowadays. https://learn.microsoft.com/en-us/nuget/release-notes/nuget-6.2#summary-whats-new-in-62


Update tests to not rely on AppVeyor account being present for Administrator credentials

Pull Request (PR) description
Adds common test helper functions to aid in creating test administrator user accounts. Updates the following tests to use these functions to obtain test administrators account credentials instead of relying on an AppVeyor account being present.

MSFT_xScriptResource.Integration.Tests.ps1
MSFT_xServiceResource.Integration.Tests.ps1
MSFT_xWindowsProcess.Integration.Tests.ps1
xServiceSet.Integration.Tests.ps1

This Pull Request (PR) fixes the following issues

Fixes #582
Fixes #583
Fixes #584
Fixes #585

Task list

[x] Added an entry under the Unreleased section of the change log in
CHANGELOG.md. Entry should say what was changed, and how that affects
users (if applicable).
[ ] Resource documentation added/updated in README.md.
[ ] Resource parameter descriptions added/updated in README.md, schema.mof
and comment-based help.
[x] Comment-based help added/updated.
[ ] Localization strings added/updated in all localization files as
appropriate.
[ ] Examples appropriately added/updated.
[ ] Unit tests added/updated. See
DSC Resource Testing Guidelines.
[x] Integration tests added/updated (where possible). See
DSC Resource Testing Guidelines.
[x] New/changed code adheres to
DSC Resource Style Guidelines and Best Practices

This change is

Codecov Report

Merging #594 into dev will not change coverage.
The diff coverage is n/a.

@@         Coverage Diff         @@
##            dev   #594   +/-   ##
===================================
  Coverage    74%    74%
===================================
  Files        27     27
  Lines      4074   4074
  Branches      4      4
===================================
  Hits       3032   3032
  Misses     1038   1038
  Partials      4      4

Requesting a code review on this one from someone in the community. Thanks in advance.

Hey guys, would one of you mind giving this one a code review? @PlagueHO, @johlju , @tmeckel , or @gaelcolas ?

I can when I get back to hotel tonight of no one else gets there first.


Unexpected behavior in Delete List Command

Hey Dan, thanks for making that permanently delete list "..." command so quickly!
I just tried it out with one of my lists and it worked but it had a little bit of unexpected behavior.
I used the command from my root list on the first list I created to start playing around with calculist.
The unexpected behavior came when the list I had deleted still showed in my list of Lists, I then tried to use goto list "MyDeletedList" and it brought me to the same url the list had been at previously but displayed the following error message:

After a page refresh everything went to the expected state, the deleted list no longer showed in the list of Lists and using goto list "MyDeletedList" gave the popup saying the list couldn't be found and returned me to where I was.
I did a few more tests and I think there are 3 basic issues going on, I've listed them in the order I think most important:

While you deleted the data, you didn't inform/update some of the state and/or metadata being held by the application (such as the 'can I goto this list or not' state)

The fix for this would be to make sure to update the applications state on delete.

If I visit a link to a list that doesn't exist like https://app.calculist.io/Nathan/doesnotexist it will display that error message I saw.

I think better behavior would be to redirect to the root list and give a popup saying "List could not be found"

The root still displays outdated information

You could solve this by automatically refreshing the page on a delete (this would also solve problem #1) or you could also re-render the list so that it displays the most up to date data.
P.S. Thanks for all the great work you've been doing! Calculist has already helped me brainstorm new services and features at work. I can't wait to see how powerful a tool this will become.

Thanks for writing this up. I'll break each of these points out into separate issues so I can address them one by one.


fix: don't check for internal switch goodness

This makes it possible to pass in a different manual directory for the switch correction in a Calibration object(eg. if the calfile is downloaded to a different computer, the link to the switch correction will not work).
It might be worthwhile -- in the future -- just saving the switch correction data into the calfile itself.

So, this doesn't remove the ability to use the internal_switch property of the Calibration object, it just makes it possible to use another one. The problem was that the Calibration object saves the full path to the internal_switch to be able to load that data back in when it needs it. But if you go and download that Calibration object to a different computer, that path no longer makes sense. You want to be able to specify a different path (hopefully to the same data).
You know, thinking about this again, I think it's probably just better to save that data directly into the file.

So, this doesn't remove the ability to use the internal_switch property of the Calibration object, it just makes it possible to use another one. The problem was that the Calibration object saves the full path to the internal_switch to be able to load that data back in when it needs it. But if you go and download that Calibration object to a different computer, that path no longer makes sense. You want to be able to specify a different path (hopefully to the same data).
You know, thinking about this again, I think it's probably just better to save that data directly into the file.

Instead of doing that right now (I think it will take a little thought/time), I create this issue: https://github.com/edges-collab/edges-cal/issues/55 to remind us to do it later.

Instead of doing that right now (I think it will take a little thought/time), I create this issue: https://github.com/edges-collab/edges-cal/issues/55 to remind us to do it later.


Float

This is float type for "jou".
I haven't test yet, beacause on my computer, It has some (%^#$) error. And can't compile well...
So who can help me test my fork and create issues on my fork. I will fix it and fix the pull request...
Thx

wait, I founded actions to check

I changed GitHub's settings so that github actions should run when you push.

Fine, I will rebuild them, with latest version(the long type was added)

...But I rebuilded it in a new pull request


Couldn't find preset "es2015" && "stage-0" relative to directory "~/project/node_modules/linkstate"

Expected behavior:
Doesn't require any babel plugins
Actual behavior:
Throws errors, requires "es2015" and "stage-0" babel config.
Steps to reproduce
git clone https://github.com/parcel-bundler/examples
cd examples/preact
yarn
yarn add linkstate
# add some code using linkstate
yarn start

�  /home/dalvik/WebstormProjects/preact-parcel/node_modules/linkstate/dist/linkstate.es.js: Couldn't find preset "es2015" relative to directory "/home/dalvik/WebstormProje🚨

🚨  /home/dalvik/WebstormProjects/preact-parcel/node_modules/linkstate/dist/linkstate.es.js: Couldn't find preset "stage-0" relative to directory "/home/dalvik/WebstormProjcts/preact-parcel/node_modules/linkstate"
    at /home/dalvik/WebstormProjects/preact-parcel/node_modules/babel-core/lib/transformation/file/options/option-manager.js:293:19
    at Array.map (<anonymous>)
    at OptionManager.resolvePresets (/home/dalvik/WebstormProjects/preact-parcel/node_modules/babel-core/lib/transformation/file/options/option-manager.js:275:20)
    at OptionManager.mergePresets (/home/dalvik/WebstormProjects/preact-parcel/node_modules/babel-core/lib/transformation/file/options/option-manager.js:264:10)
    at OptionManager.mergeOptions (/home/dalvik/WebstormProjects/preact-parcel/node_modules/babel-core/lib/transformation/file/options/option-manager.js:249:14)
    at OptionManager.init (/home/dalvik/WebstormProjects/preact-parcel/node_modules/babel-core/lib/transformation/file/options/option-manager.js:368:12)
    at File.initOptions (/home/dalvik/WebstormProjects/preact-parcel/node_modules/babel-core/lib/transformation/file/index.js:212:65)
    at new File (/home/dalvik/WebstormProjects/preact-parcel/node_modules/babel-core/lib/transformation/file/index.js:135:24)
    at JSAsset.getParserOptions (/home/dalvik/WebstormProjects/preact-parcel/node_modules/parcel-bundler/src/assets/JSAsset.js:60:20)
    at JSAsset.parse (/home/dalvik/WebstormProjects/preact-parcel/node_modules/parcel-bundler/src/assets/JSAsset.js:68:32)

npm i -D babel-preset-env (if you haven't)
npm i -D babel-preset-stage-0
and your webpack config - presets: ['env']
(as shown in the image below)

@Depender-Sethi That doesn't fix the issue for me.


feat: adds pg_stat_wal metrics

We retrieve the values of pg_stat_wal and expose them as metrics if the instance version of Postgres is >=14
closes #54

/test


TextField label getting ugly when too long

[x] The issue is present in the latest release.
[x] I have searched the issues of this repository and believe that this is not a duplicate.

Current Behavior 😯
The label text a b c d e f g h i j k l m n o p q r s t does wrap:

Expected Behavior 🤔
It shouldn't look that ugly :D I've tried some thing in CodeSandbox (see below) that could be a more pleasing solution.

Steps to Reproduce 🕹

https://codesandbox.io/s/elated-http-w8u25?file=/src/Demo.js
Just uncomment one of the "style" lines to see what my suggested fixes look like.
Steps:

Use TextField with long label text.

Your Environment 🌎

Tech
Version

Material-UI
v4.11.0

React
16.12.0

Browser
Chrome  84

TypeScript
3.9.7

etc.
---

Duplicate of #12255


Update docker compose with mongodb and download image from hub instead of repo - adjust github actions

-how can we create a new dockerhub image that will easily run remote
-remote is better - Arsenii to test drive
-update github actions to understand which is latest images (added tags) - won't know what hash is

docker-compose-web.yml   can be used to start app using images available on docker hub.
Below command will start the app on local machine by downloading images from Docker hub
docker-compose -f docker-compose-web.yml up -d


Roadmap for 2.0

HI,
what is the Roadmap for 2.x?
Really like your project and looking forward to any new features.

Version 2.0.0-alpha03 is now available, which includes support for coroutines.
I don't expect much to change from this version on, but I want to be sure there are no breaking changes.
Please try it out! See the release notes for 2.0.0-alpha01 for upgrade info.

Thx

@nhaarman The alpha03 is not on jcenter. Is there a recommended way to consume the library?
https://repo.jfrog.org/artifactory/libs-release-bintray/com/nhaarman/mockitokotlin2/mockito-kotlin/

Hmm, that's weird. Something must have gone wrong when publishing. I'll look into it!

Thanks. Looking forward to the mockito 2.13 upgrade.

It should be up now.


URI decode path parts

This PR introduces percent-decoding for information contained within path parts.
This ensures that all paths are normalised as per https://datatracker.ietf.org/doc/html/rfc3986#section-7.3 at the first valid opportunity.
Driving reason for this is to prevent the need for explicit decoding within Spider Gazelle's action-controller (which uses this) and could be placed there. This just appears to be the neat point to solve this more generally. If you feel that's a better spot, please do feel free to close this.

yikes... 😶  Average time: 308.7ms -> Average time: 519.2ms... Looks like this change almost doubles the average load time. I based that on running this benchmark in release mode before and after this PR.
I can see how this would be helpful. Do you have any ideas on how we can cut that time down? We could also merge this as is if there's savings somewhere else in this shard.

Woah, thank you for catching that. Definitely something I missed checking. Leave it with me and I’ll see what I can do!

That should be a little less intense now. As it peels off the path segments, it will only pipe those containing encoded chars through URI.decode.
Currently this happens strictly for the full path. There's potentially some additional gain possible by reading these segments lazily as the matcher walks the tree, but implementation of that requires a bit of modification to other areas of this lib and would introduce a fair bit of noise to the intent of this PR.
Thanks again for keeping an eye perf.

wow! This even seems to speed it up a bit! 🥳  Average time: 282.7ms


Didn't find 'ab_background' inside drawable folder

There is the helper construction in ListViewActivity.java in sample
FadingActionBarHelper helper = new FadingActionBarHelper()
            .actionBarBackground(R.drawable.ab_background)
            .headerLayout(R.layout.header)
            .contentLayout(R.layout.activity_listview);

However, I didn't find R.drawable.ab_background for all different resolution.

its in android XHDPI folder, search in the sdk folder of yours


Android Shader short multiplication of Vector and Matrix crashes the app

Godot version:
3.1 Beta 10 and Beta 11
OS/device including version:
Nexus 9, Android 5.0.1,
GLES3 and GLES2 (Nvidia Tagra)
Issue description:
I have a Canvas_Item Shader, overwriting the Fragment function.
I got several crashes and after long debug sessions I found out that if I have a vector and a matrix, the short multiplication format crashes the app while the regular works OK.
Both of then do work on Windows, while working and running from the editor.
Short one:
vec2 V = vec2(....);
mat2 M = mat2(.....);

This one failed:
   V *= M;
This one works OK:
   V = V * M;
Steps to reproduce:
Minimal reproduction project:

Is this still reproducible in the current 3.2 builds?


Files Crashes a few seconds after opening

Description
I bought it 2 days ago and it worked fine. Yesterday, after being open for a few seconds, it crashes everytime. I tried uninstall/intalling again and I restarted the comp; but its still doing it (today too).
Steps To Reproduce
Open the app
Wait 10 seconds.
https://github.com/files-community/Files/assets/155696194/7773f5a1-5626-41bf-b270-375ea3a7ea69
Requirements

e.g. Fix crash that occurs when I open the app. It shouldnt crash.

Files Version
3.0.15
Windows Version
windows 11 version 22H2
Log File
debug.log

Thanks for the report, I don't see anything in the crash report but it's interesting that it was working for a bit.

Similar issues over here. It sometimes crashes by itself after a while and always when opening the context menu of a file.
The only change to the system was an update to Win11 23H2.

@Sprinic can you see if this is fixed in v3.1.1?

I had the issue where the app would crash when pinning an executable file to the start menu.
This was fixed in 3.1.1.


queryClient.refetchQueries(queryKey)  refetches disabled queries

Describe the bug
The official documentation describing the enabled option :
When enabled is false:
...
The query will ignore query client invalidateQueries and refetchQueries calls that would normally result in the query refetching.

But In my project queryClient.refetchQueries(queryKey)  refetches disabled queries。
Your minimal, reproducible example
none
Steps to reproduce

Create a query with useQuery and set enabled option to false.
Create a queryClient with useQueryClient.
Invalidate this query with refetchQueries.

Expected behavior
The disabled queries (enabled: false) would not refetch when I use refetchQueries
How often does this bug happen?
No response
Screenshots or Videos
No response
Platform
OS: macOs
Browser: Not related
react-query version
^3.39.2
TypeScript version
^4.7.4
Additional context
No response

This should be fixed in v4:

https://github.com/TanStack/query/pull/3223

hey @TkDodo! 👋 is there a workaround for this bug in v3?

we haven't back-ported the fix to v3. Is there anything stopping you from upgrading to v4 ?

@TkDodo I'm not sure how much effort it might be and how many issues after it might bring. I'll go through the migration guide first then. But yeah, we would like to migrate anyway.


"Monday before May 25" Does not work in 0.10

It used to work in 0.8. In 0.10 it always returns the next Monday.

Perfect!. Just wondering are you planing to do another release soon? Otherwise we will release ours with a custom build from 0.11-SNAPSHOT.

I just pushed up a 0.10.1 release.  Thanks again.


(Improvement)Toggle to FullScreen

Do a rezise and rotate the DragView, Very useful for videos and photos.
I'll do it. :3

Blood are coming out of my eyes, but I'm working on it.

Already reported in #22

It's a different ideia. It will do a resize and rotate.

@ppamorim
Hi. Do you need any help with this feature? (dont know how much i can help, but I need this feature too)

Hi! When it will be in ready?

Any updates?


Add SendGrid and Azure DNS modules for UTIAC

Jira link (if applicable)
N/A
Change description
Checklist

[X] commit messages are meaningful and follow good commit message guidelines
[] README and other documentation has been updated / added (if needed)
[] tests have been updated / new tests has been added (if needed)
[] Does this PR introduce a breaking change

Plan Result (nonprod)
:warning: Resource Deletion will happen :warning:
This plan contains resource delete operation. Please check the plan result very carefully!
Plan: 13 to add, 0 to change, 4 to destroy.

Create

module.utiac.azurerm_key_vault_secret.subuser
module.utiac.azurerm_key_vault_secret.subuser-api-key
module.utiac.random_password.password
module.utiac.sendgrid_api_key.subuser
module.utiac.sendgrid_domain_authentication.domain-authenticate["nonprod-tribunalsdecisions-utiac.service.gov.uk"]
module.utiac.sendgrid_subuser.user
module.utiac-dns.azurerm_dns_cname_record.record1["nonprod-tribunalsdecisions-utiac.service.gov.uk"]
module.utiac-dns.azurerm_dns_cname_record.record2["nonprod-tribunalsdecisions-utiac.service.gov.uk"]
module.utiac-dns.azurerm_dns_cname_record.record3["nonprod-tribunalsdecisions-utiac.service.gov.uk"]

Replace

module.pcol.sendgrid_domain_authentication.domain-authenticate["hmcts.net"]
module.pcol-dns.azurerm_dns_cname_record.record1["hmcts.net"]
module.pcol-dns.azurerm_dns_cname_record.record2["hmcts.net"]
module.pcol-dns.azurerm_dns_cname_record.record3["hmcts.net"]

Change Result (Click me)

  # module.pcol.sendgrid_domain_authentication.domain-authenticate["hmcts.net"] must be replaced
-/+ resource "sendgrid_domain_authentication" "domain-authenticate" {
      + custom_dkim_selector = "pnl" # forces replacement
      - custom_spf           = false -> null
      ~ dns                  = [
          - {
              - data  = "pnl.domainkey.u33702686.wl187.sendgrid.net"
              - host  = "pnl._domainkey.hmcts.net"
              - type  = "cname"
              - valid = false
            },
          - {
              - data  = "pnl2.domainkey.u33702686.wl187.sendgrid.net"
              - host  = "pnl2._domainkey.hmcts.net"
              - type  = "cname"
              - valid = false
            },
          - {
              - data  = "u33702686.wl187.sendgrid.net"
              - host  = "em3668.hmcts.net"
              - type  = "cname"
              - valid = false
            },
        ] -> (known after apply)
      ~ id                   = "19892760" -> (known after apply)
      ~ ips                  = [] -> (known after apply)
      ~ subdomain            = "em3668" -> (known after apply)
      ~ username             = "hmcts-pcol-nonprod" -> (known after apply)
      ~ valid                = false -> (known after apply)
        # (3 unchanged attributes hidden)
    }

  # module.pcol-dns.azurerm_dns_cname_record.record1["hmcts.net"] must be replaced
-/+ resource "azurerm_dns_cname_record" "record1" {
      ~ fqdn                = "pnl._domainkey.hmcts.net." -> (known after apply)
      ~ id                  = "/subscriptions/ed302caf-ec27-4c64-a05e-85731c3ce90e/resourceGroups/reformmgmtrg/providers/Microsoft.Network/dnsZones/hmcts.net/CNAME/pnl._domainkey" -> (known after apply)
      ~ name                = "pnl._domainkey" # forces replacement -> (known after apply) # forces replacement
      ~ record              = "pnl.domainkey.u33702686.wl187.sendgrid.net" -> (known after apply)
      - tags                = {} -> null
        # (3 unchanged attributes hidden)
    }

  # module.pcol-dns.azurerm_dns_cname_record.record2["hmcts.net"] must be replaced
-/+ resource "azurerm_dns_cname_record" "record2" {
      ~ fqdn                = "pnl2._domainkey.hmcts.net." -> (known after apply)
      ~ id                  = "/subscriptions/ed302caf-ec27-4c64-a05e-85731c3ce90e/resourceGroups/reformmgmtrg/providers/Microsoft.Network/dnsZones/hmcts.net/CNAME/pnl2._domainkey" -> (known after apply)
      ~ name                = "pnl2._domainkey" # forces replacement -> (known after apply) # forces replacement
      ~ record              = "pnl2.domainkey.u33702686.wl187.sendgrid.net" -> (known after apply)
      - tags                = {} -> null
        # (3 unchanged attributes hidden)
    }

  # module.pcol-dns.azurerm_dns_cname_record.record3["hmcts.net"] must be replaced
-/+ resource "azurerm_dns_cname_record" "record3" {
      ~ fqdn                = "em3668.hmcts.net." -> (known after apply)
      ~ id                  = "/subscriptions/ed302caf-ec27-4c64-a05e-85731c3ce90e/resourceGroups/reformmgmtrg/providers/Microsoft.Network/dnsZones/hmcts.net/CNAME/em3668" -> (known after apply)
      ~ name                = "em3668" # forces replacement -> (known after apply) # forces replacement
      ~ record              = "u33702686.wl187.sendgrid.net" -> (known after apply)
      - tags                = {} -> null
        # (3 unchanged attributes hidden)
    }

  # module.utiac.azurerm_key_vault_secret.subuser will be created
  + resource "azurerm_key_vault_secret" "subuser" {
      + id                      = (known after apply)
      + key_vault_id            = "/subscriptions/1c4f0704-a29e-403d-b719-b90c34ef14c9/resourceGroups/SendGrid-nonprod/providers/Microsoft.KeyVault/vaults/sendgridnonprod"
      + name                    = "hmcts-utiac-password"
      + resource_id             = (known after apply)
      + resource_versionless_id = (known after apply)
      + value                   = (sensitive value)
      + version                 = (known after apply)
      + versionless_id          = (known after apply)
    }

  # module.utiac.azurerm_key_vault_secret.subuser-api-key will be created
  + resource "azurerm_key_vault_secret" "subuser-api-key" {
      + id                      = (known after apply)
      + key_vault_id            = "/subscriptions/1c4f0704-a29e-403d-b719-b90c34ef14c9/resourceGroups/SendGrid-nonprod/providers/Microsoft.KeyVault/vaults/sendgridnonprod"
      + name                    = "hmcts-utiac-api-key"
      + resource_id             = (known after apply)
      + resource_versionless_id = (known after apply)
      + value                   = (sensitive value)
      + version                 = (known after apply)
      + versionless_id          = (known after apply)
    }

  # module.utiac.random_password.password will be created
  + resource "random_password" "password" {
      + bcrypt_hash      = (sensitive value)
      + id               = (known after apply)
      + length           = 16
      + lower            = true
      + min_lower        = 0
      + min_numeric      = 1
      + min_special      = 0
      + min_upper        = 0
      + number           = true
      + numeric          = true
      + override_special = "_%@"
      + result           = (sensitive value)
      + special          = true
      + upper            = true
    }

  # module.utiac.sendgrid_api_key.subuser will be created
  + resource "sendgrid_api_key" "subuser" {
      + api_key = (sensitive value)
      + id      = (known after apply)
      + name    = "utiac-application"
      + scopes  = [
          + "2fa_required",
          + "mail.send",
          + "sender_verification_eligible",
          + "whitelabel.create",
          + "whitelabel.delete",
          + "whitelabel.read",
          + "whitelabel.update",
        ]
    }

  # module.utiac.sendgrid_domain_authentication.domain-authenticate["nonprod-tribunalsdecisions-utiac.service.gov.uk"] will be created
  + resource "sendgrid_domain_authentication" "domain-authenticate" {
      + automatic_security = true
      + dns                = (known after apply)
      + domain             = "nonprod-tribunalsdecisions-utiac.service.gov.uk"
      + id                 = (known after apply)
      + ips                = (known after apply)
      + is_default         = true
      + subdomain          = (known after apply)
      + username           = (known after apply)
      + valid              = (known after apply)
    }

  # module.utiac.sendgrid_subuser.user will be created
  + resource "sendgrid_subuser" "user" {
      + authorization_token    = (known after apply)
      + credit_allocation_type = (known after apply)
      + disabled               = (known after apply)
      + email                  =<EMAIL_ADDRESS>      + id                     = (known after apply)
      + ips                    = [
          + "<IP_ADDRESS>",
        ]
      + password               = (sensitive value)
      + signup_session_token   = (known after apply)
      + user_id                = (known after apply)
      + username               = "hmcts-utiac-nonprod"
    }

  # module.utiac-dns.azurerm_dns_cname_record.record1["nonprod-tribunalsdecisions-utiac.service.gov.uk"] will be created
  + resource "azurerm_dns_cname_record" "record1" {
      + fqdn                = (known after apply)
      + id                  = (known after apply)
      + name                = (known after apply)
      + record              = (known after apply)
      + resource_group_name = "reformmgmtrg"
      + ttl                 = 300
      + zone_name           = "tribunalsdecisions.service.gov.uk"
    }

  # module.utiac-dns.azurerm_dns_cname_record.record2["nonprod-tribunalsdecisions-utiac.service.gov.uk"] will be created
  + resource "azurerm_dns_cname_record" "record2" {
      + fqdn                = (known after apply)
      + id                  = (known after apply)
      + name                = (known after apply)
      + record              = (known after apply)
      + resource_group_name = "reformmgmtrg"
      + ttl                 = 300
      + zone_name           = "tribunalsdecisions.service.gov.uk"
    }

  # module.utiac-dns.azurerm_dns_cname_record.record3["nonprod-tribunalsdecisions-utiac.service.gov.uk"] will be created
  + resource "azurerm_dns_cname_record" "record3" {
      + fqdn                = (known after apply)
      + id                  = (known after apply)
      + name                = (known after apply)
      + record              = (known after apply)
      + resource_group_name = "reformmgmtrg"
      + ttl                 = 300
      + zone_name           = "tribunalsdecisions.service.gov.uk"
    }

Plan: 13 to add, 0 to change, 4 to destroy.

Plan Result (prod)
:warning: Resource Deletion will happen :warning:
This plan contains resource delete operation. Please check the plan result very carefully!
Plan: 13 to add, 0 to change, 4 to destroy.

Create

module.utiac.azurerm_key_vault_secret.subuser
module.utiac.azurerm_key_vault_secret.subuser-api-key
module.utiac.random_password.password
module.utiac.sendgrid_api_key.subuser
module.utiac.sendgrid_domain_authentication.domain-authenticate["tribunalsdecisions-utiac.platform.service.gov.uk"]
module.utiac.sendgrid_subuser.user
module.utiac-dns.azurerm_dns_cname_record.record1["tribunalsdecisions-utiac.platform.service.gov.uk"]
module.utiac-dns.azurerm_dns_cname_record.record2["tribunalsdecisions-utiac.platform.service.gov.uk"]
module.utiac-dns.azurerm_dns_cname_record.record3["tribunalsdecisions-utiac.platform.service.gov.uk"]

Replace

module.pcol.sendgrid_domain_authentication.domain-authenticate["hmcts.net"]
module.pcol-dns.azurerm_dns_cname_record.record1["hmcts.net"]
module.pcol-dns.azurerm_dns_cname_record.record2["hmcts.net"]
module.pcol-dns.azurerm_dns_cname_record.record3["hmcts.net"]

Change Result (Click me)

  # module.pcol.sendgrid_domain_authentication.domain-authenticate["hmcts.net"] must be replaced
-/+ resource "sendgrid_domain_authentication" "domain-authenticate" {
      + custom_dkim_selector = "prd" # forces replacement
      - custom_spf           = false -> null
      ~ dns                  = [
          - {
              - data  = "prd.domainkey.u33702743.wl244.sendgrid.net"
              - host  = "prd._domainkey.hmcts.net"
              - type  = "cname"
              - valid = false
            },
          - {
              - data  = "prd2.domainkey.u33702743.wl244.sendgrid.net"
              - host  = "prd2._domainkey.hmcts.net"
              - type  = "cname"
              - valid = false
            },
          - {
              - data  = "u33702743.wl244.sendgrid.net"
              - host  = "em2696.hmcts.net"
              - type  = "cname"
              - valid = false
            },
        ] -> (known after apply)
      ~ id                   = "19892787" -> (known after apply)
      ~ ips                  = [] -> (known after apply)
      ~ subdomain            = "em2696" -> (known after apply)
      ~ username             = "hmcts-pcol-prod" -> (known after apply)
      ~ valid                = false -> (known after apply)
        # (3 unchanged attributes hidden)
    }

  # module.pcol-dns.azurerm_dns_cname_record.record1["hmcts.net"] must be replaced
-/+ resource "azurerm_dns_cname_record" "record1" {
      ~ fqdn                = "prd._domainkey.hmcts.net." -> (known after apply)
      ~ id                  = "/subscriptions/ed302caf-ec27-4c64-a05e-85731c3ce90e/resourceGroups/reformmgmtrg/providers/Microsoft.Network/dnsZones/hmcts.net/CNAME/prd._domainkey" -> (known after apply)
      ~ name                = "prd._domainkey" # forces replacement -> (known after apply) # forces replacement
      ~ record              = "prd.domainkey.u33702743.wl244.sendgrid.net" -> (known after apply)
      - tags                = {} -> null
        # (3 unchanged attributes hidden)
    }

  # module.pcol-dns.azurerm_dns_cname_record.record2["hmcts.net"] must be replaced
-/+ resource "azurerm_dns_cname_record" "record2" {
      ~ fqdn                = "prd2._domainkey.hmcts.net." -> (known after apply)
      ~ id                  = "/subscriptions/ed302caf-ec27-4c64-a05e-85731c3ce90e/resourceGroups/reformmgmtrg/providers/Microsoft.Network/dnsZones/hmcts.net/CNAME/prd2._domainkey" -> (known after apply)
      ~ name                = "prd2._domainkey" # forces replacement -> (known after apply) # forces replacement
      ~ record              = "prd2.domainkey.u33702743.wl244.sendgrid.net" -> (known after apply)
      - tags                = {} -> null
        # (3 unchanged attributes hidden)
    }

  # module.pcol-dns.azurerm_dns_cname_record.record3["hmcts.net"] must be replaced
-/+ resource "azurerm_dns_cname_record" "record3" {
      ~ fqdn                = "em2696.hmcts.net." -> (known after apply)
      ~ id                  = "/subscriptions/ed302caf-ec27-4c64-a05e-85731c3ce90e/resourceGroups/reformmgmtrg/providers/Microsoft.Network/dnsZones/hmcts.net/CNAME/em2696" -> (known after apply)
      ~ name                = "em2696" # forces replacement -> (known after apply) # forces replacement
      ~ record              = "u33702743.wl244.sendgrid.net" -> (known after apply)
      - tags                = {} -> null
        # (3 unchanged attributes hidden)
    }

  # module.utiac.azurerm_key_vault_secret.subuser will be created
  + resource "azurerm_key_vault_secret" "subuser" {
      + id                      = (known after apply)
      + key_vault_id            = "/subscriptions/8999dec3-0104-4a27-94ee-6588559729d1/resourceGroups/SendGrid-prod/providers/Microsoft.KeyVault/vaults/sendgridprod"
      + name                    = "hmcts-utiac-password"
      + resource_id             = (known after apply)
      + resource_versionless_id = (known after apply)
      + value                   = (sensitive value)
      + version                 = (known after apply)
      + versionless_id          = (known after apply)
    }

  # module.utiac.azurerm_key_vault_secret.subuser-api-key will be created
  + resource "azurerm_key_vault_secret" "subuser-api-key" {
      + id                      = (known after apply)
      + key_vault_id            = "/subscriptions/8999dec3-0104-4a27-94ee-6588559729d1/resourceGroups/SendGrid-prod/providers/Microsoft.KeyVault/vaults/sendgridprod"
      + name                    = "hmcts-utiac-api-key"
      + resource_id             = (known after apply)
      + resource_versionless_id = (known after apply)
      + value                   = (sensitive value)
      + version                 = (known after apply)
      + versionless_id          = (known after apply)
    }

  # module.utiac.random_password.password will be created
  + resource "random_password" "password" {
      + bcrypt_hash      = (sensitive value)
      + id               = (known after apply)
      + length           = 16
      + lower            = true
      + min_lower        = 0
      + min_numeric      = 1
      + min_special      = 0
      + min_upper        = 0
      + number           = true
      + numeric          = true
      + override_special = "_%@"
      + result           = (sensitive value)
      + special          = true
      + upper            = true
    }

  # module.utiac.sendgrid_api_key.subuser will be created
  + resource "sendgrid_api_key" "subuser" {
      + api_key = (sensitive value)
      + id      = (known after apply)
      + name    = "utiac-application"
      + scopes  = [
          + "2fa_required",
          + "mail.send",
          + "sender_verification_eligible",
          + "whitelabel.create",
          + "whitelabel.delete",
          + "whitelabel.read",
          + "whitelabel.update",
        ]
    }

  # module.utiac.sendgrid_domain_authentication.domain-authenticate["tribunalsdecisions-utiac.platform.service.gov.uk"] will be created
  + resource "sendgrid_domain_authentication" "domain-authenticate" {
      + automatic_security = true
      + dns                = (known after apply)
      + domain             = "tribunalsdecisions-utiac.platform.service.gov.uk"
      + id                 = (known after apply)
      + ips                = (known after apply)
      + is_default         = true
      + subdomain          = (known after apply)
      + username           = (known after apply)
      + valid              = (known after apply)
    }

  # module.utiac.sendgrid_subuser.user will be created
  + resource "sendgrid_subuser" "user" {
      + authorization_token    = (known after apply)
      + credit_allocation_type = (known after apply)
      + disabled               = (known after apply)
      + email                  =<EMAIL_ADDRESS>      + id                     = (known after apply)
      + ips                    = [
          + "<IP_ADDRESS>",
        ]
      + password               = (sensitive value)
      + signup_session_token   = (known after apply)
      + user_id                = (known after apply)
      + username               = "hmcts-utiac-prod"
    }

  # module.utiac-dns.azurerm_dns_cname_record.record1["tribunalsdecisions-utiac.platform.service.gov.uk"] will be created
  + resource "azurerm_dns_cname_record" "record1" {
      + fqdn                = (known after apply)
      + id                  = (known after apply)
      + name                = (known after apply)
      + record              = (known after apply)
      + resource_group_name = "reformmgmtrg"
      + ttl                 = 300
      + zone_name           = "tribunalsdecisions.service.gov.uk"
    }

  # module.utiac-dns.azurerm_dns_cname_record.record2["tribunalsdecisions-utiac.platform.service.gov.uk"] will be created
  + resource "azurerm_dns_cname_record" "record2" {
      + fqdn                = (known after apply)
      + id                  = (known after apply)
      + name                = (known after apply)
      + record              = (known after apply)
      + resource_group_name = "reformmgmtrg"
      + ttl                 = 300
      + zone_name           = "tribunalsdecisions.service.gov.uk"
    }

  # module.utiac-dns.azurerm_dns_cname_record.record3["tribunalsdecisions-utiac.platform.service.gov.uk"] will be created
  + resource "azurerm_dns_cname_record" "record3" {
      + fqdn                = (known after apply)
      + id                  = (known after apply)
      + name                = (known after apply)
      + record              = (known after apply)
      + resource_group_name = "reformmgmtrg"
      + ttl                 = 300
      + zone_name           = "tribunalsdecisions.service.gov.uk"
    }

Plan: 13 to add, 0 to change, 4 to destroy.