docs: day 13 writeup

only after i finished writing the PR i noticed https://github.com/scalacenter/scala-advent-of-code/discussions/571 and that @mbovel originally volunteered for today's writeup. I'm really sorry for overlooking it! I'm fine with this PR being closed in favor of @mbovel's.

Hi @scarf005!
No problem; I haven't started writing an article, so let's use yours.
I will add a link to my solution in the list of community solutions.

@scarf005 looks like the equations don't render: https://scalacenter.github.io/scala-advent-of-code/2024/puzzles/day13/
can I ask you to submit a followup PR? either adding whatever docusaurus thing is needed to make this render, if your ambitions lie in that direction, or falling back to normal text?

@SethTisue will do


User should be alerted somehow if ${workspaceFolder:foo} references unknown folder name

Given a .code-workspace file like this:
{
	"folders": [
		{
			"path": "root1",
			"name": "name1"
		},
		{
			"path": "root2",
			"name": "name2"
		}
	],
	"settings": {
		"python.analysis.include": ["${workspaceFolder:invalid_name}/**"]
	 }
}

I don't see any feedback to the user in VS Code or the Pylance log about the invalid folder name reference in the python.analysis.include seting value. I think it would be easy to make a typo here and be confused about why it wasn't working. Or to change the workspace name and forget to change the related references.
Perhaps this should be filed on vscode?

include is our setting, so I dont think it is vscode's responsibility to show errors. if we want to show error, we should do but should be done at LS layer not workspace/settings layer which make it a bit wonky.

I see. ya, they might be open to the suggestion.


Infer type of YieldExpression

Currently yield expressions are always of type any. I've been using the redux-saga library and this has made my typescript + redux-saga story as I have to manually type the result of every yield expression, this leads to a lot of errors.
What I'm looking to implement is basically something
Effect<T1, T2>

where T1 is what is yielded and T2 is what should be passed back to the generator (the type of the YieldExpression), that is, some way to type what a generator is expecting to be passed (if any) when it yields something.
Essentially, a type or perhaps even some new syntax that allows you to express by yielding T1, this YieldExpression will now be of type T2>.
For example, this could be possible:
const globalWorld = {...};

function select(fn: (state: World) => T): EffectDescriptor yields T {
  return {
    fn
  }
}

function* gen() {
  const thisWillBeAString = yield select(mySelectorThatReturnsAString);
}

function myRuntime(gen: IterableIterator<EffectDescriptor>) {
  while(true) {
    const effect = gen.next().value;
    const myString = effect.fn(globalWorld);
    gen.next(myString); // would give an error if you passed anything but a string
  }
}

Seems like another version of https://github.com/Microsoft/TypeScript/issues/2983 and https://github.com/Microsoft/TypeScript/issues/10509. Updating generator type is currently tracked by https://github.com/Microsoft/TypeScript/issues/11375 and https://github.com/Microsoft/TypeScript/issues/2983.
A generator type should have three type parameters, TYield (what it yeilds), TReturn (What it returns, when done is true) and TNext (input to next calls).


Propagate the KUBERNETES_SERVICE_XXX variables to kube-controllers.

Description

This should allow kube-controllers to function before kube-proxy starts.
For PR author

[x] Tests for change.
[ ] If changing pkg/apis/, run make gen-files
[ ] If changing versions, run make gen-versions

For PR reviewers
A note for code reviewers - all pull requests must have the following:

[ ] Milestone set according to targeted release.
[ ] Appropriate labels:

kind/bug if this is a bugfix.
kind/enhancement if this is a a new feature.
enterprise if this PR applies to Calico Enterprise only.

 Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.You have signed the CLA already but the status is still pending? Let us recheck it.


block @channel, @here and maybe @username in prop body

alternatively place props body in   when sending slack notification

#44


Add more details around the user bearer token to the logs for integration test

I can get the same error we are seeing in the nightly test runs here: https://firecloud-orchestration.dsde-alpha.broadinstitute.org/#/Profile/getAll if I try to execute the request without authorizing/logging in. Looking at the request header there is no authorization in the request header. However once I log in I do see the auth in the request.
I am hoping to use these added logs to see if the authorization header is there and is the correct token in the test.

Maybe it's safe to log a substring of the token? Though I'm not sure which part(s) might be both unique and not revealing enough to be a security risk.

Maybe it's safe to log a substring of the token? Though I'm not sure which part(s) might be both unique and not revealing enough to be a security risk.

@breilly2 hmm I see your point, I think a substring would be sufficient

@breilly2 hmm I see your point, I think a substring would be sufficient

ohhh..didn't realize this is logging a token....definitely doesn't sound good :)

ohhh..didn't realize this is logging a token....definitely doesn't sound good :)


Could not mention the return type of a field resolver function with @Loader decorator

How do i mention the return of photos function as Promise<Photo[] | undefined> ?
@FieldResolver()
@Loader<number, Photo[]>(async (ids, { context }) => {  // batchLoadFn
const photos = await getRepository(Photo).find({
where: { user: { id: In([...ids]) } },
});
const photosById = groupBy(photos, "userId");
return ids.map((id) => photosById[id] ?? []);
})
photos(@Root() root: User) {
return (dataloader: DataLoader<number, Photo[]>) =>
dataloader.load(root.id);
}

Hey, it's not related to this lib, but you can define type of FieldResolver inside it, like this:
@FieldResolver(() => [Photo])

i was not clear before. I was asking about typing the return type after  photos(@root() root: User) like  photos(@root() root: User): Promise<Photo[]>


Create a file-based DataStore for mobile's local DWN

Currently, DWNs storage in the wallet uses stores that are backed by SQLite.
As we would like to start storing larger blob data (ex: profile avatars), it would be ideal to store these files directly to disk, instead of inside an SQLite table's blob column.

One call out for the fs thing is that I’m pretty sure that’s what react-native-leveldb does (an on disk db) so we could try and use react-native-leveldb under the hood and create a new bespoke adapter for either react-native-leveldb or something like expo-filesystem

Interesting. react-native-leveldb is an on disk db, but so is sqlite. I’m not really sure what the differences are, or why one would be preferable to the other, but I guess I can find out!

@amika-sq @shamilovtim I started this @hyphen-id/rn-async-storage-level specifically to solve this problem. Do you have any feedback? I can continue working on it asap, because we also need it.

Hey @pax-k! I wasn't aware of this project, but I can take a look!
@shamilovtim and I did chat previously about the possibility of using AsyncStorage, but it sounded like there was some hesitations there. I'm not super familiar with the React Native, but @shamilovtim mentioned that AsyncStorage was an example of a library that a lot of people used but wasn't really good. I haven't worked with at all to have any sort of opinion on it though.

I would assume since we're storing binary and AsyncStorage expects to work with only strings it's a non-starter for us @pax-k @amika-sq


Fix config loader for submodules if no module file present

Landed in https://github.com/metarhia/impress/commit/534ed668020ffd32870a6bca554722e58c8b5219


Update link resolution to distinguish between failed and not-yet resolved references.

Bug/issue #, if applicable: rdar://81334652
Summary
This update the link resolution code to make a distinction between a reference that failed to resolve and a reference that has not yet been resolved.
The main benefit of this is that each reference that fails to resolve can include information about that failure; both for local references and external references.
An extra benefit of this is that the documentation context will remember that the reference failed to resolve and won't attempt to resolve it again if the same reference appear in multiple places. In practice I don't expect this to have a meaningful performance impact.
Dependencies
n/a
Testing
In an existing project with documentation, for example SlothCreator:

Add a topic reference that will fail to resolve locally: for example <doc:unresolvabe>
Add a topic reference that will fail to resolve external: for example <doc://com.something.external:other-unresolvabe>

The two unresolved references should present different, more detailed, diagnostics messages.
Checklist
Make sure you check off the following items. If they cannot be completed, provide a reason.

[x] Added tests
[x] Ran the ./bin/test script and it succeeded
[x] Updated documentation if necessary

@swift-ci please test

@swift-ci please test

@swift-ci please test


As a user, I want status summary reports during a long running execution

Checked for duplicates
Yes - I've already checked
🧑🔬 User Persona(s)
Node Operator
💪 Motivation
...so that I can regular check the overall status of an execution in either file upload "chunks"
📖 Additional Details
From @mdrum

Perhaps allow for batching of some sort. Rather than accepting all files and generating one big report at the end, you would want to split it up into groups of 1000 files or something and create mid-reports along the way, with a final tally being generated at the end. We could do this on our end, of course, but then it would mean we would have to combine the mid-reports manually ourselves. Something to think about.

Acceptance Criteria
Given
When I perform
Then I expect
⚙ Engineering Details
Initial thoughts: new flag(s) to allow someone to specify reporting type: (cumulative, batch, both), and select the batching "chunks" (default: 1000 files)
🎉 I&T
No response

Status: @collinss-jpl encountered a potential snag in the batching feature, limits maximum batch size (250-300 files). looking to do some more profiling to determine the limitations.


cdec-decoder.org hacked?

Either cdec got some e-sport corporate sponsors, or someone prepended ad copy (and affiliate links) for computer peripherals to every page. Probably a good time to update the Wordpress installation...

This is still an issue :-O
Really unfortunate -- can somebody take a look and clean up the website?


Standardize number of lines between module-level docstring and first import

Currently, the below three snippets are all valid.
"""My module."
import os

"""My module."

import os

