Smooth union,  diff. and inter. only handles two shapes

Can this be solved by recursively smin a list of shapes?
I'm thinking
Smin_recursive equals
smin the lists first element with the
Smin_recursive of the lists tail.

If you try to combine 3 shapes using smooth union, the order in which you combine them matters, and the results are not symmetrical, which looks bad. That's the problem I want to solve. I want an n-ary smooth union operation which is commutative and associative: you get the same results regardless of how the shapes are ordered.
Here's what the current situation looks like (smooth union of 3 circles). Try the following program:
let
blend3 n (s1,s2,s3) = smooth n .union (s1, smooth n .union (s2, s3));
circles = [for (a in 0..<tau by tau/3) circle 1 >> move [1,0,0] >> rotate a];

in
union (
    blend3 1.27 circles,
    union circles >> colour black
)

The two circles on the left are blended together first, and then the result is blended with the right circle. Notice that the output is not radially symmetrical.

@doug-moen Do you have an idea of what the commutative and associative version it should look like when applied in this example? I tried to think about it a bit and I don't :-)

The underlying problem is that the smooth_min function is not distributive. If we define smin3 like this:
let
blend3 k (s1,s2,s3) =
    make_shape {
        dist p : smin3(s1.dist p, s2.dist p, s3.dist p, k),
        bbox : [ min(s1.bbox[MIN], s2.bbox[MIN], s3.bbox[MIN]),
                 max(s1.bbox[MAX], s2.bbox[MAX], s3.bbox[MAX]) ],
        is_2d : s1.is_2d && s2.is_2d && s3.is_2d,
        is_3d : s1.is_3d && s3.is_3d && s3.is_3d,
    };
smin3(a,b,c,k) = smooth_min(a,smooth_min(b,c,k),k);
circles = [for (a in 0..<tau by tau/3) circle 1 >> move [1,0,0] >> rotate a];

in
union (
    blend3 1.27 circles,
    union circles >> colour black
)

then we get the same result as above. To solve the problem, we need to start by finding a clever implementation of smin3 that gives the same result, regardless of the order the a, b, c arguments.

I have an idea about how to bend Inigo Quilez's exponential smin to support more than two arguments...
Oh well, now I have to install curv to try it :-)

We'll start by visualizing the min function.
union(
    everything >> colour white,
    make_shape {
        dist(a,b,z,t) = min(a,b);
        is_2d = true;
    } >> colour black)
>> show_axes

The min function is <= 0 whenever either of its arguments is <= 0. If you interpret this as a distance function, it's an infinite shape that covers all of 2D space, except for the positive X,Y quadrant.

Now let's visualize the smooth_min function: smooth_min(x,y,r). This is just like the min function, except that a fillet of radius r has been added to smooth out the sharp corner where the X and Y axes meet.
let
r = 1;

in
union(
    everything >> colour white,
    make_shape {
        dist(x,y,z,t) = smooth_min(x,y,r);
        is_2d = true;
    } >> colour black)

In order to generalize this to 3 dimensions, first consider the 3D min function: min(x,y,z). This is a distance function that covers all of 3 dimensional space, except for the positive X,Y,Z octant.
Next, consider the 3D smooth min function: smin3(x,y,z,r). This is just like the 3D min function. except that in the positive X,Y,Z octant, we have applied fillets of radius r all along the positive X, Y and Z axes. At the origin, all 3 fillets should meet to form an eighth-of-a-sphere shape (the analog of the quarter circle shape seen in the 2D case).

... i can't install it due to some compiler problems.
What I meant was to dismantle the exponential smin into its two parts: float res = exp( -k*a ) + exp( -k*b ); and return -log( res )/k; and make use of the commutative and associative addition in the first half like this: float res = sum(exp(-k*a) for a in inputs); (if you forgive the python syntax :-) )
If this didn't work, my second try would be float res = sum(exp(-k*a) for a in inputs) / len(inputs);.

Case 1: one or none of a, b, c... n is smaller than r. - > classic union.
Case 2: two or more of a, b, c... n is less than r. In the n-dimentional
corner.
Here there may be a need to special-case every combination of two corners,
three corners up to n corners. But my guess is that simply truncate all
values larger than r to r and translate to the origo .
From there   it's easy to think that the distance would be something like r
minus mag(a, b, c... n) but if i remember radi in hyper dimensions there
are some caveats.
On Mon, 7 May 2018, 15:50 Doug Moen<EMAIL_ADDRESS>wrote:

In order to generalize this to 3 dimensions, first consider the 3D min
function: min(x,y,z). This is a distance function that covers all of 3
dimensional space, except for the positive X,Y,Z octant.
Next, consider the 3D smooth min function: smin3(x,y,z,r). This is just
like the 3D min function. except that in the positive X,Y,Z octant, we
have applied fillets of radius r all along the positive X, Y and Z axes.
At the origin, all 3 fillets should meet to form an eighth-of-a-sphere
shape (the analog of the quarter circle shape seen in the 2D case).
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/doug-moen/curv/issues/15#issuecomment-387071021, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AKcAaXVOBTen_oFIEvhlhsmrKuVXK2B_ks5twFE_gaJpZM4T0osw
.

One more special property of smooth_min that I should mention.
If you visualize smooth_min(x,y,r) as a distance field,
let
r = 1;

in
make_shape {
    dist(x,y,z,t) = smooth_min(x,y,r);
    is_2d = true;
}
>> show_dist

Then you see that it is not a Euclidean distance field. The fillet of radius r is repeated endlessly without changing its radius. This is important. If a Euclidean version is used, then when 2 shapes are blended, the result is not guaranteed to be be Lipschitz(1), and sphere-tracing does not render the blend correctly. That is why "something like r minus mag(a, b, c... n)" will not give the desired results.

I had some too. warnings was treated as errors??? Maybe you got something
else.
On Mon, 7 May 2018, 16:00 Kuba Marek<EMAIL_ADDRESS>wrote:

... i can't install it due to some compiler problems.
What I meant was to dismantle the exponential smin into its two parts: float
res = exp( -ka ) + exp( -kb ); and return -log( res )/k; and make use
of the commutative and associative addition in the first half like this: float
res = sum(exp(-k*a) for a in inputs); (if you forgive the python syntax
:-) )
If this didn't work, my second try would be float res = sum(exp(-k*a) for
a in inputs) / len(inputs);.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/doug-moen/curv/issues/15#issuecomment-387073805, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AKcAaZtFk8rwbes1iG3gE5eixHbJQBLjks5twFNfgaJpZM4T0osw
.

for the black circles example i get this:
looks like nested sminr produce expected results but
I'm just not sure how to make smin3(a,b,c,k) recurse over a longer list  smin3(list,k)
let
sminr( x,y,r) =        if ( (x< r  && y<r )   )       r-mag(x-r,y-r)
    else  min(x,y) ;
blend3 k (s1,s2,s3) =
    make_shape {
        dist p : smin3(s1.dist p, s2.dist p, s3.dist p, k),
        bbox : [ min(s1.bbox[MIN], s2.bbox[MIN], s3.bbox[MIN]),
                 max(s1.bbox[MAX], s2.bbox[MAX], s3.bbox[MAX]) ],
        is_2d : s1.is_2d && s2.is_2d && s3.is_2d,
        is_3d : s1.is_3d && s3.is_3d && s3.is_3d,
    };
smin3(a,b,c,k) = sminr(a,sminr(b,c,k),k);
circles = [for (a in 0..<tau by tau/3) circle 1 >> move [1,0,0] >> rotate a];

in
union (
    blend3 1.27 circles,
    union circles >> colour black
)

@TLC123: There is a problem with your sminr function, when it is used for blending shapes. The problem is that the blended distance field overestimates the distance to the surface of the shape. This is most evident when unioning two shapes that meet at an angle > 90 degrees. And this, in turn, causes the 3D previewer (which uses sphere-tracing) to not render correctly. There are visual artifacts: the shape seems to deform as you rotate it.
The distance field debugger displays purple or red in areas where the distance field is bad. (If you substitute smooth_min for sminr in the definition of blend below, then the problem goes away.)
let
sminr(x,y,r) = if (x<r && y<r) r-mag(x-r,y-r) else min(x,y);
blend k (s1,s2) =
    make_shape {
        dist p : sminr(s1.dist p, s2.dist p, k),
        bbox : [ min(s1.bbox[MIN], s2.bbox[MIN]),
                 max(s1.bbox[MAX], s2.bbox[MAX]) ],
        is_2d : s1.is_2d && s2.is_2d,
        is_3d : s1.is_3d && s2.is_3d,
    };

in
blend .5 (
    rect(1,5),
    rect(1,5) >> rotate(10*deg),
)
>> show_dist

For reference, here is Inigo Quilez's polynomial smooth min, which I currently use as smooth_min:
smooth_min(a,b,k) =
    let h = clamp( 0.5+0.5*(b-a)/k, 0, 1 );
    in lerp( b, a, h ) - k*h*(1.0-h);

And here is Dave Smith's soft min, which is exactly the same function as smooth min, but implemented using a different algorithm, which I think might be faster.
// credit: Dave Smith @ Media Molecule
// http://media.lolrus.mediamolecule.com/AlexEvans_SIGGRAPH-2015.pdf
// Same distance field as IQ's smooth polynomial min.
let
soft_min(a, b, r) =
    let e = max(r - abs(a - b), 0);
    in min(a, b) - e*e*0.25/r;

I find soft_min easier to work with. I used it as the basis for implementing chamfer.
So, I was planning to spend time contemplating these two functions, and figure out how to generalize one of them to 3D. Once the 3D case is solved, then generalize to N-D.

Thanks for shedding light on these challenges.
Intuitively i first thought that knowing the  gradient normal would be
very helpful for finding  the correct rounding, reducing the rounding if
gradients where co-planar and so on.
On Mon, May 7, 2018 at 6:53 PM Doug Moen<EMAIL_ADDRESS>wrote:

For reference, here is Inigo Quilez's polynomial smooth min, which I
currently use as smooth_min:
smooth_min(a,b,k) =
let h = clamp( 0.5+0.5*(b-a)/k, 0, 1 );
in lerp( b, a, h ) - kh(1.0-h);
And here is Dave Smith's soft min, which is exactly the same function as
smooth min, but implemented using a different algorithm, which I think
might be faster.
// credit: Dave Smith @ Media Molecule
// http://media.lolrus.mediamolecule.com/AlexEvans_SIGGRAPH-2015.pdf
// Same distance field as IQ's smooth polynomial min.
let
soft_min(a, b, r) =
let e = max(r - abs(a - b), 0);
in min(a, b) - ee0.25/r;
I find soft_min easier to work with. I used it as the basis for
implementing chamfer.
So, I was planning to spend time contemplating these two functions, and
figure out how to generalize one of them to 3D. Once the 3D case is solved,
then generalize to N-D.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/doug-moen/curv/issues/15#issuecomment-387129752, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AKcAaZtAywGzGMt7MVAm6zIMKjV7V_3Oks5twHwdgaJpZM4T0osw
.

