XLA without autoclustering?

https://www.tensorflow.org/xla/#explicit_compilation_with_tffunction seems to imply that it is possible to enable XLA for parts of the graph without involving autoclustering.
I am attempting to do this for the Gelu op in BERT https://github.com/google-research/bert/blob/master/modeling.py#L264 as suggested here https://github.com/tensorflow/tensorflow/pull/37937 and the observed behavior does not match my expectation.
I'm adding the tf.function tag to a function 'gelu' that contains tf.tanh and some cwise arithmetics, but not touching global jit options, etc. My expectation is to produce a number of identical clusters implementing this 'gelu', and possibly a number of clusters implementing its gradients.
What I'm actually seeing instead, is a number of clusters that seem to be greedily constructed around 'gelu's, but are also sweeping everything in the neighborhood, up to and including GEMMs:
2020-04-11 09:17:46.357008: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:888] Assigning node gradients/AddN_149 to cluster cluster_1
2020-04-11 09:17:46.372574: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1471] *** Clustering info for graph of size 14527
2020-04-11 09:17:46.372603: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1472]  Built 50 clusters, size 4788 / 14527 (32.96%)
2020-04-11 09:17:46.372622: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1481]   cluster_0 114 / 14527 (0.78%)
2020-04-11 09:17:46.372630: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    AddN: 2 instances
2020-04-11 09:17:46.372636: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    AddV2: 4 instances
2020-04-11 09:17:46.372642: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    BiasAdd: 3 instances
2020-04-11 09:17:46.372648: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    BiasAddGrad: 2 instances
2020-04-11 09:17:46.372654: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    Const: 24 instances
2020-04-11 09:17:46.372660: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    Exp: 1 instances
2020-04-11 09:17:46.372666: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    LogSoftmax: 2 instances
2020-04-11 09:17:46.372671: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    MatMul: 5 instances
2020-04-11 09:17:46.372677: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    Mean: 3 instances
2020-04-11 09:17:46.372683: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    Mul: 19 instances
2020-04-11 09:17:46.372688: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    Neg: 4 instances
2020-04-11 09:17:46.372695: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    OneHot: 2 instances
2020-04-11 09:17:46.372701: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    PartitionedCall: 1 instances
2020-04-11 09:17:46.372706: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    ReadVariableOp: 8 instances
2020-04-11 09:17:46.372712: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    RealDiv: 1 instances
2020-04-11 09:17:46.372717: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    Reciprocal: 1 instances
2020-04-11 09:17:46.372723: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    Reshape: 10 instances
2020-04-11 09:17:46.372729: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    Rsqrt: 1 instances
2020-04-11 09:17:46.372734: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    RsqrtGrad: 1 instances
2020-04-11 09:17:46.372742: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    SquaredDifference: 1 instances
2020-04-11 09:17:46.372750: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    Squeeze: 1 instances
2020-04-11 09:17:46.372759: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    StridedSlice: 1 instances
2020-04-11 09:17:46.372767: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    Sub: 3 instances
2020-04-11 09:17:46.372775: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    Sum: 9 instances
2020-04-11 09:17:46.372783: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    Tanh: 1 instances
2020-04-11 09:17:46.372792: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    Tile: 4 instances
2020-04-11 09:17:46.372810: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1481]   cluster_1 232 / 14527 (1.60%)
2020-04-11 09:17:46.372840: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    AddN: 13 instances
2020-04-11 09:17:46.372849: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    BatchMatMulV2: 8 instances
2020-04-11 09:17:46.372859: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    BiasAddGrad: 10 instances
2020-04-11 09:17:46.372868: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    Const: 50 instances
2020-04-11 09:17:46.372877: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    MatMul: 23 instances
2020-04-11 09:17:46.372885: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    Mul: 58 instances
2020-04-11 09:17:46.372895: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    Neg: 4 instances
2020-04-11 09:17:46.372904: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    PartitionedCall: 1 instances
2020-04-11 09:17:46.372913: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    Reshape: 19 instances
2020-04-11 09:17:46.372927: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    RsqrtGrad: 4 instances
2020-04-11 09:17:46.372936: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    Sub: 6 instances
2020-04-11 09:17:46.372945: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    Sum: 19 instances
2020-04-11 09:17:46.372958: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    Tile: 8 instances
2020-04-11 09:17:46.372967: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    Transpose: 8 instances
2020-04-11 09:17:46.372976: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    UnsortedSegmentSum: 1 instances
2020-04-11 09:17:46.372995: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1481]   cluster_10 113 / 14527 (0.78%)
2020-04-11 09:17:46.373006: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    AddN: 6 instances
2020-04-11 09:17:46.373016: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    BatchMatMulV2: 4 instances
2020-04-11 09:17:46.373024: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    BiasAddGrad: 6 instances
2020-04-11 09:17:46.373032: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    Const: 23 instances
2020-04-11 09:17:46.373040: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    MatMul: 12 instances
2020-04-11 09:17:46.373049: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    Mul: 29 instances
2020-04-11 09:17:46.373059: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    Neg: 2 instances
2020-04-11 09:17:46.373068: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    PartitionedCall: 1 instances
2020-04-11 09:17:46.373077: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    Reshape: 8 instances
2020-04-11 09:17:46.373087: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    RsqrtGrad: 2 instances
2020-04-11 09:17:46.373111: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    Sub: 3 instances
2020-04-11 09:17:46.373119: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    Sum: 9 instances
2020-04-11 09:17:46.373128: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    Tile: 4 instances
2020-04-11 09:17:46.373136: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    Transpose: 4 instances
2020-04-11 09:17:46.373151: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1481]   cluster_11 113 / 14527 (0.78%)

This presents reliability problems (if XLA is going to drag random operations from the graph into the cluster, I can never be sure that it won't end up with something it can't compile correctly) and also performance problems (instead of compiling 1 or 2 relatively short kernels, it ends up trying to compile 100 large kernels and that takes several minutes.)
Is this the intended behavior, and can this be avoided?

I should note that I see this even if I set autoclustering policy in compiler/jit/xla_gpu_device.cc to kIfExplicitlyRequested.
I think this is happening because the function MarkForCompilationPassImpl::RunEdgeContractionLoop() is executed regardless of the global JIT setting. If I comment it out, I get the exact behavior I originally expected:
2020-04-12 03:17:07.617912: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1471] *** Clustering info for graph of size 14527 2020-04-12 03:17:07.617948: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1472]  Built 50 clusters, size 50 / 14527 (0.34%) 2020-04-12 03:17:07.617973: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1481]   cluster_0 1 / 14527 (0.01%) 2020-04-12 03:17:07.617984: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    PartitionedCall: 1 instances 2020-04-12 03:17:07.617992: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1481]   cluster_1 1 / 14527 (0.01%) 2020-04-12 03:17:07.618001: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    PartitionedCall: 1 instances 2020-04-12 03:17:07.618009: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1481]   cluster_10 1 / 14527 (0.01%) 2020-04-12 03:17:07.618018: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    PartitionedCall: 1 instances 2020-04-12 03:17:07.618026: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1481]   cluster_11 1 / 14527 (0.01%) 2020-04-12 03:17:07.618035: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    PartitionedCall: 1 instances 2020-04-12 03:17:07.618043: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1481]   cluster_12 1 / 14527 (0.01%) 2020-04-12 03:17:07.618052: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1485]    PartitionedCall: 1 instances 2020-04-12 03:17:07.618060: I tensorflow/compiler/jit/mark_for_compilation_pass.cc:1481]   cluster_13 1 / 14527 (0.01%)
Perhaps that function should be made conditional on the setting of tf_xla_auto_jit?

@cheshire

Are you using the nightly build?

https://www.tensorflow.org/xla/#explicit_compilation_with_tffunction seems to imply that it is possible to enable XLA for parts of the graph without involving autoclustering.

Yes!

I'm adding the tf.function tag to a function 'gelu' that contains tf.tanh and some cwise arithmetics, but not touching global jit options, etc

Yes, that makes sense, it should be enough to add the annotation @tf.function(experimental_compile=True)

My expectation is to produce a number of identical clusters implementing this 'gelu', and possibly a number of clusters implementing its gradients

Basically yes, though calling them "clusters" can cause confusion because it's a separate mechanism from autoclustering. It will note produce identical clusters during reuse, but it would have to recompile for each new shape.

What I'm actually seeing instead, is a number of clusters that seem to be greedily constructed around 'gelu's, but are also sweeping everything in the neighborhood, up to and including GEMMs:

mark_for_compilation_pass is for autoclustering, and actually should not be doing anything at all for tf.function. What is the exact command you are using? Is autoclustering definitely off?

Is this the intended behavior, and can this be avoided?

It honestly sounds like the autoclustering mode is on.

I should note that I see this even if I set autoclustering policy in compiler/jit/xla_gpu_device.cc to kIfExplicitlyRequested.

Are you using the XLA_GPU devices? They are deprecated and cause a lot of confusion and we are trying to remove them, but it takes time. A simple answer here is not to use XLA_GPU device and not to change any settings there.

