(GH-2561) Remove PowerShell 2.0

!removal

Descriptive title of changes (#issue_number)
Remove PowerShell 2.0 support

Acceptance Critera:
Bolt works on a target and localhost with PowerShell versions 3.0 and 5.1 (lowest and highest supported at the moment)

Works on 4, 5.1, and shows the appropriate message on 2
❯ be bolt command run '$PSVersionTable.PSVersion' -t winrm://natal-user.delivery.puppetlabs.net -u Administrator -p Qu@lity! --no-ssl
Started on winrm://natal-user.delivery.puppetlabs.net...
Finished on winrm://natal-user.delivery.puppetlabs.net:
  STDOUT:

    Major  Minor  Build  Revision
    -----  -----  -----  --------
    4      0      -1     -1

Successful on 1 target: winrm://natal-user.delivery.puppetlabs.net
Ran on 1 target in 2.96 sec

❯ be bolt command run '$PSVersionTable.PSVersion' -t winrm://yongst-courting.delivery.puppetlabs.net -u Administrator -p Qu@lity! --no-ssl
Started on winrm://yongst-courting.delivery.puppetlabs.net...
Finished on winrm://yongst-courting.delivery.puppetlabs.net:
  STDOUT:

    Major  Minor  Build  Revision
    -----  -----  -----  --------
    5      1      17763  1490

Successful on 1 target: winrm://yongst-courting.delivery.puppetlabs.net
Ran on 1 target in 4.87 sec

❯ be bolt command run '$PSVersionTable.PSVersion' -t winrm://snazzy-rebel.delivery.puppetlabs.net -u Administrator -p Qu@lity! --no-ssl
Started on winrm://snazzy-rebel.delivery.puppetlabs.net...
Detected PowerShell 2 on one or more targets.
PowerShell 2 is removed. See bolt-debug.log or run with '--log-level debug' to see the full list of targets with PowerShell 2.
Finished on winrm://snazzy-rebel.delivery.puppetlabs.net:
  STDOUT:

    Major  Minor  Build  Revision
    -----  -----  -----  --------
    2      0      -1     -1

Successful on 1 target: winrm://snazzy-rebel.delivery.puppetlabs.net
Ran on 1 target in 3.36 sec

Works on 4, 5.1, and shows the appropriate message on 2
❯ be bolt command run '$PSVersionTable.PSVersion' -t winrm://natal-user.delivery.puppetlabs.net -u Administrator -p Qu@lity! --no-ssl
Started on winrm://natal-user.delivery.puppetlabs.net...
Finished on winrm://natal-user.delivery.puppetlabs.net:
  STDOUT:

    Major  Minor  Build  Revision
    -----  -----  -----  --------
    4      0      -1     -1

Successful on 1 target: winrm://natal-user.delivery.puppetlabs.net
Ran on 1 target in 2.96 sec

❯ be bolt command run '$PSVersionTable.PSVersion' -t winrm://yongst-courting.delivery.puppetlabs.net -u Administrator -p Qu@lity! --no-ssl
Started on winrm://yongst-courting.delivery.puppetlabs.net...
Finished on winrm://yongst-courting.delivery.puppetlabs.net:
  STDOUT:

    Major  Minor  Build  Revision
    -----  -----  -----  --------
    5      1      17763  1490

Successful on 1 target: winrm://yongst-courting.delivery.puppetlabs.net
Ran on 1 target in 4.87 sec

❯ be bolt command run '$PSVersionTable.PSVersion' -t winrm://snazzy-rebel.delivery.puppetlabs.net -u Administrator -p Qu@lity! --no-ssl
Started on winrm://snazzy-rebel.delivery.puppetlabs.net...
Detected PowerShell 2 on one or more targets.
PowerShell 2 is removed. See bolt-debug.log or run with '--log-level debug' to see the full list of targets with PowerShell 2.
Finished on winrm://snazzy-rebel.delivery.puppetlabs.net:
  STDOUT:

    Major  Minor  Build  Revision
    -----  -----  -----  --------
    2      0      -1     -1

Successful on 1 target: winrm://snazzy-rebel.delivery.puppetlabs.net
Ran on 1 target in 3.36 sec

Tested working against 4 and 5.1. 2 warns as expected.
❯ be bolt command run '$PSVersionTable.PSVersion' -t winrm://natal-user.delivery.puppetlabs.net -u Administrator -p **** --no-ssl
Started on winrm://natal-user.delivery.puppetlabs.net...

Finished on winrm://yongst-courting.delivery.puppetlabs.net:
  STDOUT:

    Major  Minor  Build  Revision
    -----  -----  -----  --------
    5      1      17763  1490

Successful on 1 target: winrm://yongst-courting.delivery.puppetlabs.net
Ran on 1 target in 4.87 sec

❯ be bolt command run '$PSVersionTable.PSVersion' -t winrm://snazzy-rebel.delivery.puppetlabs.net -u Administrator -p **** --no-ssl
Started on winrm://snazzy-rebel.delivery.puppetlabs.net...
Detected PowerShell 2 on one or more targets.
PowerShell 2 is removed. See bolt-debug.log or run with '--log-level debug' to see the full list of targets with PowerShell 2.
Finished on winrm://snazzy-rebel.delivery.puppetlabs.net:
  STDOUT:

    Major  Minor  Build  Revision
    -----  -----  -----  --------
    2      0      -1     -1

Successful on 1 target: winrm://snazzy-rebel.delivery.puppetlabs.net
Ran on 1 target in 3.36 sec

Tested working against 4 and 5.1. 2 warns as expected.
❯ be bolt command run '$PSVersionTable.PSVersion' -t winrm://natal-user.delivery.puppetlabs.net -u Administrator -p **** --no-ssl
Started on winrm://natal-user.delivery.puppetlabs.net...

Finished on winrm://yongst-courting.delivery.puppetlabs.net:
  STDOUT:

    Major  Minor  Build  Revision
    -----  -----  -----  --------
    5      1      17763  1490

Successful on 1 target: winrm://yongst-courting.delivery.puppetlabs.net
Ran on 1 target in 4.87 sec

❯ be bolt command run '$PSVersionTable.PSVersion' -t winrm://snazzy-rebel.delivery.puppetlabs.net -u Administrator -p **** --no-ssl
Started on winrm://snazzy-rebel.delivery.puppetlabs.net...
Detected PowerShell 2 on one or more targets.
PowerShell 2 is removed. See bolt-debug.log or run with '--log-level debug' to see the full list of targets with PowerShell 2.
Finished on winrm://snazzy-rebel.delivery.puppetlabs.net:
  STDOUT:

    Major  Minor  Build  Revision
    -----  -----  -----  --------
    2      0      -1     -1

Successful on 1 target: winrm://snazzy-rebel.delivery.puppetlabs.net
Ran on 1 target in 3.36 sec

We should add some info to the troubleshooting docs about PowerShell 2 being unsupported. Since tasks just fail outright adding this info under "My task fails mysteriously" seems appropriate, or we can add a new section titled something like "My task fails when run on Windows targets". @hestonhoffman might have a better idea for where this belongs.

I think a new section titled "My task fails on Windows targets" with makes sense, seeing as though there are already two separate sections for failing tasks (noexec and the mysterious one).

We should add some info to the troubleshooting docs about PowerShell 2 being unsupported. Since tasks just fail outright adding this info under "My task fails mysteriously" seems appropriate, or we can add a new section titled something like "My task fails when run on Windows targets". @hestonhoffman might have a better idea for where this belongs.

I think a new section titled "My task fails on Windows targets" with makes sense, seeing as though there are already two separate sections for failing tasks (noexec and the mysterious one).

@hestonhoffman @beechtom I added some words to the troubleshooting doc. LMK how they look

@hestonhoffman @beechtom I added some words to the troubleshooting doc. LMK how they look

Docs review suggestions folded in, rebased on 3.0 and ready for review again

Docs review suggestions folded in, rebased on 3.0 and ready for review again


Cache is never used because hashes do not match

At the moment I cannot use the caching functionality in one of my projects. Confirmed to happen for REGIS and AHN datasets.
For some reason the hashes never match, causing the cache to be invalidated. However, when I try reproducing this in a separate minimal example, the caching is working fine.
If anyone has any ideas, I'd love to hear them, otherwise as my investigation continues I will post updates here.
This is working fine...
import nlmod

nlmod.util.get_color_logger("DEBUG")

cachedir = "."
extent = [100_000, 101_000, 400_000, 401_000]

regis_ds = nlmod.read.regis.get_regis(extent, cachedir=cachedir, cachename="regis")
regis_ds = nlmod.read.regis.get_regis(extent, cachedir=cachedir, cachename="regis")

Versions:
Python version     : 3.11.10
NumPy version      : 1.26.4
Xarray version     : 2024.9.0
Matplotlib version : 3.9.2
Flopy version      : 3.9.0.dev1

nlmod version      : 0.9.0

I tried the following in a GH codespace (Debian GNU/Linux 12 (bookworm):

run script 1 (see below)
restart the kernel
run script 2 (see below)
compare the hashes created in both scripts (see below)

What I get from this:

Reading the same cached netcdf file after restarting the kernel results in a different hash. I visually compared the two datasets (dimensions, coordinates, data variables and attributes) and I don't see any differences.
Same for reading the same pickled dataset.

I don't know why the hashes are different but I guess it is not something we can easily solve.
The intention of the hash is to check if the pickled function arguments where created together with the cached netcdf file. In other words if the .pklz and the .nc file belong together. This is a nice to have check but the cache will work without. So I would propose to disable the hash check from the cache until we found a solution for this.
packageversions used:
python 3.11.10
nlmod 0.9.0
xarray 2023.6.0
dask 2024.12.0
script 1
import nlmod
import pickle
import xarray as xr
import dask

# instellingen voor de logging
nlmod.util.get_color_logger("INFO")

cachedir ='.'
extent = [204800, 205000, 438000, 438200]

#%%
# get regis dataset
regis_ds = nlmod.read.regis.get_regis(extent, cachedir=cachedir, cachename="regis")
hash_orig = dask.base.tokenize(regis_ds)

# write to pickle
with open('regis_ds.pickle', 'wb') as handle:
    pickle.dump(regis_ds, handle, protocol=-1)

# read cached netcdf
regis_from_cache = xr.open_dataset('regis.nc')
hash_cache_direct = dask.base.tokenize(regis_from_cache)

# read pickle
with open('regis_ds.pickle', 'rb') as handle:
    regis_from_pickle = pickle.load(handle)
hash_pickle = dask.base.tokenize(regis_from_pickle)

# call get_regis again (this time the cache will be used)
regis_ds_ind = nlmod.read.regis.get_regis(extent, cachedir=cachedir, cachename="regis")
hash_cache_indirect = dask.base.tokenize(regis_ds_ind)

# save hashes
with open('hashes.txt', 'w') as handle:
    handle.write(f'regis orig           : {hash_orig}\n')
    handle.write(f'regis cache direct   : {hash_cache_direct}\n')
    handle.write(f'regis pickle         : {hash_pickle}\n')
    handle.write(f'regis cache indirect : {hash_cache_indirect}\n')

yields:
>>> INFO:nlmod.cache.wrapper:caching data -> regis.nc
>>> INFO:nlmod.cache.wrapper:using cached data -> regis.nc

script 2
import nlmod
import pickle
import xarray as xr
import dask

# instellingen voor de logging
nlmod.util.get_color_logger("INFO")

cachedir ='.'
extent = [204800, 205000, 438000, 438200]

# read cached netcdf
regis_from_cache = xr.open_dataset('regis.nc')
hash_cache_direct = dask.base.tokenize(regis_from_cache)
regis_from_cache.close()

# read pickle
with open('regis_ds.pickle', 'rb') as handle:
    regis_from_pickle = pickle.load(handle)
hash_pickle = dask.base.tokenize(regis_from_pickle)

# call get_regis again (this time the cache won't be used)
regis_ds_ind = nlmod.read.regis.get_regis(extent, cachedir=cachedir, cachename="regis")
hash_cache_indirect = dask.base.tokenize(regis_ds_ind)

# save hashes
with open('hashesv2.txt', 'w') as handle:
    handle.write(f'regis cache direct   : {hash_cache_direct}\n')
    handle.write(f'regis pickle         : {hash_pickle}\n')
    handle.write(f'regis failed cache   : {hash_cache_indirect}\n')

yields:
INFO:nlmod.cache._same_function_arguments:cache was created using different function argument values, do not use cached data
INFO:nlmod.cache.wrapper:caching data -> regis.nc

hashes.txt:
regis orig           : ff4715f0946be500d54235e53b080e99
regis cache direct   : c408096ea4ae53ca7407605cf0ed6f33
regis pickle         : ff4715f0946be500d54235e53b080e99
regis cache indirect : c408096ea4ae53ca7407605cf0ed6f33

hashesv2.txt:
regis cache direct   : eea86620b9909cfd5b5cfbc0831b984d
regis pickle         : 05935639d8c6bf40843612b9082fb667
regis failed cache   : 05935639d8c6bf40843612b9082fb667

Solved with #395


Problems with generalization on let_mono branch (PR #33)

I've been investigating why scoped_tyvars_1 doesn't work on let_mono branch (currently PR #33):
let x : ∀ a. (a → a) → (a → a) = let y : a → a = λw.w
                                 in λz.y
in x id_int

Failure is caused by incorrectly (?) inferred type of the inner let and its subsequent unification with type signature on x. In the working version we have:
Generalizable let-binder with type annotation:
  Annotation: {id=8, structure=forall [{id=4, rank=-1}]. {id=7, structure=({id=6, structure=({id=4, rank=-1} -> {id=4, rank=-1}), rank=-1} -> {id=5, structure=({id=4, rank=-1} -> {id=4, rank=-1}), rank=-1}), rank=-1}, rank=1}
  Inferred  : forall [{id=12, rank=-1, mono}, {id=14, rank=-1, mono}]. {id=11, structure=({id=14, rank=-1, mono} -> {id=13, structure=({id=12, rank=-1, mono} -> {id=12, rank=-1, mono}), rank=2}), rank=-1}

The inferred type is forall b c. b -> (c -> c) and it unifies with signature forall a. (a -> a) -> (a -> a). On the let_mono branch we have:
Generalizable let-binder with type annotation:
  Annotation: {id=8, structure=forall [{id=4, rank=-1}]. {id=7, structure=({id=6, structure=({id=4, rank=-1} -> {id=4, rank=-1}), rank=-1} -> {id=5, structure=({id=4, rank=-1} -> {id=4, rank=-1}), rank=-1}), rank=-1}, rank=1}
  Inferred  : forall [{id=17, rank=-1, mono}]. {id=11, structure=({id=17, rank=-1, mono} -> {id=13, structure=({id=12, rank=2, mono} -> {id=12, rank=2, mono}), rank=2}), rank=-1}

which means we infer type forall b. b -> (c -> c) that doesn't unify with the annotation on x due to restriction on mixed-prefix unification (we can't unify a quantified variable a in the signature with an existential c in the inferred type). I don't understand where the difference in inferred types comes from. In the working version when we carry out generalization of the inner let we have:
Exiting existential with unification variable {id=13, structure=({id=12, rank=2, mono} -> {id=12, rank=2, mono}), rank=2}
Exiting existential with unification variable {id=14, rank=2, mono}
State after solving, before exiting:
state.young = 2
Pool 1:
id = 1, rank = 1
id = 3, rank = 1
id = 1, rank = 1
id = 1, rank = 1
id = 3, rank = 1
id = 0, rank = 1
Pool 2:
id = 11, rank = 2
id = 13, rank = 2
id = 14, rank = 2
id = 12, rank = 2
id = 13, rank = 2
id = 13, rank = 2
id = 11, rank = 2
Ending generalize.exit
Generalizable vars from the generalization engine: [{id=14, rank=-1, mono}, {id=12, rank=-1, mono}]
Generalizable schemes from the generalization engine: [forall [{id=12, rank=-1, mono}, {id=14, rank=-1, mono}]. {id=11, structure=({id=14, rank=-1, mono} -> {id=13, structure=({id=12, rank=-1, mono} -> {id=12, rank=-1, mono}), rank=2}), rank=-1}]

Variables in pool 2 (11,12,13,14) are candidates for being generalized.  Variables 11 and 13 have structure so they can't be quantifiers, variables 12 and 14 don't have structure so they become quantifiers. On the let_mono branch we have:
Exiting existential with unification variable {id=13, structure=({id=12, rank=2, mono} -> {id=12, rank=2, mono}), rank=2}
Exiting existential with unification variable {id=17, rank=2, mono}
State after solving, before exiting:
state.young = 2
Pool 1:
id = 1, rank = 1
id = 3, rank = 1
id = 1, rank = 1
id = 1, rank = 1
id = 3, rank = 1
id = 0, rank = 1
Pool 2:
id = 17, rank = 2
id = 11, rank = 2
id = 13, rank = 2
id = 17, rank = 2
id = 12, rank = 2
id = 13, rank = 2
id = 13, rank = 2
id = 11, rank = 2
Ending generalize.exit
Generalizable vars from the generalization engine: [{id=17, rank=-1, mono}]
Generalizable schemes from the generalization engine: [forall [{id=17, rank=-1, mono}]. {id=11, structure=({id=17, rank=-1, mono} -> {id=13, structure=({id=12, rank=2, mono} -> {id=12, rank=2, mono}), rank=2}), rank=-1}]

Inputs look exactly the same as before, except that variable numbering is different: 11,12,13, and 17. Variables 11 and 13 again form structure of the type, whereas variables 12 and 17 don't have a structure and could be generalized. But this time generalization engine finds only one quantifier: 17. Variable 12 is not considered generalisable and at the same time disappears from the pool. The code responsible for discarding it is in Generalization.exit:
let vs =
  List.filter (fun v ->
    U.is_representative v && begin
      if U.rank v < state.young then begin
        register_at_rank state v;
        false
      end
      else begin
        assert (U.rank v = state.young);
        U.set_rank v generic;
        U.structure v = None
      end
    end
  ) vs

Variable 12 is filtered out at this stage because condition U.is_representative is false for it. I believe it should be the case that for every variable id in the pool there is exactly one copy that is representation (i.e. a point of a unionfind algorithm) and all other copies are only links to that point. This doesn't seem to be the case here. In the working version there is also just a single copy of 12, but that one is representative. I have no idea how this situation arises. There is no obvious difference - inferred types of bindings y and z are identical in both cases.

Bisect points to 881733da8d49b7c9600e2d85e172ecb9fc501d64

Bisect points to 881733da8d49b7c9600e2d85e172ecb9fc501d64

TL;DR Fuck...
I got to the bottom of this by printing extra information telling whether a given copy of a variable is representative or not. (A representative variable is the one that describes a point/equivalence class in a unionfind algorithm; all other copies of that variables are links that directly or indirectly point to a representative variable.)
Let's first trace how y receives a type in a version thta uses def constraints.  Generalization engine infers the following:
Pool 3:
id = 17, rank = 3
id = 18, rank = 3, mono
id = 18, rank = 3, mono, repr
id = 17, rank = 3, repr
Ending generalize.exit
Generalizable vars from the generalization engine: [{id=18, rank=-1, mono, repr}]
Generalizable schemes from the generalization engine:
   [forall [{id=18, rank=-1, mono}]. {id=17, structure=({id=18, rank=-1, mono, repr} -> id=18, rank=-1, mono}), rank=-1, repr}]

Notice that it picked representative copy of a variable as the generalizable variable and that this representative variable also appears in the type scheme itself - this will become crucial. Then we attempt to unify bodies of the inferred type scheme and the annotation:
Unifying let annotation with inferred type of let body. Trying to unifying variables:
  {id=13, structure=({id=12, rank=-1, repr} -> {id=12, rank=-1, repr}), rank=2, repr}
  {id=17, structure=({id=18, rank=-1, mono, repr} -> {id=18, rank=-1, mono}), rank=-1, repr}
Unification successful.  Variable after unification:
  {id=13, structure=({id=12, rank=-1, mono, repr} -> {id=12, rank=-1, mono}), rank=-1}

The resulting type again contains a representative copy of variable 12.  Since only representative variables can be generalized everything goes as expected from here. Contrast this with a version that uses let_mono constraints:
Pool 3:
id = 18, rank = 3, mono, repr
id = 17, rank = 3
id = 18, rank = 3, mono
id = 18, rank = 3, mono
id = 17, rank = 3, repr
Ending generalize.exit
Generalizable vars from the generalization engine: [{id=18, rank=-1, mono, repr}]
Generalizable schemes from the generalization engine:
  [forall [{id=18, rank=-1, mono}]. {id=17, structure=({id=18, rank=-1, mono} -> {id=18, rank=-1, mono}), rank=-1, repr}]

Variables in the pool are ordered slightly differently and as a result type scheme from the generalization does not contain a representative copy of variable 18 (though the generalizable variable is still a representative one). We then unify bodies of the inferred type with a signature:
Unifying let annotation with inferred type of let body. Trying to unifying variables:
  {id=13, structure=({id=12, rank=-1, repr} -> {id=12, rank=-1, repr}), rank=2, repr}
  {id=17, structure=({id=18, rank=-1, mono} -> {id=18, rank=-1, mono}), rank=-1, repr}
Unification successful.  Variable after unification:
  {id=13, structure=({id=12, rank=-1, mono} -> {id=12, rank=-1, mono}), rank=-1}

Note how during unification we unify a representative copy of variable 12 with nonrepresentative copy of variable 18 and return a non-representative copy of variable 12. This is quite surprising and has a knock-on effect later on: no representative copy of variable 12 makes it into the pool and so it is not considered candidate for generalisation. Now, what dictates this choice of not returning a representative copy? Here's what the comment says:

The weights are used to determine whether [point1] should be made to point to [point2], or vice-versa. By making the representative of the smaller class point to that of the larger class, we guarantee that paths remain of logarithmic length (not accounting for path compression, which makes them yet smaller).

If weights are equal choice is made arbitrarily:
if weight1 >= weight2 then begin
  TRef.set t point2 (Link point1);
  TRef.set t point1 (Info (weight1 + weight2, f desc1 desc2))
end
else begin
  TRef.set t point1 (Link point2);
  TRef.set t point2 (Info (weight1 + weight2, f desc1 desc2))
end

Interestingly if I change the condition from >= to > example scoped_tyvars_1 suddenly works as expected. Of course we can't rely on this - this sort of detail should never leak outside of unionfind algorithm. I placed a fix in the generalisation algorithm (c.f. old version above):
let vs =
  List.filter (fun v ->
    begin
      if U.rank v = generic then
        (* A copy of this variable already visited, discard *)
        false
      else
      if U.rank v < state.young then begin
        register_at_rank state v;
        false
      end
      else begin
        assert (U.rank v = state.young);
        U.set_rank v generic;
        U.structure v = None
      end
    end
  ) vs

This possibly makes paths traversed by unionfind algorithm a bit longer but at least it's correct.

TL;DR Fuck...
I got to the bottom of this by printing extra information telling whether a given copy of a variable is representative or not. (A representative variable is the one that describes a point/equivalence class in a unionfind algorithm; all other copies of that variables are links that directly or indirectly point to a representative variable.)
Let's first trace how y receives a type in a version thta uses def constraints.  Generalization engine infers the following:
Pool 3:
id = 17, rank = 3
id = 18, rank = 3, mono
id = 18, rank = 3, mono, repr
id = 17, rank = 3, repr
Ending generalize.exit
Generalizable vars from the generalization engine: [{id=18, rank=-1, mono, repr}]
Generalizable schemes from the generalization engine:
   [forall [{id=18, rank=-1, mono}]. {id=17, structure=({id=18, rank=-1, mono, repr} -> id=18, rank=-1, mono}), rank=-1, repr}]

Notice that it picked representative copy of a variable as the generalizable variable and that this representative variable also appears in the type scheme itself - this will become crucial. Then we attempt to unify bodies of the inferred type scheme and the annotation:
Unifying let annotation with inferred type of let body. Trying to unifying variables:
  {id=13, structure=({id=12, rank=-1, repr} -> {id=12, rank=-1, repr}), rank=2, repr}
  {id=17, structure=({id=18, rank=-1, mono, repr} -> {id=18, rank=-1, mono}), rank=-1, repr}
Unification successful.  Variable after unification:
  {id=13, structure=({id=12, rank=-1, mono, repr} -> {id=12, rank=-1, mono}), rank=-1}

The resulting type again contains a representative copy of variable 12.  Since only representative variables can be generalized everything goes as expected from here. Contrast this with a version that uses let_mono constraints:
Pool 3:
id = 18, rank = 3, mono, repr
id = 17, rank = 3
id = 18, rank = 3, mono
id = 18, rank = 3, mono
id = 17, rank = 3, repr
Ending generalize.exit
Generalizable vars from the generalization engine: [{id=18, rank=-1, mono, repr}]
Generalizable schemes from the generalization engine:
  [forall [{id=18, rank=-1, mono}]. {id=17, structure=({id=18, rank=-1, mono} -> {id=18, rank=-1, mono}), rank=-1, repr}]

Variables in the pool are ordered slightly differently and as a result type scheme from the generalization does not contain a representative copy of variable 18 (though the generalizable variable is still a representative one). We then unify bodies of the inferred type with a signature:
Unifying let annotation with inferred type of let body. Trying to unifying variables:
  {id=13, structure=({id=12, rank=-1, repr} -> {id=12, rank=-1, repr}), rank=2, repr}
  {id=17, structure=({id=18, rank=-1, mono} -> {id=18, rank=-1, mono}), rank=-1, repr}
Unification successful.  Variable after unification:
  {id=13, structure=({id=12, rank=-1, mono} -> {id=12, rank=-1, mono}), rank=-1}

Note how during unification we unify a representative copy of variable 12 with nonrepresentative copy of variable 18 and return a non-representative copy of variable 12. This is quite surprising and has a knock-on effect later on: no representative copy of variable 12 makes it into the pool and so it is not considered candidate for generalisation. Now, what dictates this choice of not returning a representative copy? Here's what the comment says:

The weights are used to determine whether [point1] should be made to point to [point2], or vice-versa. By making the representative of the smaller class point to that of the larger class, we guarantee that paths remain of logarithmic length (not accounting for path compression, which makes them yet smaller).

If weights are equal choice is made arbitrarily:
if weight1 >= weight2 then begin
  TRef.set t point2 (Link point1);
  TRef.set t point1 (Info (weight1 + weight2, f desc1 desc2))
end
else begin
  TRef.set t point1 (Link point2);
  TRef.set t point2 (Info (weight1 + weight2, f desc1 desc2))
end

Interestingly if I change the condition from >= to > example scoped_tyvars_1 suddenly works as expected. Of course we can't rely on this - this sort of detail should never leak outside of unionfind algorithm. I placed a fix in the generalisation algorithm (c.f. old version above):
let vs =
  List.filter (fun v ->
    begin
      if U.rank v = generic then
        (* A copy of this variable already visited, discard *)
        false
      else
      if U.rank v < state.young then begin
        register_at_rank state v;
        false
      end
      else begin
        assert (U.rank v = state.young);
        U.set_rank v generic;
        U.structure v = None
      end
    end
  ) vs

This possibly makes paths traversed by unionfind algorithm a bit longer but at least it's correct.


[mask_rom] Set the alert configuration for RMA OTP.

The Mask ROM fails to boot in verilator because an empty (all zeros)
alert configuration does not correspond to any valid configuration
value, thus resulting in an error such as kErrorAlertBadEnable.
This configuration represends no alert configuration: all escalations
disabled and all alerts unclassified.
Signed-off-by: Chris Frantz<EMAIL_ADDRESS>

@timothytrippel can you take a look at the last commit? This PR adds new items to the OWNER_SW_CFG OTP partition. otp_ctrl_smoketest uses this partition assuming it's empty but fails after this change. The last commit updates the smoketest to use the VENDOR_TEST partition instead.
cc @milesdai


Display post descriptions/excerpts on index page

If an an non-empty excerpt exists on the post, we'll use it, else we'll parse the post content.
#9

Ideally the <h2> and it's child text node would be removed from post.content before displaying it under  the post title on the home page, but:

I probably shouldn't open a post with a headline element.
I should probably provide an excerpt anyway

:shipit:

:sheep: it


Add PostgreSQL / AWS SQS composition

Is your feature request related to a problem? Please describe.
To test AWS SQS add additional docker-compose.yaml files.

This is in support of https://github.com/Senzing/stream-loader/issues/82 for testing failure and WithInfo queues.

Pull requests:

https://github.com/Senzing/docker-compose-demo/pull/91


Error: Initial console modes not set on Windows

Hey!
I saw the reddit post and found the project really cool! I ran the cargo install igrep command on Windows 10, and compilation was successful. However, running any command results in an error:

Scouring through the crossterm source, I found this line https://github.com/crossterm-rs/crossterm/blob/e920d0cfd7819752b050ace40471af6f6529904c/src/event/sys/windows.rs#L36 to be the culprit. Maybe we need to call an initialization function before drawing the UI?

Hey, I am glad to hear that you like this project!
When it comes to Windows support - I should be more clear in README that my aim is to support macOS and Linux (I just added such note). I am not sure how much effort is needed to make it working on Windows, so I cannot promise it ever will. But I will give it a try :)