"Can this be solved by recursively smin a list of shapes?"
Yes!
Smin_recursive equals
->sort the list of distances in  ascending or descending order.
smin the lists first element with the
Smin_recursive of the lists tail.
Works fine in my unfinished openscad polygonizer. Images here:

Parts of the code i used:
function evalv(p)=
max(
abs(p.z)-0.7,
let(r=6,hr=r/2)
minRlist([
tube(p+[sin(0)*r,cos(0)*r,0],hr),
tube(p+[sin(120)*r,cos(120)*r,0],hr),
tube(p+[sin(240)*r,cos(240)*r,0],hr),
tube(p+[sin(60)*r,cos(60)*r,0],hr),
tube(p+[sin(180)*r,cos(180)*r,0],hr),
tube(p+[sin(300)*r,cos(300)*r,0],hr)
]
,1)
);

function minRlist(l,r)=minRlistworker(  (quicksort(l)),len(l)-1,r) ;
function minRlistworker(l,c,r)=c>0? minR(minRlistworker(l,c-1,r), l[c], r) : l[0]  ;

function quicksort(kvs) =
  len(kvs)>0
     ? let(
         pivot   = kvs[floor(len(kvs)/2)],
         lesser  = [ for (y = kvs) if (y  < pivot) y ],
         equal   = [ for (y = kvs) if (y == pivot) y ],
         greater = [ for (y = kvs) if (y  > pivot) y ] )
          concat( quicksort(lesser), equal, quicksort(greater))
      : [];

 function minR(d1, d2, r = 1) = r > 0 ?
 let (m = min(d1, d2))(abs(d1) < abs(r) && abs(d2) < abs(r)) || (d1 <
 r && d2 < r) ? min(m, r - norm([r - d1, r - d2])) : m : let (m =
 min(d1, d2), rr = -r)(d1 < rr && d2 < rr) ? min(m, norm([d1, d2]) -
 rr) : m;

Thanks for pushing this forward. I need to try this in Curv.
A question. You said "sort the list of distances in ascending or descending order.
smin the lists first element with the Smin_recursive of the lists tail."
Is the result different, depending on whether you sort in ascending or descending order?
The code you wrote won't be accepted by the Curv geometry compiler--for one thing, recursive functions are illegal on the GPU, and the compiler has other limitations as well. But, fun fact: if you export to STL and you don't use the JIT compiler, then the geometry compiler won't be invoked, so the OpenSCAD code with the recursive quicksort will probably work in Curv under that scenario. So I might try to get your code working first using STL export, using MeshLab to visualize the result.
If I succeed with STL export, then getting it working on the GPU is the next step, but will require more work.

Got me stumped there for a while on the pure-functional non-recursive sorting algorithm. That's a hard nut to crack. But then i remember that the do operation makes it easier to iterated sort.
ascending or descending should intuitively make some difference when more than two distances are within the smooth radious.
For a fast and loose version maybe its enougth to find the three or four smallest distances and in line the nested smin's.
D1=min(list, largerthan=0)
D2=min(list, largerthan=D1)
D3=min(list, largerthan=D2)
D4=min(list, largerthan=D3)


added digiMIN build tag to thirdparty.bin

Since this bin is missing several features like Autodiscovery I wanted it to be easy to spot for support tickets that the user wasn't running the full sonoff.bin version

Will find a tester or two..

Awesome. Will await confirmation from two or more.

I've just flashed on this on three of the five Medion S85225s that I was Tasmota-frying(?), and it seems fine. The only reason I didn't put it on all five was I was flashing the second one when I realised the updated file was up ;)

I can also report that the latest version of the repo code is working great on a Raspberry Pi 3B+ running a freshly written 2019-07-10-raspbian-buster-lite.img image. No errors during the pre-req install stage - from pip3 or otherwise. Only needed to install git to start with ;)
https://pastebin.com/and0KaN5

I can confirm this bin file works great! just like expected.

Thank you Colin and Digiblur!
[-=SrZ=-]

@pfeerick @sirredz thanks for the tests!


pull: operating on subdirectory of unpulled directory shows erraneous "file doesn't exist"

While working on my ECE315 Lab 5, as a followup of https://github.com/odeke-em/drive/issues/898
where Lab5 hasn't yet been pulled, I went into Lab5, and ran
$ drive pull first

but alas I got this buggy response
$ drive pull first
Resolving...
 \
'/ENGINEERING/WINTER2017/ECE315Lab/Lab5/first' aka<EMAIL_ADDRESS>doesn't exist locally nor remotely

yet first exists
$ drive list --long
ds writer      0.00B     	0Bzl5XN67fKb5VF9Ha2FJVU5UY3M		2017-03-29 23:09:51 +0000 UTC	/ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17
ds writer      0.00B     	0Bzl5XN67fKb5cUNwME14TWpTMEE		2017-03-29 23:09:30 +0000 UTC	/ENGINEERING/WINTER2017/ECE315Lab/Lab5/first

How Sway??? https://www.youtube.com/watch?v=PQoM94bgWpQ How??
The work around this was pulling by id ie
$ drive pull --id 0Bzl5XN67fKb5cUNwME14TWpTMEE
Resolving...
+ /ENGINEERING/WINTER2017/ECE315Lab/Lab5/first
+ /ENGINEERING/WINTER2017/ECE315Lab/Lab5/first/AD.h
+ /ENGINEERING/WINTER2017/ECE315Lab/Lab5/first/AD.cpp
+ /ENGINEERING/WINTER2017/ECE315Lab/Lab5/first/Stepper.h
+ /ENGINEERING/WINTER2017/ECE315Lab/Lab5/first/Keypad.h
+ /ENGINEERING/WINTER2017/ECE315Lab/Lab5/first/point.h
+ /ENGINEERING/WINTER2017/ECE315Lab/Lab5/first/LCD.h
+ /ENGINEERING/WINTER2017/ECE315Lab/Lab5/first/formdata.h
+ /ENGINEERING/WINTER2017/ECE315Lab/Lab5/first/lab5.cpp
+ /ENGINEERING/WINTER2017/ECE315Lab/Lab5/first/Stepper.cpp
+ /ENGINEERING/WINTER2017/ECE315Lab/Lab5/first/formdata.cpp
+ /ENGINEERING/WINTER2017/ECE315Lab/Lab5/first/LCD.cpp
+ /ENGINEERING/WINTER2017/ECE315Lab/Lab5/first/Keypad.cpp
+ /ENGINEERING/WINTER2017/ECE315Lab/Lab5/first/formcode.cpp
Addition count 14 src: 39.92KB
Proceed with the changes? [Y/n]:y
 40874 / 40874 [==============================================================================================================================] 100.00% 3s

This is an annoying bug.

And it gets worse, after using the workaround of pulling by id and then pulling by the name itself
now creates a need to delete
$ drive pull 3.29.17
Resolving...
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/html
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/html/Keypad1.bmp
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/html/Keypad15.bmp
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/html/Keypad8.bmp
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/html/Keypad_empty.bmp
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/html/BarGraph11.bmp
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/html/BarGraph5.bmp
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/html/BarGraph6.bmp
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/html/BarGraph4.bmp
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/html/Keypad3.bmp
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/html/BarGraph8.bmp
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/html/BarGraph12.bmp
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/html/BarGraph2.bmp
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/html/BarGraph3.bmp
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/html/BarGraph10.bmp
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/html/Keypad6.bmp
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/html/Keypad9.bmp
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/html/BarGraph1.bmp
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/html/BarGraph7.bmp
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/html/Keypad12.bmp
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/html/Keypad7.bmp
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/html/index.htm
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/html/Keypad10.bmp
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/html/Keypad14.bmp
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/html/Keypad4.bmp
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/html/BarGraph0.bmp
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/html/Keypad0.bmp
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/html/Keypad13.bmp
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/html/Keypad5.bmp
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/html/BarGraph9.bmp
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/html/Keypad11.bmp
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/html/Keypad2.bmp
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/AD.cpp
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/Keypad.cpp
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/LCD.h
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/formdata.cpp
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/formdata.h
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/LCD.cpp
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/Stepper.cpp
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/bitmaps.h
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/formcode.cpp
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/error_wrapper.h
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/AD.h
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/Keypad.h
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/Release
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/Release/lab5.map
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/Release/Keypad.o
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/Release/lab5_APP.s19
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/Release/formcode.o
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/Release/htmldata.cpp
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/Release/lab5.elf
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/Release/lab5.o
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/Release/AD.o
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/Release/LCD.o
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/Release/formdata.o
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/Release/htmldata.o
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/Release/lab5.s19
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/Release/main.o
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/Release/Stepper.o
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/Release/error_wrapper.o
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/Stepper.h
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/error_wrapper.cpp
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/lab5.cpp
- /ENGINEERING/WINTER2017/ECE315Lab/Lab5/3.29.17/point.h
Deletion count 65 dest: 17.23MB
Proceed with the changes? [Y/n]:n

Really HOW SWAY??
Unfortunately am currently winding up the semester so I have a crap tonne of lab reports, assignments due on Wednesday at 2PM and then an exam on Thursday night, the assignments due on Friday evening, spilling over to next Wednesday 12th April 2017, but it would be nice to fix this bug.
Also in the summer, I'd like to get full integration and unit tests all written in Go, that way we can avoid such regressions.

False alarm on my part https://github.com/odeke-em/drive/issues/898#issuecomment-291668774


CSS grid support

Hey, I'm going to submit a PR with some CSS grid values that are currently not supported.
One minor problem that needs to be decided on before I do so is if it should be a breaking change or not, but as a consequence not give compile time errors for the difference between flex and grid.
The problem is that both Flex and CSS grid use the align-items key to tell how to align items within a grid or flex container.
For flex box the valid values for this property are:
normal;
stretch;
center;
start;
end;
flex-start;
flex-end
self-start;
self-end;
baseline;
first baseline;
last baseline;
safe center;
unsafe center;
inherit;
initial;
unset;

But for grid they are just a subset of these
auto
normal
start
end
center
stretch
baseline
first baseline
last baseline

Should grid just not have the same compile time guarantees and just add the missing fields for that. Or should the user specify that its using Flex by doing something like alignItems(`flex(`flexEnd))?
I'm leaning towards non compile guarantees since the CSS grid properties are just a subset of flex (apart from auto), but at the same time it breaks the contract of typesafe CSS in the library.
All thoughts greatly appreciated. I'm really torn here 😄

After some discussion with co-workers I feel like the right way forward is to have this as a breaking change to support compile time errors

Another potential approach would be to deprecate (with deprecation warning for some time) alignSelf in favour of flexAlignSelf and gridAlignSelf which would then have the corresponding values. It breaks one to one mapping of css values, but so does margin2 for example.
I actually think this could be the best solution, it doesn't break backwards compatibility in the next version and gives people some time to migrate.


[DataComp] Add cluster component