MarkForCompilationPassImpl::RunEdgeContractionLoop() is executed regardless of the global JIT setting

I think it's always executed, but it should not do anything if nothing is marked for compilation?

I am using the rocm fork with all the latest changes from master merged in, I am not using XLA_GPU devices, and autoclustering is definitely off.
Here's my proposed fix https://github.com/ROCmSoftwarePlatform/tensorflow-upstream/pull/929/files#diff-73244848675e057e66040c0bcef78b51 - on its own, it breaks a few unit tests, and I have to fix them by adding tf_xla_auto_jit=2  to TF_XLA_FLAGS. Any problems with it?
An alternative would be to go deeper into the code and e.g. check whether both ends of an edge have is_xla_compile_attr_true flags before contracting them.

@ekuznetsov139 Is there a simple reproducer I could try to see this problem?
If you are willing to dive deep, could you see why mark_for_compilation_pass is doing anything at all? There is a filter which should only consider nodes marked with kXlaMustCompileAttr (those are created by tf.function(experimental_compile=True)) when the global JIT setting is on.

Just noticed this https://github.com/tensorflow/tensorflow/commit/f7d337b2ba182332a8a465d105af3608535b20df
The change is dated 4/1, and I was working with a fork synchronized up to 3/30 :( Pretty sure it fixes my problem.

Yup, that's why I have asked whether it is latest TF.


⚠ Jenkins Plugins Artifactory has degraded performance

In d729d87, Jenkins Plugins Artifactory (https://get.jenkins.io/plugins/artifactory/) experienced degraded performance:

HTTP code: 200
Response time: 1233 ms

Resolved: Jenkins Plugins Artifactory performance has improved in 10fdd4d after 24 minutes.


fix(iroh): handle connection refused errors with pretty messages again

Bring back this message when nothings running:
$ iroh get foo
Error: Connection refused. Are services running?
hint: see 'iroh start' for more on starting services

Also pick up a neat little refactor that drops inner match statements

Just checked. This still works when the quic-rpc update is merged in:
❯ cargo run -p iroh -- get /ipfs/bafybeicskkapfeufzavafp5u2cjpkqwjvze5glvgqwpypwf6gmxpbm5odq
    Finished dev [unoptimized + debuginfo] target(s) in 0.22s
     Running `target/debug/iroh get /ipfs/bafybeicskkapfeufzavafp5u2cjpkqwjvze5glvgqwpypwf6gmxpbm5odq`
Error: Connection refused. Are services running?
hint: see 'iroh start' for more on starting services

iroh on  b5/fix_no_service [$?⇡] is 📦 v0.1.3 via 🦀 v1.65.0
❯ git log
commit ceb8439d0604c7c1bf307f23b7be58093f41ef0c (HEAD -> b5/fix_no_service)
Merge: 427e61a9 326bc459
Author: Ruediger Klaehn<EMAIL_ADDRESS>Date:   Wed Dec 21 14:03:40 2022 +0200

    Merge branch 'rklaehn/update-quic-rpc' into b5/fix_no_service

commit 326bc459075b46caa0b12b6c5b0f6ef544fd4b2f (origin/rklaehn/update-quic-rpc, rklaehn/update-quic-rpc)
Author: Ruediger Klaehn<EMAIL_ADDRESS>Date:   Wed Dec 21 13:36:45 2022 +0200

    chore: update quic-rpc

    This should at least get rid of the errors when receiving empty frames


vscode: 1.63.1 -> 1.63.2

Automatic update generated by nixpkgs-update tools. This update was made based on information from passthru.updateScript.
meta.description for vscode is: "Open source source code editor developed by Microsoft for Windows,\nLinux and macOS\n"
meta.homepage for vscode is: "https://code.visualstudio.com/"
meta.changelog for vscode is: ""
Updates performed

Ran passthru.UpdateScript

To inspect upstream changes
Impact

Checks done (click to expand)

built on NixOS
Warning: a test defined in passthru.tests did not pass
/nix/store/hkdj245dygqa69jq655zwi4cwj2p6fmi-vscode-1.63.2/bin/.code-wrapped passed the binary check.
/nix/store/hkdj245dygqa69jq655zwi4cwj2p6fmi-vscode-1.63.2/bin/code passed the binary check.
2 of 2 passed binary check by having a zero exit code.
2 of 2 passed binary check by having the new version present in output.
found 1.63.2 with grep in /nix/store/hkdj245dygqa69jq655zwi4cwj2p6fmi-vscode-1.63.2
found 1.63.2 in filename of file in /nix/store/hkdj245dygqa69jq655zwi4cwj2p6fmi-vscode-1.63.2

Rebuild report (if merged into master) (click to expand)

7 total rebuild path(s)

4 package rebuild(s)

4 x86_64-linux rebuild(s)
3 x86_64-darwin rebuild(s)

First fifty rebuilds by attrpath
docbookrx
vscode
vscode-fhs
vscode-with-extensions

Instructions to test this update (click to expand)

Either download from Cachix:
nix-store -r /nix/store/hkdj245dygqa69jq655zwi4cwj2p6fmi-vscode-1.63.2 \
  --option binary-caches 'https://cache.nixos.org/ https://nix-community.cachix.org/' \
  --option trusted-public-keys '
  nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=
  cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=
  '

(The Cachix cache is only trusted for this store-path realization.)
For the Cachix download to work, your user must be in the trusted-users list or you can use sudo since root is effectively trusted.
Or, build yourself:
nix-build -A vscode https://github.com/r-ryantm/nixpkgs/archive/d06fdce8958638c8d33437e6d95556d49a9b1e72.tar.gz

After you've downloaded or built it, look at the files and if there are any, run the binaries:
ls -la /nix/store/hkdj245dygqa69jq655zwi4cwj2p6fmi-vscode-1.63.2
ls -la /nix/store/hkdj245dygqa69jq655zwi4cwj2p6fmi-vscode-1.63.2/bin

Pre-merge build results
We have automatically built all packages that will get rebuilt due to
this change.
This gives evidence on whether the upgrade will break dependent packages.
Note sometimes packages show up as failed to build independent of the
change, simply because they are already broken on the target branch.
Result of nixpkgs-review run on x86_64-linux 1

3 packages built:

vscode
vscode-fhs
vscode-with-extensions

Maintainer pings
cc @eadwu @Synthetica9 @maxeaubrey @bobby285271 for testing.

@ofborg eval

Cherry-picked and pushed to #149858.


Add battery sym / cmp

Single cell battery:

Multi-cell battery:

I categorized the items them both under "Schematic Symbols > Supply Symbols" and "Electromechanical > Battery Holders", since it could be both a battery holder or another type of connector.

I would say all pins could be shortened by 2.54mm to make the symbols more compact. You can even remove the 2 horizontal lines by using the line of the pins instead ;) But when shortening the pins, the grab areas should be shortened too to avoid overlapping with the pins.
I'm not sure about the zero rotation of the symbols. Wouldn't it be more intuitive if they were vertically oriented, with plus at top (like capacitors)?
The components should have the default value "{{PARTNUMBER or DEVICE}}". What is the generic battery actually intended for?

I categorized the items them both under "Schematic Symbols > Supply Symbols" and "Electromechanical > Battery Holders", since it could be both a battery holder or another type of connector.

The "Schematic Symbols" category (and subcategories) is intended for schematic-only symbols, i.e. not representing a real device, for example schematic frames or the "VCC" symbol. Thus the battery symbol is not correct here and should be removed from this category.

I would say all pins could be shortened by 2.54mm to make the symbols more compact. You can even remove the 2 horizontal lines by using the line of the pins instead ;) But when shortening the pins, the grab areas should be shortened too to avoid overlapping with the pins.

Done.

I'm not sure about the zero rotation of the symbols. Wouldn't it be more intuitive if they were vertically oriented, with plus at top (like capacitors)?

Changed.

The components should have the default value "{{PARTNUMBER or DEVICE}}".

Done.

What is the generic battery actually intended for?

It can be used if you support single- and multi-cell batteries, or if you don't know how many cells there are.
But maybe that should be a generic device instead, that maps to the single-cell component?

The "Schematic Symbols" category (and subcategories) is intended for schematic-only symbols, i.e. not representing a real device, for example schematic frames or the "VCC" symbol. Thus the battery symbol is not correct here and should be removed from this category.