Thanks, let me know if any testing is needed!

This is an easy fix AFAICT -- just authored and tested #9 on my local Windows 10 machine, and things seem to work as intended.


Onboard WaWi UI/UX colleagues

The WaWi UI/UX development colleagues must be onboarded about onyx in a dedicated meeting.
Proposed agenda:

How to work with Github

Creating and searching Github Issues
Seeing tickets and milestones in Github Projects
Fork & Pull Request workflow on Github

Our project structure

our packages

would be superb if @larsrickert and/or @BoppLi could take over this task :) Great chance to get acquainted!

Could you provide a list of WaWi collegues? Or maybe you can schedule the meeting, I can take over the onboarding


Explain how pageviews work with the @frontity/google-tag-manager-analytics package

Opening this issue because of this thread in the community: https://community.frontity.org/t/analytics-wont-track-pageviews/3813
It is true that, when using the @frontity/google-tag-manager-analytics package, you don't have to do anything more in Frontity (pageviews are sent automatically).
But, in order to send them to Google Analytics (or any other analytics service you may be using), you need to configure your GTM container to use a custom event called pageview, which has this format: https://community.frontity.org/t/google-tag-manager-package/1400/18
That's not explained neither in the docs nor in the package's README.

As David said, users will have to create a Trigger listening to a custom event named pageview, and a Google Analytics tag listening to that trigger. These is an example we are using in our web:
Trigger