This PR adds a cluster component to the DataComp pipeline.
It leverages sklearn's mini batch k-means. However I'm not sure this scales to billions of images, as for that you need a GPU.
So I guess we can also have a separate component that leverages faiss-gpu for those who have the resources.
To do:

[ ] I see that when adding a column to a subset, all existing fields currently need to be included in the fondant_component.yaml file as they otherwise aren't included anymore.
[ ] Currently I have an "image" subset with an "embedding" column. However other components consider embeddings to be a separate subset.

I see that when adding a column to a subset, all existing fields currently need to be included in the fondant_component.yaml file as they otherwise aren't included anymore.

This is indeed not working as specified. Something to fix in Fondan.

I'm not sure that the current implementation is the best approach. It basically comes down to this:
kmeans = init_kmeans()
labels = []
for partition in dataset:
    kmeans.partial_fit(partition)
    labels += kmeans.predict(partition)

Since we are updating the clusters on each partition, I don't think the labels assigned across partitions are consistent.
The algorithm I had in mind is:
kmeans = init_kmeans()
sample = dataset.sample()
kmeans = kmeans.fit(sample)
labels = []
for partition in dataset:
    labels += kmeans.predict(partition)

For which we would need to leverage the DaskTransformComponent instead.

Since we are updating the clusters on each partition, I don't think the labels assigned across partitions are consistent.

Yes that's right, actually we could have a post_transform method (similar to the setup method - we could rename setup to pre_transform for consistency) which does things after transforming the data. kmeans.predict should only happen after all mini batches are fitted. This way we would have:
kmeans = init_kmeans()
labels = []
# first fit on all partitions
for partition in dataset:
    kmeans.partial_fit(partition)

# next assign labels to all partitions
for partition in dataset:
    kmeans.predict(partition)

The algorithm that you are proposing also seems a valid option, but that's not mini batch kmeans right? That's more like subsampled k-means :D

Yes that's right, actually we could have a post_transform method (similar to the setup method - we could rename setup to pre_transform for consistency) which does things after transforming the data. kmeans.predict should only happen after all mini batches are fitted. This way we would have:
kmeans = init_kmeans()
labels = []
# first fit on all partitions
for partition in dataset:
    kmeans.partial_fit(partition)

# next assign labels to all partitions
for partition in dataset:
    kmeans.predict(partition)

The difference with .setup() is that you would need to iterate through the dataset again for this implementation of .post_transform(), which I don't think is a logical general mechanism for a component class. We can take this approach of iterating twice over the dataset using the DaskTransformComponent, but it's more expensive than what I proposed.

The algorithm that you are proposing also seems a valid option, but that's not mini batch kmeans right? That's more like subsampled k-means :D

Yes indeed, but I just shared miniBatchKMeans as an interesting resource. We don't need to use it, but figure out the best solution.

I'm not sure that the current implementation is the best approach. It basically comes down to this:
kmeans = init_kmeans()
labels = []
for partition in dataset:
    kmeans.partial_fit(partition)
    labels += kmeans.predict(partition)

Since we are updating the clusters on each partition, I don't think the labels assigned across partitions are consistent.
The algorithm I had in mind is:
kmeans = init_kmeans()
sample = dataset.sample()
kmeans = kmeans.fit(sample)
labels = []
for partition in dataset:
    labels += kmeans.predict(partition)

For which we would need to leverage the DaskTransformComponent instead.

I think this approach is a better fit. I even though about a step further.
Agree with fitting clusters on a subset and predict for each entry in each partition a specific cluster.
Afterwards, I would re-partition the DaskDataframe (with the naive hope that this can be done easily) in a way that each cluster is related to one partition. If that is possible, we can use a PandasTransformComponent to remove duplicates in each partition.

I think this approach is a better fit. I even though about a step further.
Agree with fitting clusters on a subset and predict for each entry in each partition a specific cluster.
Afterwards, I would re-partition the DaskDataframe (with the naive hope that this can be done easily) in a way that each cluster is related to one partition. If that is possible, we can use a PandasTransformComponent to remove duplicates in each partition.

I think that's indeed a good approach, but I don't think we need to split it across multiple components. If you split it up, you would end up with a PandasTransformComponent which deduplicates per partition, which might not be very reusable. Instead, I would propose a single DaskTransformComponent which does (pseudocode):
kmeans = init_kmeans()
sample = dataframe.sample()  # Dask has sample functionality
kmeans = kmeans.fit(sample)

dataframe = dataframe.apply/map_partitions(kmeans.predict)  # Call predict per row or partition

---

dataframe = dataframe.set_index(label, divisions=kmeans.labels)  # Set labels as index, pass list of labels as divisions for optimization

dataframe = dataframe.map_partitions(deduplicate)  # Deduplicate per partition (=cluster)

You could split it up at the ---, but then you wouldn't be able to pass in the kmeans labels as optimization to set_index.

Yes @RobbeSneyders I confirm that the component works.

@RobbeSneyders when running this pipeline, the final dataframe of the image subset looks as follows:
>>> df.head()
    cluster_label
id
14              0
25              1
38              2
41              0
43              2

however I'd like to just add cluster_label as additional column, keeping the existing ones. Should I change the fondant_component.yaml? The manifest.json of the cluster_embeddings component says that all these fields are still present:
{"metadata":
{"base_path": "/fondant_artifacts_datacomp",
"run_id": "Datacomp filtering pipeline-20230705140722",
"component_id": "cluster_embeddings"},

"index": {"location": "/index/Datacomp filtering pipeline-20230705140722/cluster_embeddings"},

"subsets":
{"image":
 {"location": "/image/Datacomp filtering pipeline-20230705140722/cluster_embeddings",
 "fields": {"url": {"type": "string"}, "width": {"type": "int16"}, "height": {"type": "int16"},
 "face_bboxes": {"type": "array", "items": {"type": "array", "items": {"type": "float32"}}},
 "sha256": {"type": "string"}, "embedding": {"type": "array", "items": {"type": "float32"}},
 "cluster_label": {"type": "int16"}}},

 "text": {"location": "/text/Datacomp filtering pipeline-20230705140722/load_from_hub",
 "fields": {"data": {"type": "string"}}},

 "image_text": {"location": "/image_text/Datacomp filtering pipeline-20230705140722/load_from_hub",
 "fields": {"clip_b32_similarity_score": {"type": "float32"}, "clip_l14_similarity_score":
 {"type": "float32"}}}}}


Type.GetTypeInfo() not implemented

In particular,
The external method 'System.Reflection.TypeInfo GetTypeInfo(System.Type)' of type 'System.Reflection.IntrospectionExtensions' has not been implemented.

This makes it particularly annoying as PCL's don't expose extended type information (such as the assembly, declared members, attributes, etc) as part of the standard Type class, and those properties can only be accessed from an instance of TypeInfo. I'm not too sure how to "correctly" implement this, given that it'll likely be deep in the type system used by JSIL... help would be appreciated!

As workaround for now, your could try select PCL profile that includes Silverlight (if it has enough possibilities for you). All PCL profiles that include Silverlight have full Type class.

If you want, you could try to implement it yourself in JS files. You need define TypeInfo class and pass Type inside - so that all TypeInfo members will be just proxies to Type members.
Your could also define all TypeInfo/IntrospectionExtensions members in Proxy assembly instead of in JS libraries (probably it is even better option).

I'll give it a shot.
To clarify, this is all I would need to do on the proxy side to generate the definition stubs? After that I can just implement all of the methods under ImplementExternals in the JS files? Or should I define all methods and properties in the proxy, and mark them as JSExternal, similar to the TimeSpan proxy?
[JSProxy("System.Reflection.TypeInfo", JSProxyMemberPolicy.ReplaceNone, JSProxyAttributePolicy.ReplaceDeclared, JSProxyInterfacePolicy.ReplaceNone, false)]
    [JSStubOnly]
    public class System_TypeInfo
    {
    }

Do you use stubbed or translated BCL?
I suppose that you use stubbed (if you haven't specially created your own .jsilconfig with such settings - you use stubbed). There really will be a problem - as TypeInfo is inside mscorlib and mscorlib is stubbed, even if you provide correct implementation in proxy, it still won't be translated. So, in this case you may still write proxy in Proxies.BCL assembly, than run any test case from \SimpleTestCasesForTranslatedBcl class, then open Tests\Bootstappers\BclBootstrapTranslated.cs.out and copy implementations of TypeInfo/IntrospectionExtensions  to some *.js file that you use.
Now about proxy. You will need provide real method implementation for each TypeInfo member (probably it could be done much easier if we tweak Type, so that all object will return really TypeInfo instead of Type - it should be possible to do faster, but require more knowledge about JSIL JS libraries). So, it would be something like this:
    [JSProxy(typeof(TypeInfo), JSProxyMemberPolicy.ReplaceAll, JSProxyAttributePolicy.ReplaceDeclared, JSProxyInterfacePolicy.ReplaceNone, false)]
    [JSStubOnly]
    public class System_TypeInfo
    {
        private readonly Type _type;

        [JSReplaceConstructor]
        public System_TypeInfo(Type type)
        {
            _type = type;
        }

        public virtual IEnumerable<FieldInfo> DeclaredFields
        {
            get
            {
                return _type.GetFields();
            }
        }
    }

You will also need to change Proxies.BCL to .Net 4.5.

@kg, I'm pretty sure, that right implementation will be changing all JSIL type returning methods so that they always return TypeInfo. What do you think about it?

Alright, I've implemented the proxy for TypeInfo and was able to get the generated JS code from the translated bootstrap file. When implementing the IntrospectionExtensions class, how would I create a new TypeInfo instance that has a custom constructor? The following won't work... should I use the proxy type there (System_TypeInfo) instead of TypeInfo directly?
        public static TypeInfo GetTypeInfo(Type type) {
            return new TypeInfo(type);
        }

When proxy will work as they should, you will create proxy type.
Unfortunatly now it won't work, but you can create typeinfo, cast it to
dynamic and set field value through it.
On Aug 15, 2015 10:38 AM, "Daniel Mirmilshteyn"<EMAIL_ADDRESS>wrote:

Alright, I've implemented the proxy for TypeInfo and was able to get the
generated JS code from the translated bootstrap file. When implementing the
IntrospectionExtensions class, how would I create a new TypeInfo instance
that has a custom constructor? The following won't work... should I use the
proxy type there (System_TypeInfo) instead of TypeInfo directly?
    public static TypeInfo GetTypeInfo(Type type) {
        return new TypeInfo(type);
    }

—
Reply to this email directly or view it on GitHub
https://github.com/sq/JSIL/issues/799#issuecomment-131404395.


Introduce global DSP_SHARING configs

kernel: sanitize thread options
arch: introduce DSP_SHARING and CPU_HAS_DSP configs

huh, not sure what happend here and how I got @aescolar as committer :) Git screwup on my side for sure.

Makes sense to lift this to common arch level, I think when it was added for ARC it was requested to keep it local at that time.

@nashif this needs a rebase


resolve absolute URL from Host and TLS

When it'll be checked & merged? I've this problem in  my project, based on qor.