"""My module."

import os

Is it possible to standardize to some convention? I don't have a preference for which format is best. In my experience, this is the only remaining nonstandardized import whitespace "issue".
Many thanks!

Would you expect this to be enforced by an existing lint rule, a new lint rule, or our formatter?

I don't see an existing lint rule for this. I don't have a strong expectation around how it would be implemented, although it seems like it could be a part of ruff's isort functionality?

Do you mean something like this #3759 ?

Yes exactly. I can close this issue since it's duplicated.


[bug][v9] Merchant View, rolltable to inventory

Describe the bug
Users described an issue when the sheet is set to "merchant".
It seems that in the population of items within that view is bugged.
To Reproduce
Steps to reproduce the behavior:

Go to a NPC sheet
Click on GM Sidebar
Pick merchant type
Try to populate

Expected behavior
Items get added to the inventory with the results from the table.

In addition to this which might be related, having the clear inventory checkbox enabled doesnt clear the inventory either.

fvtt v8 latest
latest module version as of 01/01/2022

the rolltable is in a compedium, and it has nested rolltables inside.
population of items fails even if the rolltable is in the rolltable directory instead of compendium.
i think the tables being nested is causing the issue, not sure if it relates to issue#232 but wanted to check before opening another one.

fvtt v8 latest
latest module version as of 01/01/2022

the rolltable is in a compedium, and it has nested rolltables inside.
population of items fails even if the rolltable is in the rolltable directory instead of compendium.
i think the tables being nested is causing the issue, not sure if it relates to issue#232 but wanted to check before opening another one.

solved by enabling "use better tables" please disregard!

solved by enabling "use better tables" please disregard!

Great to hear that it works with better rolltables.
I personally absolutely recommend the usage of BetterRolltables. For example it automatically creates scrolls from spell compendia. Next version will, for now convert any scene or actor to a 'portrait of actor' or 'map of scenename'.
I guess because of me always using BRT, I forgot to actually take a good look at the LS NPC internal loot population.
I will aim to bring a debug and test functionality without BRT for the next release.
Throughout the code, there where quite some little bugs. And while I'm terribly sorry for an inconveniences after the refactoring. I still think it was the best course of Action to get the refactoring out there before v9 is in heavy use.
The module should v9 compatible with the next Version. And I will start to develop on v9 very soon.
I'll leave this issue open for a bit longer. For documentation.
But I sure hope that in the coming week most issues will be closed and reason to create new ones are mostly gone.
We already got some more features in mind. For when the bugs are gone.
First looks suggest that even selling to a merchant could be included soonish.
I spoke to the Regions developer, the Quick Encounter dev and some more. For alot of them integration with the lootsheet offers  a very cool potential new feature set. I hope/think that devs will make greate use of the added API.
An update for the lootsheet generated chat messages will definitely ship with the next release. As well as coloring item rarity.
In other words, I'm positive 😅

Great to hear that it works with better rolltables.
I personally absolutely recommend the usage of BetterRolltables. For example it automatically creates scrolls from spell compendia. Next version will, for now convert any scene or actor to a 'portrait of actor' or 'map of scenename'.
I guess because of me always using BRT, I forgot to actually take a good look at the LS NPC internal loot population.
I will aim to bring a debug and test functionality without BRT for the next release.
Throughout the code, there where quite some little bugs. And while I'm terribly sorry for an inconveniences after the refactoring. I still think it was the best course of Action to get the refactoring out there before v9 is in heavy use.
The module should v9 compatible with the next Version. And I will start to develop on v9 very soon.
I'll leave this issue open for a bit longer. For documentation.
But I sure hope that in the coming week most issues will be closed and reason to create new ones are mostly gone.
We already got some more features in mind. For when the bugs are gone.
First looks suggest that even selling to a merchant could be included soonish.
I spoke to the Regions developer, the Quick Encounter dev and some more. For alot of them integration with the lootsheet offers  a very cool potential new feature set. I hope/think that devs will make greate use of the added API.
An update for the lootsheet generated chat messages will definitely ship with the next release. As well as coloring item rarity.
In other words, I'm positive 😅

I am having much the same issue, though I should note turning on better roll tables only partial fixes the problem for me. It only rolls up one item with quantity of one no matter what the settings are.

I can confirm this is happening still.  Here are the issues I've seen.
When Checking Clear Inventory, you get this error (only if inventory exists):

When selecting one of the default roll tables in a compendium there are no errors, but nothing gets populated:

When using BetterRollTables as stated by others, it works, but only one item of quantity 1 is created:


Some small fixes

Make fishing spots in alkharid work & static
Make draynor spots static
Add a message for not enough clay on forming

Input a fix for bone burying leaving the player in a locked state.

Modify ::players command to use a map for the players list, sends proper lines for each player so that they don't disappear when scrolling.

Add some sound to cooking


Missing documentation on Package Extension uap8:dataprotection

The UAP8 schema references ST_ExtensionCatergory_UAP8 in the AppXManifest Types and includes a package level extension with category "winodws.dataProtection".  There is no documentation in the area of this page for this extension
(Note: Uap7 does include a windows.enterpriseDataProtection, which is presumed to be different).

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

ID: 955e39c1-c468-2323-31d8-dd4cf7b691f4
Version Independent ID: 0feeea15-a804-baa2-b92a-fedb78d7729b
Content: Extensions (in Package) (Windows 10) - Windows UWP applications
Content Source: winrt-related-src/schemas/appxpackage/uapmanifestschema/element-extensions.md
Product: uwp
Technology: winrt-reference
GitHub Login: @mcleanbyron
Microsoft Alias: mcleans

Thanks for the feedback. The uap8 package extension and the associated DataProtection element have been documented:
https://docs.microsoft.com/en-us/uwp/schemas/appxpackage/uapmanifestschema/element-uap8-package-extension


deepcopying variable raises TypeError: h5py objects cannot be pickled (Dataset.sortby)

What happened:
When using xr.open_dataset with H5NetCDFDataStore and opened h5py.File handle deepcopy in Dataset.sortby/align leads to TypeError: h5py objects cannot be pickled.
What you expected to happen:
While applying Dataset.sortby no error should be raised.
Minimal Complete Verifiable Example:
# create hdf5 file
import h5py
f = h5py.File('myfile.h5','w')
dset = f.create_dataset("data", (360, 1000))
f.close()

import h5netcdf
import xarray as xr

f = h5netcdf.File("myfile.h5", "r", phony_dims="access")
s0 = xr.backends.H5NetCDFStore(f)
ds = xr.open_dataset(s0, engine="h5netcdf", chunks=None)
ds = ds.assign_coords({"phony_dim_0": np.arange(ds.dims['phony_dim_0'], 0, -1)})
ds.sortby('phony_dim_0')
ds.close()

Error Traceback

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-6-0e1377169cb3> in <module>
      5 ds = xr.open_dataset(s0, engine="h5netcdf", chunks=None)
      6 ds = ds.assign_coords({"phony_dim_0": np.arange(ds.dims['phony_dim_0'], 0, -1)})
----> 7 ds.sortby('phony_dim_0')
      8 ds.close()

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/site-packages/xarray-0.16.1.dev86+g264fdb29-py3.8.egg/xarray/core/dataset.py in sortby(self, variables, ascending)
   5293             variables = variables
   5294         variables = [v if isinstance(v, DataArray) else self[v] for v in variables]
-> 5295         aligned_vars = align(self, *variables, join="left")
   5296         aligned_self = aligned_vars[0]
   5297         aligned_other_vars = aligned_vars[1:]

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/site-packages/xarray-0.16.1.dev86+g264fdb29-py3.8.egg/xarray/core/alignment.py in align(join, copy, indexes, exclude, fill_value, *objects)
    336         if not valid_indexers:
    337             # fast path for no reindexing necessary
--> 338             new_obj = obj.copy(deep=copy)
    339         else:
    340             new_obj = obj.reindex(copy=copy, fill_value=fill_value, **valid_indexers)

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/site-packages/xarray-0.16.1.dev86+g264fdb29-py3.8.egg/xarray/core/dataset.py in copy(self, deep, data)
   1076         """
   1077         if data is None:
-> 1078             variables = {k: v.copy(deep=deep) for k, v in self._variables.items()}
   1079         elif not utils.is_dict_like(data):
   1080             raise ValueError("Data must be dict-like")

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/site-packages/xarray-0.16.1.dev86+g264fdb29-py3.8.egg/xarray/core/dataset.py in <dictcomp>(.0)
   1076         """
   1077         if data is None:
-> 1078             variables = {k: v.copy(deep=deep) for k, v in self._variables.items()}
   1079         elif not utils.is_dict_like(data):
   1080             raise ValueError("Data must be dict-like")

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/site-packages/xarray-0.16.1.dev86+g264fdb29-py3.8.egg/xarray/core/variable.py in copy(self, deep, data)
    938
    939             if deep:
--> 940                 data = copy.deepcopy(data)
    941
    942         else:

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in deepcopy(x, memo, _nil)
    170                     y = x
    171                 else:
--> 172                     y = _reconstruct(x, memo, *rv)
    173
    174     # If is its own copy, don't memoize.

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in _reconstruct(x, memo, func, args, state, listiter, dictiter, deepcopy)
    268     if state is not None:
    269         if deep:
--> 270             state = deepcopy(state, memo)
    271         if hasattr(y, '__setstate__'):
    272             y.__setstate__(state)

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in deepcopy(x, memo, _nil)
    144     copier = _deepcopy_dispatch.get(cls)
    145     if copier is not None:
--> 146         y = copier(x, memo)
    147     else:
    148         if issubclass(cls, type):

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in _deepcopy_tuple(x, memo, deepcopy)
    208
    209 def _deepcopy_tuple(x, memo, deepcopy=deepcopy):
--> 210     y = [deepcopy(a, memo) for a in x]
    211     # We're not going to put the tuple in the memo, but it's still important we
    212     # check for it, in case the tuple contains recursive mutable structures.

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in <listcomp>(.0)
    208
    209 def _deepcopy_tuple(x, memo, deepcopy=deepcopy):
--> 210     y = [deepcopy(a, memo) for a in x]
    211     # We're not going to put the tuple in the memo, but it's still important we
    212     # check for it, in case the tuple contains recursive mutable structures.

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in deepcopy(x, memo, _nil)
    144     copier = _deepcopy_dispatch.get(cls)
    145     if copier is not None:
--> 146         y = copier(x, memo)
    147     else:
    148         if issubclass(cls, type):

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in _deepcopy_dict(x, memo, deepcopy)
    228     memo[id(x)] = y
    229     for key, value in x.items():
--> 230         y[deepcopy(key, memo)] = deepcopy(value, memo)
    231     return y
    232 d[dict] = _deepcopy_dict

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in deepcopy(x, memo, _nil)
    170                     y = x
    171                 else:
--> 172                     y = _reconstruct(x, memo, *rv)
    173
    174     # If is its own copy, don't memoize.

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in _reconstruct(x, memo, func, args, state, listiter, dictiter, deepcopy)
    268     if state is not None:
    269         if deep:
--> 270             state = deepcopy(state, memo)
    271         if hasattr(y, '__setstate__'):
    272             y.__setstate__(state)

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in deepcopy(x, memo, _nil)
    144     copier = _deepcopy_dispatch.get(cls)
    145     if copier is not None:
--> 146         y = copier(x, memo)
    147     else:
    148         if issubclass(cls, type):

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in _deepcopy_tuple(x, memo, deepcopy)
    208
    209 def _deepcopy_tuple(x, memo, deepcopy=deepcopy):
--> 210     y = [deepcopy(a, memo) for a in x]
    211     # We're not going to put the tuple in the memo, but it's still important we
    212     # check for it, in case the tuple contains recursive mutable structures.

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in <listcomp>(.0)
    208
    209 def _deepcopy_tuple(x, memo, deepcopy=deepcopy):
--> 210     y = [deepcopy(a, memo) for a in x]
    211     # We're not going to put the tuple in the memo, but it's still important we
    212     # check for it, in case the tuple contains recursive mutable structures.

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in deepcopy(x, memo, _nil)
    144     copier = _deepcopy_dispatch.get(cls)
    145     if copier is not None:
--> 146         y = copier(x, memo)
    147     else:
    148         if issubclass(cls, type):

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in _deepcopy_dict(x, memo, deepcopy)
    228     memo[id(x)] = y
    229     for key, value in x.items():
--> 230         y[deepcopy(key, memo)] = deepcopy(value, memo)
    231     return y
    232 d[dict] = _deepcopy_dict

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in deepcopy(x, memo, _nil)
    170                     y = x
    171                 else:
--> 172                     y = _reconstruct(x, memo, *rv)
    173
    174     # If is its own copy, don't memoize.

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in _reconstruct(x, memo, func, args, state, listiter, dictiter, deepcopy)
    268     if state is not None:
    269         if deep:
--> 270             state = deepcopy(state, memo)
    271         if hasattr(y, '__setstate__'):
    272             y.__setstate__(state)

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in deepcopy(x, memo, _nil)
    144     copier = _deepcopy_dispatch.get(cls)
    145     if copier is not None:
--> 146         y = copier(x, memo)
    147     else:
    148         if issubclass(cls, type):

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in _deepcopy_tuple(x, memo, deepcopy)
    208
    209 def _deepcopy_tuple(x, memo, deepcopy=deepcopy):
--> 210     y = [deepcopy(a, memo) for a in x]
    211     # We're not going to put the tuple in the memo, but it's still important we
    212     # check for it, in case the tuple contains recursive mutable structures.

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in <listcomp>(.0)
    208
    209 def _deepcopy_tuple(x, memo, deepcopy=deepcopy):
--> 210     y = [deepcopy(a, memo) for a in x]
    211     # We're not going to put the tuple in the memo, but it's still important we
    212     # check for it, in case the tuple contains recursive mutable structures.

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in deepcopy(x, memo, _nil)
    144     copier = _deepcopy_dispatch.get(cls)
    145     if copier is not None:
--> 146         y = copier(x, memo)
    147     else:
    148         if issubclass(cls, type):

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in _deepcopy_dict(x, memo, deepcopy)
    228     memo[id(x)] = y
    229     for key, value in x.items():
--> 230         y[deepcopy(key, memo)] = deepcopy(value, memo)
    231     return y
    232 d[dict] = _deepcopy_dict

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in deepcopy(x, memo, _nil)
    170                     y = x
    171                 else:
--> 172                     y = _reconstruct(x, memo, *rv)
    173
    174     # If is its own copy, don't memoize.

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in _reconstruct(x, memo, func, args, state, listiter, dictiter, deepcopy)
    268     if state is not None:
    269         if deep:
--> 270             state = deepcopy(state, memo)
    271         if hasattr(y, '__setstate__'):
    272             y.__setstate__(state)

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in deepcopy(x, memo, _nil)
    144     copier = _deepcopy_dispatch.get(cls)
    145     if copier is not None:
--> 146         y = copier(x, memo)
    147     else:
    148         if issubclass(cls, type):

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in _deepcopy_tuple(x, memo, deepcopy)
    208
    209 def _deepcopy_tuple(x, memo, deepcopy=deepcopy):
--> 210     y = [deepcopy(a, memo) for a in x]
    211     # We're not going to put the tuple in the memo, but it's still important we
    212     # check for it, in case the tuple contains recursive mutable structures.

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in <listcomp>(.0)
    208
    209 def _deepcopy_tuple(x, memo, deepcopy=deepcopy):
--> 210     y = [deepcopy(a, memo) for a in x]
    211     # We're not going to put the tuple in the memo, but it's still important we
    212     # check for it, in case the tuple contains recursive mutable structures.

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in deepcopy(x, memo, _nil)
    144     copier = _deepcopy_dispatch.get(cls)
    145     if copier is not None:
--> 146         y = copier(x, memo)
    147     else:
    148         if issubclass(cls, type):

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in _deepcopy_dict(x, memo, deepcopy)
    228     memo[id(x)] = y
    229     for key, value in x.items():
--> 230         y[deepcopy(key, memo)] = deepcopy(value, memo)
    231     return y
    232 d[dict] = _deepcopy_dict

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in deepcopy(x, memo, _nil)
    170                     y = x
    171                 else:
--> 172                     y = _reconstruct(x, memo, *rv)
    173
    174     # If is its own copy, don't memoize.

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in _reconstruct(x, memo, func, args, state, listiter, dictiter, deepcopy)
    268     if state is not None:
    269         if deep:
--> 270             state = deepcopy(state, memo)
    271         if hasattr(y, '__setstate__'):
    272             y.__setstate__(state)

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in deepcopy(x, memo, _nil)
    144     copier = _deepcopy_dispatch.get(cls)
    145     if copier is not None:
--> 146         y = copier(x, memo)
    147     else:
    148         if issubclass(cls, type):

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in _deepcopy_tuple(x, memo, deepcopy)
    208
    209 def _deepcopy_tuple(x, memo, deepcopy=deepcopy):
--> 210     y = [deepcopy(a, memo) for a in x]
    211     # We're not going to put the tuple in the memo, but it's still important we
    212     # check for it, in case the tuple contains recursive mutable structures.

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in <listcomp>(.0)
    208
    209 def _deepcopy_tuple(x, memo, deepcopy=deepcopy):
--> 210     y = [deepcopy(a, memo) for a in x]
    211     # We're not going to put the tuple in the memo, but it's still important we
    212     # check for it, in case the tuple contains recursive mutable structures.

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in deepcopy(x, memo, _nil)
    144     copier = _deepcopy_dispatch.get(cls)
    145     if copier is not None:
--> 146         y = copier(x, memo)
    147     else:
    148         if issubclass(cls, type):

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in _deepcopy_dict(x, memo, deepcopy)
    228     memo[id(x)] = y
    229     for key, value in x.items():
--> 230         y[deepcopy(key, memo)] = deepcopy(value, memo)
    231     return y
    232 d[dict] = _deepcopy_dict

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in deepcopy(x, memo, _nil)
    170                     y = x
    171                 else:
--> 172                     y = _reconstruct(x, memo, *rv)
    173
    174     # If is its own copy, don't memoize.

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in _reconstruct(x, memo, func, args, state, listiter, dictiter, deepcopy)
    268     if state is not None:
    269         if deep:
--> 270             state = deepcopy(state, memo)
    271         if hasattr(y, '__setstate__'):
    272             y.__setstate__(state)

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in deepcopy(x, memo, _nil)
    144     copier = _deepcopy_dispatch.get(cls)
    145     if copier is not None:
--> 146         y = copier(x, memo)
    147     else:
    148         if issubclass(cls, type):

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in _deepcopy_dict(x, memo, deepcopy)
    228     memo[id(x)] = y
    229     for key, value in x.items():
--> 230         y[deepcopy(key, memo)] = deepcopy(value, memo)
    231     return y
    232 d[dict] = _deepcopy_dict

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in deepcopy(x, memo, _nil)
    170                     y = x
    171                 else:
--> 172                     y = _reconstruct(x, memo, *rv)
    173
    174     # If is its own copy, don't memoize.

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in _reconstruct(x, memo, func, args, state, listiter, dictiter, deepcopy)
    268     if state is not None:
    269         if deep:
--> 270             state = deepcopy(state, memo)
    271         if hasattr(y, '__setstate__'):
    272             y.__setstate__(state)

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in deepcopy(x, memo, _nil)
    144     copier = _deepcopy_dispatch.get(cls)
    145     if copier is not None:
--> 146         y = copier(x, memo)
    147     else:
    148         if issubclass(cls, type):

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in _deepcopy_dict(x, memo, deepcopy)
    228     memo[id(x)] = y
    229     for key, value in x.items():
--> 230         y[deepcopy(key, memo)] = deepcopy(value, memo)
    231     return y
    232 d[dict] = _deepcopy_dict

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in deepcopy(x, memo, _nil)
    159                     reductor = getattr(x, "__reduce_ex__", None)
    160                     if reductor is not None:
--> 161                         rv = reductor(4)
    162                     else:
    163                         reductor = getattr(x, "__reduce__", None)

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/site-packages/h5py/_hl/base.py in __getnewargs__(self)
    306         limitations, look at the h5pickle project on PyPI.
    307         """
--> 308         raise TypeError("h5py objects cannot be pickled")
    309
    310     def __getstate__(self):

TypeError: h5py objects cannot be pickled

Anything else we need to know?:
When invoked with chunks={} it works as well as if the following code is used:
ds = xr.open_dataset('myfile.h5', group='/', engine='h5netcdf', backend_kwargs=dict(phony_dims='access'))
ds = ds.assign_coords({"phony_dim_0": np.arange(ds.dims['phony_dim_0'], 0, -1)})
ds.sortby('phony_dim_0')
ds.close()

This was introduced by #4221, see https://github.com/pydata/xarray/blob/66ab0ae4f3aa3c461357a5a895405e81357796b1/xarray/core/variable.py#L939-L941
Before:
            if deep and (
                hasattr(data, "__array_function__")
                or isinstance(data, dask_array_type)
                or (not IS_NEP18_ACTIVE and isinstance(data, np.ndarray))
            ):
                data = copy.deepcopy(data)

All three of the above tests return False in my case, so deepcopy should never be used here.
Environment:
Output of xr.show_versions()

INSTALLED VERSIONS
commit: None
python: 3.8.5 | packaged by conda-forge | (default, Aug 29 2020, 01:22:49)
[GCC 7.5.0]
python-bits: 64
OS: Linux
OS-release: 4.12.14-lp151.28.67-default
machine: x86_64
processor: x86_64
byteorder: little
LC_ALL: None
LANG: de_DE.UTF-8
LOCALE: de_DE.UTF-8
libhdf5: 1.10.6
libnetcdf: 4.7.4
xarray: 0.16.1.dev86+g264fdb29
pandas: 1.1.1
numpy: 1.19.1
scipy: 1.5.0
netCDF4: 1.5.4
pydap: None
h5netcdf: 0.8.0
h5py: 2.10.0
Nio: None
zarr: 2.4.0
cftime: 1.2.1
nc_time_axis: None
PseudoNetCDF: None
rasterio: None
cfgrib: <IP_ADDRESS>
iris: None
bottleneck: 1.3.2
dask: 2.19.0
distributed: 2.25.0
matplotlib: 3.3.1
cartopy: 0.18.0
seaborn: None
numbagg: None
pint: None
setuptools: 49.6.0.post20200814
pip: 20.2.2
conda: 4.8.3
pytest: 5.4.3
IPython: 7.18.1
sphinx: None

Please also see these comments and those comments in #4221 by @keewis and @shoyer, which led to the current state of that deepcopy.
Any idea how to fix this for the above use case?

I've tried to dig a bit deeper, this happens if I apply this for the NetCDF4DataStore:
import netCDF4 as nc
f = nc.Dataset("myfile.h5", mode="r")
s0 = xr.backends.NetCDF4DataStore(f)
ds = xr.open_dataset(s0, engine="netcdf4", chunks=None)
ds = ds.assign_coords({"phony_dim_0": np.arange(ds.dims['phony_dim_0'], 0, -1)})
ds.sortby('phony_dim_0')
ds.close()

netCDF4/_netCDF4.pyx in netCDF4._netCDF4.Dataset.__reduce__()