Tag

@cristianbote Can you help me to understand this issue to document?

It is true that, when using the @frontity/google-tag-manager-analytics package...
Is this extra configuration needed only for tracking the pageview event in Google Tag Manager?

But, in order to send them to Google Analytics (or any other analytics service you may be using)
Is this something needed also for Google Analytics?

which has this format: https://community.frontity.org/t/google-tag-manager-package/1400/18
Is the format of the event sent to Google Tag Manager relevant somehow? I don't see any of these values used in the screenshots provided by Mario

Usually, when you want to send pageviews to Google Analytics through Google Tag Manager, you have to create a Trigger with the default Event Type "pageview", and then create a Google Analytics Tag listening to the trigger..
However, the default Event Type "pageview", doesn't work properly in Single Page Applications. For this reason, in a Frontity project, you have to create a Trigger listening to a custom event "pageview", instead of the default "pageview". This custom event is automatically send by @frontity/google-tag-manager-analytics package.
This means that, the only difference between a common Google Analytics configuration through Google Tag Manager and one in a Frontity project, is that you cannot use the default trigger for pageviews and you have to create your own one listening to the Custom Event. This is what we do in this picture:
Trigger

And in the Google Analytics tag, you just listen to this new trigger.

Is this something needed also for Google Analytics?

If you use @frontity/google-analytics package you are not sending the pageviews through Google Tag Manager so this doesn't apply.