Should it be added to another category besides "battery holders" (which isn't correct for LiPo connectors, for example)?

Symbols:

Are still in category "Supply Symbols" -> remove this category
Name/value labels should be both on the same side. I would put them to the right for consistency with capacitors.
The "+" and "-" signs overlap with netlines if netlines are connected from the right side to the pins. I would move the signs slightly nearer to the center of the symbol, and maybe make them slightly smaller to avoid such an overlap.
Didn't we discuss offline that a "multi-cell" battery doesn't make much sense, and thus it should be renamed to "double-cell" instead?

But maybe that should be a generic device instead, that maps to the single-cell component?

Yeah, I would say a generic battery component doesn't make much sense.

Are still in category "Supply Symbols" -> remove this category

Done. What about the question in my comment above? Should they be added to another category besides "battery holders" (which isn't correct for LiPo connectors, for example)?

Name/value labels should be both on the same side. I would put them to the right for consistency with capacitors.

Done

The "+" and "-" signs overlap with netlines if netlines are connected from the right side to the pins. I would move the signs slightly nearer to the center of the symbol, and maybe make them slightly smaller to avoid such an overlap.

Done

Didn't we discuss offline that a "multi-cell" battery doesn't make much sense, and thus it should be renamed to "double-cell" instead?

I can't remember, that would be a few months ago. Are you talking about the symbol or the component? Why does it not make sense? (If we have a double-cell battery component, then why not 3-cell and 4-cell components too?)

But maybe that should be a generic device instead, that maps to the single-cell component?

Yeah, I would say a generic battery component doesn't make much sense.

I removed the component. But I can't add a generic device without choosing a package. I guess this should be left to concrete battery connectors. Alternatively we could add a generic battery connector device with a 2-pin "soldered wire connector" package.

Thanks for the review @ubruhin!


Test an app that uses a NoSQL database

User story:
As a user of this test framework, I want to test an app that that communicates with a NoSQL database.
Additional detail:
It is very common for microservice applications to persist data to a database. NoSQL databases are commonly used for microservices. Some databases we should consider testing with are:

MongoDB
Cassandra
Couchbase
Redis

If the DB provides a mock driver that can be used with their client API, we can use it. Otherwise, users can use Testcontainers to create an instance of their DB using a Docker container.
Since container start can be expensive, it would be best if we can keep the same database up for all tests, and just wipe the DB clean after every test method and/or class. This behavior should have a reasonable default, and other options should be easily configurable. If users want a more fine-grained direct control over how data is managed between tests, there should be a way that users can plug-in their own pre-populating/clearing logic.
Coordinate design with testing relational databases.

Covered by this sample app: https://github.com/MicroShed/microshed-testing/tree/master/sample-apps/everything-app


Update excel file in Author guide

Hi,
journal_list_author_tool.xlsx
Here is the new file to be uploaded in the Author guide.
Thanks in advance,
Anne

Sorry for the error in the previous file... the corrected file is here.
journal_list_author_tool.xlsx


fix for mismatch of global context

While testing in node.js environment unmounting the component with enzyme didn't clear the timeout which lead to setting the state after component is unmounted. clearTimeout had global context, but setting timeout had window. it must be the same.

Codecov Report

:exclamation: No coverage uploaded for pull request base (master@c450d9a). Click here to learn what that means.
The diff coverage is 100%.

@@            Coverage Diff            @@
##             master     #925   +/-   ##
=========================================
  Coverage          ?   85.47%
=========================================
  Files             ?       12
  Lines             ?      606
  Branches          ?      115
=========================================
  Hits              ?      518
  Misses            ?        4
  Partials          ?       84

Impacted Files
Coverage Δ

src/datepicker.jsx
91.71% <100%> (ø)

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 c450d9a...4f55253. Read the comment docs.


Error running flows in CoE

Downloaded the current version as suggested by you in my old ticket ,getting the attached error in while turning ON the flows .

Hello, you are experiencing a product issue and not an issue with the toolkit. That said I might be able to offer some help.
In this same page where you tried to turn this on you should see the connection references.

Blank Connection References .,Please check .

Something went wrong with your setup. If you edit the flow you should be prompted to create the connections.
Closing out as these issues are not issues with the toolkit and we cannot stretch to also be product support.
You may benefit from recruiting someone familiar with Power Automate and the Power Platform to run your CoE.


Add health indicator property info for Spring Boot 2.x

@choffm Please sign the Contributor License Agreement!
Click here to manually synchronize the status of this Pull Request.
See the FAQ for frequently asked questions.

Thanks a lot. That's merged and polished now.


Add 'xxhash'

Signed-off-by: Bogdan Vaneev<EMAIL_ADDRESS>

I've followed this guide
step by step carefully. [Yes]

I've tested this package remotely and have excluded all broken builds.
Here is the links to the Travis/AppVeyor with status "All passed":

https://ci.appveyor.com/project/Warchant/hunter/builds/22368298
https://travis-ci.com/Warchant/hunter/builds/100927262

I have submitted CI configs to https://github.com/ingenue/hunter targeting pkg.template branch,
see this merged pull request https://github.com/ingenue/hunter/pull/334

P.S. As package migrated to hunter-packages, I updated version and CI travis/appveryor.

@ruslo bump. Repo migrated, CI passed.

Testing:

https://ci.appveyor.com/project/ingenue/hunter/builds/22419415
https://travis-ci.org/ingenue/hunter/builds/494162237?utm_source=github_status&utm_medium=notification

Uploading:

https://ci.appveyor.com/project/ingenue/hunter/builds/22419707
https://travis-ci.org/ingenue/hunter/builds/494169150?utm_source=github_status&utm_medium=notification

Released: https://github.com/ruslo/hunter/releases/tag/v0.23.106


fix Render Bounds check

Fixed an issue where the render bounds check is using the wrong clippingRect and there was a miscalculation setting up the strict bound, this caused the in / out of viewport event not being triggered properly.

Nice. LGTM!


[Bugfix] use AF_INET6 instead of AF_INET for OpenAI Compatible Server

Currently the OpenAI Compatible Server creates a socket outside of vllm.entrypoints.launcher.serve_http, and this socket uses the socket.AF_INET address family. On machines with only IPv6 addresses, this limitation prevents the socket from being accessed externally.
I made a small modification, changing it to socket.AF_INET6, so that it supports both IPv4 and IPv6 addresses.

there's a simple implemention
addr = ("", args.port)
if socket.has_dualstack_ipv6():
    sock = socket.create_server(addr, family=socket.AF_INET6, dualstack_ipv6=True)
else:
    sock = socket.create_server(addr)

I made a small modification, changing it to socket.AF_INET6, so that it supports both IPv4 and IPv6 addresses.

AF_INET6 does not support both ipv4 and ipv6 by default. It can be ipv6 only, so we should not use it here by default.

hi @njhill please review this pr at your convenience and share more suggesstions :)

hi @njhill please review this pr at your convenience and share more suggesstions :)

It looks like the suggested change from previous review still needs to be completed.

hi @njhill please review this pr at your convenience and share more suggesstions :)

It looks like the suggested change from previous review still needs to be completed.

should all fixed and ci passed, please check again :)


Windows support

I'm getting started with Piko and would have some use for deploying (the agent part at least) on Windows computers.
The cross-compilation seems to be successful and my first tries were successful.
I'm asking myself if this is due to any underlying issues with Windows or if this is just because nobody had use for this.
Is there a reason for not releasing the Windows binaries that should be investigated further ?

Hi @tschwery, great to here your using Piko! Mind if I ask what your using it for?
I'm not aware of any issues with Windows, though I've never tested it and I'm not aware of anyone else using it
I'll include windows binaries in future releases

Doesn't seem to be any further actions needed here, so will close this issue


Chance of losing -> inflation

Could the "Chance of losing" chart please be updated / amended to include adjustment of inflation.
Breaking even in nominal dollars after 20 years most definitely counts as "losing"!

All values presented in all charts already take inflation into account. They also include reinvested dividends.


