Add GPU Cholesky Primitive

Summary
Adds the gpu cholesky decomposition primitive and it's associated kernel. This also includes two small bug fixes for the inverse cholesky.
When users define STAN_OPENCL during compilation the cpu based cholesky will be replaced by the gpu version of the cholesky.
m = cholesky_decompose(x);

So users code will stay the same, but will then have access to the gpu routines. This was decided in favor of including a cholesky_decompose_gpu method since if users want fine grain decision making we can always introduce it later, but it will be harder to remove it.
The Cholesky's gpu algorithm is recursive, where The parameters block, divider, and min_block act as tuning parameters for the recursive step of the GPU based Cholesky decompostion. The matrix is subset by the block size, and if the block size is less than min_block then the Cholesky decomposition on the GPU is computed using that submatrix. If block is greater than block_size then cholesky_decompose is run again with block equal to block/divider. Once the Cholesky decomposition is computed, the full Cholesky is created by propagating the Cholesky forward as given in the reference report below.
https://github.com/SteveBronder/stancon2018/blob/master/report.pdf
Tests
Assuming OpenCL is setup and the preferred device has an index of 0, tests can be run with
echo STAN_OPENCL=true>> make/local
echo OPENCL_PLATFORM_ID=0>> make/local
echo OPENCL_DEVICE_ID=0>> make/local
./runTests.py ./test/unit/math/gpu/cholesky_decompose_test.cpp

cholesky_decompose_cpu_vs_gpu

Tests whether cpu and gpu outputs are close to each other

cholesky_decompose_small

Runs the cholesky_decompose_test tester on small input matrices

cholesky_decompose_big

Runs the cholesky_decompose_test tester on input matrices of size 500, 1000, 2000

The cholesky_decompose_test tester checks whether the GPU implementation's max error for any cell in the cholesky decomposition relative to Eigen's LLT method is less than 1E-8.
Side Effects
None
Checklist

[x] Math issue #1058

[x] Copyright holder: (fill in copyright holder information)

Rok Češnovar and Erik Štrumbelj (Faculty of Computer and Information Science, University of Ljubljana)

Steve Bronder

[x] the basic tests are passing

unit tests pass (to run, use: ./runTests.py test/unit)
header checks pass, (make test-headers)
docs build, (make doxygen)
code passes the built in C++ standards checks (make cpplint)

[x] the code is written in idiomatic C++ and changes are documented in the doxygen

[x] the new changes are tested

One thing to discuss is whether we want to do CPU computation for small input sizes even if STAN_OPENCL is set.

One thing to discuss is whether we want to do CPU computation for small input sizes even if STAN_OPENCL is set.

Yes I see two things to remove the WIP

[ ] Run performance tests to see at what size this should be moved over to the GPU
[ ] Build two more tests for checking error catching.

@seantalts we are still waiting for Rok's tuning tests but I think the code is ready for review.

I'm getting a ‘ec2-spot-c5d18x’ is offline from Jenkins

Hmm, I think I fixed it - for some reason the other Linux Jenkins node
wasn't listed as having MPI.
On Fri, Nov 9, 2018 at 2:06 PM Steve Bronder<EMAIL_ADDRESS>wrote:

I'm getting a ‘ec2-spot-c5d18x’ is offline from Jenkins
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/stan-dev/math/pull/1059#issuecomment-437462615, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AAxJ7Caj11JrAi9Yrq4jC3Vh4hg7GmXyks5utdIvgaJpZM4YBML0
.

Hey, I messed around with the tests and got them to a point where I now suspect something might actually be ... weird? with the new code in this PR... Any ideas?

Oh that's v odd? Thanks for the heads up I'll take a look at this today.

Ah nvm looks like you found the error, #1063

That's not the error :p that was an error that showed up at one point in
this PR but there is a new one. I suspect it's not instance memory since
this sucker has more than 100GB but I'll double check
On Sat, Nov 10, 2018 at 11:30 Steve Bronder<EMAIL_ADDRESS>wrote:

Ah nvm looks like you found the error, #1063
https://github.com/stan-dev/math/issues/1063
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/stan-dev/math/pull/1059#issuecomment-437596178, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AAxJ7PJFXx1Cng6OjqZDixqXUKMRpbBWks5utv8JgaJpZM4YBML0
.

--
📲

Could this be connected to the recursive call?

has more than 100GB but I'll double check

lol oh whoops yeah then this is def something on our end.

Could this be connected to the recursive call?

The GPU flags are not turned on for this test so I mostly suspect we forgot a STAN_OPENCL somewhere?

In another test we had some #includes before STAN_OPENCL, though odd that would cause another test to fail.

I finally managed to finish the performance tests. I played a bit with optimizing the block sizes.
N is the size of one dimension of the square input matrix.
The bottom line is that the Titan XP is up to 20 times faster than an i7-4790 CPU @ 3.60GHz.
The V100 is 70 times faster  20.000 x 20.000 matrix and from the figure it looks like this is not the upper limit yet.

The GPU outperforms the CPU at around N~800-900. For N=2000 the speedup is 3+. If we will be doing any smart logic to decide when to use the GPU or not, I would suggest 1500 or 2000 as the "border".

I moved the recursion & kernel call to a separte function. @SteveBronder  please have a look when you have the time. If you agree with my changes we then have the following open things before another review can be done:

[ ] add the lower_tri_inverse tests (Rok - will add tomorrow CET time)

[ ] discuss if we want to do the sub_block changes in this PR. It would be great if we would be able to say something like Eigen in Block_ R = L.block(0, 0, j, j);Block_ F = L.block(j, j, j, j); where no actual data copy is done and we are then able to call F= multiply_transpose(R). But this seems like a big overhaul best suited for future iterations. Or not, idk

[ ] add size checks? Discussion on Discourse still needs to happen

discuss if we want to do the sub_block changes in this PR. It would be great if we would be able to say something like Eigen in Block_ R = L.block(0, 0, j, j);Block_ F = L.block(j, j, j, j); where no actual data copy is done and we are then able to call F= multiply_transpose(R). But this seems like a big overhaul best suited for future iterations. Or not, idk

Let's do this later.

add size checks? Discussion on Discourse still needs to happen

I'm gonna set this to 1800 because, ballparking your graph, that sort of looks like where a reasonable speedup kicks in

So does that mean this is ready for review again? (Assuming merging cache later, and doing gentler sub_block API in a later PR)

I looked through your review comments and I think we resolved everything. I can double check tonight but I think it's ready for review now.
The only thing unresolved is to change cpplint so we don't have to do #include <algorithm>, but I feel like touching cpplint is it's own PR

I'm on Sierra - not actually a requirement given that it doesn't have a
GPU, but if you can figure something out quickly that'd be super helpful. I
gave up after a couple hours.
On Mon, Nov 26, 2018 at 00:07 Steve Bronder<EMAIL_ADDRESS>wrote:

@SteveBronder commented on this pull request.
In stan/math/gpu/cholesky_decompose.hpp
https://github.com/stan-dev/math/pull/1059#discussion_r236122798:

@param divider Proportion to divide the submatrix by at each recursive step.

@param min_block The amount that block is checked against to decide

whether to continue the recursion or to perform the cholesky.

@return Square root of matrix on the GPU.

@throw std::domain_error if m is not

positive definite (if m has more than 0 elements)