⚠ Samsung has degraded performance

In 801bc8f, Samsung (https://samsung.com) experienced degraded performance:

HTTP code: 200
Response time: 2688 ms

Resolved: Samsung performance has improved in 17ba99b.


Watch improvements

[x] I've read the CONTRIBUTING guidelines

This is a large pull request that is the culmination of a number of month's work trying to improve the overall io and watch performance of sbt. For the most part, I've broken the commits up so that each one more or less stands on its own. I am doing it as one large pull request just because the overhead of making 20 partially dependent commits feels to high. It is linked with https://github.com/sbt/io/pull/177.
At a high level, this PR does two things:

Improve continuous builds. I made it possible to add custom trigger rules so that the user can, for example, cancel the watch if the command fails. I also fixed logging so that it should be easier to debug any bugs in the field.

Add a global in memory cache of the file system to improve incremental compilation start up times. This works well to reduce the startup time of incremental compilation. For a simple project with 5000 files, I've seen the compilation startup time drop from O(1 second) to O(200ms) (for small projects the startup time is O(50ms) where the 50ms is entirely spent in the update task to re-resolve the project). To achieve this speed up we combine the cache with the ExternalLookup in zinc so that we can bypass the io cost of hashing the source file contents. I also add a hybrid option that polls some directories and uses the regular os notifications for the remainder. This is to handle the case where, say, inotify isn't supported on a particular file system mount point (I think this may be the underlying issue with #4179 ).

I repeated the experiment in mill watch latency. With a warm jvm and if I use a resident compiler, I see O(120ms) latency between when file is modified and when compilation is complete not when it begins. Also, in my test project with 5000 files mill burns an entire cpu polling the file system while sbt sits at about 0.3% of a cpu.
Seeing as this is a large change, I expect that there may be a good amount of discussion. Wherever possible, I've tried to keep the user visible impact of this change to a minimum. Moreover, everything I've added is configurable in such a way that a user should be able to revert back to the existing behavior with a few simple modifications if there are any new issues. It is always scary to add a global cache. In this case, I think the risk is not that bad both because I added a task to flush its contents and touching a monitored directory also triggers a full rescan. At any rate, users can choose to eschew the cache via the fileTreeViewConfig key.
I also am still working on adding some more scripted tests of continuous builds. I wanted to get this out the door, but I do expect to update a few commits. I don't expect to change much of the mainline code though unless errors are discovered writing additional scripted tests.

In addition to making the requested changes from @eed3si9n, I figured out how to use jline to swap stdin to char buffered rather than line buffered which allowed me to add the feature that while in a continuous build, typing 'r' will re-run the command (see
https://github.com/sbt/sbt/pull/4335/commits/2ae593229675fd0ab7ef4e20ab5ad8314bdd8afa) .

I tacked on
https://github.com/sbt/sbt/pull/4335/commits/0a9ae7b4b49da95bcac27db8dace663b54ff7686
though I wish that I'd just gone ahead and merged first so that it could have been a separate PR.


Create trailingzero.cpp

Given an integer n, return the number of trailing zeroes in n!.
Example:-
Input: n = 3
Output: 0
Explanation: 3! = 6, no trailing zero.
Input: n = 5
Output: 1
Explanation: 5! = 120, one trailing zero.

Tag the issue this PR fixes, and Also add comments to the code, Add the time and space complexities. And don't just randomly open PRs. Please have the courtesy to go through the workflow instructions and follow it.


Chapter 16 Code has broken lighting

Describe the bug
Chapter 16 Code has broken lighting
To Reproduce
Steps to reproduce the behavior:

Chapter '16'
Run Main
Move mouse from left to right
See wrong behavior

Expected behavior
Lighting to not move as the camera moves
Screenshots
https://user-images.githubusercontent.com/25501603/235062675-b9160d21-889d-4ec0-bd17-04fcccb91f9d.mp4
Please complete the following information):

OS: Windows 11
GPU: Nvidia RTX 2070 SUPER
Java version 19 (Adoptium)

Additional context
N/A

more updates: this is a very rare bug and ive only had it twice somehow. Not worth fixing

Hi hYdos, I did not have the chance to look at it carefully. But it seems that you experienced a problem of resolution. Sometims due to inevitable acuracies of the shadow map method, some flickering oiccurs (float point incauracies, shadow map resolution, etc..). There are some methods to aleviate this and one of them may be to not recalculate shadow map eachframe (I think this is mentioned in the boook, which by the way is also good for perfomance reasons). In any case, please keep in mind that the goal is not provide a full 3D engine but to show some techniques. Shadows are always a tricky issue that it is very complex to perefectly adress in any situation.
In any case, feel free to contact me about this here or through LWJGL discord channel whenever you want.

I do sadly have to redraw shadows in my scene I do have entities which move around and are all animated thats nonviable. Do you think I can improve on the accuracy in some way? Though I dont see how precision or map resolution would cause the entire shadow to move, I would expect a few pixels or lines to shift

I think, after thinking about the screen shots you posted that the problem may be due to z fighting with the depth map (not tested so pick this with a grain of salt). Thinking out loud, you may have two depth maps, one for static meshes and one for animated ones. You would only recalculate the animated one each frame and pick the minimum value.  The drawback is that you need to perform to texture lookups. Anothe approach would be to use a RG image to store depth avlues for those types of meses so you only need to do a texture lookup. You would only render the "G" channel per frame (I don't know if you can just delete one channel). You can maintain the original approach and only recalculate if the animated model has changed (I don't know if such thing is possible in your model). I hope it helps. Another thing that you may play with is with the shadow bias for far models (maybe you need to set up different values per shadow cascade).
As I said, shadows are tricky. I always start to sweat when I found an issue...

any ideas help thanks


Adding extensions API support

Docs Build status updates of commit 3e2e37c:
:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

microsoft-edge/extensions-chromium/developer-guide/api-support
:white_check_mark:Succeeded

For more details, please refer to the build report.
Note: Broken links written as relative paths are included in the above build report. For broken links written as absolute paths or external URLs, see the broken link report.
For any questions, please:Try searching in the Docs contributor and Admin GuideSee the frequently asked questionsPost your question in the Docs support channel

Docs Build status updates of commit 07feb61:
:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

microsoft-edge/extensions-chromium/developer-guide/api-support.md
:bulb:Suggestion
View
Details

microsoft-edge/toc.yml
:white_check_mark:Succeeded
View

microsoft-edge/extensions-chromium/developer-guide/api-support.md

Line 2, Column 14: [Suggestion-duplicate-descriptions] Attribute 'description' with value 'The process of distributing extension by mechanism other than verified stores' is duplicated in 'extensions-chromium/developer-guide/alternate-distribution-options.md(2,14)', 'extensions-chromium/developer-guide/api-support.md(2,14)'. NOTE: This Suggestion will become a Warning on 1/29/21.
Line 3, Column 8: [Suggestion-duplicate-titles] Title 'Extensions - Supported APIs - Microsoft Edge Development' is duplicated in: 'extensions/api-support/supported-apis.md(3,8), extensions-chromium/developer-guide/api-support.md(3,8)'. Titles must be unique within a docset.
Line 13, Column 1: [Suggestion-duplicate-h1s] H1 'API support' is duplicated with other articles: 'extensions/api-support.md(13,1), extensions-chromium/developer-guide/api-support.md(13,1)'. First level headings must be unique within a docset. NOTE: This Suggestion will become a Warning on 1/29/21.

For more details, please refer to the build report.
Note: Broken links written as relative paths are included in the above build report. For broken links written as absolute paths or external URLs, see the broken link report.
For any questions, please:Try searching in the Docs contributor and Admin GuideSee the frequently asked questionsPost your question in the Docs support channel

Docs Build status updates of commit 2a72214:
:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

microsoft-edge/extensions-chromium/developer-guide/api-support.md
:bulb:Suggestion
View
Details

microsoft-edge/toc.yml
:white_check_mark:Succeeded
View

microsoft-edge/extensions-chromium/developer-guide/api-support.md

Line 2, Column 14: [Suggestion-duplicate-descriptions] Attribute 'description' with value 'The process of distributing extension by mechanism other than verified stores' is duplicated in 'extensions-chromium/developer-guide/alternate-distribution-options.md(2,14)', 'extensions-chromium/developer-guide/api-support.md(2,14)'. NOTE: This Suggestion will become a Warning on 1/29/21.
Line 3, Column 8: [Suggestion-duplicate-titles] Title 'Extensions - Supported APIs - Microsoft Edge Development' is duplicated in: 'extensions/api-support/supported-apis.md(3,8), extensions-chromium/developer-guide/api-support.md(3,8)'. Titles must be unique within a docset.
Line 13, Column 1: [Suggestion-duplicate-h1s] H1 'API support' is duplicated with other articles: 'extensions/api-support.md(13,1), extensions-chromium/developer-guide/api-support.md(13,1)'. First level headings must be unique within a docset. NOTE: This Suggestion will become a Warning on 1/29/21.

For more details, please refer to the build report.
Note: Broken links written as relative paths are included in the above build report. For broken links written as absolute paths or external URLs, see the broken link report.
For any questions, please:Try searching in the Docs contributor and Admin GuideSee the frequently asked questionsPost your question in the Docs support channel

Docs Build status updates of commit beb3586:
:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

microsoft-edge/extensions-chromium/developer-guide/api-support.md
:bulb:Suggestion
View
Details

microsoft-edge/toc.yml
:white_check_mark:Succeeded
View

microsoft-edge/extensions-chromium/developer-guide/api-support.md

Line 2, Column 14: [Suggestion-duplicate-descriptions] Attribute 'description' with value 'The process of distributing extension by mechanism other than verified stores' is duplicated in 'extensions-chromium/developer-guide/alternate-distribution-options.md(2,14)', 'extensions-chromium/developer-guide/api-support.md(2,14)'. NOTE: This Suggestion will become a Warning on 1/29/21.
Line 3, Column 8: [Suggestion-duplicate-titles] Title 'Extensions - Supported APIs - Microsoft Edge Development' is duplicated in: 'extensions/api-support/supported-apis.md(3,8), extensions-chromium/developer-guide/api-support.md(3,8)'. Titles must be unique within a docset.
Line 13, Column 1: [Suggestion-duplicate-h1s] H1 'API support' is duplicated with other articles: 'extensions/api-support.md(13,1), extensions-chromium/developer-guide/api-support.md(13,1)'. First level headings must be unique within a docset. NOTE: This Suggestion will become a Warning on 1/29/21.

For more details, please refer to the build report.
Note: Broken links written as relative paths are included in the above build report. For broken links written as absolute paths or external URLs, see the broken link report.
For any questions, please:Try searching in the Docs contributor and Admin GuideSee the frequently asked questionsPost your question in the Docs support channel

Docs Build status updates of commit c8d905b:
:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

microsoft-edge/extensions-chromium/developer-guide/api-support.md
:bulb:Suggestion
View
Details

microsoft-edge/toc.yml
:white_check_mark:Succeeded
View

microsoft-edge/extensions-chromium/developer-guide/api-support.md

Line 2, Column 14: [Suggestion-duplicate-descriptions] Attribute 'description' with value 'The process of distributing extension by mechanism other than verified stores' is duplicated in 'extensions-chromium/developer-guide/alternate-distribution-options.md(2,14)', 'extensions-chromium/developer-guide/api-support.md(2,14)'. NOTE: This Suggestion will become a Warning on 1/29/21.
Line 3, Column 8: [Suggestion-duplicate-titles] Title 'Extensions - Supported APIs - Microsoft Edge Development' is duplicated in: 'extensions/api-support/supported-apis.md(3,8), extensions-chromium/developer-guide/api-support.md(3,8)'. Titles must be unique within a docset.
Line 13, Column 1: [Suggestion-duplicate-h1s] H1 'API support' is duplicated with other articles: 'extensions/api-support.md(13,1), extensions-chromium/developer-guide/api-support.md(13,1)'. First level headings must be unique within a docset. NOTE: This Suggestion will become a Warning on 1/29/21.

For more details, please refer to the build report.
Note: Broken links written as relative paths are included in the above build report. For broken links written as absolute paths or external URLs, see the broken link report.
For any questions, please:Try searching in the Docs contributor and Admin GuideSee the frequently asked questionsPost your question in the Docs support channel

Docs Build status updates of commit 55532b8:
:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

microsoft-edge/extensions-chromium/developer-guide/api-support.md
:white_check_mark:Succeeded
View

microsoft-edge/toc.yml
:white_check_mark:Succeeded
View

For more details, please refer to the build report.
Note: Broken links written as relative paths are included in the above build report. For broken links written as absolute paths or external URLs, see the broken link report.
For any questions, please:Try searching in the Docs contributor and Admin GuideSee the frequently asked questionsPost your question in the Docs support channel

@Reezaali  updated the PR with the unsupported APIs list

Docs Build status updates of commit e43d538:
:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

microsoft-edge/extensions-chromium/developer-guide/api-support.md
:white_check_mark:Succeeded
View

microsoft-edge/toc.yml
:white_check_mark:Succeeded
View

For more details, please refer to the build report.
Note: Broken links written as relative paths are included in the above build report. For broken links written as absolute paths or external URLs, see the broken link report.
For any questions, please:Try searching in the Docs contributor and Admin GuideSee the frequently asked questionsPost your question in the Docs support channel

Docs Build status updates of commit 5736d2a:
:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

microsoft-edge/extensions-chromium/developer-guide/api-support.md
:white_check_mark:Succeeded
View

microsoft-edge/toc.yml
:white_check_mark:Succeeded
View

For more details, please refer to the build report.
Note: Broken links written as relative paths are included in the above build report. For broken links written as absolute paths or external URLs, see the broken link report.
For any questions, please:Try searching in the Docs contributor and Admin GuideSee the frequently asked questionsPost your question in the Docs support channel

Docs Build status updates of commit da6a5d3:
:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

microsoft-edge/extensions-chromium/developer-guide/api-support.md
:white_check_mark:Succeeded
View

microsoft-edge/toc.yml
:white_check_mark:Succeeded
View

For more details, please refer to the build report.
Note: Broken links written as relative paths are included in the above build report. For broken links written as absolute paths or external URLs, see the broken link report.
For any questions, please:Try searching in the Docs contributor and Admin GuideSee the frequently asked questionsPost your question in the Docs support channel

Docs Build status updates of commit 344a3be:
:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

microsoft-edge/extensions-chromium/developer-guide/api-support.md
:white_check_mark:Succeeded
View

microsoft-edge/toc.yml
:white_check_mark:Succeeded
View

For more details, please refer to the build report.
Note: Broken links written as relative paths are included in the above build report. For broken links written as absolute paths or external URLs, see the broken link report.
For any questions, please:Try searching in the Docs contributor and Admin GuideSee the frequently asked questionsPost your question in the Docs support channel

@Reezaali The documentation looks good from my end and ready to be published.

Docs Build status updates of commit 127add1:
:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

microsoft-edge/extensions-chromium/developer-guide/api-support.md
:white_check_mark:Succeeded
View

microsoft-edge/toc.yml
:white_check_mark:Succeeded
View

For more details, please refer to the build report.
Note: Broken links written as relative paths are included in the above build report. For broken links written as absolute paths or external URLs, see the broken link report.
For any questions, please:Try searching in the Docs contributor and Admin GuideSee the frequently asked questionsPost your question in the Docs support channel

#sign-off and merged.


Text Field loses focus when navigating back by triggering key events

Steps to reproduce

Create three text fields on home page
Create one field on second page
Run project in flutter web
Click on Second Field in home page
Press Enter to navigate to second page
Press Escape to return to previous page
Click on First Field in home page
Press F2 to navigate to second page
Press Escape to return to previous page

Expected results
First Text Field should have kept its focus
Insights that might help

Works as expected if KeyboardListener from Home is removed
Works as expected if 4,5,6 steps are not followed
Works as expected in Flutter v3.10.6

Actual results
First Text Field loses focus
Facing this issue in Flutter web (v3.22.2)
Code sample
Code sample
Future<void> main() async {
  runApp(MaterialApp(
    initialRoute: "/",
    routes: {
      "/": (context) => const Home(),
      "/secondPage": (context) => const SecondPage(),
    },
  ));
}

class ChooseIntent extends Intent{}

class Home extends StatefulWidget {
  const Home({super.key});

  @override
  State<Home> createState() => _HomeState();
}

class _HomeState extends State<Home> {

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text("Flutter v3.22.2"),
      ),
      body: KeyboardListener(
        focusNode: FocusNode(),
        onKeyEvent: (event){},
        child: Center(
          child: Padding(
            padding: const EdgeInsets.all(8.0),
            child: Column(
              children: [
                Shortcuts(
                  shortcuts: {
                    LogicalKeySet(LogicalKeyboardKey.f2) : ChooseIntent()
                  },
                  child: Actions(
                    actions: {
                      ChooseIntent : CallbackAction<ChooseIntent>(onInvoke: (intent) async {
                        Navigator.pushNamed(context, "/secondPage");
                        return null;
                      })
                    },
                    child: TextFormField(
                      decoration: const InputDecoration(hintText: "First Field", labelText: "First Field"),
                    ),
                  ),
                ),
                TextFormField(
                  textInputAction: TextInputAction.next,
                  decoration: const InputDecoration(hintText: "Second Field", labelText: "Second Field"),
                  onFieldSubmitted: (val) async {
                    await Navigator.pushNamed(context, "/secondPage");
                    if(context.mounted){
                      FocusScope.of(context).previousFocus();
                    }
                  },
                ),
                TextFormField(
                  decoration: const InputDecoration(hintText: "Third Field", labelText: "Third Field"),
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}

class SecondPage extends StatefulWidget {
  const SecondPage({super.key});

  @override
  State<SecondPage> createState() => _SecondPageState();
}

class _SecondPageState extends State<SecondPage> {

  @override
  Widget build(BuildContext context) {
    return KeyboardListener(
      focusNode: FocusNode(),
      onKeyEvent: (event){
        if(event.logicalKey == LogicalKeyboardKey.escape){
          Navigator.pop(context);
        }
      },
      child: Scaffold(
        appBar: AppBar(
          title: const Text("Second Page"),
        ),
        body: Center(
          child: TextFormField(
            autofocus: true,
            decoration: const InputDecoration(hintText: "Second Page", labelText: "Second Page"),
          )
        ),
      ),
    );
  }
}

Screenshots or Video

Screenshots / Video demonstration
https://github.com/flutter/flutter/assets/129219828/4fbaf662-5065-4d49-8850-97cf74c6f5b1

Logs
Logs
[Paste your logs here]

Flutter Doctor output
Doctor output
[√] Flutter (Channel stable, 3.22.2, on Microsoft Windows [Version 10.0.22621.3593], locale en-IN)
    • Flutter version 3.22.2 on channel stable at C:\Users\Admin\fvm\versions\3.22.2
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 761747bfc5 (9 days ago), 2024-06-05 22:15:13 +0200
    • Engine revision edd8546116
    • Dart version 3.4.3
    • DevTools version 2.34.3

[√] Windows Version (Installed version of Windows is version 10 or higher)
Windows PowerShell
[√] Android toolchain - develop for Android devices (Android SDK version 33.0.1)
    • Android SDK at C:\Users\Admin\AppData\Local\Android\sdk
    • Platform android-34, build-tools 33.0.1
    • Java binary at: C:\Program Files\Android\Android Studio\jbr\bin\java
    • Java version OpenJDK Runtime Environment (build 17.0.6+0-b2043.56-9586694)
    • All Android licenses accepted.

[√] Chrome - develop for the web
    • Chrome at C:\Program Files\Google\Chrome\Application\chrome.exe

[√] Visual Studio - develop Windows apps (Visual Studio Community 2022 17.9.1)
    • Visual Studio at C:\Program Files\Microsoft Visual Studio\2022\Community
    • Visual Studio Community 2022 version 17.9.34616.47
    • Windows 10 SDK version 10.0.22621.0

[√] Android Studio (version 2022.2)
    • Android Studio at C:\Program Files\Android\Android Studio
    • Flutter plugin can be installed from:
       https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
       https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 17.0.6+0-b2043.56-9586694)

[√] VS Code (version 1.89.1)
    • VS Code at C:\Users\Admin\AppData\Local\Programs\Microsoft VS Code
    • Flutter extension version 3.90.0

[√] Connected device (3 available)
    • Windows (desktop) • windows • windows-x64    • Microsoft Windows [Version 10.0.22621.3593]
    • Chrome (web)      • chrome  • web-javascript • Google Chrome 126.0.6478.56
    • Edge (web)        • edge    • web-javascript • Microsoft Edge 125.0.2535.85

[√] Network resources
    • All expected network resources are available.

• No issues found!

I have the same issue since 3.22.
I also see sometimes keyboard input issue like I need to press ENTER twice to trigger the intent. Not quite sure if that issue is connected to the focus issue.

I can reproduce this on macOS app target as well. Thanks for the report.

flutter doctor -v (stable and master)
[✓] Flutter (Channel stable, 3.22.2, on macOS 14.1 23B74 darwin-x64, locale en-VN)
    • Flutter version 3.22.2 on channel stable at /Users/huynq/Documents/GitHub/flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 761747bfc5 (31 hours ago), 2024-06-05 22:15:13 +0200
    • Engine revision edd8546116
    • Dart version 3.4.3
    • DevTools version 2.34.3

[✓] Android toolchain - develop for Android devices (Android SDK version 34.0.0)
    • Android SDK at /Users/huynq/Library/Android/sdk
    • Platform android-34, build-tools 34.0.0
    • ANDROID_HOME = /Users/huynq/Library/Android/sdk
    • Java binary at: /Applications/Android Studio.app/Contents/jbr/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 17.0.10+0-17.0.10b1087.21-11572160)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 15.3)
    • Xcode at /Applications/Xcode15.3.app/Contents/Developer
    • Build 15E204a
    • CocoaPods version 1.15.2

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 2023.3)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • android-studio-dir = /Applications/Android Studio.app/
    • Java version OpenJDK Runtime Environment (build 17.0.10+0-17.0.10b1087.21-11572160)

[✓] VS Code (version 1.89.1)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.90.0

[✓] Connected device (3 available)
    • iPhone (mobile) • d9a94afe2b649fef56ba0bfeb052f0f2a7dae95e • ios            • iOS 15.8 19H370
    • macOS (desktop) • macos                                    • darwin-x64     • macOS 14.1 23B74 darwin-x64
    • Chrome (web)    • chrome                                   • web-javascript • Google Chrome 125.0.6422.142

[✓] Network resources
    • All expected network resources are available.

• No issues found!

[!] Flutter (Channel master, 3.23.0-13.0.pre.242, on macOS 14.1 23B74 darwin-x64, locale en-VN)
    • Flutter version 3.23.0-13.0.pre.242 on channel master at /Users/huynq/Documents/GitHub/flutter_master
    ! Warning: `flutter` on your path resolves to /Users/huynq/Documents/GitHub/flutter/bin/flutter, which is not inside your current Flutter SDK checkout at /Users/huynq/Documents/GitHub/flutter_master. Consider adding /Users/huynq/Documents/GitHub/flutter_master/bin to the front of your path.
    ! Warning: `dart` on your path resolves to /Users/huynq/Documents/GitHub/flutter/bin/dart, which is not inside your current Flutter SDK checkout at /Users/huynq/Documents/GitHub/flutter_master. Consider adding /Users/huynq/Documents/GitHub/flutter_master/bin to the front of your path.
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 5187cab7bd (2 days ago), 2024-06-14 23:35:34 -0400
    • Engine revision 9779c273aa
    • Dart version 3.5.0 (build 3.5.0-266.0.dev)
    • DevTools version 2.36.0
    • If those were intentional, you can disregard the above warnings; however it is recommended to use "git" directly to perform update checks and upgrades.

[✓] Android toolchain - develop for Android devices (Android SDK version 34.0.0)
    • Android SDK at /Users/huynq/Library/Android/sdk
    • Platform android-34, build-tools 34.0.0
    • ANDROID_HOME = /Users/huynq/Library/Android/sdk
    • Java binary at: /Applications/Android Studio.app/Contents/jbr/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 17.0.10+0-17.0.10b1087.21-11572160)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 15.3)
    • Xcode at /Applications/Xcode15.3.app/Contents/Developer
    • Build 15E204a
    • CocoaPods version 1.15.2

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 2023.3)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • android-studio-dir = /Applications/Android Studio.app/
    • Java version OpenJDK Runtime Environment (build 17.0.10+0-17.0.10b1087.21-11572160)