Issue/4755 composer relation (#4971)

Pull request opened by the merge tool on behalf of #4971

Merged in 640503a07816d4006655ff2237f0bc9cdb107f73


The node value and datatype differs depending on monitoring or reading the node.

The node "Items\Trend 000001" value and datatype is different if monitoring or reading it. If monitoring, the value and datatype is correct. When reading, a constant value of "3.14159265" is shown and the datatype is invalid. Tested with UAExpert-UAClient.

Fixed: https://github.com/nauful/LibUA/commit/4a2ee9a48438d8aceeca55840320a05c2cb440a6


qstat xml parsing can't handle empty joblist

If qstat -x returns nothing, ET parsing fails, triggering an exception and breaking qbatch.
  File "<string>", line unknown
ParseError: no element found: line 1, column 0

qbatch stops at this point, but it should probably check for qstat -x having no output or at least warn that no dependencies are possible because of no jobs running.

Good catch. Let's write a test for this and then a fix. :-)
I agree a warning here makes sense... perhaps only under verbose mode?

Test is hard since Travis doesn't have a real qstat...
Yes,  warn on verbose makes sense

Test is hard since Travis doesn't have a real qstat...

Yeah, either factor out the call to qstat so that there is a testable function that only inspects the output, or mock the call to subprocess or  mock qstat (kinda cool actually).
Overkill?

Overkill for now.
Fixed by #86


[Bug] Meta Schedule Layout Rewrite Failure

After #12720 the RewriteLayout postprocessor seems to fail during tuning. An example to reproduce is here https://gist.github.com/zxybazh/6bff29ae4e7cb273d57bb30599790008. And the failing message looks like:
[11:43:50] /home/zxybazh/tvm-tensorir/src/meta_schedule/search_strategy/../utils.h:289: Warning: ThreadedTraceApply::Apply failed with error [11:43:50] /home/zxybazh/tvm-tensorir/include/tvm/runtime/container/map.h:376:
---------------------------------------------------------------
An error occurred during the execution of TVM.
For more information, please see: https://tvm.apache.org/docs/errors.html
---------------------------------------------------------------
  Check failed: (itr.index < size_) is false: IndexError: key is not in Map

CC @vinx13 @junrushao @Lunderberg

I can reproduce the error, and made a simplified test script below.  Playing around a bit with the shape, it looks like it only occurs when there's a dimension of size 1.
#!/usr/bin/env python3

import tvm
import tvm.testing
from tvm.script import tir as T

shape = tvm.testing.parameter(
    (1, 1, 256, 512),
    (1, 2, 256, 512),
    (2, 1, 256, 512),
    (2, 2, 256, 512),
)

def test_rewrite_layout(shape):
    n, c, h, w = shape

    @tvm.script.ir_module
    class mod:
        @T.prim_func
        def main(a: T.handle):
            A = T.match_buffer(a, shape, "float32")
            T.func_attr({"layout_free_buffers": [0]})
            for ax0, ax1, ax2, ax3 in T.grid(n, c, h, w):
                with T.block():
                    v0, v1, v2, v3 = T.axis.remap("SSSS", [ax0, ax1, ax2, ax3])
                    T.evaluate(A[v0, v1, v2, v3])

    sch = tvm.tir.Schedule(mod)
    tvm.meta_schedule.postproc.RewriteLayout().apply(sch)

if __name__ == "__main__":
    tvm.testing.main()

It looks like the bug follows the steps below:

SuggestIndexMap first flattens the indices
SplitExprCollector::Collect unpacks the flattened index, but doesn't pass the simplify_trivial_iterators = false argument.  As a result, any iterator with an extent of 1 is replaced by a constant.
RewriteLayout generates an index mapping lambda a,b,c,d: [c,d], where it should generate lambda a,b,c,d: [a,b,c,d].
LayoutTransform calls IndexMap::NonSurjectiveInverse to determine if the specified transformation introduces any padding.  (New behavior in #12720, triggering the bug.)
The mapping function is non-invertible, causing an error.

Ah, I think I found the better fix.  There's some copy/paste between Inverse and NonSurjectiveInverse that I should have cleaned up when implementing it, and there's better handling in Inverse that didn't make its way into NonSurjectiveInverse.  In NonSurjectiveInverse, the following section should be used.  This way, for any extent = 1 ranges, it still appropriately generates the inverse.
// Unpack the map to an array, maintaining the same parameter order.
  Array<PrimExpr> inverse_exprs;
  for (int i = 0, n = (*this)->initial_indices.size(); i < n; ++i) {
    Var index = (*this)->initial_indices[i];
    if (is_one(initial_ranges[i]->extent) && !inverse_exprs_map.count(index)) {
      inverse_exprs.push_back(initial_ranges[i]->min);
    } else {
      inverse_exprs.push_back(inverse_exprs_map.at(index));
    }
  }

In general, IndexMap::Inverse doesn’t guarantee to generate the inverse map even if the index map is (theoretically) bijective because the underlying DetectIterMap can only handle limited cases. That’s why I add the interface to pre-define the inverse map because in SuggestIndexMap we know how to construct the inverse without arithmetic analysis.
https://github.com/apache/tvm/blob/main/include/tvm/tir/index_map.h#L83
Is there any change we can use it in NonSurjectiveMap? I think when the inverse map is pre-defined, we assume it is bijective and can be inversed, the correctness is guaranteed by the users.

Here is another test case that prints out a bunch of ThreadTraceApply errors:
import tvm
from tvm.script import tir as T

@T.prim_func
def matmul(
    A: T.Buffer[(512, 512), "float32"],
    B: T.Buffer[(512, 512), "float32"],
    C: T.Buffer[(512, 512), "float32"],
    )->None:
    for i in range(512):
        for j in range(512):
            for k in range(512):
                with T.block("update"):
                    C[i, j] = C[i, j] + A[i, k] * B[j, k]

s=tvm.meta_schedule.tune_tir(matmul, "llvm --num-cores 1", tvm.meta_schedule.TuneConfig(100, 32), "tmp")

I tested it with the commit before #12720 and still got a bunch of errors. Not sure if it is related to this.

In general, IndexMap::Inverse doesn’t guarantee to generate the inverse map even if the index map is (theoretically) bijective because the underlying DetectIterMap can only handle limited cases.

In principle, this should have been handled by the check on the return value of DetectIterMap.  However, because trivial iterators were removed, the check for DetectIterMap returning a non-empty vector wasn't sufficient to know that all iterators were present.

Is there any chance we can use it in NonSurjectiveMap?

Possibly, though I think that's unrelated to the current bug.  That said, I think its use will come along for free when merging the implementations of Inverse and NonSurjectiveInverse.

@tkonolige I tested it, and had the same behavior.  I was able to get better error messages by changing this line from tir::ScheduleErrorRenderLevel::kNone to tir::ScheduleErrorRenderLevel::kDetail, and it looks like the error is thrown from this check when trying to parallelize the function.  That's as far as I got from now, without digging too much into the meta scheduler.

The original issue has been fixed now.


Unavailability Status with Red glowing dot 🚩

We need to have a boolean to swap status quickly. The green dot should be Red and use the Unavailable word.

I could do But the problem is you need to swap the boolean from the code manually since it does not have a backend . I would like to do if you assign it to me

@Rajveer07 I do have a backend. I suggest you change no code but the important ones.

I made a pull request if you got that ??? or I need to signIn on vercel ??

?????????????????????

Thanks for the changes @Rajveer07, I'll try to review them by tomorrow.


Use jquery error "jQuery requires a window with a document"!

I tried many methods and tutorials but still failed. "jQuery requires a window with a document" I do not know how to fix it now.

I think you should import jQuery as a plugin with no SSR and not as webpack plugin.
See the docs here: https://nuxtjs.org/guide/plugins/.

I tried it but it err $ is not defined and jQuery requires a window with a document


Building applications with electron-packager results in an error

Context

Electron version: v1.8.7-hpcp-vmp1010
Operating system: MacOS High Sierra
Node version: v6.13
electron-packager 12.0.1 to build the Mac application (I see electron-release is using "^3.0.1")
electron-winstaller to build the Win application

Questions

Do I need to build the unsigned version of my application with castlabs/electron-releases?
Can I build the unsigned version of my app with electron/electron and then sign it using the script provided by castlabs/electron-releases?
What is the recommended way to build the unsigned versions of the app? Or documentation regarding it?

What I have tried

I tried building with electron: "1.8.7", but then when I run your python script, it completes without an error and without creating signed applications
When I try to build the unsigned applications with  v1.8.7-hpcp-vmp1010, electron-packager fails with an error because it creates the wrong url Downloading tmp-13310-0-electron-v1.8.7-hdcp-vmp1010-win32-x64.zip Error: GET https://github.com/electron/electron/releases/download/v1.8.7-hdcp-vmp1010/electron-v1.8.7-hdcp-vmp1010-win32-x64.zip returned 404. This is obviously the wrong url.
I am debugging into electron-packager, but I thought I would ask in parallel to doing that
EDIT:
Ah, get baseUrl () {   return process.env.NPM_CONFIG_ELECTRON_MIRROR ||     process.env.npm_config_electron_mirror ||     process.env.ELECTRON_MIRROR ||     this.opts.mirror ||     'https://github.com/electron/electron/releases/download/v' }, environment variables to change where the download comes from.

Updates

Got the app building with  "electron": "https://github.com/castlabs/electron-releases#v1.8.7-hdcp-vmp1010" with electron-packager by setting one of those environment variables (export NPM_CONFIG_ELECTRON_MIRROR=https://github.com/castlabs/electron-releases/releases/download/v
the signing only works for the Window .exes because electron-packager chose to download https://github.com/castlabs/electron-releases/releases/download/v1.8.7-hdcp-vmp1010/electron-v1.8.7-hdcp-vmp1010-win32-ia32.zip' and not the darwin one, so now I am debugging that
the signing creates a .sig file, which I assume is going to get picked up by Widevine in the application by the .sig being in the same folder as the .exe, is that correct?
Writing this all here to help future engineers

Hi Alexander,
Looks like you have progressed a bit, but I'll start by answering trying to answer your questions:

Not exactly sure what you mean here, or what your goal is, but if you need Widevine support the regular stock Electron does not provide it out of the box, so I think the answer would be "Yes" here, especially if you need or want VMP support.

No, like I mentioned in (1), regular Electron does not provide Widevine support without manually installing a Widevine CDM, which makes just signing it pointless. Even with a manual CDM installation there are other aspects of VMP that need to be fulfilled that stock Electron does not, this is part of the value the castLabs Electron releases bring to the table.

There is really no point in building an unsigned app if you need playback of Widevine protected content to work. Depending on the configuration of the Widevine DRM servers that are contacted to request content licenses, the requests are likely to be denied if the signature is missing or invalid.

About electron-packager I see that you are on the right track. Setting the mirror is a requirement to work with customized releases, but it can also be done in package.json, instead of as an environment variable, if you want to keep all then configuration in one place.
The castLabs Electron releases are pre-signed for development purposes, so as long as the signatures are not broken, as they are prone to be by the metadata added by packagers on Windows, playback will work against any Widevine DRM server that accepts development clients. To be able to re-sign broken packages you need to have a free license agreement with Widevine and get your own VMP certificates to use with the re-sign script. Since you mention you are experimenting with re-signing the final package you may already be aware of this, otherwise it is described in the README.
As you guessed, the .sig files that are part of the releases are re-generated by the re-sign script and automatically picked up and verified by Electron and the Widevine CDM. On Windows the .sig file resides next to the .exe file, but in later releases on macOS it has moved further into the app bundle.
You should check out issue #8, the conversation in there may be of interest to you as it covers some of the same topics.

Thank you for such a thorough response! I really appreciate it! You answered my questions excellently and I understand more now!
Setting the mirror
Ah yes, right at the end there is this.opts.mirror. It is also described in the docs. Thanks; putting all my configurations together is definitely something I want to do. Reading issue #8 helped confirm that.
VMP certificates
Yes; it was a long time of waiting to get the certificates, but I got them. I got a part of it as a .der, but your example uses a .pem; it does not seem hard to convert using openssl (openssl x509 -in cert.der -inform der -outform pem -out cert.pem is the command I used), but the script seems agnostic in the certification file type; is that correct?

Happy to be of help. The re-sign script works with either DER or PEM formatted files, for both the key and certificate, but if you want to convert them you can certainly use openssl to do it, like you suggest.

Got it working locally! Success! Teamwork makes the dream work!
Out of curiosity, (and out of the scope of the original ticket) do you have plans to release a version of this package for electron v2.0.3?

Great news!
The way things stand we will not release a 2.x version, but will jump directly to 3.x to be able to use some updates available in later versions of Chromium.

So, basically this npm package includes everything that Electron's Widevine CDM Plugin page says one needs as well as including all the infrastructure for app-signing, correct? Thus we do not need to do any of the Widevine CDM Plugin stuff?
If that is so, in the Widevine CDM Plugin docs, it says "Electron doesn't ship with the Widevine CDM plugin for license reasons", how did y'all get around that?

Exactly, no need to do any of the steps for the Widevine CDM that is in the stock Electron documentation.
Firstly, we are not actually shipping the Widevine CDM with the package since there are some restrictions regarding that, but it is dynamically installed on first launch. Secondly, castLabs and Google Widevine are cooperating on this project.

Certificate question; I received the certificates and what-not from google and there is a prod one and a dev one. What are the differences between the two (i.e. what makes the dev one not suitable for prod)?

The difference is that the dev certificate will only work with UAT Widevine servers or servers that explicitly allow development clients. The purpose is to limit access to the prod certificate by allowing the daily development to take place without it, and only releases to be prod signed.
The Electron binary we provide as part of our releases is pre-signed with a dev certificate, a restriction placed on us by Widevine, which is part of the reason each app developer needs their own agreement (the other part being that some scenarios break the signature during packaging of the app, especially on Windows).

I forgot to mention that I totally got this working for production and it is rad! Thank you so much for all of your help!
I have a question about a note in the README, NOTE: Make sure to use the vmp-resign.py tool corresponding to the release in use. If Electron is installed as a node module, using npm, the correct script is available in node_modules/electron/vmp-resign.py., which sounds like the python script is version specific (1.8.7 vs 1.8.1) but looking at the python script, I do not see many commits relating to versioning of the script and besides that, all of your releases are for v1.8.x, which all use the same version of Chromium, so I was wondering what that meant. Does that mean that someone could not try to jump ahead to v2.0.0 with your python script?

No, problem, glad it is working out for you!
This note is just a caution that the tool connected to a particular release-version should be used with that release. It has happened in the past that breaking changes have been made to this script, which would have given incorrect results if the wrong version of the script was used (on macOS only, so far IIRC). Using this script with a stock electron 2.0.x wouldn't do much good. It would generate the required signatures, sure, but since stock electron lacks the changes we have made to support VMP and Widevine installation it would not work.

Thanks!
The reason I ask is that we are seeing some video stuttering and are attempting to solve the solution on multiple fronts, one of which would be to update the version of electron to >= v2.0.x as there seems to several commits that fix GPU issues, hardware acceleration issues, and the addition of some flags to disable just the GPU. As you have mentioned previously, y'all are not planning a v2.0.x release, but are instead going to do a v3.0.x release, which is not out yet, so I tried to jump ahead...unsuccessfully. 😛
Any idea when your new v3.0.x release would be? Probably sometime after electron moves it out of beta, eh?

That sound ominous, are you seeing this under some specific circumstances or on specific hardware?
The 3.0.x update is currently a work in progress and it is possible that we will release a beta version before it goes stable. I can't promise any dates at this point though, but I'm hoping to have something published by the end of August.

It happens mainly on older Macbook Airs, but we seem to have narrowed down the issue to be caused by some unoptimized Angular code, so we are good for now. Thank you.
Thanks for the heads up; we will definitely be keeping an eye out for that upgrade. 👀


Determine the used route when multiple MVC routes are assigned to one action method.

Is your feature request related to a problem? Please describe.
I have the following code:
[Route("item/up/{id}")]
[Route("item/down/{id}")]
public IActionResult Move([FromRoute]string action, [FromRoute]int id)
{
}

Consider /item/up/155. The problem is that when I check the value of action, then it does not contain the value up, but the value Move.
It may be by design, but it seems odd to me as the controller name is not transformed into ItemController.
Describe the solution you'd like
I would like action to have the value of the actual route parameter, not the value of the action method.
Describe alternatives you've considered
I can parse Request.Path.Value (="/item/up/155"), but I'd prefer not to as I would like to keep things simple.

You might be able to find what you need from ActionContext.RouteData.Route.
A very low tech solution would be to make this two separate action methods, and put the implementation in a third private method that they both call. If you want to handle both of these URLs, but slightly differently that would be my suggestion.

The solution you mention is what I originally had. I just tried to refactor the code.
When I look at ControllerContext.RouteData the value of action is Move. As expected because that's the value I see in the action parameter of the method.
RouteData.Values:

id: 155
action: Move
controller: Item

But why does action have the value Move?
It makes no sense to me as Move is not a value in the route. And it seems not consistent compared to controller. Then I would've expected controller to be ItemController.
The question is, should this considered to be a bug?

I would prefer to have the routes registered so it doesn't reach the action method in case of a mismatch.
When I use [Route("[controller]/{direction}/{id}")] then this would catch everything inside the controller. Being an MVC controller other actions (like Create, Edit) become unreachable. I can solve this by either placing it in a seperate controller or moving it to a sub path: [Route("[controller]/move/{direction}/{id}")]
In that case direction has the value up. The downside is that I need to check direction for a valid value, as all requests now enter the action method. But since I need to do this anyway this may not be a problem.

The question is, should this considered to be a bug?

This is how routing works in MVC. Actions and controllers are assigned names, those names are used for URL generation and view lookup.

In that case direction has the value up. The downside is that I need to check direction for a valid value, as all requests now enter the action method. But since I need to do this anyway this may not be a problem.

Implementing a route constraint might be what you want: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/routing?view=aspnetcore-2.1#route-constraint-reference

Can you start from the beginning and explain what it is that you're trying to accomplish? Code samples will help.

In my project I use default mvc routes. I have an mvc controller which contains something like this:
public IActionResult Create()
{
    return View();
}

[HttpPost]
public async Task<IActionResult> Create(ViewModel.Post post)
{
}

public IActionResult Up(int id)
{
    return Move(id, "up");
}

public IActionResult Down(int id)
{
    return Move(id, "down");
}

private IActionResult Move(int id, string action)
{
    // ...

    switch (action)
    {
        case "up":
        case "down":
    }

    // ...

    return LocalRedirect(link);
}

There is absolutely nothing wrong with the code. It works and is easy to maintain. But I thought that it could be refactored. Like documented I can add multiple routes to one method:
[Route("")]
[Route("Home")]
[Route("Home/Index")]
public IActionResult Index()
{
    return View();
}

I want to do something similar, but with one difference. I need to know which route was taken.
In order to register the Up and Down route I use Route attributes:
[Route("[controller]/up/{id}")]
[Route("[controller]/down/{id}")]
public IActionResult Move(string action, int id)
{
    // ...

    switch (action)
    {
        case "up":
        case "down":
    }

    // ...

    return LocalRedirect(link);
}

If I'm not mistaken then in both versions the same routes are registered. And actually this works, but there is one problem. There is no easy way to find out what the exact route was. When I look at RouteData.Values then action is Move instead of Up.
I understand that this is not a bug and that these values are meant for other purposes, but I am missing the equivalent of the taken route. Usually you won't need it as the routes have the same meaning: "" == "Home" == "Home/Index". But not in this case.
Solution 1) The only information I found was Request.Path, but I would need to parse it. I haven't found an easy way to do this, but it may be quite easy to create a PathString extension to parse the path which can be used like Request.Path.Values.
Solution 2) I've tried other options like [Route("[controller]/{direction}/{id}")]. The main difference here is that direction accepts all values, instead of only up and down. Since I do have to check the value in all cases this may not be an issue, but I would prefer not to enter the action method at all if the route is invalid.
Another problem is that all actions are routed to this method, so my Create method becomes unreachable. In that case I would need to split the controller or add a sub path: [Route("[controller]/move/{direction}/{id}")]
Solution 3) Use route constraints. To narrow the possible paths I can use a regular expression.
[Route("[controller]/{direction:regex(^(up|down)$)}/{id}")]
public IActionResult Move(string action, string direction, int id)