NotImplementedError: Dataset is not picklable

I think there must be something wrong with using the open file handles compared to the normal xr.open_dataset. Any thoughts?
Error Traceback

---------------------------------------------------------------------------
NotImplementedError                       Traceback (most recent call last)
<ipython-input-4-b0e55062ef80> in <module>
      1 #ds.load()
----> 2 ds.sortby('phony_dim_0')
      3 ds.close()

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/site-packages/xarray-0.16.1.dev86+g264fdb29-py3.8.egg/xarray/core/dataset.py in sortby(self, variables, ascending)
   5293             variables = variables
   5294         variables = [v if isinstance(v, DataArray) else self[v] for v in variables]
-> 5295         aligned_vars = align(self, *variables, join="left")
   5296         aligned_self = aligned_vars[0]
   5297         aligned_other_vars = aligned_vars[1:]

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/site-packages/xarray-0.16.1.dev86+g264fdb29-py3.8.egg/xarray/core/alignment.py in align(join, copy, indexes, exclude, fill_value, *objects)
    336         if not valid_indexers:
    337             # fast path for no reindexing necessary
--> 338             new_obj = obj.copy(deep=copy)
    339         else:
    340             new_obj = obj.reindex(copy=copy, fill_value=fill_value, **valid_indexers)

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/site-packages/xarray-0.16.1.dev86+g264fdb29-py3.8.egg/xarray/core/dataset.py in copy(self, deep, data)
   1076         """
   1077         if data is None:
-> 1078             variables = {k: v.copy(deep=deep) for k, v in self._variables.items()}
   1079         elif not utils.is_dict_like(data):
   1080             raise ValueError("Data must be dict-like")

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/site-packages/xarray-0.16.1.dev86+g264fdb29-py3.8.egg/xarray/core/dataset.py in <dictcomp>(.0)
   1076         """
   1077         if data is None:
-> 1078             variables = {k: v.copy(deep=deep) for k, v in self._variables.items()}
   1079         elif not utils.is_dict_like(data):
   1080             raise ValueError("Data must be dict-like")

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/site-packages/xarray-0.16.1.dev86+g264fdb29-py3.8.egg/xarray/core/variable.py in copy(self, deep, data)
    938
    939             if deep:
--> 940                 data = copy.deepcopy(data)
    941
    942         else:

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in deepcopy(x, memo, _nil)
    170                     y = x
    171                 else:
--> 172                     y = _reconstruct(x, memo, *rv)
    173
    174     # If is its own copy, don't memoize.

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in _reconstruct(x, memo, func, args, state, listiter, dictiter, deepcopy)
    268     if state is not None:
    269         if deep:
--> 270             state = deepcopy(state, memo)
    271         if hasattr(y, '__setstate__'):
    272             y.__setstate__(state)

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in deepcopy(x, memo, _nil)
    144     copier = _deepcopy_dispatch.get(cls)
    145     if copier is not None:
--> 146         y = copier(x, memo)
    147     else:
    148         if issubclass(cls, type):

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in _deepcopy_tuple(x, memo, deepcopy)
    208
    209 def _deepcopy_tuple(x, memo, deepcopy=deepcopy):
--> 210     y = [deepcopy(a, memo) for a in x]
    211     # We're not going to put the tuple in the memo, but it's still important we
    212     # check for it, in case the tuple contains recursive mutable structures.

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in <listcomp>(.0)
    208
    209 def _deepcopy_tuple(x, memo, deepcopy=deepcopy):
--> 210     y = [deepcopy(a, memo) for a in x]
    211     # We're not going to put the tuple in the memo, but it's still important we
    212     # check for it, in case the tuple contains recursive mutable structures.

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in deepcopy(x, memo, _nil)
    144     copier = _deepcopy_dispatch.get(cls)
    145     if copier is not None:
--> 146         y = copier(x, memo)
    147     else:
    148         if issubclass(cls, type):

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in _deepcopy_dict(x, memo, deepcopy)
    228     memo[id(x)] = y
    229     for key, value in x.items():
--> 230         y[deepcopy(key, memo)] = deepcopy(value, memo)
    231     return y
    232 d[dict] = _deepcopy_dict

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in deepcopy(x, memo, _nil)
    170                     y = x
    171                 else:
--> 172                     y = _reconstruct(x, memo, *rv)
    173
    174     # If is its own copy, don't memoize.

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in _reconstruct(x, memo, func, args, state, listiter, dictiter, deepcopy)
    268     if state is not None:
    269         if deep:
--> 270             state = deepcopy(state, memo)
    271         if hasattr(y, '__setstate__'):
    272             y.__setstate__(state)

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in deepcopy(x, memo, _nil)
    144     copier = _deepcopy_dispatch.get(cls)
    145     if copier is not None:
--> 146         y = copier(x, memo)
    147     else:
    148         if issubclass(cls, type):

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in _deepcopy_tuple(x, memo, deepcopy)
    208
    209 def _deepcopy_tuple(x, memo, deepcopy=deepcopy):
--> 210     y = [deepcopy(a, memo) for a in x]
    211     # We're not going to put the tuple in the memo, but it's still important we
    212     # check for it, in case the tuple contains recursive mutable structures.

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in <listcomp>(.0)
    208
    209 def _deepcopy_tuple(x, memo, deepcopy=deepcopy):
--> 210     y = [deepcopy(a, memo) for a in x]
    211     # We're not going to put the tuple in the memo, but it's still important we
    212     # check for it, in case the tuple contains recursive mutable structures.

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in deepcopy(x, memo, _nil)
    144     copier = _deepcopy_dispatch.get(cls)
    145     if copier is not None:
--> 146         y = copier(x, memo)
    147     else:
    148         if issubclass(cls, type):

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in _deepcopy_dict(x, memo, deepcopy)
    228     memo[id(x)] = y
    229     for key, value in x.items():
--> 230         y[deepcopy(key, memo)] = deepcopy(value, memo)
    231     return y
    232 d[dict] = _deepcopy_dict

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in deepcopy(x, memo, _nil)
    170                     y = x
    171                 else:
--> 172                     y = _reconstruct(x, memo, *rv)
    173
    174     # If is its own copy, don't memoize.

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in _reconstruct(x, memo, func, args, state, listiter, dictiter, deepcopy)
    268     if state is not None:
    269         if deep:
--> 270             state = deepcopy(state, memo)
    271         if hasattr(y, '__setstate__'):
    272             y.__setstate__(state)

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in deepcopy(x, memo, _nil)
    144     copier = _deepcopy_dispatch.get(cls)
    145     if copier is not None:
--> 146         y = copier(x, memo)
    147     else:
    148         if issubclass(cls, type):

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in _deepcopy_tuple(x, memo, deepcopy)
    208
    209 def _deepcopy_tuple(x, memo, deepcopy=deepcopy):
--> 210     y = [deepcopy(a, memo) for a in x]
    211     # We're not going to put the tuple in the memo, but it's still important we
    212     # check for it, in case the tuple contains recursive mutable structures.

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in <listcomp>(.0)
    208
    209 def _deepcopy_tuple(x, memo, deepcopy=deepcopy):
--> 210     y = [deepcopy(a, memo) for a in x]
    211     # We're not going to put the tuple in the memo, but it's still important we
    212     # check for it, in case the tuple contains recursive mutable structures.

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in deepcopy(x, memo, _nil)
    144     copier = _deepcopy_dispatch.get(cls)
    145     if copier is not None:
--> 146         y = copier(x, memo)
    147     else:
    148         if issubclass(cls, type):

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in _deepcopy_dict(x, memo, deepcopy)
    228     memo[id(x)] = y
    229     for key, value in x.items():
--> 230         y[deepcopy(key, memo)] = deepcopy(value, memo)
    231     return y
    232 d[dict] = _deepcopy_dict

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in deepcopy(x, memo, _nil)
    170                     y = x
    171                 else:
--> 172                     y = _reconstruct(x, memo, *rv)
    173
    174     # If is its own copy, don't memoize.

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in _reconstruct(x, memo, func, args, state, listiter, dictiter, deepcopy)
    268     if state is not None:
    269         if deep:
--> 270             state = deepcopy(state, memo)
    271         if hasattr(y, '__setstate__'):
    272             y.__setstate__(state)

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in deepcopy(x, memo, _nil)
    144     copier = _deepcopy_dispatch.get(cls)
    145     if copier is not None:
--> 146         y = copier(x, memo)
    147     else:
    148         if issubclass(cls, type):

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in _deepcopy_tuple(x, memo, deepcopy)
    208
    209 def _deepcopy_tuple(x, memo, deepcopy=deepcopy):
--> 210     y = [deepcopy(a, memo) for a in x]
    211     # We're not going to put the tuple in the memo, but it's still important we
    212     # check for it, in case the tuple contains recursive mutable structures.

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in <listcomp>(.0)
    208
    209 def _deepcopy_tuple(x, memo, deepcopy=deepcopy):
--> 210     y = [deepcopy(a, memo) for a in x]
    211     # We're not going to put the tuple in the memo, but it's still important we
    212     # check for it, in case the tuple contains recursive mutable structures.

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in deepcopy(x, memo, _nil)
    144     copier = _deepcopy_dispatch.get(cls)
    145     if copier is not None:
--> 146         y = copier(x, memo)
    147     else:
    148         if issubclass(cls, type):

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in _deepcopy_dict(x, memo, deepcopy)
    228     memo[id(x)] = y
    229     for key, value in x.items():
--> 230         y[deepcopy(key, memo)] = deepcopy(value, memo)
    231     return y
    232 d[dict] = _deepcopy_dict

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in deepcopy(x, memo, _nil)
    170                     y = x
    171                 else:
--> 172                     y = _reconstruct(x, memo, *rv)
    173
    174     # If is its own copy, don't memoize.

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in _reconstruct(x, memo, func, args, state, listiter, dictiter, deepcopy)
    268     if state is not None:
    269         if deep:
--> 270             state = deepcopy(state, memo)
    271         if hasattr(y, '__setstate__'):
    272             y.__setstate__(state)

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in deepcopy(x, memo, _nil)
    144     copier = _deepcopy_dispatch.get(cls)
    145     if copier is not None:
--> 146         y = copier(x, memo)
    147     else:
    148         if issubclass(cls, type):

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in _deepcopy_tuple(x, memo, deepcopy)
    208
    209 def _deepcopy_tuple(x, memo, deepcopy=deepcopy):
--> 210     y = [deepcopy(a, memo) for a in x]
    211     # We're not going to put the tuple in the memo, but it's still important we
    212     # check for it, in case the tuple contains recursive mutable structures.

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in <listcomp>(.0)
    208
    209 def _deepcopy_tuple(x, memo, deepcopy=deepcopy):
--> 210     y = [deepcopy(a, memo) for a in x]
    211     # We're not going to put the tuple in the memo, but it's still important we
    212     # check for it, in case the tuple contains recursive mutable structures.

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in deepcopy(x, memo, _nil)
    144     copier = _deepcopy_dispatch.get(cls)
    145     if copier is not None:
--> 146         y = copier(x, memo)
    147     else:
    148         if issubclass(cls, type):

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in _deepcopy_dict(x, memo, deepcopy)
    228     memo[id(x)] = y
    229     for key, value in x.items():
--> 230         y[deepcopy(key, memo)] = deepcopy(value, memo)
    231     return y
    232 d[dict] = _deepcopy_dict

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in deepcopy(x, memo, _nil)
    170                     y = x
    171                 else:
--> 172                     y = _reconstruct(x, memo, *rv)
    173
    174     # If is its own copy, don't memoize.

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in _reconstruct(x, memo, func, args, state, listiter, dictiter, deepcopy)
    268     if state is not None:
    269         if deep:
--> 270             state = deepcopy(state, memo)
    271         if hasattr(y, '__setstate__'):
    272             y.__setstate__(state)

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in deepcopy(x, memo, _nil)
    144     copier = _deepcopy_dispatch.get(cls)
    145     if copier is not None:
--> 146         y = copier(x, memo)
    147     else:
    148         if issubclass(cls, type):

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in _deepcopy_dict(x, memo, deepcopy)
    228     memo[id(x)] = y
    229     for key, value in x.items():
--> 230         y[deepcopy(key, memo)] = deepcopy(value, memo)
    231     return y
    232 d[dict] = _deepcopy_dict

/home/kai/miniconda/envs/wradlib_devel/lib/python3.8/copy.py in deepcopy(x, memo, _nil)
    159                     reductor = getattr(x, "__reduce_ex__", None)
    160                     if reductor is not None:
--> 161                         rv = reductor(4)
    162                     else:
    163                         reductor = getattr(x, "__reduce__", None)

netCDF4/_netCDF4.pyx in netCDF4._netCDF4.Dataset.__reduce__()

NotImplementedError: Dataset is not picklable

OK, seems that the above code uses DummyFileManager instead of CachingFileManager for both backends...

Thanks for digging on this. I don't have an answer, but I wanted to tag as related to #4242.

Hmm. It appears that one advantage of the old implementation for is that it meant that calling copy with deep=True would always succeed.
See https://github.com/pydata/xarray/pull/4426 for a potential fix.


Enhance METviewer to aggregate and plot the HSS_EC statistic from the MCTS line type.

Describe the Enhancement
Heidke Skill Score is being updated to accommodate CPC needs. The MCTS line type in MET version 10.1.0 will include two new columns, HSS_EC and EC_VALUE. The EC_VALUE column may also be added to the MCTC line type to avoid making the EC_VALUE a new required configuration option.
MET issue to generate new statistics: dtcenter/MET#1749
METdatadb loader issue: dtcenter/METdatadb#54
METviewer should be enhanced to plot the HSS_EC statistic in the exact same way that the existing MCTS:HSS statistics is handled.
Will also need to enhance METcalcpy to updated the MCTC to MCTS aggregation logic:

When aggregating multiple MCTC lines, the dimensions and the EC_VALUE would need to remain the same.

Time Estimate
Estimate the amount of work required here.
Issues should represent approximately 1 to 3 days of work.
Sub-Issues
Consider breaking the enhancement down into sub-issues.

[ ] Add a checkbox for each sub-issue here.

Relevant Deadlines
List relevant project deadlines here or state NONE.
Funding Source
Define the source of funding and account keys here or state NONE.
Define the Metadata
Assignee

[x] Select engineer(s) or no engineer required: Tatiana
[x] Select scientist(s) or no scientist required: John O

Labels

[x] Select component(s)
[x] Select priority
[x] Select requestor(s)

Projects and Milestone

[x] Select Repository and/or Organization level Project(s) or add alert: NEED PROJECT ASSIGNMENT label
[x] Select Milestone as the next official version or Future Versions

Define Related Issue(s)
Consider the impact to the other METplus components.

[x] METplus, MET, METdatadb, METviewer, METexpress, METcalcpy, METplotpy

Enhancement Checklist
See the METplus Workflow for details.

[ ] Complete the issue definition above, including the Time Estimate and Funding Source.
[ ] Fork this repository or create a branch of develop.
Branch name: feature_<Issue Number>_<Description>
[ ] Complete the development and test your changes.
[ ] Add/update log messages for easier debugging.
[ ] Add/update unit tests.
[ ] Add/update documentation.
[ ] Push local changes to GitHub.
[ ] Submit a pull request to merge into develop.
Pull request: feature <Issue Number> <Description>
[ ] Define the pull request metadata, as permissions allow.
Select: Reviewer(s) and Linked issues
Select: Repository level development cycle Project for the next official release
Select: Milestone as the next official version
[ ] Iterate until the reviewer(s) accept and merge your changes.
[ ] Delete your fork or branch.
[ ] Close this issue.

Test data on kiowa
/d1/projects/MET/MET_pull_requests/met-10.1.0/met-10.1.0_beta1/feature_1749/MET-feature_1749_hss/test_output/grid_stat

4 new columns were added to the end of the mcts line type:
HSS_EC  HSS_EC_BCL HSS_EC_BCU EC_VALUE
grid_stat_GRIB1_NAM_STAGE4_120000L_20120409_120000V_mcts.txt

@TatianaBurek HSS_EC is computed by this function:
ContingencyTable::gheidke_ec(double ec_value)
To compute it from the MCTC line type, you'll need the counts of NxN table from that line plus the new EC_VALUE value from the last column. The EC_VALUE is a number between 0 and 1.
And compute HSS_EC = ( DIAG_COUNT - (EC_VALUE * N) ) / (N - (EC_VALUE * N)) where DIAG_COUNT is the sum of the counts on the diagonal and N is the sum of the counts across the whole MCTC table.

@JohnHalleyGotway
For the given data how do I calculate DIAG_COUNT and N:
i_value    j_valye    fi_oj
1             1             49519
1             2            225
1             3            294
1             4            184
2            1             69
2            2            19
2            3            68
2            4             67
3           1              9
3           2             14
3           3              32
3           4              41
4           1                0
4           2               0
4           3              0
4          4              0
DIAG_COUNT = (i_value=1, j_valye=1) +(i_value=2, j_valye=2)+ (i_value=3, j_valye=3)+(i_value=4, j_valye=4) =49519+19+32+0   ???
N=49519+225+294+184.....    ???

@TatianaBurek yes, you've got it exactly right. DIAG_COUNT is the sum of counts where i == j and N is the sum of all counts. Assuming EC_VALUE = 0.25 for this line, we'd have:
DIAG_COUNT = 49519 + 19 + 32 + 0 = 49570
N = 50541
EC_VALUE = 0.25
HSS_EC = ( 49570 - (0.25 * 50541) ) / (50541 - (0.25 * 50541)) = 36934.75 / 37905.75 = 0.97438

@JohnHalleyGotway
Is the N_CAT value (Dimension of the contingency table) has to be the same for all individual series or it can be different?
Similar to PCT thresholds

@TatianaBurek, yes, when aggregating multiple MCTC lines together, I do think it makes sense to require that N_CAT remain constant across the input lines. In fact, I expect that typically, the actual thresholds listed in the FCST_THRESH and OBS_THRESH columns would also remain constant. However, if we're not enforcing that requirement in the aggregation of PCT lines, let's not enforce it when aggregating MCTC lines either.
If the script already has the FCST_THRESH and OBS_THRESH columns available to it, you could add a check to see if the string remain constant (separate for FCST_THRESH and OBS_THRESH). And if not, print a warning message to the plot log file about that.

@JohnHalleyGotway
What if I have more then one rows of data. Each row has it's own counts table and I have n-number of tables. How do I calculate HSS_EC for all rows?
Calculate HSS_EC for the each row and then calculate mean? But this is like the summary statistics...

The exact same aggregation vs summary logic that we use for CTC counts/CTS stats, and for SL1L2 sums/CNT stats, and for PCT counts/PSTD stats applies here.
The "summary" method for HSS_EC would be to compute the stat separately for each input line and then report the mean or median of those scores, based on the user configuration.
The "aggregation" method would be to first aggregate those multiple MCTC lines into one large one, and the derive a single aggregated HSS_EC statistic.
The MCTC aggregation logic is exactly the same as what we do for CTC and PCT... just sum up each cell of the table as well as the TOTAL count.
The same logic should apply to any of the other MCTS statistics that METviewer is serving up.

I only have a formula for  HSS_EC.
What are other stats and how to calculate them?

The other MCTS stats can be found in:
https://met.readthedocs.io/en/latest/Users_Guide/point-stat.html#id13
The MCTS stats that could be added are ACC, HK, HSS, and GER. Since we're
adding HSS_EC for this issue, it does seem like we should add HSS. ACC is
very easy (just the percent of counts on the diagonal), but the computation
of HK, HSS, and GER are much less so.
This definitely would be scope creep for this issue. One option would be
adding HSS_EC and HSS here, and write up another issue for adding the
others. But I'd recommend talking to Tara to prioritize that work in the
context of other tasks.
FYI, the code which computes these stats can be found in this file:
https://github.com/dtcenter/MET/blob/main_v10.0/met/src/libcode/vx_statistics/contable_stats.cc
On Thu, Jul 22, 2021 at 8:17 AM Tatiana Burek @.***>
wrote:

I only have a formula for HSS_EC.
What are other stats and how to calculate them?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/dtcenter/METviewer/issues/285#issuecomment-884949751,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AFA4HKCYALMZNFJPNQ77LATTZASAPANCNFSM46KMK4HQ
.

I created a separate issue related to the adding other stats:
https://github.com/dtcenter/METviewer/issues/314

We're not enforcing the requirement of FCST_THRESH and OBS_THRESH columns  being constant in the aggregation of PCT lines so I do not enforce it when aggregating MCTC lines either.


WIP: Save to flash on brocade switch

In response to issue #899

Please don't judge me for using pexpect for getting the startup-config file in the brocade driver. That was  the only way to do it, I figured.

The method get_config() of brocade is kinda gross right now and needs some work, but I am opening this PR to get feedback about the general approach.

tests/deployment/switch_config.py passed for this.

Current, I cannot offer a good review. Catching up with how switches have been used in hil generally.

@zenhack hey Ian, let me know if you are okay with this approach before I spend more time ironing this. A more careful review can be done when you have more time on hand. Thanks!

I'm okay with using the console interface to get the config if there's no way to do that via the http api. I'll do a proper review Monday sometime, sorry it's taken me a while to get to it.

That is a bit much. I don't like the idea of not checking it though.
My worry with just launching a thread is that we have no backpressure
then; theoretically requests could just keep piling up.
We could have one thread processing a queue:
https://docs.python.org/2/library/queue.html