*/
+inline matrix_gpu cholesky_decompose(matrix_gpu& A, const int block,

                                const int divider, const int min_block) {

auto offset = 0;
// NOTE: The code in this section follows the naming conventions
// in the report linked in the docs.
matrix_gpu A_11(block, block);
// Repeats the blocked cholesky decomposition until the size of the remaining
// submatrix is smaller or equal to the block size
while ((offset + block) < (A.rows())) {

It doesn't help that I can't run this code locally... :'(
Double frowny face, I'll try to run this on my mac tmrw and figure out
what I need to do to get it working. Are you on Mojave?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/stan-dev/math/pull/1059#discussion_r236122798, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AAxJ7As3Yw9j-9Jiz__11lu1_hdCEk-fks5uy3cHgaJpZM4YBML0
.

--
📲

I got busy with some faculty/thesis stuff the last few weeks, sorry about that :( I am close to finishing all the stuff above, maybe need a day or so to sort evrything. Steve was busy with traveling and work also.

No worries! We definitely want you to graduate ;) If you want a hand with anything let us know. Good luck on the thesis!

Looks like this is failing because of an upstream cmdstan issue on windows that is hitting other PRs as well
Ours:
http://d1m1s1b1.stat.columbia.edu:8080/blue/organizations/jenkins/CmdStan/detail/downstream_tests/300/pipeline
Ex: matern32
http://d1m1s1b1.stat.columbia.edu:8080/blue/organizations/jenkins/CmdStan/detail/downstream_tests/301/pipeline

Good call out, thanks. I'm looking into it...
On Mon, Dec 31, 2018 at 9:19 PM Steve Bronder<EMAIL_ADDRESS>wrote:

Looks like this is failing because of an upstream cmdstan issue on windows
that is hitting other PRs as well
Ours:
http://d1m1s1b1.stat.columbia.edu:8080/blue/organizations/jenkins/CmdStan/detail/downstream_tests/300/pipeline
Ex: matern32
http://d1m1s1b1.stat.columbia.edu:8080/blue/organizations/jenkins/CmdStan/detail/downstream_tests/301/pipeline
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/stan-dev/math/pull/1059#issuecomment-450687164, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AAxJ7CLqRe3vj4Ysg2FY1djYMJM7XbYWks5u-nFIgaJpZM4YBML0
.

@seantalts is everything resolved here? I think so?

Tests passed so that's resolved! Is it ready for review again?
On Wed, Jan 2, 2019 at 03:07 Steve Bronder<EMAIL_ADDRESS>wrote:

@seantalts https://github.com/seantalts is everything resolved here? I
think so?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/stan-dev/math/pull/1059#issuecomment-450774849, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AAxJ7JQ6Gf0Z-N5snxkE_6AbL786qGXkks5u_BRVgaJpZM4YBML0
.

--
📲

Yes it is! The only thing not totally resolved since the last review is

The starting block size of the recursion link
The question about parallelizing the while loop's code link

Though I think I answered those in the comments

Gotcha. Will hopefully have a chance to review tomorrow. Thanks !
On Wed, Jan 2, 2019 at 13:51 Steve Bronder<EMAIL_ADDRESS>wrote:

Yes it is! The only thing not totally resolved since the last review is

The starting block size of the recursion link
https://github.com/stan-dev/math/pull/1059#discussion_r236081592
The question about parallelizing the while loop's code link
https://github.com/stan-dev/math/pull/1059#discussion_r236081378

Though I think I answered those in the comments
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/stan-dev/math/pull/1059#issuecomment-450855791, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AAxJ7GbWAkm1qF3URUUhljGLW3g6u6Ieks5u_Ks-gaJpZM4YBML0
.

--
📲

Hm, the refactor might help if you have time. I think I still just don't
get how the while loop should mix with the recursive structure / how that
should work / why we want both.
On Sat, Jan 5, 2019 at 7:34 PM Rok Češnovar<EMAIL_ADDRESS>wrote:

@rok-cesnovar commented on this pull request.
In stan/math/gpu/cholesky_decompose.hpp
https://github.com/stan-dev/math/pull/1059#discussion_r245484911:

+#include <stan/math/gpu/matrix_gpu.hpp>
+#include <stan/math/gpu/kernels/cholesky_decompose.hpp>
+#include <stan/math/gpu/multiply.hpp>
+#include <stan/math/gpu/multiply_transpose.hpp>
+#include <stan/math/gpu/lower_tri_inverse.hpp>
+#include <stan/math/gpu/transpose.hpp>
+#include <stan/math/gpu/subtract.hpp>
+#include <stan/math/gpu/err/check_diagonal_zeros.hpp>
+#include <stan/math/gpu/err/check_nan.hpp>
+#include <CL/cl.hpp>
+#include
+#include

+namespace stan {
+namespace math {
+inline matrix_gpu cholesky_decompose(matrix_gpu& A, const int block = 100,
I was working on this refactor but then had other stuff, then I took some
time of around new years. Its a bit tricky to make a
I agree with your comment on default values.
We can determine an efficient value based on experience yes. Its hard to
say if its the most efficient, but its definitely very close at least on
recent hardware.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/stan-dev/math/pull/1059#discussion_r245484911, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AAxJ7NyVD1RRETj8dGfN1ORzrvsBm-bJks5vAPAbgaJpZM4YBML0
.

I will try and draw something up. I have to anyways, to maybe find a more clear solution.

So ftr you haven't missed anything big here and I've probably failed in explaining my intuition on this.
As Rok said, we have that one local block of threads in the GPU code where, for a bit, a single thread has to loop over the matrix before we can do anything in parallel. See here between lines 46 and 50. While it's a good algorithm and better than paying the transfer cost to and from the CPU; in my brain I'm like, "Yikes! That's pretty not good we need to do as little of that as possible." So that's why we wanted it very small. How small? Well, as N gets larger I saw less precision and so I thought we needed a slightly larger cholesky for large N matrices. How large though??
¯\_(ツ)_/¯
When I started, my hypothesis is that as N grows we'll need a larger starting cholesky in order to be precise, but we should try to find one that doesn't hurt performance. So that's why I based min_block off the size of N.
I haven't seen anything online or papers that go over the precision here, so to be clear I am 100% making up that little min_block function we use and it's based on nothing but some plots and my own priors for what will run fast/precise.
I could probably do something more rigorous to figure out the right number, but tbf I think the amount of discussion we've had around this parameter is, a lot, relative to it's importance and I don't see a reason to spend a weekend doing that
I actually never tested 100% of the local block size so that's running right now. It seems to fair well in precision, though for the N=12000 case it seems like it has an average of 1e-6? For the below, the percent of the matrix used in calculating min_block goes from left to right. Where 1 is just the maximum local block size.
tbh now that I have a larger sample size I'm not really seeing much of a difference for min_block so if you want to just set it to a constant I'm pretty whatever about that.
For performance 1 does seem to do very good!
(ftr you'll probably have to click in and zoom in on the plots cuz it's kind of hard to see stuff if they are not posted with high resolution.)

Why does 1 give an error of 1e-6 for that 12K? idk. I only have 10 samples for each experiment because it takes a while. It could just be a small sample thing or some gamma waves bouncing off the moon and flipping bits on my computer. Something something bus transfer rates between SMs. I'd like to have a 20x speedup on large matrices, but idt 1e-6 precision is going to be good. So we're kind of back now to "what's a good number for min_block?"
Does the function I have feel too complicated? ftr I'm fine with just setting it to some constant, but the little default I have setup seems to catch the min_block sizes that give the best performance. Which for some of these can be the diff between 2x and 3x speeds
If your confused on the algorithm itself then 1000% let's schedule some time to meet up and chat through that. But I really feel like we've discussed min_block wayyyyyyyyyyyyyyy...
...yyyyyyy more than is necessary. tbh it doesn't look that important in any of the graphs for precision, though does seem to have some performance differences for small N

After sitting down with Sean we've decided to make a couple changes.

I now agree with Sean that the size of the matrix shouldn't really effect when we go and execute the OpenCL Cholesky kernel. In the graphs below I ran the precision and performance tests only varying the min_block size by powers of 2. The precision test runs a bunch of experiments with different matrices and shows the max error between the CPU and GPU versions of the cholesky.

So as N goes up we do get less precision, but it doesn't seem like there is a meaningful difference in error between min_block sizes. My only concern is the precision at large N can get a little higher than we like. @bob-carpenter is somewhere around 2E-8 error or 1e-7th error for large matrices acceptable? If not we can increase the cholesky_partition parameter here as large values of that tend to give better precision at the cost of worse performance and memory usage. But if we need more precision then that's fine, there's other places we can squeeze better performance out of
The performance tests y axis is time_magnitude = cpu_time/gpu_time so as y goes up the GPU is faster.

With the above performance and precision graphs we are going to set the min_block size to be 250 by default. This is defined here in a map called tuning_opts_. Our plan with these values is to set them as reasonable defaults, but then in a future PR in the stan sampler we will have these parameters be tunable during the warmup iterations. We chose these parameters in particular because things like the partition sizes for the cholesky algorithm and when to move over to the GPU can change quite a lot by GPU. This is mostly due to some GPUs having vastly different architectures. You can see in the graph below, changing GPUs can have a dramatic effect on performance. So deciding when to move over to the GPU, when to execute kernels, and how to divide up the matrix on the GPU is something that I think would be nice to tune and set during warmup so that we can get maximum performance.

Great write up, thank you! Let's wait to hear from @bob-carpenter about the precision issue. I think with that I can quickly review the latest stuff and get this in, though I can't shake the feeling that we just haven't hit upon the right abstraction for tuning this computation -- it doesn't feel like relying on graphs to see the interactions between cholesky_partition combined with min_block is the right abstraction, but because this decision won't affect the user-interface to this code, I don't think we have to wait for a better version.
If you're curious, my thinking about that is that we must really want to control something like the "evenness" of the split of the matrix - we really want to make sure that we split it up into evenly sized chunks minimizing the number of serial computations (or if the L22 computation always takes 2x as long, we want to split it up into 2/3 L11 and 1/3 L22, or whatever it ends up being). We may actually be to sit down and write out how many extra computations we do when we recurse into L22 vs. just solving it directly, and that might help us reason about how to control the recursion on that side of the matrix. Maybe that becomes its own paper :)

woops, is this back in my court now?

Yep! Ready for review

Nice! Good to merge?

🙌 🎉 Great work you two! Looking forward to rev and the really dope research we'll do on auto tuning 😎 😎 😎

Thank you Sean for your help and patience :)

Hey, looks like this didn't pass on develop for some reason:
http://d1m1s1b1.stat.columbia.edu:8080/blue/organizations/jenkins/Math Pipeline/detail/develop/214/pipeline
Looks like maybe when we added overloads for cholesky_decompose they were triggered but not compatible with forward mode autodiff. @syclik do we have a policy for this situation? It's only breaking forward mode unit tests with STAN_OPENCL enabled. Should we revert for now or try to roll forward? I could see it going either way.

Yes. Revert the PR.
Then open a new PR that reverts the reversion which should also have a fix.
develop shouldn't be broken. If it is, it's high priority to get it back to
a state that's not broken.
Do you know how this got through?
On Wed, Feb 13, 2019 at 1:35 PM seantalts<EMAIL_ADDRESS>wrote:

Hey, looks like this didn't pass on develop for some reason:
http://d1m1s1b1.stat.columbia.edu:8080/blue/organizations/jenkins/Math Pipeline/detail/develop/214/pipeline
Looks like maybe when we added overloads for cholesky_decompose they were
triggered but not compatible with forward mode autodiff. @syclik
https://github.com/syclik do we have a policy for this situation? It's
only breaking forward mode unit tests with STAN_OPENCL enabled. Should we
revert for now or try to roll forward? I could see it going either way.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/stan-dev/math/pull/1059#issuecomment-463314594, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AAZ_FyHmtM2HRLre73NVrbtY58c-6akLks5vNFsFgaJpZM4YBML0
.

Oh yikes! My apologies. Are there tests that happen just for develop that do not happen for branches?
I'm really not sure how fvar works so we can talk about how to handle this on the gpu in the stan meeting. My initial thought is just to not have the GPU stuff happen for fvar. But thats only because I don't know a lot about forward mode

I think a quick fix for this would be to add & std::is_same<T, double>::value to the if statement in cholesky so it only goes off for type double. Though if there's an reasonable fix to make this work for fvar that would be cool

Do you know how this got through?

Yes, we don't run the full unit test suite with STAN_OPENCL defined until merge to develop, running only the GPU-related tests on PRs. This PR is overloading cholesky_decompose and I allowed the PR through just on the basis of prim implementation and tests because when I asked for mixed and reverse mode, we decided we could do those with the rev PR (as we're all aiming to keep PRs narrower and more focused). I should have put 2+2 together and realized the overload could interact in non-prim modes with tests. That said, at least we won't get test failures on other PRs or for non-GPU folks.

Reverted develop and pushed a branch with the revert on it (though in the future I think it's probably fine to let contributors revert the revert): feature/issue-1058-gpu-chol-prim

Got it. Thanks. I think we determined it was worth the risk as long as we
revert on failure, which we did.
On Wed, Feb 13, 2019 at 3:06 PM seantalts<EMAIL_ADDRESS>wrote:

Do you know how this got through?
Yes, we don't run the full unit test suite with STAN_OPENCL defined until
merge to develop, running only the GPU-related tests on PRs. This PR is
overloading cholesky_decompose and I allowed the PR through just on the
basis of prim implementation and tests because when I asked for mixed and
reverse mode, we decided we could do those with the rev PR (as we're all
aiming to keep PRs narrower and more focused). I should have put 2+2
together and realized the overload could interact in non-prim modes with
tests. That said, at least we won't get test failures on other PRs or for
non-GPU folks.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/stan-dev/math/pull/1059#issuecomment-463346148, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AAZ_F81HmKr93C2RRQ3cnPQKhFwuyQUJks5vNG71gaJpZM4YBML0
.

Thanks for pulling this back so quick, apologies again for the goof. Now that I know some of the tests do not go off for the GPU code on jenkins I'll make sure I run the full tests at home before we do a merge

No worries, I think it was probably on me as the reviewer to think about this interaction.
To run all the tests that call cholesky_decompose (which would be a good idea), you can use the following shell command:
 find test -name *_test.cpp | xargs grep -l cholesky_decompose | xargs ./runTests.py -j2

though this is slightly less tests than
./runTests.py -j2 test/unit -f chol

This is maybe more a question for the discourse but what would be the best resource that would help me understand forward mode a bit better?

Let's go to discourse.
On Wed, Feb 13, 2019 at 3:27 PM Rok Češnovar<EMAIL_ADDRESS>wrote:

This is maybe more a question for the discourse but what would be the best
resource that would help me understand forward mode a bit better?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/stan-dev/math/pull/1059#issuecomment-463355309, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AAZ_F6KjZ3WHdHhz8BuY1PZJyJ-_kA5Pks5vNHUpgaJpZM4YBML0
.

Am I allowed to use C++17? This is actually a nice usecase for if constexpr

Nope

One thing we can do to fix this super simply is just rename the function to avoid overloading cholesky_decompose until the rev (and fwd? or something blocking fwd) mode versions go in.

Am I allowed to use C++17? This is actually a nice use case for if constexpr. If not then I think I have to have two cholesky_decompose functions. One that works for non-double types and one that works for double types

Can't you accomplish the same using std::enable_if? Doc: cppreference

^yeah I'm going to use enable_if. Apologies for the delay I'll have this up on the weekend


Now + Next.js: "Please install typescript" error with --prod deployment

I have a staging/production environment on Zeit for a frontend application done in Next.js.
Last prod deployment was done 4 days ago, without issues.
Today I've merged staging into prod, but I get an error that blocks the deployment while building the application:
It looks like you're trying to use TypeScript but do not have the required package(s) installed.
Please install typescript by running:
         npm install --save-dev typescript
If you are not trying to use TypeScript, please remove the tsconfig.json file from your package root (and any TypeScript files)

I'm not sure what is the reason why this error shows up now and not in the previous builds. I've checked the builds logs and nothing changed.
I could probably solve this by adding typescript as prod dependency instead of having it as devDependency in my package.json file, but I'm not sure why the error is happening now and wasn't there on the latest releases.
Another workaround would be to not use the --prod flag on the production deployment since the issue doesn't happen with the staging deployment that doesn't use the --prod flag.
This is the full deployment command I'm using
now --prod --token $ZEIT_TOKEN --local-config .now/now.production.json

I have a gut feeling that it might be connected to #3107 and #3105
Any hints?
Ps: I've also open a thread on spectrum and seems I'm not the only one

Thank you for the bug report!
We released a fix for --local-config on the canary channel.
Can you try running npm i -g now@canary to confirm this version works for you? Thanks!

@styfle I'm still having the same issue (Please install typescript) even when using now@canary.
This is my CI workflow
npm install --global --unsafe-perm now@canary
now --prod --token $ZEIT_TOKEN --local-config .now/now.production.json

and this is my now.production.json
{
    "version": 2,
    "name": "my-production-name",
    "alias": "myproductiondomain.com",
    "builds": [{ "src": "package.json", "use": "@now/next" }]
}

I've seen that also #3107 has been re-open, shall we move everything under the same thread?

shall we move everything under the same thread?

Indeed, this is the same bug, thanks!

for future reference, this issue is currently solved by using now@canary
npm install --global --unsafe-perm now@canary
now --prod --token $ZEIT_TOKEN --local-config .now/now.production.json

and now.production.json
{
    "version": 2,
    "name": "my-production-name",
    "alias": "myproductiondomain.com",
    "builds": [{ "src": "package.json", "use": "@now/next" }]
}


Explanation

Hi.  It is a real life saver. Nevertheless, I am curious to know the underlying working of the algorithm. In order words, I am curious to know how the compression of the images take place?
Looking forward to hearing from you soon. Thanks.

@msaad1311
Thanks for using this library.
This library reduces the image width, height, or quality iteratively to meet the maxSizeMB and maxWidthOrHeight requirements. We make use of the Canvas API to do image processing.
https://github.com/Donaldcwl/browser-image-compression/blob/7d633972e66f94d469789c806f5302397994b63a/lib/image-compression.js#L88-L107
Multi-thread non-blocking compression is supported through options that make use of Web Worker to handle Canvas processing outside the main thread. So the UI will not be "hang" when compressing the image.


[IE11][Win8.1] Error: Unable to get property 'position' of undefined or null reference

Error source: https://github.com/wilddeer/stickyfill/blob/2.0.3/src/stickyfill.js#L23

Me too got the same issue.

IDK what fixed it, but maybe I just made polyfill start after DOM was loaded

I would reopen this issue, because I have the same problem. Stickyfill work only if we pass only one element in add method.
This works:
Stickyfill.add($(".sticky").get(0));

These ones doesn't:
Stickyfill.add($(".sticky"));

Stickyfill.add($(".sticky").toArray());


netbsd: fix cross-compilation to NetBSD

Motivation for this change
With these changes, I was able to cross-compile a statically linked NetBSD program from Linux, which I then tested on NetBSD:
nix-build -A pkgsCross.amd64-netbsd.pkgsStatic.netbsd.column

Things done

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

[x] NixOS
[ ] macOS
[ ] other Linux distributions

[ ] Tested via one or more NixOS test(s) if existing and applicable for the change (look inside nixos/tests)
[ ] Tested compilation of all pkgs that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review wip"
[x] Tested execution of all binary files (usually in ./result/bin/)
[ ] Determined the impact on package closure size (by running nix path-info -S before and after)
[ ] Ensured that relevant documentation is up to date
[x] Fits CONTRIBUTING.md.

@OfBorg build pkgsCross.amd64-netbsd.pkgsStatic.netbsd.column


ETA Not Dispalying Correctly

For torrents that are downloading, ETA keeps showing up as infinity.

Fix pushed directly to master.


Can structured headers' / UI be improved?

The fix in #533 enables <ins class="block"> and <del class="block"> to be used for the entire H1 of a structured header. This is an improvement, thanks! However:

The changes aren't represented in the left-hand table of contents pane, unlike <ins>/<del> used in unstructured headers
Deleted text is shown verbatim, in a huge H1 font, which is distracting for long parameter lists or long return type text. It also makes it harder to determine what actually has changed, because return types and parameter types are displayed differently (and far away from each other) in the <ins> block vs. the <del> block

Ideally, I'd be able to get the same UI I can get with unstructured headers, which is that I can revise the AO name, a parameter name, a parameter type, and/or a return type, and only the changed parts would be shown in red or green background.
The screenshot below shows both problems, and shows examples in the left pane of unstructured headers' UI providing the desired behavior.

In case it's helpful, https://github.com/tc39/ecmarkup/pull/533#issuecomment-1611710276 includes an idea from @gibson042 for how to support more granular <ins> and <del>.


Is there any way to define additionalProperties? or Free-Form Object

Hi, I have some rspec test with data:
    let(:data) {
      {
        description: {},
        type: "closed",
        max_rating: 1,
        answer_options: [
          {id: first_answer_option.id, description: "description", correct: false},
          {id: second_answer_option.id, description: "NOT description", correct: true},
          {description: "New answer", correct: false}
        ]
      }
    }

When generating the documentation, I have this description for the descriopion field
            description:
              type: object
              properties: {}

The description field in my business is a field within which I pass data from the wysiwyg editor, and get an arbitrary object.
I'm trying to define it as a Free Form Object, according to this documentation: https://swagger.io/docs/specification/data-models/data-types/#object
I add this key additionalProperties: {} and remove this key properties: {}
When I run the generation, I get again properties: {} key.
Is there any way to deal with this?
I can try to make a contribution if required.

I guess my example is one of the extreme cases. However, there is another extreme case that may arise for other users.
Instead of a Free object, someone may want to describe a predefined list of fields, but leave the ability to add any set of additional fields.
But in the openapi documentation I couldn't find any direct indication that this is possible, so I don't know if such a complex case actually exists.

Personally, your solution works for me. Just concerned about more general cases.

Implemented in https://github.com/exoego/rspec-openapi/pull/178

This was released in v0.13.0


Ability to test flow from CLI

I'm submitting a ...  (check one with "x")
[] bug report => search github for a similar issue or PR before submitting
[x] feature request
[] support request
[] general question

Current behavior (how does the issue manifest):
Like Web UI where developers can quickly test their flows, developers should be able automate their flow testing through CLI.
Expected behavior:
./<BINARY> --test -flow <FLOW_NAME> -input <FLOW_INPUT_PARAM_JSON>
./<BINARY> --test -flow <FLOW_NAME> -inputfile <FLOW_INPUT_PARAM_JSON_FILE>
e.g.
./MyApp --test -flow MyFlow -input '{"p1": "test", "p2": 20}'
./MyApp --test -flow MyFlow -inputfile ~/test/myapp_myflow_input.json
Minimal steps to reproduce the problem (not required if feature enhancement):
What is the motivation / use case for changing the behavior?
Developer productivity and automation
Please tell us about your environment (Operating system, docker version, browser & web ui version, etc):
Flogo version (CLI & contrib/lib. If unknown, leave empty or state unknown): 0.X.X
0.5.4
Additional information you deem important (e.g. issue happens only occasionally):

@skothari-tibco this could make a nice cli plugin...

Yes. Looks neat.


Docker shouldn't try v1 after v2 response 401

Docker version
Client:
 Version:      1.8.3
 API version:  1.20
 Go version:   go1.4.2
 Git commit:   f4bf5c7
 Built:        Mon Oct 12 05:37:18 UTC 2015
 OS/Arch:      linux/amd64

Server:
 Version:      1.8.3
 API version:  1.20
 Go version:   go1.4.2
 Git commit:   f4bf5c7
 Built:        Mon Oct 12 05:37:18 UTC 2015
 OS/Arch:      linux/amd64

After v2 api returns 401 error indicating the resource docker is requiring is not authorized, the docker client will continue to try v1 api and after this failed, the client will report resource not found

docker client should only try v1 api after v2 api returns 4xx. Now the error message is confusing
Although this happens in docker version 1.8.3, I believe many version have this problem

Hi!
Please read this important information about creating issues.
If you are reporting a new issue, make sure that we do not have any duplicates already open. You can ensure this by searching the issue list for this repository. If there is a duplicate, please close your issue and add a comment to the existing issue instead.
If you suspect your issue is a bug, please edit your issue description to include the BUG REPORT INFORMATION shown below. If you fail to provide this information within 7 days, we cannot debug your issue and will close it. We will, however, reopen it if you later provide the information.
This is an automated, informational response.
Thank you.
For more information about reporting issues, see https://github.com/docker/docker/blob/master/CONTRIBUTING.md#reporting-other-issues

BUG REPORT INFORMATION
Use the commands below to provide key information from your environment:
docker version:
docker info:
uname -a:
Provide additional environment details (AWS, VirtualBox, physical, etc.):
List the steps to reproduce the issue:
1.
2.
3.
Describe the results you received:
Describe the results you expected:
Provide additional info you think is important:
----------END REPORT ---------
#ENEEDMOREINFO

docker version
Client:
 Version:      1.8.3
 API version:  1.20
 Go version:   go1.4.2
 Git commit:   f4bf5c7
 Built:        Mon Oct 12 05:37:18 UTC 2015
 OS/Arch:      linux/amd64

Server:
 Version:      1.8.3
 API version:  1.20
 Go version:   go1.4.2
 Git commit:   f4bf5c7
 Built:        Mon Oct 12 05:37:18 UTC 2015
 OS/Arch:      linux/amd64

docker info
Client:
 Version:      1.8.3
 API version:  1.20
 Go version:   go1.4.2
 Git commit:   f4bf5c7
 Built:        Mon Oct 12 05:37:18 UTC 2015
 OS/Arch:      linux/amd64

Server:
 Version:      1.8.3
 API version:  1.20
 Go version:   go1.4.2
 Git commit:   f4bf5c7
 Built:        Mon Oct 12 05:37:18 UTC 2015
 OS/Arch:      linux/amd64
root@i-m903up73:~/registry_auth/deploy/registry# docker info
Containers: 4
Images: 180
Storage Driver: aufs
 Root Dir: /var/lib/docker/aufs
 Backing Filesystem: extfs
 Dirs: 189
 Dirperm1 Supported: true
Execution Driver: native-0.2
Logging Driver: json-file
Kernel Version: 3.16.0-41-generic
Operating System: Ubuntu 14.04.2 LTS
CPUs: 1
Total Memory: 993.8 MiB
Name: i-m903up73
ID: ZMBV:RGFO:PTY2:Z45B:5N2B:GDFX:NNL2:26ID:XJ4Y:U3K3:642J:2OQV
Debug mode (server): true
File Descriptors: 27
Goroutines: 43
System Time: 2015-10-19T17:33:57.154216214+08:00
EventsListeners: 0
Init SHA1: 70b0cda2ecbf0d9fb1879ed198a66ad09a3dc50c
Init Path: /usr/lib/docker/dockerinit
Docker Root Dir: /var/lib/docker
WARNING: No swap limit support

uname -a
Linux i-m903up73 3.16.0-41-generic #55~14.04.1-Ubuntu SMP Sun Jun 14 18:43:36 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

steps to reproduce the issue:

directory structure

2. docker-compose.yml content
dockerauth:
  image: cesanta/docker_auth:stable
  ports:
    - "5001:5001"
  volumes:
    - /root/auth_oss/auth_server/config:/config:ro
    - /var/log/docker_auth:/logs
    - /root/auth_oss/auth_server/ssl:/ssl
  command: /config/auth_config.yml
  restart: always
registry:
  image: registry:2
  ports:
    - "443:5000"
  volumes:
    - /root/auth_oss/auth_server/ssl:/ssl
    - /root/auth_oss/docker_registry/data:/var/lib/registry
  restart: always
  environment:
    - REGISTRY_AUTH=token
    - REGISTRY_AUTH_TOKEN_REALM=https://registry.acs.aliyun.com:5001/auth
    - REGISTRY_AUTH_TOKEN_SERVICE="Docker registry"
    - REGISTRY_AUTH_TOKEN_ISSUER="Auth Service"
    - REGISTRY_AUTH_TOKEN_ROOTCERTBUNDLE=/ssl/domain.crt
    - REGISTRY_HTTP_TLS_CERTIFICATE=/ssl/domain.crt
    - REGISTRY_HTTP_TLS_KEY=/ssl/domain.key

create self signed certificate and use registry.acs.aliyun.com as CC
auth_config.yml

docker login -u admin -p 123 -e y https://registry.acs.aliyun.com
docker pull hello-world
docker tag hello-world registry.acs.aliyun.com/hussein/hello-world
docker push registry.acs.aliyun.com/hussein/hello-world
docker rmi registry.acs.aliyun.com/hussein/hello-world
docker login -u hussein -p 123 -e y https://registry.acs.aliyun.com
docker pull registry.acs.aliyun.com/hussein/hello-world

unexpected result

docker daemon log

ping @RichardScothern @dmp42 PTAL

This looks like the culprit
https://github.com/docker/docker/blob/master/registry/registry.go#L190
func shouldV2Fallback(err errcode.Error) bool {
	logrus.Debugf("v2 error: %T %v", err, err)
	switch err.Code {
	case v2.ErrorCodeUnauthorized, v2.ErrorCodeManifestUnknown:
		return true
	}
	return false
}

@RichardScothern @farmerworking Thanks for the report. Although it would theoretically make sense to do that, here's the situation:

We do not want to differentiate between private repositories and non-existing ones
Currently, the registry chose 401 for both cases, whereas traditionally (e.g. Github) uses 404 for both cases.

So I personally would close this issue and open one (if not already there), that would change the return code from 401 to 404 for both non-existing and private repositories. However, then you'd have to manage backwards compatibility in a way.
Let me know if you agree

I agree using 404 for non-existing one but can't understand your advise upon private repositories.
If a private repository exists but the user has no access, return 401 I think is very reasonable
If the private repository doesn't exist, 404 would be the semantic response
Fallback from v2 to v1 should only work for 404 which may indicate the v2 api is not available

I think the thought behind returning a 404 for private repo's is that you don't want to disclose that a repository exists if someone doesn't have access to it.

Oh, I see. But that doesn't help us solve the problem in the first place.
How about making the API /v2/ skip the authentication procedure and will not fallback once this API's response status is 200

Actually, docker 1.8.3 introduced a --disable-legacy-registry option; see https://github.com/docker/docker/pull/16385

For environment where private registry as a service to users, the owner of this private registry has no control of the users' docker, this workaround isn't convenient
In my opinion, this is what fallback strategy should do. It should be fixed instead of walk around.

I agree with @farmerworking: we also operate our own private Docker Registry (written in Clojure, https://github.com/zalando-stups/pierone) and are on the verge to migrate to v2. API v2 is already implemented and works, but the Docker client does behave "well" (similar issue with v2 and auth is #17317).

Me and @WillemElbers just encountered this issue with Docker Engine 1.11 when pulling and image from a private registry without being authenticated.

When authorization fails for the v2 API,  the v1 API is attempted by the client irrespective of  --disable-legacy-registry.
The v1 API returns a HTTP 404. Instead of inappropriately returning 404 just to not disclose the existence of an image, 401 should be returned for any request for which authentication failed. That also prevent the information leak but will not result in confusing error message Error: image foo not found  on the client side.

These are both bugs.

@sanmai-NL can you open a separate issue for --disable-legacy-registry not working correctly?
What kind of setup are you using for your registry? Is this https://github.com/docker/distribution ? Which version?

Apologies for the delay in this reply. Our private repository is running the "registry:2.1.1" image from the docker distribution project.

Workaround @
https://github.com/MarvAmBass/docker-nginx-registry-proxy/blob/master/docker-registry.conf

@thaJeztah: has this issue been fixed in the meantime, perhaps?

@sanmai-NL this is with docker 1.13.1;
With --disable-legacy-registry;
From Docker Hub;
docker pull thajeztah/foobar

DEBU[0003] Calling POST /v1.26/images/create?fromImage=thajeztah%2Ffoobar&tag=latest
DEBU[0003] Trying to pull thajeztah/foobar from https://registry-1.docker.io v2
ERRO[0011] Not continuing with pull after error: errors:
denied: requested access to the resource is denied
unauthorized: authentication required

INFO[0011] Ignoring extra error returned from registry: unauthorized: authentication required
INFO[0011] Translating "denied: requested access to the resource is denied" to "repository thajeztah/foobar not found: does not exist or no pull access"
ERRO[0011] Handler for POST /v1.26/images/create returned error: repository thajeztah/foobar not found: does not exist or no pull access

From a local registry;
docker pull localhost:5000/foobar

DEBU[0168] Calling POST /v1.26/images/create?fromImage=localhost%3A5000%2Ffoobar&tag=latest
DEBU[0168] Trying to pull localhost:5000/foobar from https://localhost:5000 v2
WARN[0168] Error getting v2 registry: Get https://localhost:5000/v2/: http: server gave HTTP response to HTTPS client
ERRO[0168] Attempting next endpoint for pull after error: Get https://localhost:5000/v2/: http: server gave HTTP response to HTTPS client
DEBU[0168] Trying to pull localhost:5000/foobar from http://localhost:5000 v2
ERRO[0168] Attempting next endpoint for pull after error: manifest unknown: manifest unknown
INFO[0168] Translating "manifest unknown: manifest unknown" to "manifest for localhost:5000/foobar:latest not found"
ERRO[0168] Handler for POST /v1.26/images/create returned error: manifest for localhost:5000/foobar:latest not found

Without --disable-legacy-registry;
docker pull localhost:5000/foobar

DEBU[0004] Calling POST /v1.26/images/create?fromImage=localhost%3A5000%2Ffoobar&tag=latest
DEBU[0004] Trying to pull localhost:5000/foobar from https://localhost:5000 v2
WARN[0004] Error getting v2 registry: Get https://localhost:5000/v2/: http: server gave HTTP response to HTTPS client
ERRO[0004] Attempting next endpoint for pull after error: Get https://localhost:5000/v2/: http: server gave HTTP response to HTTPS client
DEBU[0004] Trying to pull localhost:5000/foobar from http://localhost:5000 v2
ERRO[0004] Attempting next endpoint for pull after error: manifest unknown: manifest unknown
DEBU[0004] Trying to pull localhost:5000/foobar from https://localhost:5000 v1
DEBU[0004] attempting v1 ping for registry endpoint https://localhost:5000/v1/
DEBU[0004] Fallback from error: Get https://localhost:5000/v1/_ping: http: server gave HTTP response to HTTPS client
ERRO[0004] Attempting next endpoint for pull after error: Get https://localhost:5000/v1/_ping: http: server gave HTTP response to HTTPS client
DEBU[0004] Trying to pull localhost:5000/foobar from http://localhost:5000 v1
DEBU[0004] [registry] Calling GET http://localhost:5000/v1/repositories/foobar/images
ERRO[0004] Not continuing with pull after error: Error: image foobar:latest not found

I don't see it falling back to the V1 API if --disable-legacy-registry is enabled

@thaJeztah:
Perhaps @WillemElbers can confirm whether he still has this issue. Otherwise, I would assume it is fixed now and close the issue.

Support for v1 registries was removed, so this should no longer be an issue.


remove triggermesh operator

This is actually removing the triggermesh community operator because we got it certified with RedHat and right now it shows two different operators.

@sebgoa can you signoff this? More info here

done

/test CVP

/retest


Naming convention - Application Agent

Proposal for naming convention. Impacts primazactl too.
The following changes are applied to names:

Application Namespaces

Service Account: pmz-app-<cluster environment name>
Leader Election Role: pmz:app:<cluster environment name>:leader-election
Leader Election RoleBinding: pmz:app:<cluster environment name>:leader-election
Manager Role: pmz:app:<cluster environment name>:manager
Manager RoleBinding: pmz:app:<cluster environment name>:manager
Agent's Deployment: pmz-app-<cluster environment name>
Primaza's Role: pmz:cp:<cluster environment name>:app
Primaza's RoleBinding: pmz:cp:<cluster environment name>:app

Service Namespaces: will be deferred to another PR, the following changes are mainly side effects

Primaza's Role: pmz:cp:<cluster environment name>:svc
Primaza's RoleBinding: pmz:cp:<cluster environment name>:svc

Primaza Control Plane: will be deferred to another PR

no need for now of cluster-environment in Application/Service namespaces resources


Inject in StateMachineBehaviour not working

I'm trying to inject in fields, properties, methods or Construct() in classes that derive from StateMachineBehaviour but they are simply ignored. Is it actually supported? If not, is it possible to add the support for StateMachineBehaviour?

OK, apparently is not actually supported: https://groups.google.com/forum/#!topic/zenject/knCz8FBZxyM
There's a workaround by calling the inject for each StateMachineBehaviour.. I really don't like it, but I think it works. Check the Google Forums post for further details.
Adding support for StateMachineBehaviour derived classes would be a great addition. What do you think?

Yeah, it would be good to add a hook to inject automatically into those classes

Fixed on develop branch / zenject 6

I'm actually experiencing the bug once again even in older versions of zenject. I'm injecting fields into StateMachineBehaviour, but all I get is null


Find out if we use the correct base load demand

In the light of https://github.com/quintel/etmoses/issues/875, I am concerned if we need to refine the base-load demand as well.
@grdw @antw can you point me to the place where this demand is defined in ETMoses?

Maybe DemandAttribute? That's what we use to import the demand from ETEngine (and convert it to kWh).

In this line the total final demand of electricity is used to scale the base load. This should be replaced with a gquery which only returns electricity for appliances, lighting and cooking.


Refactor to work with different chat systems

In particular Mattermost.

Converted to only work with Mattermost. No longer supports IRC.


Use my own keyboard shortcuts

I don't understand why I suddenly have to use the keyboard shortcuts of the host? I think that should be local, and the actions that run from the shortcuts should be the ones that are transferred. How else can I work together nicely when having different customizations?

@daytonellwanger things like join line, delete line, move to previous location, etc. I do have https://marketplace.visualstudio.com/items?itemName=ms-vscode.sublime-keybindings installed. Not sure if it is only shortcuts from that plugin though.

Closing as a duplicate of https://github.com/MicrosoftDocs/live-share/issues/4413


SIS Vendors link broken URL 404

Hiya,
In the Automatic team creation section found> https://docs.microsoft.com/en-gb/microsoftteams/remote-learning-edu#automatic-team-creation-using-sds
The SIS Vendors link is broken
Broken URL > https://docs.microsoft.com/en-us/schooldatasync/what-sis-and-mis-vendors-does-school-data-sync-support

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

ID: f3a9f575-7a67-4d52-a2d7-41fca96d42d7
Version Independent ID: 1638ffdb-fd56-48b8-33a9-ad79c901b0c0
Content: Microsoft Teams resources for Education admins - Microsoft Teams
Content Source: Teams/remote-learning-edu.md
Service: msteams
GitHub Login: @MicrosoftHeidi
Microsoft Alias: heidip

Thank you for submitting feedback and contributing to the docs. We are currently investigating this.

Thanks for reporting! @nmball

@nmball thanks for posting the correct doc linked to the issue. I see @get-itips has done the fix. Thanks again for pointing this out.


fix search feature when options.tones: false

Fixes #176
Decided to recreate this branch due to conflicts and dependancy issues. Hopefully this one is better

@mervick , sorry, I could not do the merge because I was in a meeting.

don't worry, it's ok


Make sure InputStream is closed after loading keystore

Try with resources is used for keystore input stream as done in javadoc.

thanx. ok to go. had you noticed this misbehaving?

I have not seen any problems caused by this. I have just noticed that, when working on other stuff.


global option handler

Hi, I know there is Class Options for set global options, but how can I create a global option handler, like this code:
class CmdParser < Thor
  class_option :debug, :type => :boolean do
    logger.level = Logger::DEBUG
  end
end

Then I can use $ ./bin run --debug to print all logger info, without writing logger control code all over the place.

This seems like #262 and others. Is this really the best way? Or has everyone lost interest after all these years? ;)


Test timeout kills the process while the debugger is attached

The test timeout should likely not be respected when a debugger is attached. Conditioning on the DEBUG switch wouldn't work as the SDK contains the Release configuration of VSTest.

Which timeout is this about? We multiply connection timeout by 5 when debugging and I rarely run into that, as it is considered only in few places where we actually connect. Or is this about the Timeout attribute on some testing framework?

IIRC this was about the --blame-hang-timeout.

I don't think this should be implemented. No-one else upvoted this and the hang timeout is easy to disable or make the interval longer. I also often debug it, and after experience with Assert.Debug which behaves differently under debugger and without debugger, this behavior is just confusing (to me at least).


CMake instructions

It would be great if you could also provide instructions for how to do this via Cmake, since there you can't manually tweak your .vcxproj each time

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

ID: 31b9c394-df9a-b0fd-5710-6c49f0354c0a
Version Independent ID: a8c05336-1d5c-8fdc-0a47-aa99a927e6c1
Content: Distribute a WebView2 app as a single executable file - Microsoft Edge Development
Content Source: microsoft-edge/webview2/how-to/static.md
Product: microsoft-edge
Technology: webview
GitHub Login: @MSEdgeTeam
Microsoft Alias: msedgedevrel

AB#44527569

Thanks for reporting this. I'll make sure this is tracked on our team's radar for evaluation and prioritization.

After evaluation, we decided not to prioritize this particular request at this time in this repository.
If you need help on this, please check the https://github.com/MicrosoftEdge/WebView2Feedback repository where you can discuss with the team and other WebView2 users.
Thank you for your input.


Storybook not launching on main

Bug Report
Problematic behavior
When running yarn storybook in src/frontend/magnify, an error occurs at the "loading presets" phase.
Expected behavior/code
The storybook should run. Actually it used to run correctly before the migration.
Steps to Reproduce

git clone the project (or make sure not to have old node_modules folders)
cd src/frontend
yarn
cd magnify
yarn storybook

Solution
After a lot of investigation, the problem seems to come from the storybook package. The refactor commit seems to have downgraded storybook subpackages from 6.5.8 to 6.5.7.
Upgrading storybook package by running npx sb upgrade fixes the issue.

Even after updating packages, you still need to run npx sb upgrade to make the storybook work. This command will change something that is not gitted and that will make it work.


Add Google Analytics

We need to add google analytics back into the application. I believe there is a gatsby plugin for it already installed. We just need to add the keys in the gatsby-config file.

Done, and should be working: https://github.com/Public-Health-Coalition/frontend/pull/9


Ability to enable/disable CTRL sprinting

Is your feature request related to a problem? Please describe.
When you hold CTRL and left click, it automatically enables sprint for the click and makes your character sprint to the location.
Describe the solution you'd like
I wanted to suggest the ability to toggle this option on and off
Additional context
The CTRL button is a button that I use to toggle things on other programs and it makes me use up a lot of sprint energy by habit of already using CTRL. OSBuddy used this feature and it was one of the key features that really made me want to swap off the client.

This was added by Jagex shortly after adding Ctrl Click while running to walk


I'm having trouble with accents in character

I'm having trouble with accents in character
EX:
você  é  ã
when I try to add a page with these types of accents, and I click save, the title is empty
can anyone help me?
thanks

Fixed


CFFL

CFFL

Linter check found the following problems:
The following problems have been found:
ERROR: /tmp/abs_8a816gynv8/clone/recipe/meta.yaml:1: missing_pip_check: For pypi packages, pip check should be present in the test commands
ERROR: /tmp/abs_8a816gynv8/clone/recipe/meta.yaml:23: missing_wheel: For pypi packages, wheel should be present in the host section
Errors were found


Updated texture chars to use hex instead of ascii (resolves the path issue in osx)

resolves this https://github.com/maximecb/gym-miniworld/issues/30

This is making me think that it would be nice to have a simple level that uses TextFrame so that it gets automatically tested.
Thanks @ptigas :)


mikrotik doen`t work - not running

mikrotik doesn't work, not running.

please show me the trunks


UI improvements needed for single blog page, lacks responsiveness

Describe the bug
The single blog page has a poor layout that does not enhance readability or user experience. Additionally, the page is not responsive, making it difficult to view on different screen sizes, especially on mobile devices.
Expected behavior
The blog page should have a clean, organized design with proper spacing, font sizes, and alignment. It should also be fully responsive, adjusting to various screen sizes while maintaining readability and a smooth user experience.
Additional context
Improving the layout and responsiveness will significantly enhance the overall presentation of blog content.

kindlt assign this issue to me to resolve . @muruga21 @aswathcm29 @Itachii27 @Vaibhav-Kumar-K-R

kindly assign this to me @muruga21 @aswathcm29 @jahnvisahni31 @Itachii27

go ahead @Hemant9808


Fixed a few issues running InverseCrossAttention_Release.ipynb

Super cool project, thanks a lot! I had a few minor issues running the InverseCrossAttention_Release.ipynb that I fixed here, mainly installing the libraries and downloading the sample image. I thought I make a pr so that we don't all have to do this as the first step

I'm not sure we would want a !pip install inside of a jupyter notebook. It is fine to use in colab as the environment is already set up, but using this with a standard jupyter can break a user's environment. !pip install ignores the jupyter kernel and all variables/settings associated with it...
Would you like to rather make a colab notebook with the pip installs instead? You can edit the readme to include it next to the last contributor for the colab notebook. Sorry for the nitpick but it's rather annoying to have to reinstall conda due to a broken environment...


Optimize insert_overwrite incremental strategy with WRITE_TRUNCATE / Partition copy

resolves #77
Description

Add a copy_partitions to partition_by object (default to false), throw an error if incremental_strategy != 'insert_overwrite'.
If insert_overwrite & copy_partitions, we replace the MERGE part by:

In static mode (partitions defined), we copy explicit partitions from the output in temp table
In dynamic mode, we retrieve the partitions from the output in temp table and copy all of them

Checklist

[x] I have signed the CLA
[x] I have run this code in development and it appears to resolve the stated issue
[x] This PR includes tests, or tests are not required/relevant for this PR
[x] I have updated the CHANGELOG.md and added information about my change to the "dbt-bigquery next" section.

@colin-rogers-dbt I rebased it, I think you have put the label to trigger the integration tests so that we can check there's no regression there too.

This integ test is failing due to a known issue with our testing. No action required from @Kayrnt


cubicspline.cc fails to compile with eigen-3.3.6 in Debug mode on Fedora 29

[  2%] Building CXX object tools/src/libtools/CMakeFiles/votca_tools.dir/cubicspline.cc.o
In file included from /usr/include/eigen3/Eigen/Core:491,
                 from /usr/include/eigen3/Eigen/Dense:1,
                 from /votca/tools/include/votca/tools/eigen.h:49,
                 from /votca/tools/include/votca/tools/spline.h:21,
                 from /votca/tools/include/votca/tools/cubicspline.h:21,
                 from /votca/tools/src/libtools/cubicspline.cc:18:
/usr/include/eigen3/Eigen/src/Core/products/GeneralBlockPanelKernel.h: In member function ‘void Eigen::internal::gebp_kernel<LhsScalar, RhsScalar, Index, DataMapper, mr, nr, ConjugateLhs, ConjugateRhs>::operator()(const DataMapper&, const LhsScalar*, const RhsScalar*, Index, Index, Index, Eigen::internal::gebp_kernel<LhsScalar, RhsScalar, Index, DataMapper, mr, nr, ConjugateLhs, ConjugateRhs>::ResScalar, Index, Index, Index, Index) [with LhsScalar = double; RhsScalar = double; Index = long int; DataMapper = Eigen::internal::blas_data_mapper<double, long int, 0, 0>; int mr = 4; int nr = 4; bool ConjugateLhs = false; bool ConjugateRhs = false]’:
/usr/include/eigen3/Eigen/src/Core/products/GeneralBlockPanelKernel.h:1203:104: error: inconsistent operand constraints in an ‘asm’
             #define EIGEN_GEBP_2PX4_SPILLING_WORKAROUND __asm__  ("" : [a0] "+rm" (A0),[a1] "+rm" (A1));
                                                                                ^

it can be reproduced with the following dockerfile:
FROM fedora:29
RUN dnf install -y git cmake gcc-c++ expat-devel fftw-devel boost-devel txt2tags sqlite-devel hdf5-devel eigen3-devel gromacs-devel gromacs
RUN git clone --recursive https://github.com/votca/votca
WORKDIR votca/
RUN mkdir build
WORKDIR build/
RUN cmake -DCMAKE_BUILD_TYPE=Debug ..
RUN make

It is a bug in Eigen-3.3.6 http://eigen.tuxfamily.org/bz/show_bug.cgi?id=1643, Eigen-3.3.7 should have a fix.

Report to Fedora: https://bugzilla.redhat.com/show_bug.cgi?id=1662071

There is a fix in Fedora now: https://src.fedoraproject.org/rpms/eigen3/c/176ab5000f047390278680f14267d5f5936ad67c?branch=master

Thanks for finding this.

Fedora has an update pending: https://bodhi.fedoraproject.org/updates/FEDORA-2018-5905fb6984, I will include this in our docker container as soon as it hits testing.

Fedora has an update pending: https://bodhi.fedoraproject.org/updates/FEDORA-2018-5905fb6984, I will include this in our docker container as soon as it hits testing.

Pet the bug post, if you want this now user updates-testing:
$ dnf update eigen3 --enablerepo=updates-testing

@J-Dunn thanks we worked around the issue in votca/buildenv#20 and will finally resolve it when eigen3 is in stable with votca/buildenv#21.


Quick Menu In-game has inverted controls

The quick access menu in-game is inverted where (Up and Down = Left and Right) and (Left and Right = Up and Down). Instead of (UP=UP) and so on.

Exists as #2


Added Omega Radiance

I've added Omega Radiance

as stated in https://github.com/hk-modding/modlinks/pull/1448, waiting for modcommon

as stated in #1448, waiting for modcommon

can i add modcommon or do i have to ask the guys that made it?

so there should be no problem in adding this now? im asking because i see modcommon on scarab but not this

@SFGrenade are there any issues now?

@SFGrenade broooo please i wanna sleep :P


[RFC]Change how  merge works on 4.0.0

Current merging works this way:

Global merge is disabled by default, user must pass merge_enabled=True
Global merge when enabled applies to branches (dicts) and leaves (lists)
users can manually control merging by setting dynaconf_merge marks on dicts and lists

Proposed changes
dicts

Merge of branches (dicts) will be enabled by default, there will be no way to disable it
When user wants to skip the merge of a specific dict it will be needed to set the dynaconf_merge=False either on the settings sources or on the schema.
Merge will then apply for all the childs of the marked dict

class Database(DictValue):
    host: str
    port: int

class Settings(Dynaconf):
   database: Annotated[Database, Merge(False)]

or on a settings file
[database]
port = 123
dynaconf_merge = false

or on environment variable
export DYNACONF_DATABASE="@nomerge port=123,host='foo'"

For dictionaries the default will be merge when using __ access (current behavior) and @nomerge when using comma separated, toml or json definition.
lists

Merge is disabled by default, incoming list always replaces the whole existing list
User can explicitly set the list for merge using merge markers
Schema can also default a list for merge

class Settings(Dynaconf):
   plugin: Annotated[list, Merge(True, unique=True, mode="append|prepend")]

or on a settings file
plugins = ["great_plugin", "dynaconf_merge"]
plugins = ["great_plugin", "dynaconf_merge_unique"]
plugins = "@merge great_plugin"
plugins = "@append great_plugin"
plugins = "@insert 0 great_plugin"
plugins = "@replace 0 great_plugin"
plugins = "@insert after(thing) great_plugin"
plugins = "@insert before(thing) great_plugin"
plugins = "@slice 0..2 potato 3..6 chip 7.."

or on environment variable
# all the same merkers applies
export DYNACONF_PLUGINS="@merge ..."

Adding to this issue one more feature from #299
Conditional Variable
export APP_NUMBERS="@when(database.name == 'postgres') @merge 123,456"

# settings.yaml
thing: "@when(env.travis is not None) 'test app' else 'app'"

With the schema, and loaders using the schema to parse the variables we can make the dunder syntax to work for lists.
class Settings(Dynaconf):
    THING: list[int]
    OTHER: dict[str, str]

export DYNACONF_THING__0 = 1
export DYNACONF_OTHER__0 = 2

In this case, the env_loader when reading the envvar will know for sure that THING is a list[int] and then can apply specific parsing assigning settings.THING[0] = 1 and the same will apply for OTHER because the loader will know it is a dict[str. str] and then settings.OTHER["0"] = "2" if it was dict[int, int] the loader would do settings.OTHER[0] = 2

A real example on how the new merge can help
https://github.com/ansible/galaxy_ng/pull/2261/files#diff-51ac604a5e6e00d70270d768fd15bb83bca7f1d919f0471e0f43df8baba9d059R749-R758
The whole
def configure_dab_user_prefix_settings(settings: Dynaconf) -> Dict[str, Any]:
    # https://github.com/ansible/django-ansible-base/pull/611
    backend = "ansible_base.lib.backends.prefixed_user_auth.PrefixedUserAuthBackend"
    data = {}
    data["RENAMED_USERNAME_PREFIX"] = settings.get("RENAMED_USERNAME_PREFIX", "galaxy_")
    backends = settings.get("AUTHENTICATION_BACKENDS", [])
    if backend not in backends:
        backends.insert(0, backend)
        data["AUTHENTICATION_BACKENDS"] = backends
    return data

Could be replaced by
AUTHENTICATION_BACKENDS = "@insert_unique 0 'value'"


WARNING: Head : Doc magic does not match for A59927059A6352992E4F017771557498

This has been an ongoing issue for a while now, first reported back at
https://issues.apache.org/jira/browse/TS-4221

And also reported on #1906 (closed). We're still seeing this on production boxes as well, e.g.
Oct  3 16:23:06 s_sys@xxx traffic_server[3900]: {0x7fed5f90c700} WARNING: Head : Doc magic does not match for A59927059A6352992E4F017771557498
Oct  3 16:28:43 s_sys@xxx traffic_server[3900]: {0x7fed64d0c700} WARNING: Head : Doc magic does not match for 3E36CC76FBD0732AA8BA69DE3CE940FA
Oct  3 16:28:55 s_sys@xxx traffic_server[3900]: {0x7fed64d0c700} WARNING: Head : Doc magic does not match for A8063C1FF63FCF86F883497702A140BC
Oct  3 16:31:24 s_sys@xxx traffic_server[3900]: {0x7fed6410c700} WARNING: Head : Doc magic does not match for A45A13C21F680D99E883FE6D103D5EA6
Oct  3 16:31:32 s_sys@xxx traffic_server[3900]: {0x7fed6410c700} WARNING: Head : Doc magic does not match for 61FE5594576A7FFF94E3A2C2D5FCE308

Roughly happening every other minute or so. It's my undertanding, from looking at the previous issues, code, and talking to Alan, that this is a "self repairing" failure, in that the user will not experience an error.

If this is still an issue please reopen.


Fix breaking error in Todoist when project is missing

Seen in error reporting, closestEditor could be undefined. This PR is a defensive fix so the integration stops breaking for users with uncaught error.
Will open issue to fix integration fully.

Closing for now as #1224 should resolve this. Will follow up after.


Evaluate the allowed ranges for the 5 toxic gases: Carbon Monoxide, Nitrogen Dioxide, Acrolein, Formaldehyde, Benzene.

There is a presentation deck from Marco via Vicenc that has some of these. I'll share in the Box folder.

Notes/Resources on the 5 Toxic Gases

I believe this is now done and documented. Can you please confirm @SolSantillan

Yes Dan, it is done. I will close it.
By other side, I asked Joan Herrera to validate with Vicenç, expert nurse in Toxicology, the possible values we are going to consider as green and yellow target.


The sub activity logs do not match the group activity log when cancelling undelete blobs activity

Storage Explorer Version: 1.28.0
Build Number: 20230213.4
Branch: rel/1.28.0
Platform/OS: Windows 10/Linux Ubuntu 20.04/MacOS Ventura 13.2 (Apple M1 Pro)
Architecture: ia32/x64/arm64
How Found: Exploratory testing
Regression From: Not a regression
Steps to Reproduce

Expand one storage account -> Blob Containers.
Create a blob container -> Upload serval blobs.
Soft delete the blobs -> Switch to the context view 'Active and soft deleted blobs'.
Select the soft deleted blobs -> Click 'Undelete -> Undelete Selected'.
Click 'Cancel all' next to the undeleted activity log.
Expand the activity log.
Check whether the sub activity logs match the group activity log.

Expected Experience
The sub activity logs match the group activity log.
Actual Experience
The sub activity logs do not match the group activity log.

Additional Context

The soft deleted blobs go back to active after manually refreshing.
This issue also reproduces for ADLS Gen2 blobs.

@JasonYeMSFT Verified this issue on the build main 20230226.1. The current behavior as below:
Could you help to have a look?

When trying to cancel undelete activity, display successfully undelete activity log.
The soft deleted blobs still show deleted status after showing 'undelete succeeded' in Activities. (the deleted blobs become active after manually refreshing).

That's expected. Even if you cancel, some of the in-progress requests may still succeed. We don't refresh as long as the user has clicked cancel and it's up to the user to figure out the partial result of the operations.


Not only UnGoogled, but UnCompiled too.

Myself and others may be interested in trying this IF there was an installer or compiled version.
I don't use HomeBrew, Python etc. If an app's not ready to use, I don't use it.
I was intrigued when I ran across this Chrome replacement yesterday, but it's evidently for developers and/or power-users only, not the general public. Not even advanced users.
I consider myself more advanced than the average home user, but I don't code, compile or have any desire to use HomeBrew (tried it once).
So for now I'll stick to Chromium as my occasional Safari substitute, and may go ahead and remove Chrome altogether since I don't use it anymore.

Not only UnGoogled, but UnCompiled too
Myself and others may be interested in trying this IF there was an installer or compiled version.

You're sending me mixed messages here...
In all seriousness, links to binaries are available via the README... I suppose the README's still too convoluted for people to see it. I will consider revising again at some point.

but it's evidently for developers and/or power-users only, not the general public. Not even advanced users.

I'm curious to know what gave you that impression. As I mentioned, downloads are available, so it's not hard to get a build of ungoogled-chromium running. Also, the browser experience is pretty much regular Chromium, so there aren't any difficulties I can see ther either.

As I recall, I clicked the Releases link above and only found source code.
In my experience I've always found the downloads on the releases page on GitHub.
Finding no ready-to-run downloads there I didn't look for a second downloads page.
I've no idea what README you're referring to, but 'm guessing the amount of people who actually READTHEM is only marginally higher than those who read EULA's. ;-)
Go ahead and delete this thread.

So where is that readme? Where are the "binaries?" Why aren't they in the releases tab?

Just go to https://chromium.woolyss.com/ and download, there are zips of ungoogled chromium for windows and mac.

Just go to https://chromium.woolyss.com/ and download, there are zips of ungoogled chromium for windows and mac.

That's how I got here, looking for the installer for. I don't know what "archive" means in that context and I don't want a portable install and all the hassle that comes with getting the rest of the OS to use the portable version.

The "archive" is literally just a zip file, download it and extract it, after you open it for a second time chromium will ask you to make it the default browser. It works on mac and linux afaik, in windows you have to edit the registry in order to make it the default (a problem every portable application has).

The "archive" is literally just a zip file, download it and extract it, after you open it for a second time chromium will ask you to make it the default browser. It works on mac and linux afaik, in windows you have to edit the registry in order to make it the default (a problem every portable application has).

That's why I don't want a portable one man like I said. I want to update my current chrome to this one. Why is there no installer to accomplish this? Oh right because like OP said: "Not only UnGoogled, but UnCompiled too."

Yes, an installer would be awesome, why don't you try to make one?
oss devs aren't getting paid, including Eloston afaik, you are not entitled to commodity in these types of projects. Try to contribute to the community instead of expecting everything to be spoon fed to you. I'm sure a lot of people will thank you if you create an installer.
Also, don't trust that page for you chromium version, use the about chromium button in the settings.

Yes, an installer would be awesome, why don't you try to make one?
oss devs aren't getting paid, including Eloston afaik, you are not entitled to commodity in these types of projects. Try to contribute to the community instead of expecting everything to be spoon fed to you. I'm sure a lot of people will thank you if you create an installer.
Also, don't trust that page for you chromium version, use the about chromium button in the settings.

Dude you aren't clever. Everyone already knows what and has heard that argument a thousand times.
The problem is threads like this get closed and deleted. That's not just "I don't have time" that's "everything is perfect now go away."
Also yeah I did that too.
Why don't you stop white knighting and admit the OP was right, this project isn't for people, it's for hobbyist pro techs that like to compile their own everything and scold everyone who wasn't born with a masters in comp sci.

Sidenote: I love how you completely ignored the point about why bother with "Googled" chromium.
Work for Google maybe? Wish you did?

*sigh*
Where to begin...

Why bother with googled chromium?
googled chromium is open source, chrome isn't, some people prefer oss, some people don't. That's it.

Why is making this easy to adopt so low priority?
Well, why should Eloston care about other platforms? (I'm going to guess stuff rn, might be false) Simply Eloston wanted an ungoogled version of chromium, he did, and because he uses debian, he made binaries for debian and he just left it there. Other people wanted the project on their platforms so they started porting them. It is easy to update ungoogled chromium on other platforms, its only windows, mac, and the bsds where the problem is because simply people haven't cared to port it (and because of the nature of the operating systems). See pic related.

It is really easy to update ungoogled chromium in arch linux in this case.
Maybe someone will make an installer for ungoogled chromium for windows, even I've been thinking about doing it since it is hard to make portable programs default, but I just haven't found the time for doing it (yet).
So... in the end, just wait until someone does it or do it yourself. That is how oss works most of the time.

some people prefer oss, some people don't. That's it.

So it's a fashion thing in your opinion. Actual improved function isn't a consideration? No one has like practical reasons for wanting to avoid closed source? Come on man. You're trying to trivialize the choice to imply no one has any responsibility. You don't even need to do that. Responsibility itself is a choice.

Eloston wanted an ungoogled version of chromium

What's the difference between "Googled" chromium and chrome? Why is this guy the only guy that wanted that? Why do all the other projects exist if they are still Googled? What is the point of any "Googled" chromium?

You're trying to trivialize the choice to imply no one has any responsibility.

The issue of choice is so complex it is much better to keep it simple stupid. Some people have their reasons to choose oss to propietary, maybe functionality, or philosophy, or just because they have to due to professional reasons. Of course, everyone is responsible for their choices.
Regarding the last part. Eloston wasn't the only one, there are other projects like iridium (which has a nice little installer for windows, though, a bit dated. https://iridiumbrowser.de/downloads/windows) and other ones which I can't remember.
Finally the differences between normal chromium and chrome is that chrome has more integration to the google services than chromium I think. Then why does chromium exist? well, it takes resources to maintain an internet browser with all the features people expect it to have, I think google created chromium to take the load of their hands and let the open source community help maintain it without google having to pay them (lol). You can see that in the case of the edge browser, microsoft couldn't handle maintaning a browser by themselves so now they will use chromium as a base for their next browser.

I think google created chromium to take the load of their hands and let the open source community help maintain it without google having to pay them (lol).

So this OSS project literally does exist to serve closed source profits. Completely amazing. /smh
Well since the thing doesn't have an installer or updater I just completely nuked everything and started from scratch since I have no other choice.
Whenever I run into situations like this where there are seemingly no ethical tech players with a strong position anywhere in the game I am reminded of the unabomber. Brilliant if crazy guy runs off into the woods because tech dystopian fear, leading to scary thought, which if he had some shred of a point?
Seems like so few with the ability in the tech space feels any responsibility to anything except themselves. It's like finding out every carpenter happens to also be a libertarian. Seems like a sociology PHD thesis waiting to happen.

think google created chromium to take the load of their hands and let the open source community help maintain it without google having to pay them (lol)

You need to inform yourself on the history of browsers. Blink, the engine used in Chromium is a fork of Webkit. From the start it has been open source because WebCore the actual rendering part of WebKit is GPL because it is itself a fork of a KDE project.

I'm going to guess stuff rn, might be false
oh well, called it, my bad then


rcv1 dataset

Hello, I want to use the RCV1 dataset as the few-shot  learning benchmark. Can you tell me how to get this dataset and split it?

You can request the dataset from https://trec.nist.gov/data/reuters/reuters.html. The split is available at https://people.csail.mit.edu/yujia/files/distributional-signatures/data.zip.


Visual Shader: Open context menu after releasing node's input/output "pin"

I expect

will pop up context menu

p.s. this also applies to visual scripting (Circled in red)

However arrow pin (circled in blue) works as I expect

I noticed that only input (Left) pins doesn't have such behaviour (Left "arrow"-like pins too)
Right-side pins work as expected


Using OTP Validation with Flutter framework

Hello
First, thanks for you work!
I'm meeting an understanding issue with OTP validation
I'm trying to develop in flutter the Validation Protocol V2 (https://developers.yubico.com/OTP/Specifications/OTP_validation_protocol.html)
I don't understand how you obtain the signature
I used the vector test from https://developers.yubico.com/OTP/Specifications/Test_vectors.html
my code is
String apiKey = 'mG5be6ZJU1qBGz24yPh/ESM3UdU=';
String keyValue = 'id=1&nonce=jrFwbaYFhn0HoxZIsd9LQ6w2ceU&otp=vvungrrdhvtklknvrtvuvbbkeidikkvgglrvdgrfcdft';
var hmacSha1 = crypto.Hmac(crypto.sha1, apiKey.codeUnits);
crypto.Digest sha1Result = hmacSha1.convert(keyValue.codeUnits);
String hEncode64 = base64.encode(sha1Result.bytes);
final http.Response responseHttp = await http.get(
        Uri.parse('https://api.yubico.com/wsapi/2.0/verify?' +
            keyValue +
            '&h=' +
            hEncode64),
);

I don't find the same result as Vector Test (h=%2Bja8S3IjbX593/LAgTBixwPNGX4%3D). -> +ja8S3IjbX593/LAgTBixwPNGX4=
But my misunderstanding thing is : when I try to base64 decode your vector test, I can't because it is not utf8 format
Could you help me to understand please my pb

and when i try with the test vector available on site, it doesn,'t work
https://api.yubico.com/wsapi/2.0/verify?id=1&otp=vvungrrdhvtklknvrtvuvbbkeidikkvgglrvdgrfcdft&nonce=jrFwbaYFhn0HoxZIsd9LQ6w2ceU&h=%2Bja8S3IjbX593/LAgTBixwPNGX4%3D

h=JE5WcMcXV7vooWkeN2/7A4DpMFo=
t=2021-12-15T12:51:37Z0635
status=BAD_SIGNATURE

after some tests, I find solution with true data. I think the test vector data is not real test data and therefore to just have an example of formalism


fix: Bring back DefaultVerify() test

Description
Please see this GitHub pull-request for a different JSS (Jump Start Solution).
Checklist

[x] Please merge this PR for me once it is approved.

Whoops, this was an accident.
I'm already working on https://github.com/GoogleCloudPlatform/terraform-example-deploy-java-multizone/pull/99.


Update build.gradle for AGP 8 support

Fixes #187

Any hints on when it might be merged? ☺

@avioli Could this simple PR that fixes an issue blocking android/gradle upgrades please be merged and released? Thank you.

Thank you for this contribution, but I don't have any time to maintain this package, so it is now marked as discontinued and app_links recommended replacement.


Support inline virtual text

Inline virtual text will soon be merged into master: https://github.com/neovim/neovim/pull/23426
This Plugin is of course the perfect candidate for implementing this feature.

@lvimuser I would like to test it. Do you mind sharing instructions on how to apply the patch on neovim master branch?
In neovim repo directory I do:
$ wget https://patch-diff.githubusercontent.com/raw/neovim/neovim/pull/23426.patch && git apply 23426.patch --allow-overlap --reject --whitespace=fix
$ make CMAKE_BUILD_TYPE=RelWithDebInfo

Fails with error:
mkdir -p build
touch build/.ran-deps-cmake
ninja  -C .deps
ninja: Entering directory `.deps'
[4/10] Performing download step (download, verify and extract) for 'libuv'
FAILED: build/src/libuv-stamp/libuv-download /Users/lukasz.kurpiewski/Projects/neovim/.deps/build/src/libuv-stamp/libuv-download
cd /Users/lukasz.kurpiewski/Projects/neovim/.deps/build/src && /opt/homebrew/Cellar/cmake/3.26.3/bin/cmake -P /Users/lukasz.kurpiewski/Projects/neovim/.deps/build/src/libuv-stamp/download-libuv.cmake && /opt/homebrew/Cellar/cmake/3.26.3/bin/cmake -P /Users/lukasz.kurpiewski/Projects/neovim/.deps/build/src/libuv-stamp/verify-libuv.cmake && /opt/homebrew/Cellar/cmake/3.26.3/bin/cmake -P /Users/lukasz.kurpiewski/Projects/neovim/.deps/build/src/libuv-stamp/extract-libuv.cmake && /opt/homebrew/Cellar/cmake/3.26.3/bin/cmake -E touch /Users/lukasz.kurpiewski/Projects/neovim/.deps/build/src/libuv-stamp/libuv-download
-- Downloading...
   dst='/Users/lukasz.kurpiewski/Projects/neovim/.deps/build/downloads/libuv/62c2374a8c005ce9e42088965f8f8af2532c177b.tar.gz'
   timeout='none'
   inactivity timeout='none'
-- Using src='https://github.com/libuv/libuv/archive/62c2374a8c005ce9e42088965f8f8af2532c177b.tar.gz'
-- verifying file...
       file='/Users/lukasz.kurpiewski/Projects/neovim/.deps/build/downloads/libuv/62c2374a8c005ce9e42088965f8f8af2532c177b.tar.gz'
-- SHA256 hash of
    /Users/lukasz.kurpiewski/Projects/neovim/.deps/build/downloads/libuv/62c2374a8c005ce9e42088965f8f8af2532c177b.tar.gz
  does not match expected value
    expected: 'cd97aff8e7073fb128aef7a45e9183264ccaf07945a6cb430053070bd03ff200'
      actual: 'c7e89137da65a1cb550ba96b892dfeeabea982bf33b9237bcf9bbcd90f2e70a1'
-- Hash mismatch, removing...

(...)

If I just apply the patch without  --allow-overlap --reject --whitespace=fix I get:
2023-05-11 15:10:52 (1.35 MB/s) - ‘23426.patch’ saved [137917]

error: patch failed: runtime/doc/news.txt:52
error: runtime/doc/news.txt: patch does not apply

@lvimuser I would like to test it. Do you mind sharing instructions on how to apply the patch on neovim master branch?
In neovim repo directory I do:
$ wget https://patch-diff.githubusercontent.com/raw/neovim/neovim/pull/23426.patch && git apply 23426.patch --allow-overlap --reject --whitespace=fix

git am 23426.patch worked without any issues.

Hey! Thanks for your work on this plugin. In majority of cases that I've tested it works really well. I've been testing this for a while and I found two things:

One thing is that inlay hints does not render on the first line of the buffer:

https://github.com/lvimuser/lsp-inlayhints.nvim/assets/35625949/74f1becb-5d79-4fc1-b77c-f3b56d3db92c

Don't know if it's possible but when we have set set cursorline and on the line that our cursor is at the moment there is a hint with paddingLeft or paddingRight,  this padding has different background than the cursorline background. I think it would be nice to have this background the same color as the cursorline:

1. One thing is that inlay hints does not render on the first line of the buffer:

I've pushed a commit, could you try it out?

3. Don't know if it's possible but when we have set `set cursorline` and on the line that our cursor is at the moment there is a hint with `paddingLeft` or `paddingRight`,  this padding has different background than the `cursorline` background. I think it would be nice to have this background the same color as the cursorline:

Try to experiment with different values of highlight in the formatter function, perhaps "None"

```virt_text_formatter = function(label, hint, opts, client_name)
      ...
      local vt = {}
      vt[#vt + 1] = hint.paddingLeft and { " ", "Normal" } or nil
      vt[#vt + 1] = { label, opts.highlight }
      vt[#vt + 1] = hint.paddingRight and { " ", "Normal" } or nil

      return vt
    end,

if not, then it's probably https://github.com/lvimuser/lsp-inlayhints.nvim/commit/aa1fee3469f70842fecb0e915fa0d1e5c6784501#diff-35ff978c429cae2ed9217298ef4810beb45307b1baee86f83eb7233f60109fbaL132

I've checked the newest commit and now it works well.
About the 3. you were right:
  vt[#vt + 1] = hint.paddingLeft and { " ", "None" } or nil
  vt[#vt + 1] = { label, opts.highlight }
  vt[#vt + 1] = hint.paddingRight and { " ", "None" } or nil

or even
  vt[#vt + 1] = hint.paddingLeft and { " " } or nil
  vt[#vt + 1] = { label, opts.highlight }
  vt[#vt + 1] = hint.paddingRight and { " " } or nil

works just as intended. Thanks and that all from my side

If you have hints at the end of a line, it means that you have this plugin version from "main" branch and you need version from "anticonceal" branch. Packer has "brach" option you can add in your config to install plugin version from branch ("lazy" should have something similar)

This seems to work great, with one issue: calling .toggle() hides the inlay hints, but calling it again doesn't re-display the inlay hints.

The anticonceal feature has been merged to master https://github.com/neovim/neovim/pull/20130

Seems to work very fine. An edge case seems to be when the inlay hints are racing with LSP semantic token highlighting. If the inlay hints resolve first:

If the semantic tokens resolve first and inlay hints appear after the LSP semantic highlighting they seem to inherit from the LSP highlighting

woo I am excited for this update

If you didn't know, you could use the right_gravity option when inserting virtual text. This would, when inserting, place the inserted text to the right of the virtual text rather than the the left. I found this particularly nice for the parameter type of some LSPs. For example with rust-analyzer

Very nice plugin, thank you.
only_current_line is broken though, it shows on current line when buffer is entered, but not when cursor is moved to another line.

Tested and works with lua, cpp, TS with anticonceal, was not successful with rust, anyone else got it working ?

Tested on TS also and had no issues, super thanks!

Seems to work very fine. An edge case seems to be when the inlay hints are racing with LSP semantic token highlighting. If the inlay hints resolve first:
If the semantic tokens resolve first and inlay hints appear after the LSP semantic highlighting they seem to inherit from the LSP highlighting (or is this something else?)

Thanks for the report. I have no idea what's going on there...

If you didn't know, you could use the right_gravity option when placing virtual text. This would, if right_gravity was set to false, when inserting, place the inserted text to the right of the virtual text rather than the left. I found this particularly nice for the parameter type of some LSPs. For example with rust-analyzer

Thanks, it's way better.

Seems to work very fine. An edge case seems to be when the inlay hints are racing with LSP semantic token highlighting. If the inlay hints resolve first:
If the semantic tokens resolve first and inlay hints appear after the LSP semantic highlighting they seem to inherit from the LSP highlighting (or is this something else?)

I wonder if this also happens with https://github.com/neovim/neovim/pull/23736#discussion_r1205317992...? If so, it's probably a bug in core

was not successful with rust, anyone else got it working ?
EDIT: should probably state the issue, nothing is showing at all with the anticonceal branch everything works fine on master.

It seems like the hints only show up after making some change to the file. but then they update normally

@IndianBoy42 Yes you are correct, editing the file does resolve the problem, interesting.

@A-Lamia You can try https://github.com/junnplus/lsp-setup.nvim#inlay-hints, I have tested it on Rust and it should work.

Things are working pretty well, but with a few caveats:

The toggle function is erratic. Most times, hints don't come back after toggling them back on unless I modify the buffer I'm editing. I'm guessing that's because the LSP doesn't emit them unless the file is modified, but I figure the plugin should be caching or hiding them instead of outright deleting everything when disabling the hints with the toggle function.
I don't know what the plugin is doing with the highlights but it seems it's not using the highlight group provided as-is. For example, if I specify no background, it will somehow always display with the general background instead of whatever other extmark is present there. Although maybe that's a neovim bug? Extmarks have been finicky lately.

Things are working pretty well, but with a few caveats:

The toggle function is erratic. Most times, hints don't come back after toggling them back on unless I modify the buffer I'm editing. I'm guessing that's because the LSP doesn't emit them unless the file is modified, but I figure the plugin should be caching or hiding them instead of outright deleting everything when disabling the hints with the toggle function.
I don't know what the plugin is doing with the highlights but it seems it's not using the highlight group provided as-is. For example, if I specify no background, it will somehow always display with the general background instead of whatever other extmark is present there. Although maybe that's a neovim bug? Extmarks have been finicky lately.
Is there any way to choose which display mode we want for the hints? I would like to have them as-is for most languages, but switch them back to the old way (at the end of the line) for rust-analyzer, as I find the hits much too disruptive visually.

It might also be worth it to think about the future of this plugin when this pr exists

@A-Lamia You can try junnplus/lsp-setup.nvim#inlay-hints, I have tested it on Rust and it should work.

Seem to not have any lucky with im guessing the rust configuration, still the same problem where you need to edit to get things to show up.

@ rust-analyzer. Does it happen only on the first buffer, or on each new buffer?

Using anticonceal branch on nightly (NVIM v0.10.0-dev-411+g9dd48f783), rust-analyzer inlay hints don't seem to work until rust-analyzer is stopped and started again. Anyone experience something similar, or have a fix?
Config:
{
    "lvimuser/lsp-inlayhints.nvim",
    event = "LspAttach",
    branch = "anticonceal",
    opts = {},
    config = function(_, opts)
      require("lsp-inlayhints").setup(opts)
      vim.api.nvim_create_autocmd("LspAttach", {
        group = vim.api.nvim_create_augroup("LspAttach_inlayhints", {}),
        callback = function(args)
          if not (args.data and args.data.client_id) then
            return
          end
          local client = vim.lsp.get_client_by_id(args.data.client_id)
          require("lsp-inlayhints").on_attach(client, args.buf)
        end,
      })
    end,
  },

for lazy.nvim you  want init not setup

this is still not supported yet right? as well what neovim version am I required for the inline virtual text?

this is still not supported yet right?

depends on what you consider supported

what neovim version am I required for the inline virtual text?

nightly

I mean if it will work like vscode, jetbrains, visual studion, etc. if I implement this now to my nvim to have the inlay hints right inside where the parameters go instead of being outside.

Have you tried the anticonceal branch mentioned in the second comment?

was it implemented so it can look like vscode, jetbrains, etc. the inlay hints?

would this plugin/branch still be necessary after https://github.com/neovim/neovim/pull/23984 ?
I'm curious what other feature will this plugin add that core does not have?
btw it's been great using this plugin so far, thanks a lot for putting this together

I'm curious what other feature will this plugin add that core does not have?

The feature I looked for is displaying inlay hints for current line only. And that is not possible with neovim core yet.

Tested and works with lua, cpp, TS with anticonceal, was not successful with rust, anyone else got it working ?
EDIT: should probably state the issue, nothing is showing at all with the anticonceal branch everything works fine on master.

Same issue with https://github.com/mrcjkb/rustaceanvim : with the main branch, I only get hints at the end of the line. With anticonceal, I get nothing, even when I modify the file.
See my dotfiles here, my plugin config here and my rust config here.

@nicos68 You can try the recently-added vim.lsp.inlayhint feature in nightly (0.10 dev) neovim. As 0.10 is coming soon (possibly April), this project will likely be archived before long. For reference, you can use this to enable the feature automatically:
vim.api.nvim_create_autocmd('LspAttach', {
    group = vim.api.nvim_create_augroup('UserLspConfig', {}),
    callback = function(ev)
        local client = vim.lsp.get_client_by_id(ev.data.client_id)
        if client.server_capabilities.inlayHintProvider and vim.lsp.inlay_hint then
            vim.lsp.inlay_hint.enable(ev.buf, true)
        end
    end,
)

because I don’t want to bother building neovim myself
Yeah, that's exactly my thought when I first saw this feature being developed in nightly versions and couldn't wait to try it out, but then I found that they release a development build every day using github actions! I am actually using the appimage I downloaded a few month ago.
I thought the goal of this plugin was to bring inlay hints for pre-0.10 neovim, is it not the case ?
Exactly! It's just that, from my experience, trying nightly is the easiest way to get this fantastic feature!


flask out of memory

use Flask create an app in manage.py and register blueprint.
In back_controller, ping_test return a simple dict and memory_test show memory usage with pyhon gc module.
In test_interface, for loop request multiple times, and memory out happed.

structure
manage.py
common.py
back_controller.py
test_interface.py
first memory usage detail
last memory usage detail
pip list

Posting code as images is rude. If there's an actual issue, create a minimal reproducer repo. WITHOUT your data science stack.


Predicate only when annotation is true

Plus, refactoring to add annotations to If and For exprs.
This change means predication will never be applied to code that doesn't have the annotation -- I don't think this breaks backwards-compatibility since predication is turned off by default anyway, but let me know.

Looks good to me.
Can you also add an end-to-end test similar to this, but with an if condition that both has and doesn't have the predicate annotation?

@deepakn94 ptal

LGTM, ship it! (Use the squash and merge option)

(Wait for tests on Travis to pass first)