The value of action is Move and direction contains the value of the taken route.  So this works. Thanks for suggesting route constrains, I didn't think of it.
BTW, in the documentation action was used as parameter name, but that doesn't seem to work: Error: The attribute route 'Item/{action:regex(^(up|down)$)}/{id}' cannot contain a parameter named '{action}'. Use '[action]' in the route template to insert the value 'Move'.
Solution 4) Leave it as it is.
Option 1 needs extra work, option 2 is not really an option considering all issues, so I have two options left: use regex as route constraint or leave it as it is. I think both options are equally easy, but with the regex I have less lines. I will go for option 3. Thanks again for suggesting route constraints.

Note that multiple routes on a single action are not meant as a way to overload an action for the purpose of doing different things.

Do you have a source on that? Because that was my first thought, and why I would otherwise have chosen for split actions. But given the example {action:regex(^(list|get|create)$)} I don't think it it's a bad design by default.
Direction is the parameter and action is just not part of the path (like [Route("Home")]). It's equivalent to [Route("[controller]/[action]/{direction:regex(^(up|down)$)}/{id}")], except that action is now part of the path.
I think that it depends on the situation and in this case the chosen solution is fine. It's clear what happens and seperate actions have no added value.

Solution 3) Use route constraints. To narrow the possible paths I can use a regular expression.