..which we set a reasonable bound on, so we do have some backpressure,
though there will be no delay in the common case.
But I also don't like the complexity of that; it seems like it would be
hard to test. Additionally, I'm a bit bothered by the fact that saving
to flash is currently best-effort; we should think through the
implications of a failure + subsequent reset, and make sure we design
this in a way that doesn't open us up to vulnerabilities.

one fix to slightly alleviate this problem is to call save_config when we disconnect from the switch rather than every time we do a revert_port or modify_port, that way we only save after we perform a whole bunch of operations. I think we should do this in other switches too. Will think about your other concerns too.

Ran this by @okrieg today.
He feels that we shouldn't be saving the state to switch at all if we can't always guarantee that. We don't know how to handle the scenario if the save fails.
So what he suggested is that, when HIL is deployed on a switch, the startup-config should have all VLANs disabled on HIL controlled switchports (I remember @zenhack suggested this somewhere) so in case of power failures we fail safe. In addition to that, we provide an admin only API that restores the switch to a state what HIL thinks it should be in (that had been discussed before too).
I think these changes would obviate the need for switches having to save at all. Let's mull over it a little before we decide what to move forward with.
@xuhang57 please add if I missed something during the meeting.

I am gonna close this then.


Bump golang to v1.10 in install.md

Signed-off-by: TomSweeneyRedHat<EMAIL_ADDRESS>Bump Golang required version from 1.8 to 1.10.

/approve
LGTM

/lgtm


Add currently logged in user to the display

The UI should say something like "logged in as so-and-so". Also need to support display name rather than "official name". (E.g. in AD there is a display name concept that users want to use.)

TODO Migrate to UI

Migrated to seiso-ui repo.


Init errors

Prerequisites
affected version: 1.20.0
If chipmunk is failed to start (for example because config file was damaged, because of unexpected shutdown), chipmunk doesn't show any - silence.
Should at least error message with option: drop settings of chipmunk to default (or restore setting file).

resolved 1.20.3


Some sub modules does got missing after build ( on production )

after build vitedge does not handle modules that where importer by others. Here is the error I get when try to use vitedge with node (default example)
While building this error occurs
preferring built-in module 'querystring' over local alternative at '/Users/somedrive/Downloads/gn/node_modules/querystring/index.js', pass 'preferBuiltins: false' to disable this behavior or 'preferBuiltins: true' to disable this warning

 Cannot find package 'object-assign' imported from /Users/somedrive/Downloads/gn/dist/functions.js
code: 'ERR_MODULE_NOT_FOUND'

I am using a lib to connect to a database. When I move this same code to server/index.js (express) everything goes ok, but when I try to use into functions/api that error come out.
Here is how I call the lib
import ClickHouse from '@apla/clickhouse';
const ch = new ClickHouse({ host: 'localhost', port: 8123, user: 'default', password: 'justpass' });

The missing module is already installed by the main module (Clickhouse lib). It supposes to not ask to install it on our vitedge app.

@calebeaires Hi! Are you sure that package is installing the dependencies? I cannot see them here: https://github.com/apla/node-clickhouse/blob/master/package.json#L30
I think that package is using require (Common JS) to add polyfills conditionally at run time, which is not good for the static analysis that Rollup does. It should work if you install object-assign and buffer-indexof-polyfill manually. Otherwise, you can provide mockups when you call the plugin (using Rollup's Aliases):
vitedge({
      functions: {
        build: {
          resolve: {
            alias: [
              {
                find: 'buffer-indexof-polyfill',
                replacement: path.resolve(process.cwd(), 'empty.js'),
              },
              {
                find: 'object-assign',
                replacement: path.resolve(process.cwd(), 'empty.js'),
              },
            ],
          },
        },
      },
    })

Where empty.js is a dummy file that contains exports default {}.
Hope that helps!

It worked. I was using vite-ssr but vitedge has a functioning (API + Props) system that makes it easy to create projects.
Hope this project got a far future away...!
Thanks.


fix issue #134

QSL to support dashed keyname
fix full sync API timeout problem after add more k8s clusters
support special chars when QSL query is part of http URL
e.g<EMAIL_ADDRESS>

has the new return code tested with the current UI?


New create petition steps sequence

New petition create steps sequence:
create petition --> check your petition --> sign your petition --> make sure this is right (email replay)
PT: https://www.pivotaltracker.com/n/projects/307301/stories/96866290

One more thing that can be deleted, but :+1: on the rest.

thanks @h-lame! redundant class removed here: https://github.com/alphagov/e-petitions/commit/aa2b741c9802e6a4490d63eb861b8f9d82623322

:+1:


Subject Alt Name missing in sample server certificates

Great work!
It would be nice to be able to start testing the tool using your provided certs without browser errors on https interception requests :)
Currently due to a lack of a subject alt name, the browser won't really acknowledge server.crt as secure, and won't allow tls interception.
Please refer to stackoverflow-43665243

All certificates are now generated by the https://github.com/joeferner/node-http-mitm-proxy package.  You can import the middleman-proxy/.http-mitm-proxy/certs/ca.pem to your browser, so that the generated certificates are trusted by your browser.


Create analysis service

Analysis service that will take a collection of match data and will respond back analysis decision - if this player got boosted or not

first version with spikes was done


Pulling in upstream DMPRoadmap development branch

Pulling in changes from DMPRoadmap development that include upgrade to ruby 3, introduction of JSBundling and other infrastructure mods

already merged these in a separate PR


166 array and object every

Issue: #166

Hey @gavv updated the code according to our discussion. Do have a look

Thanks, LGTM!

@angshumanHalder, BTW, if you're interested to implement Transform() method that you suggested, you're welcome!
Note: I've just assigned @vtech6 is going to implement Filter: #169 (comment)

Sure.  I will take up the Transform method for both Array and objects

I've "unresolved" some discussion that may be useful for future readers.

Sure. I will take up the Transform method for both Array and objects

Cool, appreciate that!

I've "unresolved" some discussion that may be useful for future readers.

No worries. BTW do I need to create a ticket for the Transform implementation or will you create one and assign it to me?

BTW do I need to create a ticket [...]

Yes please, would be awesome

FYI: I've created discord chat for httpexpect. It can be used when we need more interactive discussion.

Follow-up issue: #184


Unshaky for Mac Boot Camp

Unshaky saved my live on my Mac. I installed Windows on my mac using Boot Camp and have hard times with this keyboard.
Is it possible to have Unshaky for Windows?

Glad to hear Unshaky has been helpful on your Mac. Currently, there are no plans to develop Unshaky for Windows, but you might find KeyDebouncer at https://github.com/mackncheesiest/KeyDebouncer useful as an alternative. I haven't tried it myself, but it could be a good solution for your needs.


translation missing

Before migration, our docs are automatically translated to other languages. For example, es-es/ locale used to have something in Spanish, but now it says "don't have version in this language, here's English".

Cory confirmed this was part of the repo migration. Final step is to add the localized repos to the English repo so they can sync.

@KittyYeungQ
The repo hadn't been onboarded to localization. That should be done as of a couple days ago, as Sunny reached out to be to give loc access.
@Bradben
@SunnyDeng

We still in the new repo onboarding process to loc pipeline due to HCS creation issue. That's why you don't see translation yet. The translation will be back soon after onboarding success.

@SunnyDeng - is there an ETA on when the next localization batch will run?

@Bradben we target to release the loc version in May.

@bradben @KittyYeungQ @SunnyDeng
Translation release slated for May. Closing as resolved.


[Feature] Priority loading of Features

-Updated to latest net7 and fluxor nugets
-Added PriorityLoad attribute for State Object Classes (not feature!)
-Updated example projects. See priority loading in console window.

For issue: https://github.com/Tailslide/fluxor-persist/issues/9


Update anim_utils.py

Get the ik_rot key value error in the ik_controls dictionary. These pictures are before and after correction.

There is no ikRot key in the currently defined ik_controls dictionary, and whether the arm component turns on the "Ik separated Trans and Rot ctl" option, the correct ik_rot value cannot be obtained, and the ikRot control cannot be obtained correctly.

Hello @ordinc  thanks for the PR! I will marge it now :)


Django 1.8 LTS

So 1.8 is on LTS support until at least April 2018. Is there any chance that we can get a 2.0.x release that supports 1.8?

I'm open to pull requests if you want to re-add support for Django 1.8. The thing is that Django 1.9 introduced the password validators setting, and I don't really see how to make it fit into 1.8 :/

Closing as 1.8 LTS is now done!


Rework comparisons in the docs of JAX vs. NumPy PRNG

Parts of the docs (https://jax.readthedocs.io/en/latest/key-concepts.html#pseudorandom-numbers, https://jax.readthedocs.io/en/latest/random-numbers.html) imply that NumPy PRNG needs global state. NumPy currently recommends passing around an (implicitly updated) local PRNG state, and we should update our docs so the comparison is more fair. (see https://github.com/jax-ml/jax/pull/24917#discussion_r1844596185).

I found the original issue: #11026


Bugfix json_object function check null nums error as return bool

What problem does this PR solve?
Related PR: #https://github.com/apache/doris/pull/34591/files
Problem Summary:
before the SQL report error, as it error change the simd::count_zero_num function return value static as bool,
so it run into the if check of (not_null_num < size).
but actual it's maybe return int type.
now:
mysql [(none)]>select json_object ( CONCAT('k',t.number%30926%3000 + 0),CONCAT('k',t.number%30926%3000 + 0,t.number%1000000) ) from numbers("number" = "2") t order by 1;
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| json_object(concat('k', cast((((number % 30926) % 3000) + 0) as VARCHAR(65533))), concat('k', cast((((number % 30926) % 3000) + 0) as VARCHAR(65533)), cast((number % 1000000) as VARCHAR(65533))), '66') |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| {"k0":"k00"}                                                                                |
| {"k1":"k11"}                                                                                |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.04 sec)

before:
mysql [(none)]>select json_object
    -> (
    -> CONCAT('k',t.number%30926%3000 + 0),CONCAT('k',t.number%30926%3000 + 0,t.number%1000000)
    -> )
    -> from numbers("number" = "2") t;
ERROR 1105 (HY000): errCode = 2, detailMessage = (<IP_ADDRESS>)[INTERNAL_ERROR]function json_object can not input null value , JSON documents may not contain NULL member names.
mysql [(none)]>

Release note
None
Check List (For Author)

Test

[x] Regression test
[ ] Unit Test
[ ] Manual test (add detailed scripts or steps below)
[ ] No need to test or manual test. Explain why:

[ ] This is a refactor/code format and no logic has been changed.
[ ] Previous test can cover this change.
[ ] No code files have been changed.
[ ] Other reason

Behavior changed:

[x] No.
[ ] Yes.

Does this need documentation?

[x] No.
[ ] Yes.

Check List (For Reviewer who merge this PR)

[ ] Confirm the release note
[ ] Confirm test cases
[ ] Confirm document
[ ] Add branch pick label

run buildall


Update README.md

This PR tries to summarize in lay terms roughly how we operate and how to get involved.

Looks good to me.
@MaineC , thank you for the addition.
@rrrutledge could you assign a reviewer?