Is the format of the event sent to Google Tag Manager relevant somehow? I don't see any of these values used in the screenshots provided by Mario

I think the only thing users have to take into account here is that the Custom event is called "pageview", because they have to define it in the Google Tag Manager trigger.
Let me know if you have more questions :slightly_smiling_face:

Completely agree with @SantosGuillamot.

I think the only thing users have to take into account here is that the Custom event is called "pageview", because they have to define it in the Google Tag Manager trigger.

I would want to clarify that the format may be relevant if you want to write a custom HTML tag, using the values provided inside the pageview event - instead of getting those values from the browser, which is what Google Analytics does.


issue with black&white images

Hi all! I am dealing with a very annoying issue and as I am new at Python I don't know how to go thought.
Shortly I am running places365 over many images, and it looks that it can't handle with black and white images, since I got the following error:
RuntimeError: Need input of dimension 4 and input.size[1] == 3 but got input to be of shape: [1 x 1 x 224 x 224] at /pytorch/torch/lib/THNN/generic/SpatialConvolutionMM.c:47
As I would not want to delete all the black and white images, could someone suggest me few lines of code that would solve the problem?
Thanks!

I meet the same problem. Did you solve it?

you just add an if check, if it is black and white, you duplicate channel three times for RGB


[source-map] Fix incorrect RawSourceMap.sourcesContents field typing.