[Route("[controller]/{direction:regex(^(up|down)$)}/{id}")]
public IActionResult Move(string action, string direction, int id)

Having read through the background information you provided, this is what I'd recommend. One thing I want to mention about this is that it means that a URL that provides an invalid value for a direction will result in a 404 rather than you action method being called so that you can decide how to respond.
The distinction here is whether you want to return a meaningful error message when invalid data is passed this way, or if you were prefer to not handle the request and have it 404.

Thanks for contacting us. We believe that the question you've raised have been answered. If you still feel a need to continue the discussion, feel free to reopen it and add your comments.


Postmark doesn't preserve Message-ID and In-Reply-To headers

If I deliver a message with postmark, the message-id and in-reply-to headers aren't preserved.
I tested sending the same message, but with smtp delivery, and the headers were preserved on the yahoo groups interface - so it isn't yahoo that is changing them. The SMTP method does indeed preserve topics even with different subjects:

We'll need to figure this out in order to be able to send threaded messages with postmark. Until then, SMTP delivery from Heroku should work - at least, I tested it via heroku run bash and it worked, will see if the scheduled task delivers it also.

Alternative we could try one of the other email add-ons like SendGrid or Mailgun.


Issue in display of saved datas : renaming and annotation

The saved datas associated to renaming or annotation are present in json file but are not visible in kc when opening the files.
1/ Open the 2-Adult2varsEducationOccupation
2/ Rename the cluster {Prof-speciality, Armed-Forces} by "4a"
3/ Save as then close the file : the json file contains the renaming information

4/ Open the saved file : the renaming "4a" does not appear
5/ Rename the {Exec-managerial} by "4a 2nd" : when validating this renaming, the first renaming "4a" appears
Before validation of the 2nd renaming :

After validation :

The same problem appears for annotation of clusters.
Platform: Windows
Version: 11.0.11

@stephanebouget
this also occurs (for renaming and annotating) with "save current hierarchy as"


Add arc capability to the winding number in mathlib

need to add arc functionality to the winding number in mathlib.h
need algorithm to determine if a point is within an arc segment.

Found a good website that explains arc and bulges in AutoCAD
Arcs and Bulges in AutoCAD


6809 Processor Specification incorrectly handles immediate operands

The pre-release 6309/6809 processor specification incorrectly processes immediate operands. The generated p-code loads the affected register with zero rather than the immediate value.
My knowledge of SLEIGH is very limited but I found by making the changes below, Load Immediate operands began to be processed by the de-compiler correctly:
Current Code:
OP1: "#"imm8    is op45=0; imm8
{
export imm8;
}
Corrected Code:
OP1: "#"imm8    is op45=0; imm8
{
local tmp:1 = imm8;
export tmp;
}
Current Code:
OP2: "#"imm16    is (op47=8 | op47=0xC); imm16
{
local imm16;
}
Corrected Code:
OP2: "#"imm16    is (op47=8 | op47=0xC); imm16
{
local tmp:2 = imm16;
export tmp;
}

i would agree this is an issue,   export *[const]:1 imm8 and export *[const]:2 imm16 may yield better results.


Exception handler improvements

All this week I have been thinking about how to make the exception handler more powerful and change it to behave more like try / catch statement, and here are some points that I would like to highlight:

Remove 'exceptionHandlers' parameter from 'RequestExceptionProcessorBehavior' constructor.
This will positively affect the performance of the library because we don't need a list of handlers until an exception occurs during the execution of the request.

Handlers from the Request Assembly (or namespace if it doable) must be preferable and override the inherited handlers.
Let's imagine that a developer created general ExceptionHandler to handle some exception that might be thrown from the base request. Then he created request that inherits the base request and also wants to make some changes to exception handler (override ExceptionHandler from base request). As a result, library should't call an inherited ExceptionHandler.

General interface for request exception handler should be changed to abstract class.
I can be wrong here. Let me know if I missed some ideas from introducing this interface.
That's why i think so:

IRequestExceptionHandler<TRequest, TResponse>inherits IRequestExceptionHandler<TRequest, TResponse, Exception> and will be used to catch all Exceptions from the request. That type of handlers must be called when application haven't found other appropriate handlers (like catch (Exception e) always goes last);
Those handlers will be requested in the last step in RequestExceptionProcessorBehavior to search for available handlers by using IRequestExceptionHandler<,,> (not IRequestExceptionHandler<,>);
During automatic registration IRequestExceptionHandler<,> handlers will be registered twice (search implementations for IRequestExceptionHandler<,> and IRequestExceptionHandler<,,> interfaces). Otherwise some DI containers (e.g. SimpleInjector) will throw exception for unregistered collection;
Abstract class will look consistent to existing library structure (e.g. AsyncRequestHandler and RequestHandler classes).

Source code that calls IRequestExceptionHandler<,>handler in the last iteration:

    do
    {
        var exceptionHandlerInterfaceType = typeof(IRequestExceptionHandler<,,>).MakeGenericType(typeof(TRequest), typeof(TResponse), exceptionType);
        exceptionType = exceptionType.BaseType; // will set exceptionType to System.Exception before the last iteration
    } while (exceptionType != typeof(Exception).BaseType);

Code duplication from RequestExceptionProcessorBehavior must be removed.
Code below repeats last step from do / while loop. More information in the previous point.

    foreach (var exceptionHandler in _exceptionHandlers)
    {
        await exceptionHandler.Handle(request, exception, state, cancellationToken).ConfigureAwait(false);
    }

Library should exit the loop with process of searching handlers when handler has changed state to handled.
+:

exit faster (fail fast concept);
application state won't be damaged by calling basic handlers;
it will be similar to try / catch behavior.

Contravariant keyword must be removed from IRequestExceptionHandler (in TException)
I'll refer to SimpleInjector behavior for such configuration.
Developers can create a hierarchical structure of handlers:
 public class ExceptionHandler1 : IRequestExceptionHandler<int, int, ArgumentException>{}
 public class ExceptionHandler2 : IRequestExceptionHandler<int, int>{}

Developer expects that ExceptionHandler2 will executed after ExceptionHandler1 but for SimpleInjector (during automatic registration and using contravariant keyword) ExceptionHandler2 as good as ExceptionHandler1 to handle ArgumentException because it inherits Exception.
As a result SimpleInjector returns handlers collection with ExceptionHandler1 and ExceptionHandler2  after requesting handlers with IRequestExceptionHandler<int, int, ArgumentException>. So, ExceptionHandler2 will be called on the fist iteration of ArgumentException exception handling.
The RequestExceptionProcessorBehavior was written the way to call handlers from more specific exceptions to more generic by using do / while loop and check BaseType during the next iteration.
Library handle hierarchy manually without need of using contravariant keyword.

I need a feedback on the proposed changes.
Best regards, Pavel

#468

Merged.


feat:dynamic wallet selection

Implemented dynamic wallet selection for executing CLI commands, enhancing flexibility and simplifying multi-wallet management.

[x] Balance

[x] Transfer