Update stockfish-git.pacscript

Fixed the pacscript to be more up to date with the recent changes to make it build correctly. As pointed out, I also enabled internet so that the package can download the weights needed. Also changed my email.

Fix the title to conform to our standards, as explained in our docs. You can also look at past PRs to get an idea of how to format the title if you're unsure.

I thought that was only for the actual software getting updated, not the package itself, but I have changed it.


Update grpc-netty to 1.53.0

Updates io.grpc:grpc-netty from 1.52.1 to 1.53.0.
GitHub Release Notes - Version Diff
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!

Adjust future updates
Add this to your .scala-steward.conf file to ignore future updates of this dependency:
updates.ignore = [ { groupId = "io.grpc", artifactId = "grpc-netty" } ]

Or, add this to slow down future updates of this dependency:
dependencyOverrides = [{
  pullRequests = { frequency = "30 days" },
  dependency = { groupId = "io.grpc", artifactId = "grpc-netty" }
}]

labels: library-update, early-semver-minor, semver-spec-minor, commit-count:1

Codecov Report

Merging #2408 (5ae6513) into main (a04350f) will increase coverage by 0.00%.
The diff coverage is n/a.

@@           Coverage Diff           @@
##             main    #2408   +/-   ##
=======================================
  Coverage   78.46%   78.46%
=======================================
  Files         441      441
  Lines       15140    15140
  Branches     2075     2075
=======================================
+ Hits        11879    11880    +1
+ Misses       3261     3260    -1

Impacted Files
Coverage Δ

...a/at/forsyte/apalache/tla/lir/TlaLevelFinder.scala
95.83% <0.00%> (+2.08%)
:arrow_up:

:mega: We’re building smart automated test selection to slash your CI/CD build times. Learn more


Please confirm these before moving forward

[X] I have searched for my issue and not found a work-in-progress/duplicate/resolved issue.
[X] I have not been informed if the issue is resolved in a preview version of the winget client.

Category of the issue
Installation issue.
Brief description of your issue
Bitvise SSH client 9.17 fails to update to 9.25
Steps to reproduce
install/upgrade to 9.17 via winget, then try to upgrade to latest 9.25
Actual behavior

Name                                                         Id                                         Version          Available     Source
Bitvise SSH Client 9.17 (remove only)                        Bitvise.SSH.Client                         9.17             9.25          winget

Found Bitvise SSH Client [Bitvise.SSH.Client] Version 9.25
This application is licensed to you by its owner.
Microsoft is not responsible for, nor does it grant any licenses to, third-party packages.
Downloading https://s3.amazonaws.com/dl.bitvise.com/BvSshClient-925.exe
██████████████████████████████  25.4 MB / 25.4 MB
Successfully verified installer hash
Starting package install...
An unexpected error occurred while executing the command:
0x800704c7 : � ���������� ��������� ��� �� ������.

the unreadable characters are probably Greek (not sure why they show as garbage on my system too though)

Expected behavior
expected to update ok
Environment
C:\Users\User>winget --info
Windows Package Manager v1.3.2691
Copyright (c) Microsoft Corporation. All rights reserved.

Windows: Windows.Desktop v10.0.22621.900
System Architecture: X64
Package: Microsoft.DesktopAppInstaller v1.18.2691.0

Logs: %LOCALAPPDATA%\Packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe\LocalState\DiagOutputDir

Screenshots and Logs
No response

Problem seems to be from upgrade behaviour. Installer only supports remove & does not support upgrade.
Installed  9.25 with winget install Bitvise.SSH.Client  --version 9.2.5
Found Bitvise SSH Client [Bitvise.SSH.Client] Version 9.25
This application is licensed to you by its owner.
Microsoft is not responsible for, nor does it grant any licenses to, third-party packages.
Downloading https://s3.amazonaws.com/dl.bitvise.com/BvSshClient-925.exe
  ██████████████████████████████  25.4 MB / 25.4 MB
Successfully verified installer hash
Starting package install...
Successfully installed

Now change UpgradeBehavior: install to UpgradeBehavior: uninstall
Now it works
winget install --manifest .\manifests\b\Bitvise\SSH\Client\9.26\
Found Bitvise SSH Client [Bitvise.SSH.Client] Version 9.26
This application is licensed to you by its owner.
Microsoft is not responsible for, nor does it grant any licenses to, third-party packages.
Downloading https://s3.amazonaws.com/dl.bitvise.com/BvSshClient-926.exe
  ██████████████████████████████  25.7 MB / 25.7 MB
Successfully verified installer hash
Starting package install...
Successfully installed


docs[vi]: add JWT authentication

Codecov Report

Merging #72 (5c460e6) into main (896bbb5) will not change coverage.
The diff coverage is n/a.

@@            Coverage Diff            @@
##               main      #72   +/-   ##
=========================================
  Coverage     95.00%   95.00%
  Complexity      445      445
=========================================
  Files            96       96
  Lines          1723     1723
=========================================
  Hits           1637     1637
  Misses           86       86

Flag
Coverage Δ

phpunit
95.00% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

Continue to review full report at Codecov.

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


[Feature] Search file by hash

@yassinrais
The search input in the navbar will be used for now by just searching a file hash and particularly a sha256.
Make sure to check for sha256 string regex in JS before submitting a GET/ request.

[ ] Toast :  saferwall/saferwall-api#11


No data saved at all on DynamoDB local.

Is it normal to not see any Table from the command line aws tool
test@testmac test (master) $ aws dynamodb list-tables --endpoint http://localhost:8000
{
    "TableNames": []
}

Even if I created thousands of rows on DynamoDBGui Client ?!?!?
Am i missing something ?!! Whats the goal of that tool ?!

Heres what I have in my DynamoDBGui

I should have one table. But i got none using the officiel aws client.
Yes i only have on server running at localhost:8000.

Local DynamoDB has separate tables if you select different region or apiKey.
I have mirror situation - no matter what region I set up in [dafault] section of ~/.aws/credentials i still have no tables visible in DynamoDBgui, while aws CLI shows me what I want and what my webapps see.
Conclusion would be that DynamoDBgui has hard-coded region or creds that are different than ones I'm using, while you guys use the region or creds same as DynamoDB gui but your ~/.aws/credentials has none or different settings in [default] section.

Has anyone else been able to solve this? My tables created through the cli end up in us-east-1 and do not show up in the GUI, but I do not see the table I created through the GUI in the cli.

^ fixed above, the solution was to add the -sharedDb option when starting Dynamo local. This removes the segmentation by environment/access key.

Had the same issue and did what @Heanthor suggested, added -sharedDb flag. However, docker would not run when passing that flag unless I also supplied the -jar argument. Full command that worked for me to start Docker local and connect with GUI:
docker run -d -p 8000:8000 amazon/dynamodb-local -jar DynamoDBLocal.jar -sharedDb


stack corruption detected (-fstack-protector)

https://github.com/juha-h/baresip-studio/issues/296

in function
sa_ntop
or
net_add_address_ifname
or related to filling
struct sa temp_sa

when the network changes in a mobile application, a crash occurs after calling a function from the library

Please avoid to open duplicate issues! These functions are not rem related.


Is there a way to dump all of this data into a csv or txt

Is there a way to dump all this information into a txt or csv?

You can select one or multiple lines, and copy paste them. Other than that, there's nothing atm.

It's worth noting that this is possible by using the backend


anyhow::ensure! doesn't work with custom error type

I'm struggling to get anyhow::ensure! to cooperate with my custom error type. (Using a custom error type is necessary for compatibility with axum in my case.)
Here's what I've got:
use anyhow; // 1.0.81

#[derive(Debug)]
struct AppError(anyhow::Error);
type AppResult<T> = Result<T, AppError>;

impl<E> From<E> for AppError
where
  E: Into<anyhow::Error>,
{
  fn from(err: E) -> Self {
    Self(err.into())
  }
}

fn foo() -> AppResult<()> {
    // expected `AppError`, found `Error`
    anyhow::ensure!(false, "expected true");
    Ok(())
}

// fn foo() -> AppResult<()> {
//     // This SO post (https://stackoverflow.com/questions/67656431/simplier-way-to-return-custom-error-type-with-anyhowerror)
//     // suggests that this ought to work, but it doesn't.
//     anyhow::ensure!(false, AppError(anyhow::anyhow!("expected true")));
//     Ok(())
// }

How does one use a custom error type with anyhow::ensure!?
Playground link

See #112.


code hangs on multi-cores

Hi:
I am trying to run the solitary wave demo case on https://github.com/erdc-cm/air-water-vv/tree/adimako/solitaryWave/2d/solitary_wave/solitary_wave_01, this case runs perfectly on serial, parallel on 4 core, but hangs at more cores such as 8,16 when it begins time stepping, while I attach a gdb to it and get a backtrace like this:
(gdb) bt
#0  0x00002aaab383067d in MPIDI_Cray_shared_mem_coll_bcast () from /opt/cray/lib64/libmpich_gnu_49.so.3
#1  0x00002aaab3840bbf in MPIR_CRAY_Barrier () from /opt/cray/lib64/libmpich_gnu_49.so.3
#2  0x00002aaab376a263 in MPIR_Barrier_impl () from /opt/cray/lib64/libmpich_gnu_49.so.3
#3  0x00002aaab376ac29 in PMPI_Barrier () from /opt/cray/lib64/libmpich_gnu_49.so.3
#4  0x00002aaab1d06540 in PetscCommDuplicate () from /work/04328/shawnlin/lonestar/proteus/lonestar.gnu/lib/libpetsc.so.3.7
#5  0x00002aaab1d0aa5d in PetscHeaderCreate_Private () from /work/04328/shawnlin/lonestar/proteus/lonestar.gnu/lib/libpetsc.so.3.7
#6  0x00002aaab1ecedf5 in VecCreate () from /work/04328/shawnlin/lonestar/proteus/lonestar.gnu/lib/libpetsc.so.3.7
#7  0x00002aaab1fb8af5 in MatCreateVecs () from /work/04328/shawnlin/lonestar/proteus/lonestar.gnu/lib/libpetsc.so.3.7
#8  0x00002aaab28c8674 in KSPCreateVecs () from /work/04328/shawnlin/lonestar/proteus/lonestar.gnu/lib/libpetsc.so.3.7
#9  0x00002aaab286f170 in KSPSetUp_GMRES () from /work/04328/shawnlin/lonestar/proteus/lonestar.gnu/lib/libpetsc.so.3.7
#10 0x00002aaab28afcbd in KSPSetUp () from /work/04328/shawnlin/lonestar/proteus/lonestar.gnu/lib/libpetsc.so.3.7
#11 0x00002aaab17a0699 in __pyx_pf_8petsc4py_5PETSc_3KSP_92setUp (__pyx_v_self=0x2aaad4cbdcb0) at src/petsc4py.PETSc.c:153327
#12 __pyx_pw_8petsc4py_5PETSc_3KSP_93setUp (__pyx_v_self=0x2aaad4cbdcb0, __pyx_args=, __pyx_kwds=0x0) at src/petsc4py.PETSc.c:22235
#13 0x00002aaaaaddb4d7 in call_function (oparg=, pp_stack=0x7fffffffa2e0) at Python/ceval.c:4350
#14 PyEval_EvalFrameEx (f=f@entry=0x2aaae70a6b60, throwflag=throwflag@entry=0) at Python/ceval.c:2987
#15 0x00002aaaaaddc8b0 in PyEval_EvalCodeEx (co=, globals=, locals=locals@entry=0x0, args=,
argcount=argcount@entry=1, kws=0x1d0be220, kwcount=1, defs=0x2aaac7ff05e8, defcount=1, closure=0x0) at Python/ceval.c:3582
#16 0x00002aaaaaddb85b in fast_function (nk=, na=1, n=, pp_stack=0x7fffffffa4f0, func=) at Python/ceval.c:4446
#17 call_function (oparg=, pp_stack=0x7fffffffa4f0) at Python/ceval.c:4371
I found a cure for this is to set initial condition to zero or other float at this line https://github.com/erdc-cm/air-water-vv/blob/adimako/solitaryWave/2d/solitary_wave/solitary_wave_01/twp_navier_stokes_p.py#L102 and L109, or replace the wave function to other waves. This is very weird because the returned velocity is just a small float number. Not sure this is due to petsc building or code conflict...
Any advise would be appreciated!
Yuxiang Lin