[✓] VS Code (version 1.90.0)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.90.0

[✓] Connected device (2 available)
    • macOS (desktop) • macos  • darwin-x64     • macOS 14.1 23B74 darwin-x64
    • Chrome (web)    • chrome • web-javascript • Google Chrome 125.0.6422.142

[✓] Network resources
    • All expected network resources are available.

! Doctor found issues in 1 category.

CC @gspencergoog in case you have any insights related to focus here.

@gspencergoog But this used to work in v3.10.6. So now i have to create additional focus nodes for keyboard listener ?

But this used to work in v3.10.6. So now i have to create additional focus nodes for keyboard listener ?

Yes, that's correct.  It has always been the case that creating a FocusNode on each build caused issues like this. That it happened to work before was probably due to a bug that was fixed. It also probably caused issues that just weren't immediately visible (like a memory leak).
Instead of KeyboardListener, you can also use just a regular Focus widget without giving it a FocusNode at all (it manages one internally for you). That's exactly how KeyboardListener is implemented anyhow, by using a Focus widget. This version of the code also works:
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

void main() {
  runApp(MaterialApp(
    initialRoute: '/',
    routes: <String, WidgetBuilder>{
      '/': (BuildContext context) => const Home(),
      '/secondPage': (BuildContext context) => const SecondPage(),
    },
  ));
}