According to the source map spec and the source-map documentation, this field is an array of strings, not a single string. Each item in the string contains the source code of the corresponding item in the RawSourceMap.sources array.

thanks mate!


Emit dont work

I've a problem with send emit
I dont using routes with "sockets", when i send emit it is not enough by my client
in my client it nothing happens, but its connected with successful (not have errors)
My client

?EIO=3&transport=websocket&sid=2jCCkUhioywGFGzpAAAB
GET	101	websocket	Other	0 B	4.2 min

My code
var
  bodyParser    = require('body-parser'),
  db            = require('./config/database'),
  express       = require('express.oi'),
  server        = express().http().io();

env('./enviroment.env', {verbose: true, overwrite: true, raise: false, logger: console});

// set ip and port
var
  port = process.env.PORT,
  ip = process.env.IP

var interceptors  = require('./config/interceptor')(),
    routes        = require('./config/router')(server.oauth).routes;

server.config = (function(){
  server.use(bodyParser.urlencoded({ extended: true }));
  server.use(bodyParser.json());
  server.use(interceptors.cross);
  server.use(interceptors.accessToken);
  server.use('/v2', routes);
  server.use(server.oauth.errorHandler());
  db.connect();
})();

//start
server.listen(port,ip);
console.log('Server on connetected ' +  ip + ' listenning port ' + port);

/* THIS CODE IS WORK*/
server.io.on('connection',function(socket){
  console.log('A new client was connected');
});

In my route
/**
 * Method to save
 * @param request req
 * @param response res
 */
Router.save = function (req, res) {
    if (req.isSocket) {
        console.log('have socket');
        req.socket.emit('test', 'this is a test');
    }else{
        console.log('dont have socket');
    }

    req.socket.emit('test', 'this is a test');

    Business.save(req.body, response(res));
}

Server on connetected <IP_ADDRESS> listenning port 8056
A new client was connected
dont have socket

I tried get app by "object request" [req] with req.app thinking that
server.io.on() worked.
Thinking this i used req.app.io.emit and worked in my routes
This is a solution

req.app.io.emit('test','ok');


detected?

got banne din one day used visuals (only used sezinjecotor x86 build debug vac not overwatch)

Why don't you use vac bypass and release build

Why don't you use vac bypass and release build

(im new) how do i use vac bypass

Just search it up here, I've heard csghost worked as well but i haven't checked

i found this https://github.com/danielkrupinski/VAC-Bypass lets say i wanna use it what do i do

m using sez injector btw it has a bypass

m using sez injector btw it has a bypass

Apparently not, use vac bypass loader by daniel, it has instructions on how to do it there.

m using sez injector btw it has a bypass

Apparently not, use vac bypass loader by daniel, it has instructions on how to do it there.

ill try another time