@yuanglin. This is very strange. To be honest we have not tried that before with WaveTools.py. @alistairbnt, @tridelat, @giocozz, @cekees any ideas. Taking a shot in the dark, I would say that we should make sure that the initial condition is written by one processor only?

But I do see that there is a Barrier command involved so it should not be this

The barrier seems inside petsc command

The other issue I am thinking is that the solitaryWave class is the only one that is not been included in the .pxd file. It is suspicious that you do not get this problem with the other wave classes

@adimako OK, I'll add those cdef lines in pxd files. Do I need to first make distclean and then make?

@adimako unfortunately It still hangs even though I add those cdef and re-compile

@adimako Another cure is to reduce the tank horizontal dimension https://github.com/erdc-cm/air-water-vv/blob/adimako/solitaryWave/2d/solitary_wave/solitary_wave_01/tank.py#L14 from 60 to 20, for example. Still wonder how this could make multi-cores hangs

@yuxianglin. I am almost convinced that it's the probes. Can you switch off the probes and try again? Also I think you're placing probes outside of your domain, can you confirm that this is true?

@adimako You mean to switch off the gauge output? The demo case https://github.com/erdc-cm/air-water-vv/blob/adimako/solitaryWave/2d/solitary_wave/solitary_wave_01/tank.py#L17 is already false, and even I comment out all attach gauge lines, the code still hangs

Correct, I missed that. It still puzzles me a bit, as I have been running a numerical wave flume with arbitrary numbers of processors and it looks fine. So it does look like this is the initial conditions. For now I would set the initial conditions to zero and generate the solitary wave later in the simulation (e.g. move the frame of reference upstream of the domain boundary).

@adimako So your machine doesn't not hang for this demo case with multi-cores? Hmm, is it maybe because the proteus is not properly configured on my TACC machines?
I suppose by setting velocity IC to zero would require the trans https://github.com/erdc-cm/air-water-vv/blob/adimako/solitaryWave/2d/solitary_wave/solitary_wave_01/tank.py#L23 to be moderate large negtive number, that would take some time to wait for the wave coming the center of flume.

To be honest, I have not the time to try it, but I will give it a go on 14x processors tomorrow

I cannot run the tank at all with the latest commit on master. I would advise taking this case https://github.com/erdc-cm/air-water-vv/tree/master/2d/numericalTanks/nonlinearWaves and modifying the waveTools class (and initial conditions) to account for a solitary wave. It might be that the case is a bit out of date

@adimako is it because the dragAlpha argument is not present in https://github.com/erdc-cm/air-water-vv/blob/adimako/solitaryWave/2d/solitary_wave/solitary_wave_01/tank.py#L88

No no I fixed that, it is something else that I am getting, like an empty module error

@adimako Did you code hang for this demo for cores more than 8?

@linyx199071 I could not run the case at all, even by fixing the arguments. At this stage, I would try using the 2d nonlinear tank in air water vv and change the wave generation to solitary waves. If you could do it and it is still failing, we have to give a closer look at the way the initial conditions are imposed


Bump terraform to v1.1.7

Bump:

terraform to v1.1.4
Alpine to v3.15

Downgraded Alpine back to v3.13 because of the "alpine make operation not permitted" on older Docker engines versions.


refactor(anvil): use tokio::sync::RwLock to guard Db

Motivation
#2646 was the final straw for parking_lot::RwLock<Db>.
After looking at the logs and wrapping my head around what's locked sync and what's locked async in various contexts, I came to the conclusion the Db should be guarded by tokio::sync::RwLock instead for several reasons:
the Db trait is a sync abstraction over fork+mem db, fork being the critical implementation.
when we execute transactions, we need mutable access due to revm's Database abstraction, this means we need to acquire a WriteGuard for the duration of the evm execution.
In fork mode, is can take a while because if the evm needs data we don't have yet it will be fetched.
So while the WriteGuard is active for mining a block, a call to
set_balance(&self) {    self.db.read().... }
becomes blocking until mining has finished. tokio really does not like that.
the alternative would be to wrap these into task_blocking calls, but it's easy to miss, so imo wrapping db in AsyncRWlock makes more sense, even if less convenient.

Solution

wrap Db in tokio::sync::RWlock as AsyncRWlock
update everything accordingly

I think this PR may also be related to https://github.com/foundry-rs/foundry/issues/2282, which has recently resurfaced.
We have a script that runs against anvil which forks mainnet. As mentioned by @jferas in https://github.com/foundry-rs/foundry/issues/2282#issuecomment-1208199354, anvil hangs if run on the latest nightly, when forking with both an alchemy node and a local erigon node.
When running with this PR, anvil no longer hangs against my local erigon node, but does against alchemy.
When it hangs, anvil is unresponsive to ctrl + c and I have to kill the process with kill -9 $(pgrep anvil) (the script itself does not hang and is responsive to ctrl + c

When running with this PR, anvil no longer hangs against my local erigon node, but does against alchemy.

since this happens with alchemy, this could be rate limited related as well.

since this happens with alchemy, this could be rate limited related as well.

I thought a RetryProvider was used to guard against this + shouldn't the RPC queries be cached since we're running the script against a pinned block? In either case, I wouldn't expect anvil to become locked / unresponsive to ctrl + c due to rate-limiting


Add an AppStream metadata file

This adds an AppStream metadata file, edited from org.godotengine.Godot.appdata.xml.
godot.desktop was also renamed to org.godotengine.Godot.desktop to follow the same naming scheme — this does not affect how Godot appears in application launchers, as the name of the .desktop file has no influence on this.
This partially addresses https://github.com/godotengine/godot/issues/5597, as Flatpak authors will no longer need to maintain their own AppStream metadata file.

Should this also remove the existing file at https://github.com/godotengine/godot/blob/master/misc/dist/linux/godot.appdata.xml?

According to the specification, the reverse DNS naming scheme is part of the standard. I've seen a few other projects like Minetest follow it (net.minetest.minetest.desktop, net.minetest.minetest.appdata.xml).
Also, I overlooked the existing AppStream file… anyway, as I discussed with @mhilbrunner on IRC, I'll open a new PR that renames and improves on the existing AppStream file if that's OK.

anyway, as I discussed with @mhilbrunner on IRC, I'll open a new PR that renames and improves on the existing AppStream file if that's OK.

You can just rebase this PR to make changes.

According to the specification (search for ), the reverse DNS naming scheme is part of the AppStream standard.

Sounds good, let's use that then.

I amended the pull request, please check it again.

After some discussion on the #flatpak IRC channel, I'll send a second PR to fix some issues with the current AppStream file and add MIME type support (for associating .godot files with Godot).


HIVE-27911 : Drop database query failing with Invalid ACL Exception

What changes were proposed in this pull request?
In the query-executor, we create ephemeral nodes which have the special behaviour that they are automatically deleted when the query-coordinator zookeeper client session is terminated. If there are no other Hive VWs on the cluster, sooner or later the entire path will be deleted.
To avoid this, we need to have a persistent node on path /llap-sasl/user-hivefoo0/pnode0.
Why are the changes needed?
Hue or beeline session thows InvalidACL exception when executing drop database, drop table or alter table drop partition operations on a Hive Virtual Warehouse that is in Stopped state: "org.apache.zookeeper.KeeperException$InvalidACLException: KeeperErrorCode = InvalidACL for /llap-sasl/user-hive".
The exception appears because the Hive VW wants to evict the cache in the LLAP executors, but those computes in a Stopped warehouse are not running.
In the query-executor, we create ephemeral nodes which have the special behaviour that they are automatically deleted when the query-coordinator zookeeper client session is terminated. If there are no other Hive VWs on the cluster, sooner or later the entire path will be deleted.
To avoid this, we need to have a persistent node on path.
Does this PR introduce any user-facing change?
NO
Is the change a dependency upgrade?
NO
How was this patch tested?
Manually. This was tested on private cluster with crating data catalog and VWs and stopping VWS manually

Hi @abstractdog, Requesting your review here.


Implement generator for beer-song

I've submitted a pull request to update the canonical data for the beer-song exercise (https://github.com/exercism/x-common/pull/661). In order to make it easier to pull in those changes once the PR has been merged, I've created a generator for the beer-song exercise.
In addition to implementing the logic for the generator, I ran the bin/generate beer-song command to create a fresh implementation.
The structure of the canonical data is a bit different from the implementation that the Ruby track had:
Before:
BeerSong.new.verse(n)
BeerSong.new.verses(n, m)
BeerSong.new.lyrics

After:
BeerSong.new.verse(n)
BeerSong.new.verses(n, m)

In the old version, lyrics was a simple indirection, calling verses with the full range.
This is a breaking change, and the book-keeping has been updated to reflect this.
As I implemented the generator, I discovered that the documentation was outdated. This has been updated in https://github.com/exercism/xruby/pull/552

This may need to be updated after the exercism/x-common#661 is brought in.

I've updated this per the newest canonical data.

I've updated the indentation of the closing token for the heredoc.
I'm using the property to decide the name of the function, so as long as that doesn't change over in our canonical data schema discussion, I think we're good here.

I'm just curious ... wouldn't it make more sense now that the canonical test data has a real version (beer-song/canonical-data.json#L3) to use that instead of the sha-1 hash of the commit (# Common test data version: 9f3d48a)?

I think the merge was done before the canonical was finished... but I think using that canonical version now makes sense to reference.

Yeah, the canonical version makes much more sense. I didn't think of it.