class ChooseIntent extends Intent {}

class Home extends StatelessWidget {
  const Home({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Flutter 3.23.0-13.0.pre.248 • channel main'),
      ),
      // This Focus widget has no effect, and can be removed.  I just left it
      // here since you seem to want to have a listener here.
      body: Focus(
        onKeyEvent: (FocusNode _, KeyEvent __) => KeyEventResult.ignored,
        child: Center(
          child: Padding(
            padding: const EdgeInsets.all(8.0),
            child: Column(
              children: <Widget>[
                Shortcuts(
                  shortcuts: <ShortcutActivator, Intent>{LogicalKeySet(LogicalKeyboardKey.f2): ChooseIntent()},
                  child: Actions(
                    actions: <Type, Action<Intent>>{
                      ChooseIntent: CallbackAction<ChooseIntent>(onInvoke: (ChooseIntent intent) async {
                        Navigator.pushNamed(context, '/secondPage');
                        return null;
                      })
                    },
                    child: TextFormField(
                      decoration: const InputDecoration(hintText: 'First Field', labelText: 'First Field'),
                    ),
                  ),
                ),
                TextFormField(
                  textInputAction: TextInputAction.next,
                  decoration: const InputDecoration(hintText: 'Second Field', labelText: 'Second Field'),
                  onFieldSubmitted: (String val) async {
                    await Navigator.pushNamed(context, '/secondPage');
                    if (context.mounted) {
                      FocusScope.of(context).previousFocus();
                    }
                  },
                ),
                TextFormField(
                  decoration: const InputDecoration(hintText: 'Third Field', labelText: 'Third Field'),
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}

class SecondPage extends StatelessWidget {
  const SecondPage({super.key});

  @override
  Widget build(BuildContext context) {
    return Focus(
      onKeyEvent: (FocusNode _, KeyEvent event) {
        if (event.logicalKey == LogicalKeyboardKey.escape) {
          Navigator.pop(context);
          return KeyEventResult.handled;
        }
        return KeyEventResult.ignored;
      },
      child: Scaffold(
        appBar: AppBar(
          title: const Text('Second Page'),
        ),
        body: Center(
            child: TextFormField(
          autofocus: true,
          decoration: const InputDecoration(hintText: 'Second Page', labelText: 'Second Page'),
        )),
      ),
    );
  }
}


Nesting for loops crash

Nesting for loops in a heex template deeper than 2 leads to the following crash:
PhoenixLiveViewNative/Fragment.swift:282: Fatal error: Static cannot reference template when templates are not provided
2022-10-01 12:39:50.968780-0700 decoder_bug_ios[20933:2863242] PhoenixLiveViewNative/Fragment.swift:282: Fatal error: Static cannot reference template when templates are not provided
I setup a clean-room app to demonstrate the issue here:  https://github.com/winescout/lvn_decoder_issue_1

@carson-katri could you please check this out

I can look into this, since I'm familiar with with fragment decoding side of things.


Fly-out menu broken from MkDocs projects

This is a follow-up to https://github.com/rtfd/readthedocs.org/issues/4314#issuecomment-414554221
Details

Read the Docs project URL: https://nodemcu.readthedocs.io/en/latest/en/lfs/
Build URL (if applicable): https://readthedocs.org/projects/nodemcu/builds/7653466/

Expected Result

The usual fly-out menu bottom left

Actual Result

No fly-out menu, just a GitHub link and previous/next links
If my own analysis is correct than this broke when you moved the default MkDocs version to >= 0.16 (currently 0.17.3).

Note that for https://mkdocs.readthedocs.io/en/stable/ the behavior is different for reasons unknown to me. There you get a somewhat crippled fly-out bottom-right once you scroll all the way to the end of a page.

Note that for https://mkdocs.readthedocs.io/en/stable/ the behavior is different for reasons unknown to me. There you get a somewhat crippled fly-out bottom-right once you scroll all the way to the end of a page.

I guess that is because of https://github.com/rtfd/readthedocs.org/issues/4448
Not sure about the problem with your docs :/

#4448 isn't exactly the same as it mentions changes for MkDocs 1.0. The fly-out broke with your 0.15.x to 0.17.3 upgrade. It means it's currently broken for all MkDocs projects, I assume, that don't explicitly downgrade MkDocs via requirements.txt or so.

We don't have the Mkdocs label anymore, Needed replication means that someone else can replicate the issue. mkdocs is using the install option, so they are using that version to build the docs (1.0.1)

Yep, I can confirm that https://github.com/mkdocs/mkdocs/pull/1571

I think this bug was introduced in https://github.com/rtfd/readthedocs.org/pull/4499/files, I'm investigating

Note that for https://mkdocs.readthedocs.io/en/stable/ the behavior is different for reasons unknown to me.

They are building with MkDocs 1.0+. I think the issues are related to that. I outlined some of the issues we have with MkDocs 1.0 here: https://github.com/rtfd/readthedocs.org/issues/4448

I am going to move https://github.com/rtfd/readthedocs.org/issues/4448 up my priority list and try to get a PR as soon as possible. There have been some significant compatibility problems between Read the Docs and mkdocs and a lot of them stem from different users using different versions of mkdocs and the difficulty in testing that. It also doesn't help that the mkdocs Read the Docs theme is outside of our control (as opposed to the Sphinx Read the Docs theme which we do control) and mkdocs made a few changes to it that broke some of what we were doing.
I think the solution is to:

Make as few changes to mkdocs.yml as possible
Don't pass the --theme option when executing mkdocs
Don't override mkdocs's readthedocs theme with theme_dir or custom_dir
Use the regular lower right corner badge-only flyout menu like we do on non-Read the Docs themes (eg. as on alabaster).

Does that sound good?

I figured out exactly what the problem is and why our template overrides weren't taking effect (which in turn broke the flyout menu). The problem is that the --theme option changed slightly with 0.17. Starting in 0.17, it seems like passing the --theme option to mkdocs (as Read the Docs currently does) causes mkdocs to ignore template overrides. Strangely, this is only true if you use the new nested theme directive for theme.custom_dir introduced in 0.17. If you use the deprecated theme_dir then template overrides take effect even with --theme.
I am going to work toward a solution along the lines of my comment above

I have a PR along the lines of what I discussed above: https://github.com/rtfd/readthedocs.org/pull/4556 Any feedback on that PR is welcome.

@marcelstoer yes, this isn't deployed yet. All deployed code is merged in rel branch (from master)


add a note about setting up new repo GH_TOKEN

actions won't work without it

repo - > settings -> secrets & variables -> actions -> new repo secret
one for GH_USERNAME
one for GH_TOKEN

Still relevant?
See tinytapeout/tinytapeout-03p5#17

I don't know, haven't followed that PR

Irrelevant - tinytapeout-04 works without GH_TOKEN / GH_USERNAME


Grappling hooks are busted as hell

Description
Grappling hooks have locomotion exploits associated with them, when shot through portals they can be used to go through walls, and when shot from crates/lockers they can be used to teleport any crate/locker to the place they were shot from.


Implement debug proxy to display error message before install completes

This adds a debug proxy that acts as the debug adapter program before the
coreclr-debug are fully downloaded. If the user tries to start debugging
before download is finished, the proxy displays a sane error message. Once
the download is complete, we rewrite the manifest to no longer call the
proxy.
During the VS Code session that downloads the components, the manifest is
rewritten but not reloaded. In this case the proxy spawns the real
debugger as a child process and proxies its stdin/stdout. Once vs code is
restarted the new manifest is loaded and the proxy is no longer called.
Also adds an empty command that can be run to force activation of the C#
extension, which will kick off debugger acquisition.

@caslan @gregg-miskelly @DustinCampbell

LGTM

@DustinCampbell I abstracted util into a class. Is this more what you had in mind?

#136

Otherwise looks good to me.


Problem in chat_id

Hi
thanks in advanced for nice api you have designed.
I wanna use TLRequestMessagesAddChatUser method to add user to chat.the chat_id type is int but the chat id that i have is too long for int data type and it s long (chat_id: -1001027811592). what do i have to do for this problem? do i have to change api layer ? if the answer is yes , where can i find that api layer ?
thanks.

@mram3d
According the tg documentation this field cannot be long anyways. The real id of your group is<PHONE_NUMBER> but -100 is just prefix for channels or supergroups. Try to operate it as with channels.


Is Turbo "data-turbo-permanent" designed to work differently to Turbolinks "data-turbolinks-permanent"?

Hello.
Currently I am using Turbolinks for some projects. But after release Turbo and this phrase in Turbolinks README:

Please note that Turbolinks is no longer under active development. It has been superseded by a new framework called Turbo, which is part of the Hotwire umbrella.

I decided to move projects to Turbo. In the process of migration I find out, that Turbo "data-turbo-permanent" work differently, than Turbolinks "data-turbolinks-permanent" with audio/video tag.
I did example, which contain the same codebase, except one use Turbo and other use Turbolinks (changed data attributes and events listeners only)
Here example with turbolinks:
https://turbo-permanent.catware.org/turbolinks/ (click play audio and after this travel by "HOME" and "ABOUT" links - audio works without any issues, audio controls still working)
The same code, but with Turbo:
https://turbo-permanent.catware.org/turbo/ (click play audio and after this travel by "HOME" and "ABOUT" links - audio will stop immediately after first page visit)
Here source code for
Turbolinks
JS: https://github.com/le0pard/turbo-permanent-issue/blob/main/webpack/turbolinks_controllers/audio_controller.js
HTML: https://github.com/le0pard/turbo-permanent-issue/blob/main/source/layouts/turbolinks.html.erb#L57-L63
Turbo
JS: https://github.com/le0pard/turbo-permanent-issue/blob/main/webpack/turbo_controllers/audio_controller.js
HTML: https://github.com/le0pard/turbo-permanent-issue/blob/main/source/layouts/turbo.html.erb#L56-L62
Code the same, except for Turbo in HTML used "data-turbo-permanent" instead "data-turbolinks-permanent" and in JS used events "turbo:before-cache" and "turbo:load" instead "turbolinks:before-cache" and "turbolinks:load"
I read about some solutions https://github.com/turbolinks/turbolinks/issues/157#issuecomment-423275861 , but "pause/play" solution is noticeable for the end user.
In the end my question: is this designed to work differently? Is this mean, that Turbolinks still better for use cases, where needed "permanent" element with audio/video tag or it is just bug in Turbo, which do not have Turbolinks?
Versions:
Turbolinks: 5.2.0
Turbo: 7.0.0-beta.4
Thanks

I've opened https://github.com/hotwired/turbo/pull/222 to add coverage for this to the test suite. Without any implementation changes, the behavior is working in Safari and Firefox, but failing on Chrome.
@le0pard Could you review https://github.com/hotwired/turbo/pull/222 to help me understand how closely it reproduces the issues you're describing?

Just popping in to say I was playing with Turbo for the first time today and this was pretty much exactly the use-case I was trying: having a part of the page have an <audio> player that doesn't re-render between page loads (like you can image would be useful for a podcast site). In my mind, what would happen is that that area of the DOM just isn't touched at all, but it looks like it does get re-rendered (just with smarts somehow applied).
To toss in a little extra complexity, I wasn't actually using an <audio> element but a custom Web Component that has an audio element inside it. The Web Component does what Web Components do, it mounts itself and slots in stuff and whatnot. But when I clicked on an internal link to change pages, it re-rendered, and the Web Components got VERY confused. In my case, the entire <style> got wiped out. Here's a little video if you're curious (the area at the top with the ▶ button is the Web Component, and clicking the link triggers the Turbo re-render).

@chriscoyier Did you try https://github.com/turbolinks/turbolinks ? It may not have this issue.

I was tempted to try it, but...

Please note that Turbolinks is no longer under active development.

I don't think I wanna build something new on something that's sunset.

I recall reading about this exact use case years ago via Why we chose Turbolinks.
It feels like a bug introduced in Turbo.

Thanks for reporting this!

Thanks @sstephenson Can we release beta 5, so I can try to migrate again from Turbolink to Turbo ?

Ok, I compiled master and it works. You can try it too @chriscoyier

My thing isn't super urgent, I can wait for a release. I'm looking forward to seeing if it works within my <web-component>

Turbo v7.0.0-beta.5 is now available. (We're also using this feature for the podcast player on @vampeel's new REWORK.fm site!)


Feature/issue 23

Fixes #23 timeout after sending a command to the device. Also adds a TCP example and a configuration template.

Coverage decreased (-0.1%) to 67.757% when pulling c1d05ade472bb52a092dae6927b9ef9ff0200a93 on feature/issue_23 into 44f95ab19e580087211d1437935c824ffeb5585f on master.

Coverage decreased (-0.1%) to 67.757% when pulling c1d05ade472bb52a092dae6927b9ef9ff0200a93 on feature/issue_23 into 44f95ab19e580087211d1437935c824ffeb5585f on master.

Coverage decreased (-0.1%) to 67.757% when pulling c72f5d436b64af280f5e8e12647e5cd25c165253 on feature/issue_23 into 9b3a24654b7e528c80a0a99ddf9ce6ebe24cd5a0 on master.


NUMBERS-188: refactored Complex instance methods as static functions

This PR refactors Complex class using functional interfaces and static methods.
This allows reuse of the refactored static functions for Operations on List/Matrices of Complex Numbers (NUMBERS-186)
The changes retain binary backward compatibility.
Summary of changes

Introduced following interfaces  for Complex Number Operations
DComplex - interface representing a complex number with double precision in cartesian form
DComplexUnaryOperator - unary operations on DComplex
DComplexBinaryOperator - binary operations on DComplex
DComplexScalarFunction -  operations on a DComplex and double type returning a DComplex type
DComplexConstructor - interface to create the DComplex result object from real and imaginary parts

Refactored instance methods of Complex class as static functions in ComplexFunctions and ComplexBiFunctions
The static functions use the functional interface signatures described above

Added default methods on functional interfaces to compose Complex operations.

Currently complex-gsoc-2022 is up-to-date with master so you can rebase on that branch. I have added changes to detect missing javadoc on private methods. Please rebase to collect the changes. Thanks.

Currently complex-gsoc-2022 is up-to-date with master so you can rebase on that branch. I have added changes to detect missing javadoc on private methods. Please rebase to collect the changes. Thanks.

Hi Alex,
I had taken out comments of the private methods in ComplexFunctions and ComplexBiFunctions because I had the error of the class being over 2000 lines. Is there a way around this?

You should add a suppression to:
src/main/resources/checkstyle/checkstyle-suppressions.xml

There is already this suppression for Complex:
<suppress checks="FileLengthCheck" files=".*[/\\]Complex(Test)?\.java" />

You may be able to drop the suppression for Complex if it is now under 2000 lines and change it to your other files.
If you rebase on the branch again (because I have now updated the notifications for GH actions to send e-mails upon failure) and I can then approve your PR to allow it to run the GH workflows.

Based on feedback on the mailing list, I have made the following changes

Rebased and added missing Javadoc comments

Removed abstractions for simple functions in the Complex class

Fixed line space formatting

Renamed the interface DComplex as ComplexDouble

Could you please approve the PR to run the GH workflows?

Codecov Report

Merging #113 (c293820) into complex-gsoc-2022 (3c446b9) will increase coverage by 0.01%.
The diff coverage is 100.00%.

@@                   Coverage Diff                   @@
##             complex-gsoc-2022     #113      +/-   ##
=======================================================
+ Coverage                99.12%   99.13%   +0.01%
- Complexity                1654     1714      +60
=======================================================
  Files                       64       71       +7
  Lines                     4227     4302      +75
  Branches                   835      838       +3
=======================================================
+ Hits                      4190     4265      +75
  Misses                      10       10
  Partials                    27       27

Impacted Files
Coverage Δ

...va/org/apache/commons/numbers/complex/Complex.java
100.00% <ø> (ø)

...ache/commons/numbers/complex/ComplexFunctions.java
100.00% <ø> (ø)

...he/commons/numbers/complex/ComplexBiFunctions.java
100.00% <100.00%> (ø)

...commons/numbers/complex/ComplexBinaryOperator.java
100.00% <100.00%> (ø)

...he/commons/numbers/complex/ComplexConstructor.java
100.00% <100.00%> (ø)

.../apache/commons/numbers/complex/ComplexDouble.java
100.00% <100.00%> (ø)

...commons/numbers/complex/ComplexScalarFunction.java
100.00% <100.00%> (ø)

.../commons/numbers/complex/ComplexUnaryOperator.java
100.00% <100.00%> (ø)

Continue to review full report at Codecov.

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

This work has been superseded by other PRs merged into the branch to apply the changes in incremental stages.


1.19 update

Love this mod, and id love to be able to update my server to 1.19!

I didn't realize people still use this thing. Updating right now, almost done. Just gotta run some final tests then I will upload to Curseforge and Modrinth. After those uploads succeed I will close this issue.

thanks so much! This is one of my favorite mods for a RP server.

Update is uploaded and approved


WIP: Auto populate physical channels

Adds a menu item to automatically populate the physical channel library from the AWGs in the instrument library. Some improvements from here would be:

[x] Add a button to the physical channels tab to trigger the action
[ ] Modify get_naming_convention to include type of each channel, so that we have a better way to distinguish marking channels from quadrature channels.

Coverage remained the same at 67.533% when pulling a176c5a70829b8d3c7ebff1b8342214c7853ee4e on feature/auto-populate into 2b6cdeca28a3bb97d100ce571ca31a17f421f812 on develop.

Coverage remained the same at 67.558% when pulling 94e635ba43c9e6e88bdf9dbf48c3078e5ff4a46a on feature/auto-populate into 962f0d9e6f898aecf41c157c832e4303b383689a on develop.

@blakejohnson what do you think of optionally auto-populating only on adding an AWG as in 2115625

Coverage decreased (-0.4%) to 67.154% when pulling 2115625d1da3aaacb8abe563bad817c8d05a617f on feature/auto-populate into 962f0d9e6f898aecf41c157c832e4303b383689a on develop.

Coverage decreased (-0.4%) to 67.154% when pulling 1597496a382b0fa910f88c843934ab2373b344ea on feature/auto-populate into 962f0d9e6f898aecf41c157c832e4303b383689a on develop.

I'll fix the naming convention kludge in a separate PR.

Coverage decreased (-0.4%) to 67.177% when pulling ff3fe1bb6fe588a133f49e9ea14f7bfd9aa4f024 on feature/auto-populate into 962f0d9e6f898aecf41c157c832e4303b383689a on develop.


build project success but not found libprotobuf

Problem description
In Ubuntu20 system version,run ./dev/buildbundle-veloxbe.sh and build success.
spark-sql command is:
bin/spark-sql --master local[8] --conf spark.driver.extraClassPath=/data/apps/spark-3.3.2-bin-hadoop2/gluten-velox-bundle-spark3.3_2.12-ubuntu_20.04-1.0.0.jar --conf spark.plugins=io.glutenproject.GlutenPlugin --conf spark.memory.offHeap.enabled=true --conf spark.gluten.sql.columnar.filescan=false  --conf spark.memory.offHeap.size=20g --conf spark.shuffle.manager=org.apache.spark.shuffle.sort.ColumnarShuffleManager -f xx.sql
and error is :
Exception in thread "main" java.lang.UnsatisfiedLinkError: /data/spark_tmp/gluten-8ff5488b-6346-4d8b-a5c1-217e0903d9f2/jni/bf82b94b-ed52-4890-9254-a4c85dabac4d/gluten-2230286230297993280/libarrow.so.1200.0.0: libprotobuf.so.32: cannot open shared object file: No such file or directory
Note: gluten branch is 1.0.0.
May be the build script is not complete?
System information
1
CMake log
1

fix: it must use --enable_vcpkg=ON

Where does this need to be added? Is this './dev/buildbundle-veloxbe.sh' behind?

fix: it must use --enable_vcpkg=ON

Where does this need to be added? Is this './dev/buildbundle-veloxbe.sh' behind?

fix: it must use --enable_vcpkg=ON

Where does this need to be added? Is this './dev/buildbundle-veloxbe.sh' behind?

./dev/buildbundle-veloxbe.sh --enable_vcpkg=ON

when I enable vcpkg, i got this error:
-- Building x64-linux-avx-dbg
CMake Error at scripts/cmake/vcpkg_execute_build_process.cmake:134 (message):
Command failed: /home/ww/gluten/dev/vcpkg/.vcpkg/downloads/tools/cmake-3.25.1-linux/cmake-3.25.1-linux-x86_64/bin/cmake --build . --config Debug --target install -- -v -j225
Working Directory: /home/ww/gluten/dev/vcpkg/.vcpkg/buildtrees/folly/x64-linux-avx-dbg
See logs for more information:
/home/ww/gluten/dev/vcpkg/.vcpkg/buildtrees/folly/install-x64-linux-avx-dbg-out.log
Call Stack (most recent call first):
/home/ww/gluten/dev/vcpkg/vcpkg_installed/x64-linux-avx/share/vcpkg-cmake/vcpkg_cmake_build.cmake:74 (vcpkg_execute_build_process)
/home/ww/gluten/dev/vcpkg/vcpkg_installed/x64-linux-avx/share/vcpkg-cmake/vcpkg_cmake_install.cmake:16 (vcpkg_cmake_build)
/home/ww/gluten/dev/vcpkg/ports/folly/portfile.cmake:73 (vcpkg_cmake_install)
scripts/ports.cmake:147 (include)
error: building folly:x64-linux-avx failed with: BUILD_FAILED
Please ensure you're using the latest port files with git pull and vcpkg update.
Then check for known issues at:
https://github.com/microsoft/vcpkg/issues?q=is%3Aissue+is%3Aopen+in%3Atitle+folly
You can submit a new issue at:
https://github.com/microsoft/vcpkg/issues/new?title=[folly]+Build+error&body=Copy+issue+body+from+%2Fhome%2Fww%2Fgluten%2Fdev%2Fvcpkg%2Fvcpkg_installed%2Fvcpkg%2Fissue_body.md


Fix issue with documentation

resolve #296

Coverage increased (+0.01%) to 91.901% when pulling c64a10a836cb3a87ebc3501761569b8eceacbca9 on fix-doc into feea1a22362ce3fab801accf9a3ee76ed9b42f4a on master.


HTML5 engine is not able to download/save data from web

Godot version:
3.2.3 custom build
OS/device including version:
Lubuntu 20.04, Gles3
Issue description:
HTTPRequest node is request to store a file (webp in demo test provided) in user:// folder

in editor works
-in linux binary works
in HTML5/webassembly doesn't

Steps to reproduce:

request a file from web with HTTPRequest
try to access to the downloaded file
= works on anything else but on webassembly

Minimal reproduction project:
demo simply download tux clipart from web and replace Godot's mascot sprite icon ASAP
test-src.zip (bare source)
test-lin.zip (include linux binary engine)
test-web.zip (include webassembly project (doesn't work)

Do you see any errors in the browser inspector console when making the HTTP request?

Godot Engine v3.2.3.beta.custom_build.6fd712c87 - https://godotengine.org tmp_js_export.js:2582:16 OpenGL ES 3.0 Renderer: Mozilla tmp_js_export.js:2582:16  tmp_js_export.js:2582:16 **ERROR**: HTTPClient blocking mode is not supported for the HTML5 platform. tmp_js_export.js:2594:16    At: platform/javascript/http_client_javascript.cpp:201:set_blocking_mode() - Condition "p_enable" is true. tmp_js_export.js:2594:16
This error appear only in HTML5, I don't know how disable HTTPClient blocking mode; but online guide reference says it's default to false.

Looking at your code, it seems that blocking mode is not enabled manually indeed.
# main.gd
        _request=$HTTPRequest
        _request.connect("request_completed", self, "_on_request_completed")
        _request.set_download_file(str("user://",namefile))

# main.tscn
[node name="HTTPRequest" type="HTTPRequest" parent="."]
use_threads = true

On the other hand you enabled threads, which are not supported on HTML5 yet, so maybe that's the problem?
That wouldn't explain why you get an error about blocking mode though, so this should be looked into. And you should be getting an error about threads if they are the problem.

I have activated use_threads while testing various options to make it work (then forgot it enabled).
The actual error that block the download of external data seems to be this:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://www.phoca.cz/phocacartdemo/images/phocagallery/Webp/thumbs/phoca_thumb_l_2_A-WEBP.webp. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing).
reference link given.
It seems like I've to enable Access-Control-Allow-Origin: *
I've tried to rename index.html into index.php and add this line:

(yes, local server with php enabled, not the one from Godot)
But the error seems to come from the file index.js

There's a Image.load_webp_from_buffer() method you can use to load a WebP file without saving it to the filesystem. Try to use it and see if solves the issue.

adjusted with Image.load_webp_from_buffer() only
test.zip
Runs fine from editor, same error in browser:

@alexwbc The CORS request is still blocked, so the file can't be downloaded. You need to ask the host to allow CORS, set up a proxy that allows CORS or use a browser add-on to bypass CORS (for development purposes only).

With addon to pass CORS it works with no error:

it's the buffer one, but I do suppose the storage does work properly too

Caused by browser restrictions on CORS. Nothing we can do about it. Closing.


Just updated Smapi, WaterBot worked for about 4 in-game days, then stopped working mid-field

WaterBot version: 1.2.1
Steps to reproduce: Right click on unwatered crop.
Expected behavior: Start bot and water crops.
Actual behavior: SMAPI says:
[WaterBot] This mod failed in the Input.ButtonPressed event. Technical details:
System.Exception: Exception of type 'System.Exception' was thrown.
at StardewValley.PathFindController.findPath(Point startPoint, Point endPoint, isAtEnd endPointFunction, GameLocation location, Character character, Int32 limit) in stardewvalley\Farmer\Farmer\PathFindController.cs:line 189
at StardewValley.PathFindController..ctor(Character c, GameLocation location, isAtEnd endFunction, Int32 finalFacingDirection, Boolean eraseOldPathController, endBehavior endBehaviorFunction, Int32 limit, Point endPoint, Boolean clearMarriageDialogues) in stardewvalley\Farmer\Farmer\PathFindController.cs:line 133
at StardewValley.PathFindController..ctor(Character c, GameLocation location, Point endPoint, Int32 finalFacingDirection, endBehavior endBehaviorFunction) in stardewvalley\Farmer\Farmer\PathFindController.cs:line 42
at WaterBot.Framework.WaterBotControler.start(console console) in C:\Users\andre\source\repos\WaterBot\WaterBot\Framework\WaterBotControler.cs:line 87
at WaterBot.WaterBot.OnButtonPressed(Object sender, ButtonPressedEventArgs e) in C:\Users\andre\source\repos\WaterBot\WaterBot\ModEntry.cs:line 53
at StardewModdingAPI.Framework.Events.ManagedEvent`1.Raise(TEventArgs args) in SMAPI\Framework\Events\ManagedEvent.cs:line 101

Reverted to SMAPI 3.18.1 and the WaterBot mod works just fine again. So it is something with the SMAPI 3.18.2 update.


Add example for Point Cloud Data / LIDAR

Hi,
It would be nice to also provide an example of json for a Point Cloud asset : a LAZ file ?
Thanks and regards

See: https://github.com/stac-extensions/pointcloud


Polish debug logging

Polish debug log to avoid string concatenation when debug is turned off
Show stack trace in case of exception

Merged in 1fb598e710c32e416fa005353a6044bf1b7ef9f4


Enable CI for ranger

What changes were proposed in this pull request?
Proposal: To enable maven build on ranger with every pull request and push on master branch. The build uses JDK 8 and runs without tests.
How was this patch tested?
Java CI with Maven passed, see below.

@kumaab  - thanks for the patch to enable CI. Please file a RANGER jira and push this commit; you can also consider using RANGER-4072 for this commit.


preroute callback leaves orphaned components in tree

Same is when using router methods directly.
How do you get router from vue instance anyway? I patched  view.vue onF7Init method by adding this on the bottom to be able to use it:
this.$root.router = self.f7View.router
Thank you!

Yes, there is a but in Vue compilier, page should be removed from tree, it uses pageBeforeRemove callback but during compilation it changes it to lowercase pagebeforeremove so it doesn't work like expected
As for router I'll also add it. It is a bit wrong to to assign it to root because you may have several views/router in single app

I made two pages linked to each other, each click is generating a new instance and back link is removing them from the tree in reverse. I guess the history is built this way but duplicate pages should be removed for this kind of loop.
Removing previous page using reload option did the job for redirects as I don't have a deep tree.
Thank you.