use https://github.com/mdilai/Shtreeba injector
and https://github.com/danielkrupinski/vac-bypass-loader
close steam and open the vac-bypass-loader

no it's not, your injector is detected.
I've been using osiris with no modification and Injecting with process hacker, without vac bypass and no bans yet.

no it's not, your injector is detected.
I've been using osiris with no modification and Injecting with process hacker, without vac bypass and no bans yet.

How do you inject using process hacker? I thought they removed that.

no it's not, your injector is detected.
I've been using osiris with no modification and Injecting with process hacker, without vac bypass and no bans yet.

How do you inject using process hacker? I thought they removed that.

no it's not, your injector is detected.
I've been using osiris with no modification and Injecting with process hacker, without vac bypass and no bans yet.

How do you inject using process hacker? I thought they removed that.

put the dll in windows folder

no it's not, your injector is detected.
I've been using osiris with no modification and Injecting with process hacker, without vac bypass and no bans yet.

hey, what about your trust factor? Cuz mine went red after 2 games, without reports

How do you check your trust factory anyway? how did you know it went to red after two days?


Test

Thank you for your submission! We require that all contributors sign our Contributor License Agreement ("CLA") before we can accept the contribution. Read and sign the agreement
Learn more about why HashiCorp requires a CLA and what the CLA includes

Alejandro Cardonae seems not to be a GitHub user.
You need a GitHub account to be able to sign the CLA. If you already have a GitHub account, please add the email address used for this commit to your account.
Have you signed the CLA already but the status is still pending? Recheck it.


More verbose console output (e.g. show when keywords start)

Originally submitted to Google Code by quim.fragas on 22 Mar 2013

I think this is particularly useful for long SuiteSetup and TestSetup,
to have feedback that something is running.
F.i.
===============================================
Test suite X
===============================================

Call to                        SuiteSetup
-----------------------------------------

Test 1                           | PASS |
-----------------------------------------
Test 2                           | PASS |
-----------------------------------------

Eventually, you can also implement for SuiteTeardown and TestTeardown
Call to                     SuiteTeardown
-----------------------------------------

I know this will be visible in the log, but if we are following online the test progress console in Jenkins, I believe it can help.

RF 3.0.3 has been delayed a lot. Now we want it out ASAP and decided to only include bug fixes in it. I'll thus descope this enhancement to RF 3.1 which we plant to start developing right after RF 3.0.3 is out.

Is there any update on this ?

Unfortunately no time for this in RF 3.1. I consider enhancing the console output quite high priority, but would really like to get help from others designing it.

bump 2021

bump 2021

If anything writes to the the console if screws up the output:
*** Test Cases ***
Test1
    [Documentation]    some doc
    log  hi

==============================================================================
Suite
==============================================================================
Test1 :: some doc                                                     | PASS |
------------------------------------------------------------------------------
Suite                                                                 | PASS |
1 test, 1 passed, 0 failed
==============================================================================

*** Test Cases ***
Test1
    [Documentation]    some doc
    log  hi  console=True

==============================================================================
Suite
==============================================================================
Test1 :: some doc                                                     hi
| PASS |
------------------------------------------------------------------------------
Suite                                                                 | PASS |
1 test, 1 passed, 0 failed
==============================================================================

Bump October 2021.
Any update?

Can we please consider this, it has been a long awaited request. Thanks

I'm basically an old man now and this still hasn't happened :(

I still often dream of this. It's what I want for Christmas this year please.

# keyword_listener.py

ROBOT_LISTENER_API_VERSION = 3
import robot.running
import robot.result

def status(result: robot.result.Keyword):
    status_colors = {
        "PASS": "\033[92m",
        "ERROR": "\033[91m",
        "NOT SET": "\033[93m"
    }
    color = status_colors.get(result.status, "")
    return f"{color}{result.status}\033[0m" if color else result.status

def start_keyword(keyword: robot.running.Keyword, result: robot.result.Keyword):
    message = f' {keyword.name}  {"  ".join(keyword.args)}'
    print('\n', f'{message:70} {status(result)}')

def end_keyword(keyword: robot.running.Keyword, result: robot.result.Keyword):
    message = f'  {keyword.name}  {"  ".join(keyword.args)}'
    print(f'{message:71} {status(result)}')

 cat tests/test.robot

*** Settings ***
Library           RequestsLibrary

*** Test Cases ***
Test
     GET  url=https://example.com
     GET  url=https://example.com  status=404

$ robot --listener robot/keywords_listener.py  tests/test.robot
==============================================================================
Test
==============================================================================
Test
  GET  url=https://example.com                                          NOT SET
  GET  url=https://example.com                                          PASS
.
  GET  url=https://example.com  status=404                              NOT SET
  GET  url=https://example.com  status=404                              FAIL
Test                                                                  | FAIL |
TypeError: Session.request() got an unexpected keyword argument 'status'
------------------------------------------------------------------------------
Test                                                                  | FAIL |
1 test, 0 passed, 1 failed

Merry Christmas, Nathan @NorseGaud


Add heading to upcoming non-TTT events

Trello card
Trello-3357
Context
We want to add a heading above the 'regular' (not featured Train to Teach) events to make it clearer that they are ordered by date.
Changes proposed in this pull request

Add heading to upcoming non-TTT events

Guidance to review

Thanks @ethax-ross - looks fine to me (and is an improvement in terms of accessibility I think)
@GDW7 @EllieNodder @gazcarr are you happy with this?

@gemmadallmandfe looks good to me

@gemmadallmandfe looks good to me too


CLI list

See #94

Github fails to run tests today. Though specs run successfully locally, I'll recheck before merging

@alexeymorozov could you help rebase this PR? Thanks!

@ronaldtse Thank you for rebasing 🙏 🙂

:-)


Add Sway Introduction to Articles Section

I created the article Sway Programming - An Introduction to teach beginners how to program in Sway!
After sharing it in the Fuel Discord, it was suggested that I make a PR to add it here :)

Are you curating this repo @SilentCicero ?

ah this was done by another contributor in #1 before I saw this 😬
thank you for the amazing article @0xReady


invalidate balance when switching accounts

it is very confusing that the balance of the previously selected account is shown for a few seconds even after switching the account.
better to show an activity indicator
(also on home screen)

better solution: https://app.zenhub.com/workspace/o/encointer/encointer-wallet-flutter/issues/479


Handle playback when connectivity switched from wifi to mobile

This change handles playback when we switch network connectivity from:

Wifi -> Mobile network
Mobile Network -> Wifi
This handles playback when on non zero rated mobile data network based on user's "Download on wi-fi" preference.

cc -  @rohan-dhamal-clarice @hanningni @aleffert
JIRA: https://openedx.atlassian.net/browse/MOB-1578

There was one more issue where

Clicking links having http://www.edx.org on zero rated network, popup was being displayed which was not required.
This has been fixed in https://github.com/edx/edx-app-android/commit/5e351bf39c8255a368bcba779812f3e6fbcfcc06

JIRA: https://openedx.atlassian.net/browse/MOB-1570

Assuming these changes are well tested, :+1:


feat: implement reduce operator

Uses the first and the following (if available) elements from this source and applies function f on them. The returned value is used as the next current value and f is applied again with the value received from a source. The operation is repeated until the source is drained. This is similar operation to fold but it uses the first source element as zero e.g.:
  Source.empty[Int].reduce(_ + _)    // throws NoSuchElementException("cannot reduce over an empty source")
  Source.fromValues(1).reduce(_ + _) // 1
  val s = Source.fromValues(1, 2)
  s.reduce(_ + _)                    // 3
  s.receive()                        // ChannelClosed.Done