[x] Bridge

@ezequiel-rodriguez Thank you so much for the review. The suggestions above make total sense, and I’ve implemented all the changes recommended. Please let me know if any further changes are required.

LGTM

Thanks for the review @ezequiel-rodriguez @chrisarevalodev

Hey @SarveshLimaye,
please submit your contribution in the following form in order to get a reward for it.
Thank you


urlscan: 0.9.8 -> 0.9.9

Automatic update generated by nixpkgs-update tools. This update was made based on information from passthru.updateScript.
meta.description for urlscan is: "Mutt and terminal url selector (similar to urlview)"
meta.homepage for urlscan is: "https://github.com/firecat53/urlscan"
meta.changelog for urlscan is: ""
Updates performed

Ran passthru.UpdateScript

To inspect upstream changes

Release on GitHub

Compare changes on GitHub

Impact

Checks done (click to expand)

built on NixOS
The tests defined in passthru.tests, if any, passed
Warning: no invocation of /nix/store/b934j1rfh2dajyi80k2a8rr73k1scs7h-urlscan-0.9.9/bin/.urlscan-wrapped had a zero exit code or showed the expected version
Warning: no invocation of /nix/store/b934j1rfh2dajyi80k2a8rr73k1scs7h-urlscan-0.9.9/bin/urlscan had a zero exit code or showed the expected version
0 of 2 passed binary check by having a zero exit code.
0 of 2 passed binary check by having the new version present in output.
found 0.9.9 with grep in /nix/store/b934j1rfh2dajyi80k2a8rr73k1scs7h-urlscan-0.9.9
found 0.9.9 in filename of file in /nix/store/b934j1rfh2dajyi80k2a8rr73k1scs7h-urlscan-0.9.9

Rebuild report (if merged into master) (click to expand)

2 total rebuild path(s)

1 package rebuild(s)

1 x86_64-linux rebuild(s)
1 x86_64-darwin rebuild(s)

First fifty rebuilds by attrpath
urlscan

Instructions to test this update (click to expand)

Either download from Cachix:
nix-store -r /nix/store/b934j1rfh2dajyi80k2a8rr73k1scs7h-urlscan-0.9.9 \
  --option binary-caches 'https://cache.nixos.org/ https://nix-community.cachix.org/' \
  --option trusted-public-keys '
  nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=
  cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=
  '

(The Cachix cache is only trusted for this store-path realization.)
For the Cachix download to work, your user must be in the trusted-users list or you can use sudo since root is effectively trusted.
Or, build yourself:
nix-build -A urlscan https://github.com/r-ryantm/nixpkgs/archive/42ddf4aea4ae4502e8a2d8d1179e360e74e015ef.tar.gz

After you've downloaded or built it, look at the files and if there are any, run the binaries:
ls -la /nix/store/b934j1rfh2dajyi80k2a8rr73k1scs7h-urlscan-0.9.9
ls -la /nix/store/b934j1rfh2dajyi80k2a8rr73k1scs7h-urlscan-0.9.9/bin

Pre-merge build results
We have automatically built all packages that will get rebuilt due to
this change.
This gives evidence on whether the upgrade will break dependent packages.
Note sometimes packages show up as failed to build independent of the
change, simply because they are already broken on the target branch.
Result of nixpkgs-review run on x86_64-linux 1

1 package built:

urlscan

Maintainer pings
cc @dpaetzel @jfrankenau for testing.

Result of nixpkgs-review pr 157434 run on x86_64-linux 1

1 package built:

urlscan


Frequency of websocket disconnects

For anyone who connects to CoinbasePro and Kraken via websockets for authenticated trade data as well as public trades data, how often do you see the xchange client disconnect and reconnect to the exchanges?
@badgerwithagun @mdvx

rarely, on both, however I normally use FIX for CoinbasePro user trades

how often is rarely? I usually see either exchange get disconnected once every few hours, some times 2hrs+ sometimes 1-2 days etc. But I don't see it go say 3-5 days without a disconnect.
I'm trying to see if there is anything I can do to improve the reliability of websocket connections or if there is something else that may be causing this.
Has FIX been more reliable in your experience?

I'm not an active user at the moment. Avoiding active crypto trading for a while, so I've got no feel for how often this happens.

Closing as has been answered


Meowing Cat

This script relies on having cat models and animations in the domain asset browser. The basic code allows you to add meow.js to a cat model to play a meow sound when it's clicked on.
Test Plan

Go to hifi://studio/-198.2,28.4,-81.6
Click on the small white cat that is sitting on the chair
Confirm that the kitten meows and plays a meowing animation

Note: the animations used currently are in an unfinished state, but shouldn't block QA.

@misslivirose my only feedback would be to let the animation finish before another one can be triggered? as a symptom of the ability to spam animations, the cat can start to look a bit max hedrum, tweaking from animation to the next starting a different reaction in the middle of the previous. But if the purpose of this is to block out code of an intractable cat, i am a pass!

quick thought, maybe add a userData option that makes the meow local only.  Thinking in terms of the cat cafe so people don't grief with meows.

@MiladNazeri To clarify, this is not meant to go as-is into the Cat Cafe, but to provide a base script that we can customize once we have more definition around the project deliverables 🐱

@MiladNazeri - Mind re-reviewing? This is the version we used in the cafe, cleaned up. Doesn't require a new QA pass.


No method to get user by email

Hi,
I have added ChatSDK into our project. But didn't get any method to retrieve the user from the firebase using email address.
User can be retrieved using entityID.
Is it possible to provide any method to get user by email id?

@AAPBD To do this you would need to use the Search API. If the user has set their email (because they can delete it on their user profile) you can get the user like this:
<EMAIL_ADDRESS>"email").subscribe(user -> {
    // Handle User
}, throwable -> {
    // Handle Error
});