I fixed the title ;)


Is not scrollable when tried with actual mobile phone.

Hi there,
So I tried to use this for the next project. And it worked perfectly when I tried here in the browser but when I tried with the actual phone, I was unable to scroll. I tried exactly what it stated here.  Could you please take a look and let me know please?
Thank you.
UPDATE: I was able to scroll when I disable the drag to close function.
My code:
<Sheet isOpen={isMSOpen} onClose={() => setMSOpen(false)}>
          <Sheet.Container>
            <Sheet.Header />
            <Sheet.Content>
              {posts.map((post) => (

{post.title}

{post.body}

              ))}
            </Sheet.Content>
          </Sheet.Container>
        </Sheet>

I'm having the same problem, in the real phone I cannot scroll. Do you guys found a way to fix it?

Have the same problem. I haven't found a solution yet

It is possible to make dragging gestures and scrolling operations co-exist, but scrolling effect needs to be simulated by dragging gestures. That is, we need to make the height of the SheetContent change to the height of the content to be scrolled, and make the SheetContent respond to the dragging gesture inside the SheetContainer to simulate the scrolling effect on the mobile device.
You can see what I have changed in the following link.
https://github.com/Temzasse/react-modal-sheet/compare/master...Vizards:react-modal-sheet:feat/scroll-drag-coexist?expand=1
And check the altered effect screenshot video here.
https://user-images.githubusercontent.com/13443193/203701569-96724db3-beba-4382-a6bd-12a261d6e84c.mov
But this change is not completely ready, it currently has some problems.

Since the SheetContent becomes draggable, it can't respond to the desktop browser's scrolling events. Perhaps this could be patched with some compatibility code;
Since I can't get the translateY of the current component from framer-motion's onDrag event callback, I have to get the translateY by manipulating the DOM directly, and have to write some really ugly Regex code for safari compatibility;
I haven't tested the Server Side Rendering compatibility.

Hi everyone 👋
It is possible to have the sheet content be scrollable on mobile devices. Not sure if there are device specific limitations but at least for me the scrolling + slack message examples scroll just fine on my iPhone (even when the keyboard is up).
There will always be some glitchy behaviour if you try to combine scrolling with dragging gestures since it is very hard to distinguish between the two. I'm sure Framer Motion already does some magical stuff to make this as smooth as possible 😄 Afaik there is not much this library can do to make scrolling + dragging work better since we are relying on Framer Motion.
If you are tying to scroll the underlying page while the sheets is open that is not possible since the sheet will prevent body scrolling in order to avoid weird glitches on iOS where the sheet dragging gestures are interpreted as scrolling for the body element.

I have found a workaround. I'm using "use-detect-keyboard-open" from npmjs to detect, if the keyboard is open. Then i'm adding a padding-bottom dynamically, to move everything up.
`const isKeyboardOpen = useDetectKeyboardOpen();
const keyboardHeight =
(isKeyboardOpen &&
window.innerHeight - window.visualViewport.height + 'px') ||
0;
return (
<Sheet
isOpen={isOpen}
onClose={closeModal}
detent="content-height"
disableDrag={isKeyboardOpen}
{...props}
>
<Sheet.Container
style={{
paddingBottom: keyboardHeight || '1.25rem',
transition: 'padding 200ms',
}}
>...`

Closing this since a somewhat workable userland solution exists.


Pixel 3

Won't connect to Pixel 3!

Do you have Google drive installed in your macos? If yes try to quit it "completely" and then try again. if not Google drive,check Dropbox or OneDrive. Some applications will lock on to the usb port once it detects a usb drive. See if any active app could be causing this issue?
Let me know?

Could try these?

Reboot your Mac (IMPORTANT). Simply restarting the machine has helped many.

Do you have Google drive installed on your MacBook? If yes, try to quit it "completely" and then try launching openmtp again. See if Dropbox or OneDrive is installed and quit them completely. Some applications will lock on to the usb port once it detects a usb drive. See if any of the active apps require usb access which might be causing this issue.

Try disabling the hotplug detection from settings in OpenMTP.

Make sure that you have enabled file transfer and accepted "enable mtp data access" on your Samsung phone

See if the alpha version of the app works for you. Here's a link to the latest test flight build of OpenMTP

Apple silicone: https://github.com/ganeshrvel/openmtp-testflight/releases/download/v3.2.0-alpha.5/openmtp-3.2.0-alpha.5-mac-arm64.dmg
Intel: https://github.com/ganeshrvel/openmtp-testflight/releases/download/v3.2.0-alpha.5/openmtp-3.2.0-alpha.5-mac-x64.dmg
Installation instructions for openmtp Alpha version: https://github.com/ganeshrvel/openmtp/issues/220#issuecomment-1214261070
Thanks again,
Ganesh


Add initial popularity to websites when importing (bug 1161858)

https://bugzilla.mozilla.org/show_bug.cgi?id=1161858
The value is "stolen" from apps, to provide a healthy initial mix of apps and websites in new and popular pages at launch.

r+wc


Rig with both rx580 and Vega64 cards

I've rig with 3 Vega64 and 3 RX 580 (two of them the same). Here are results of commands:
`lspci | grep VGA
00:02.0 VGA compatible controller: Intel Corporation Device 1902 (rev 06)
01:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Device 67df (rev e7)
04:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Device 687f (rev c1)
05:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Device 67df (rev e7)
09:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Device 687f (rev c1)
0c:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Device 687f (rev c1)
0d:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Device 67df (rev e7)
clinfo | grep "Device Board"
Device Board Name (AMD)                         Device 67df
Device Board Name (AMD)                         Device 687f
Device Board Name (AMD)                         Device 687f
Device Board Name (AMD)                         Device 687f
`
As you can see cliinfo doesn't see 2 cards. And as a result TDXMINER see only 4 of 6 devices.

Put 2x Polaris on the x16 slots.  And put 3x vegas on the 1x slots.  You should be able to get 5 cards detected at least.


Diagnostic Dump excludes some logfiles

Repro steps.

Create an Azure WebApp and add the New Relic .NET Agent extension.
NewRelic logfiles are written to C:\home\LogFiles\NewRelic and can be browsed, downloaded and edited via the Kudu Debug Console.
Browse to C:\home\LogFiles\NewRelic in the Kudu Debug Console and note which files are present.
Generate a Kudu Diagnostic Dump.
Note that two files are missing - one of the NewRelic.Profiler.*.log files and the newrelic_agent_xxx.log file.
Stop the WebApp
Generate a new Kudu Diagnostic Dump
Note that the two missing files are now included.

NewRelic uses Serilog for writing the log files, which retains an open handle to the file, but opens the file for shared access. There would appear to be some conflict with the Diagnostic Dump tool where it's trying to gain an exclusive lock on the files it adds to the output zip file.
Debug your Azure website remotely.
My website is at https://sampleazurewebappcore.azurewebsites.net/

Hi
If the problem persists and is related to running it on Azure App Service, please open a support incident in Azure:
https://learn.microsoft.com/en-us/azure/azure-portal/supportability/how-to-create-azure-support-request
This way we can better track and assist you on this case
Thanks,
Joaquin Vano
Azure App Service