No, this solution isn't effective. Look at following code. It's returning two objects while Email is Unique.
08-30 23:34:23.453 7447-7447/com.zwenex.emyanMR E/firebasesearchhandler: value<EMAIL_ADDRESS>index email
08-30 23:34:23.454 7447-7447/com.zwenex.emyanMR E/Disposable at search: 0
08-30 23:34:24.090 7447-7447/com.zwenex.emyanMR E/AppConstant: onNext at search
08-30 23:34:24.091 7447-7447/com.zwenex.emyanMR E/AppConstant search: User, id: 25 meta: {pictureURL=http://api.z-waka.com/images/uploads/profile/33bf3ea8-729a-4f54-bbdd-52dda472592e.JPG, name=Hla Hla Win<EMAIL_ADDRESS>08-30 23:34:24.394 7447-7447/com.zwenex.emyanMR E/AppConstant: onNext at search
08-30 23:34:24.394 7447-7447/com.zwenex.emyanMR E/AppConstant search: User, id: 23 meta: {pictureURL=http://api.z-waka.com/images/uploads/profile/149a64dd-b38c-4697-baf7-5c8eb0515fc1.jpg, name=Khin Khin<EMAIL_ADDRESS>08-30 23:34:24.396 7447-7447/com.zwenex.emyanMR E/AppConstant search: onComplete

@AAPBD Could you check with the latest version? You could then use the API:
<EMAIL_ADDRESS>1, "email").subscribe(user -> {
    // Handle User
}, throwable -> {
    // Handle Error
});

@bensmiley Would you please check this code snippet.. it never gets into onSuccess neither onError, it goes immediately into onComplete.. whats wrong here?
val d = ChatSDK.search().usersForIndex(email, 1, Keys.Email)
              .observeOn(AndroidSchedulers.mainThread())
              .subscribe({ user ->

              }, {  throwable ->

              }, {
                 // log no users found
              })
dm.add(d)


feat: implement optional input keyword in call statements for WDL 1.2.

This commit implements optionally accepting input keywords in call statement
bodies in WDL 1.2.
Before submitting this PR, please make sure:

[x] You have added a few sentences describing the PR here.
[x] You have added yourself or the appropriate individual as the assignee.
[x] You have added at least one relevant code reviewer to the PR.
[x] Your code builds clean without any errors or warnings.
[x] You have added tests (when appropriate).
[x] You have updated the README or other documentation to account for these
changes (when appropriate).
[x] You have added an entry to the relevant CHANGELOG.md (see
"keep a changelog" for more information).

This PR depends on #124. When that merges, I'll rebase this one.
Only the last commit is the relevant one to review for this PR.


Servo - possibility to disable

Hi,
It would be nice to specify whether Servo should be enabled or disabled.
Thanks

Maybe the solution code is already available:
https://github.com/spring-cloud/spring-cloud-netflix/pull/517

You can set a property to disable it (e.g. spring.autoconfigure.exclude: org.springframework.cloud.netflix.servo.ServoMetricsAutoConfiguration in application.yml) or refer to it in @EnableAutoConfiguration(excludes=org.springframework.cloud.netflix.servo.ServoMetricsAutoConfiguration.class)

Cool, thanks.
I guess this can be closed if not other , more elegant, solution will be provided.

Also, can disable with spring.metrics.servo.enabled=false


JS Animation

Hi,
I'm trying to animate an image on appear, enter and leave with JS.
i'm doing something like that:
<Animate
          component=""
          transitionAppear={false}
          transitionEnter={false}
          transitionLeave={false}
          onEnd={this.animateEnded.bind(this)}
          animation={this.state.animationObject}>
          {
            this.state.imageStatus &&
            <img
              key={new Date()}
              ref="image"
              src={this.state.currentImgSource}>
            </img>
           }
</Animate>

The appear event work correctly and is triggered but the others are not.
I only change imageStatus state to true or false if img is loaded or not.
When i set imgStatus state to false the img disappear without the leave animation and the appear animation is triggered again...
it should not, right ? :)
(i added a key on the img tag, with a date, i don't know if i have to do this)
I don't figure out what i'm doing wrong...
Thanks

请问  Animate 的onEnd事件 怎么触发？


Config cleanup

Test

Copied from https://github.com/CommunitySolidServer/CommunitySolidServer/blob/v7.0.0/test/integration/config/ldp-with-auth.json
(1) pivot:config/storage/middleware/default.json
(2) pivot:config/pivot-overrides.json

Prod

Generated on https://communitysolidserver.github.io/configuration-generator/v7/ with:
(1) Account Management -> Pod URLs -> Subdomain
(2) Account management -> Email server -> Enabled
(3) Miscellaneous -> HTTPS: Enabled
(4) Advanced features  -> UI converter -> Enabled
(5) pivot:config/storage/middleware/default.json
(6) pivot:config/pivot-overrides.json added as the last import

Dev
Like prod, but no https and no subdomains, so:

Generated on https://communitysolidserver.github.io/configuration-generator/v7/ with:
(1) Account management -> Email server -> Enabled
(2) Advanced features  -> UI converter -> Enabled
(3) pivot:config/storage/middleware/default.json
(4) pivot:config/pivot-overrides.json added as the last import

I tried to get rid of the copied config for pivot:config/storage/middleware/default.json but so far didn't succeed. We should also be able to remove some copied config for pivot:config/http/handler/default.json.


Add serial number certificate to forward headers

What does this PR do?
The SerialNumber field for a client certificate was not forwarded as a header in the PassTLSClientCert middleware. This PR fixes that issue.
Motivation
Issue submitted here #5881
More

[x] Added/updated tests
[ ] Added/updated documentation

Additional Notes
I was unable to completely build the entire project. The fix was tested by running the unit tests.

Should this be based on 2.0 instead of master?

There are 3 SN:

inside Certificate.Subject
inside Certificate.Issuer
inside Certificate

This PR is about SN inside Certificate, it's a new field.
So it's an enhancement not a bug fix.


"Use Key Vault from App Service with Managed Service Identity" points to an article using the same approach?

https://docs.microsoft.com/en-us/samples/azure-samples/app-service-msi-keyvault-dotnet/keyvault-msi-appservice-sample/
Sorry, I dont see a feedback button on this page. So I had to create an unlinked post.
If you read the above link, the first sentence says this:

For Service-to-Azure-Service authentication, the approach so far involved creating an Azure AD application and associated credential, and using that credential to get a token. The sample here shows how this approach is used to authenticate to Azure Key Vault from a Web App. While this approach works well, there are two shortcomings:

That link takes you here: https://docs.microsoft.com/en-us/azure/key-vault/general/tutorial-net-create-vault-azure-web-app
Which confuses me because that sample shows how you can "Enable a managed identity". Isnt a managed identity the same thing as an MSI? I dont see anything in that link showing how to "creating an Azure AD application and associated credential"
I think maybe that article has changed and now both articles show the same approach?

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

ID: 62a379da-fb2c-03ae-aa9b-a1575b79ab80
Version Independent ID: 7a484171-a742-bf00-4f31-369b8a31910a
Content: Tutorial - Use Azure Key Vault with an Azure web app in .NET
Content Source: articles/key-vault/general/tutorial-net-create-vault-azure-web-app.md
Service: key-vault
Sub-service: general
GitHub Login: @msmbaldwin
Microsoft Alias: mbaldwin

@VictorioBerra
Thanks for your feedback! We will investigate and update as appropriate.

Thanks for this. I noticed that link was removed from other related documentation and made a pull request to remove the reference from the sample. https://github.com/MicrosoftDocs/samples/pull/1246

Is the PR deleted? Link gives back 404.


RetinaFace Model No Longer Available from Hawk-Eyes Package

Attempting to run db_gen.py from one of our facial_recognition demos throws the following error from the hawk-eyes package.
unning on device: cuda:0
Configuring device: MAX78002, simulate=True.
Traceback (most recent call last):
  File "/home/jhcarter/repos/ai8x-training/venv/lib/python3.8/site-packages/gdown/download.py", line 267, in download
    url = get_url_from_gdrive_confirmation(res.text)
  File "/home/jhcarter/repos/ai8x-training/venv/lib/python3.8/site-packages/gdown/download.py", line 55, in get_url_from_gdrive_confirmation
    raise FileURLRetrievalError(
gdown.exceptions.FileURLRetrievalError: Cannot retrieve the public link of the file. You may need to change the permission to 'Anyone with the link', or have had many accesses. Check FAQ in https://github.com/wkentaro/gdown?tab=readme-ov-file#faq.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "./db_gen/generate_face_db.py", line 84, in <module>
    main()
  File "./db_gen/generate_face_db.py", line 80, in main
    create_db_from_folder(args)
  File "./db_gen/generate_face_db.py", line 44, in create_db_from_folder
    face_detector = RetinaFace(model_name='retina_l', conf=0.1)
  File "/home/jhcarter/repos/ai8x-training/venv/lib/python3.8/site-packages/hawk_eyes/face/src/face_detection.py", line 32, in __init__
    gdown.download('https://drive.google.com/u/0/uc?id=1-WuPlFkL3ald1niehULXmOuyWOyu1iVh&export=download', model_dir + '/l_det_10g.onnx', quiet=False)
  File "/home/jhcarter/repos/ai8x-training/venv/lib/python3.8/site-packages/gdown/download.py", line 278, in download
    raise FileURLRetrievalError(message)
gdown.exceptions.FileURLRetrievalError: Failed to retrieve file url:

	Cannot retrieve the public link of the file. You may need to change
	the permission to 'Anyone with the link', or have had many accesses.
	Check FAQ in https://github.com/wkentaro/gdown?tab=readme-ov-file#faq.

You may still be able to access the file from the browser:

	https://drive.google.com/u/0/uc?id=1-WuPlFkL3ald1niehULXmOuyWOyu1iVh&export=download

but Gdown can't. Please check connections and permissions.

It seems that the package is minimally maintained, and the Google Drive link the module uses to download the ONNX model files has been removed.  (https://drive.usercontent.google.com/download?id=1-WuPlFkL3ald1niehULXmOuyWOyu1iVh&export=download&authuser=0)
The error itself is an issue with hawk-eyes, but as the repo hasn't seen any activity in 2 years I'm opening this here to open an investigation into alternative methods for running the RetinaFace model.
The official RetinaFace repo/package seems like a better choice.

Hi @Jake-Carter,
Thanks for letting us know. We have already replaced Hawk-Eyes with the Face_Detection package in the training repository, but it appears we missed it in the MSDK examples. I'll update those with a PR. Thank you for your package suggestion,  but it is another re-implementation of RetinaFace rather than the official one. For context, the official implementation is InsightFace/RetinaFace, which is MXNet-based.

Thanks for the clarification @oguzhanbsolak!

Hi @Jake-Carter,
After this discussion, I noticed that Face_Detection package checkpoint links were also dead. I replaced the Face_Detection with batch-face library as it provides the same speed and performance aspects. The PR's for MSDK, RefDes, and training repo are now open, and I think they will be merged in soon.

https://github.com/analogdevicesinc/msdk/pull/1056


Add configuration file to configure filtering

Add optional file option to configure the filter plugin.
This file goes in the data directory, use a name like data_filter.yml

Complete


Documentation: rng_seed

Just discovered this by searching for 'rng' in the repo.
I tried to generate reproducible networks in https://github.com/acteng/netgen/pull/22/commits/f31cf84dfd4d6eccd9b8eb3e968302a3a53fb35d but, having re-run
sudo docker run -v $(pwd):/app ghcr.io/urban-analytics-technology-platform/od2net:main /app/config.json

and comparing the results with
diff /tmp/output.geojson output/output.geojson

After copying the previous version it seems there are still differences.
Probably worth documenting and happy to give it a go, after I figure it out myself.

If you don't pass any value, it defaults to a fixed value of 42. If you run on the same input twice, you should get the same output. The only difference between the two runs is some caching in the intermediate directory, but it shouldn't cause any changes


fix(ngResource): add put/patch to default actions #11571

This patch adds put/patch to default actions so implementing a custom request for these common use cases is no longer required.
Closes #11571

I signed it!

See the discussion at #9807.

Can someone fix this issue?

See https://github.com/angular/angular.js/pull/3416#issuecomment-222120689 why this is not going to be implemented.