Update gotify-ws to 0.1.5

Please update my adapter ioBroker.gotify-ws to version 0.1.5.
This pull request was created by https://www.iobroker.dev c0726ff.

Your Adapter has been added to stable repository. If you like you can extend the news message here:
https://github.com/ioBroker/ioBroker.docs/blob/master/docs/en/history/history.md
If you add some more information / description, please consider to add this information to README.md too.
If you have any questions related to the news file, please contact @Apollon77 for further information.
Please note, that the PR announcing the new adapter at stable might not be merged.
https://github.com/ioBroker/ioBroker.docs/pull/


Quotes around keys in JS object literal for Building JavaScript objects

It's not an issue because the code works.  There are quotes around the keys, and the quotes should only be around the values that the keys point to.

Challenge Name

https://www.freecodecamp.com/challenges/build-javascript-objects#?solution=
%2F%2F Example
var ourDog %3D {
  "name"%3A "Camper"%2C
  "legs"%3A 4%2C
  "tails"%3A 1%2C
  "friends"%3A ["everything!"]
}%3B

%2F%2F Only change code below this line.

var myDog %3D {
  name%3A"SomeName"%2C
  legs%3A4%2C
  tails%3A1%2C
  friends%3A["friends"]
}%3B

Issue Description

No issue. Just quotes around the keys. It's a bit strange and may throw some first time programmers off.  That's  not how it works as far as I know, putting quotes around the keys.
Browser Information

Browser Name, Version:
Operating System:
Mobile, Desktop, or Tablet:

Your Code

Screenshot

Object keys are always strings, but they can be written with or without quotation marks.

Thanks BKinahan for your Answer and to Shaldipur for asking the Question,.. to those of us new to javascript, we would have continued to define property keys within quotes, however, as explained... is not required in order to pass this code exercise and other code exercises that follow.


MKOB: Make changes in Main window "sticky" in config

Changes in the main window (to wire #, station ID, etc.) should immediately be updated in the config files so the next invocation of MKOB will find them as they were left during the last run.
This will also simplify the model for Preferences/Configuration: the Preferences window loads from the config-file settings, so this will ensure the Preferences window starts in sync with the main window.  Picking up changes in configuration AFTER the Preferences window has been run should be handled as part of introducing the Preferences window.

This seems to be working. I changed the 'wire' and then checked with Configure.py and it reported the new value.
Can we close this, or is there more testing you want to do? I didn't change and check every value, but if we find ones that aren't 'sticky' we can create an issue for them.

This seems to be working. I changed the 'wire' and then checked with Configure.py and it reported the new value.
Can we close this, or is there more testing you want to do? I didn't change and check every value, but if we find ones that aren't 'sticky' we can create an issue for them.

Resolved with merge of #229 ("Remove dependency on kobconfig; pass through all config options straight from 'config'.").

Resolved with merge of #229 ("Remove dependency on kobconfig; pass through all config options straight from 'config'.").


add .editorconfig for xml files

When moving closer to edit and develop ABAP sources outside of a system, it crucial to ensure a common style of the development files.
abaplint already takes care of the formatting of *.abap files, but nothing ensures a common format for the corresponding XML files. Some editors auto format these files, based on a default config, which is not that good.
Therefore adding a .editorconfig file, which ensures the correct formatting on saving of the XML files.
I just added a basic configuration to start with.

Won't end_of_line = lf conflict with git's core.autocrlf = true on Windows?

Somehow I messed this up ...
Create a new PR #3516 3516


Seed Deprecation

Hi
Please don't deprecate the Seed node just yet? As far as I can see the primitive seed is a pain to use, because you cannot use it with reroute nodes? Just tried updating everything and lots of primitive nodes (including seed)) are still not working with reroutes :(

https://github.com/comfyanonymous/ComfyUI/pull/785
Hopefully will be fixed soon though...

Alight. Instead I have upgraded it.
https://github.com/WASasquatch/was-node-suite-comfyui/commit/c2b514aae4f9bc74d6f2711a61ab4b85d32dd696


Enable xops integration

Pull Request Template
What are you trying to address

We are including all CWEP content in the SolutionOps playbook. (Full details still to be worked out--this is a first step.)
The SolutionOps playbook uses the markdownextractdata plugin, which uses jinja2.
In order to publish CWEP pages into the SolutionOps playbook, they must be parsed correctly by all the plugins that are installed in the SolutionOps mkdocs.yml config.
Several CWEP pages have yaml code snippets that use double curly braces ({{ ... }}), which is the jinja2 substituion operator, for parameters.
The yaml snippets break mkdocs build when jinja2 parses them during the build.

Description of new changes

Add the markdownextractdata extension to the CWEP mkdocs.yml configuration, so that any build errors caused by yaml snippets are discovered in the source repo rather than on import to the SolutionOps repo.
Add {% raw %} and {% endraw %} tagas aroudn yaml code snippets to disable jinja parsing. Assures the updated pages can be published correctly by into the SolutionOps playbook.

For all pull requests

[ ] Link to the issue you are solving (so it gets closed)
[X] Label the pull request with the appropriate area(s)
[X] Assign potential reviewers (you may also want to contact them on Teams to ensure timely reviews)
[X] Assign the project - Engineering Playbook Backlog
[X] Assign the pull request to yourself

Before we start modifying the EF playbook for something that may or may not happen - can we have a discussion first?
I would suggest we hold off on this change until that discussion has happened.

Should we close this PR at this point - I think the idea at the moment is that the play books will continue to be separate entities but with strong collaboration.


Can not use external AI service instead of openai

Hi, i am using LlamaIndexTS in my nestjs app server, and use Anthropic instead of default openai, here are my setup code
`@Injectable()
export class ClassService {
constructor(
) {
Settings.llm = new Anthropic({
apiKey: process.env.CLAUDE_API_KEY || '',
model: 'claude-3-sonnet',
});
}
//.... code method
`
but the issue is that, it always show Error: Error: Set OpenAI Key in OPENAI_API_KEY env variable, Pls help!

There are two models, an LLM and an embedding model. You need to change both (anthropic does not offer an embedding model sadly)

@logan-markewich sorry, dont really get u. I am using llm model, initializing Anthropic( claude ai) but dont know why it always require openai key. what more config should i add?

@logan-markewich  ya, u are right, the claude does not support embedding but my code load a file data doe this is reason why it show openai key error.

claude ai does not support embedding api


Add loading tags, starting with croissant and webdataset

TODO

[ ] add to is-valid

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

Comparison is base (93b4395) 91.29% compared to head (6cc32b8) 86.36%.

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #2386      +/-   ##
==========================================
- Coverage   91.29%   86.36%   -4.93%
==========================================
  Files         256      101     -155
  Lines       15578     3880   -11698
==========================================
- Hits        14222     3351   -10871
+ Misses       1356      529     -827

Flag
Coverage Δ

jobs_cache_maintenance
?

jobs_mongodb_migration
86.11% <ø> (ø)

libs_libcommon
?

services_admin
87.60% <ø> (ø)

services_api
86.01% <ø> (ø)

services_rows
82.95% <ø> (ø)

services_search
80.95% <ø> (ø)

services_sse-api
94.19% <ø> (ø)

services_worker
?

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

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

Hmm maybe a migration would be faster indeed, and no need to increase the job version in this case

alright all green now, lmk if it's good for you