bug: v1.2.12 responder errors and goes stale when a docker network is removed

Hi @brutella,
I found another issue in v1.2.12, this time on the responder side. In particular, it gives an error if a network interface is removed. I run dnssd on Windows 11 in WSL2 (NAT network mode).
Expected behaviour
When I register a service and remove a Docker network, the responder should keep functioning. This is the behaviour in v1.2.11:
# # terminal 1, not in a container
# dnssd register -Name='myservice' -Port='123' -Type='_example._tcp'
Registering Service myservice._example._tcp.local. port 123
DATE: –––Thu Oct 3 2024–––
10:20:38.605    ...STARTING...
10:20:40.546    Got a reply for service myservice._example._tcp.local.: Name now registered and active

# # terminal 2
# docker network create test && docker network remove test
790e62e775547983d09986fb0e91405a2f330f5713a961bebbadc2b9406e9bbc
test

Everything remains alive.
Observed behaviour
When I register a service and create/remove/alter a Docker network, the responder throws an error and freezes (does not respond to Ctrl+C). This is the behaviour in v1.2.12:
# # terminal 1, not in a container
# dnssd register -Name='myservice' -Port='123' -Type='_example._tcp'
Registering Service myservice._example._tcp.local. port 123
DATE: –––Thu Oct 3 2024–––
10:25:13.864    ...STARTING...
10:25:15.729    Got a reply for service myservice._example._tcp.local.: Name now registered and active

# # terminal 2
# docker network create test && docker network remove test
fc78fd06f1f7e47ce67e24af70716bbdd13d99e60f6dcea6e1a2abfc4c831dda
test

Now the first terminal shows the following additional output:
# # terminal 1
INFO 2024/10/03 10:26:23 netlink_linux.go:30: route ip+net: no such network interface

The service no longer shows up on a fresh dnssd browse -Type='_example._tcp', nor does the terminal respond to Ctrl+C.
In this case the error is triggered by the docker network remove command, but I've observed the same behaviour when running a docker compose up command that should create/alter network interfaces (but not delete them).
Hope you can help!

Wow, I'm impressed with the quick response + fix! It now shows the INFO message twice, but remains responsive as expected. Much appreciated 🙏

Happy to help. The info message is just there for informational purposes. 😉


[WIP] Generate kernel cache for all combinations in Windows CI

I noticed that cache hit ratio is worse than I expected. This was because we are making dtype test combination randomly sparse during the test run.
When running test with CUPY_TEST_FULL_COMBINATION=1 set, test took 20898.77s and 58,464 cubins (654 MB) are generated.
After populating the full cache, test time with CUPY_TEST_FULL_COMBINATION=0 reduced to 3504.59s.

/test

I think this PR won't upload the cache, as uploads are only triggered by the scheduled run, am I right?

I manually uploaded the full cache so I thought we can confirm the improvement in this PR, but seems not 🤔
I reuploaded the kernel cache so see how it works.
/test

This commit is added to #4970


⚠ Bofrost.be has degraded performance

In f08980d, Bofrost.be (https://www.bofrost.be) experienced degraded performance:

HTTP code: 200
Response time: 813 ms

Resolved: Bofrost.be performance has improved in 7200878 after 49 minutes.


Check transform with timeout.

I ran into an issue where the call to transformPointcloud always failed, because the tf2_ros::Buffer did not update fast enough. As transformPointcloud does not forward the duration to lookupTransform, I solved it by explicitly checking the transform before transforming the point cloud.

Thanks for your PR and sorry for replying slowly. It looks good for me, and I merge it soon.


Apply textures to surface defined by point grid

Problem description
I can use skin() to create a skin between any two arbitrary polygon shapes. I can use textures with linear_sweep(), 'rotate_sweep()`, etc. But I just cannot figure out how to apply a texture to a skin.
I feel like the infrastructure for this feature already exists, and maybe it's possible to do with the existing BOSL2 functionality, but I cannot figure it out.
For example, here's a skin between a rounded square and a circle:
include <BOSL2/std.scad>
skin([base, rim], z=[0,30], slices=10);

skin() doesn't take a texture parameter.
Solution I'd like
Basically I am looking for a version of linear_sweep() that transitions between two polygons while applying a texture.
Better still, if skin() would accept a texture parameter, then I could apply a texture to any surface that can be represented by a grid of [x,y,z] coordinates.
Alternatives considered
I considered using sweep_attach() to attach my texture vnf but this gets extremeley unwieldy and unreliable.

Applying of textures assumes that the surface follows a regular pattern so that the texture can be mapped to the surface.  For skin this is not the case.  In fact sometimes sections of the surface will vanish completely to a point.  The texture algorithm requires full repetition of the square tiles that form the texture.  So I don't think we know an algorithm for applying a texture to a skin(), which means that we are unable to provide the desired feature.

Perhaps I erred in using skin as an analogy. I'm really referring to a regular grid of 3D points, like an array of paths, with each path having the same number of vertices.
I was thinking, if we have an arbitrary grid of 3D points (like an array of equal-length paths), there should be a way to apply a vnf texture to each grid square. This is effectively what rotate_sweep() seems to do, although it does interpolations around the grid. I'd be happy just to have one vnf texture unit in each grid square, so they are all connected together.
In the case of texturing, say, a surface constructed from a square transitioning to a circle, the square would be sampled to have the same number of vertices as the circle, and the paths in between would be linear (or even bezier) interpolations from each vertex on the square to a corresponding vertex on the circle. The sweep would be from the square to the circle, interpolating the paths in between, and applying the texture as appropriate.
I'll say again, I feel like the underlying machinery to do this already exists in BOSL2. I have a grid of 3D coordinates defining some curved surface. The grid can be open or looped around to be closed. The texture is applied along the grid. rotate_sweep() already seems to do something similar but is restricted to a circular sweep, not a sweep along some arbitrary path.

I've changed the title of this issue to make more sense.

I think that putting a texture tile on each grid square is reasonably straight forward.  Using a larger span to define a warping operation for the texture is not so easy.  In the case of the existing textured sweeps, we have outside information about the geometry, and it's regular.  I'm concerned it could be super slow---@revarbat did all the texture coding and did a bunch of optimizations to make it fast.  I wonder if lookup() could be used to do this interpolation.

In the case of the existing textured sweeps, we have outside information about the geometry, and it's regular.

What if we assume the underlying geometry of an array of paths is also regular, if what is required is that the points are uniformly spaced? Would that help? For example, a square with n equally spaced points transitioning to a circle of n equally spaced points would consist of parallel paths with equally spaced points.

I wonder if lookup() could be used to do this interpolation.

The builtin lookup() requires values to interpolate in the result column. It doesn't work with vectors, unfortunately. For a recent project I had to make a version that does:
/*
Substitute for lookup(), searching for a key and returning
an interpolated result from a multi-column table. The columns themselves
may be vectors, not just values, in which case the result is an
interpolated vector (regular lookup() doesn't work with vectors)
key = what to look for
kvtable = table of ascend-sorted keys and 'values' (each value may be a vector)
keycol = (optional, default 0) column of keyvaluetable in which to search for key
resultcol (optional, default 1) = column of keyvaluetable in which to find results
*/
function columnlookup(key, kvtable, keycol=0, resultcol=1) = let(
    n = len(kvtable),
    ilow = binarysearch(key, kvtable, n, 0, n-1, keycol),
    ihigh = ilow < n-1 ? ilow+1 : ilow,
    frac = (key-kvtable[ilow][keycol]) / (kvtable[ihigh][keycol]-kvtable[ilow][keycol]),
    ) kvtable[ilow][resultcol] + frac * (kvtable[ihigh][resultcol]-kvtable[ilow][resultcol]);

// binary search a multi-column table by the 'col' column
// return index of equal or lower value found
// n, low, high, must be set to len(haystack), 0, n-1, respectively
function binarysearch(needle, haystack, n, low, high, col=0) =
    high < low ? -1 :
    let(mid = low + floor(0.5*(high-low)))
        mid >= n-1 ? n-1 :
        (haystack[mid][col] <= needle && needle < haystack[min(mid+1,n-1)][col] ? mid :
        (haystack[mid][col] > needle
            ? binarysearch(needle, haystack, n, low, mid-1, col)
            : binarysearch(needle, haystack, n, mid+1, high, col))
        );

I think if you require the points to be "equally spaced" it creates demands that are too limiting, ultimately.
Yeah, I was thinking that to use lookup you'd break the data apart into components.   But now that I think about this a little more carefully, I don't think that would work, because the x components depend on the y components, so they can't be done separately.

It occurs to me also that the "squares" of the grid need to be triangulated to figure out where to place the texture points.  Or at least you somehow need to resolve the ambiguity of 4 non-coplanar points defining a surface so you can place the texture on that surface.

I think if you require the points to be "equally spaced" it creates demands that are too limiting, ultimately.

Well, I wouldn't say it's a requirement, rather a recommendation. The designer should be free to experiment and take risks. And in most of my use cases, my distribution of points around a polyhedron are reasonably uniform in localized areas, if not in total. I wouldn't say the points you get from rotating a path around a circle are equally spaced, and yet things work out.

It occurs to me also that the "squares" of the grid need to be triangulated

Why? Triangulation isn't needed for any polyhedron. Try it; OpenSCAD triangulates it for you. All of my polyhedron designs use quads, and they render just fine and there are no STL errors in the output.
If all you're doing is aligning the corners of a texture square to the corners of a grid square, wouldn't all that the other texture vertices need is to align each point with an interpolated surface normal of the grid square? (I know that's harder than I'm making it sound.) Interpolated from the corners, of course, for which the normal would be determined by the adjacent squares.
BOSL2 already advises for skin() in the first paragraph of the description, "Each profile should be roughly planar, but some variation is allowed." The same would be true here. The bend between each grid square should be fairly gentle, like less than 45° between normals, and it's unlikely that trianglulation is needed.
I've used rotate_sweep() with an untriangulated texture and it seemed to work fine except for exposing the underside of surfaces at the edges.

If we require equal spacing that limits the application to surfaces with zero Gaussian curvature, which is a very strong limit, and excludes many things people would probably want to do.
The situation with triangulation is very confusing to me.  Revar claims that he's seen CGAL fail on non-triangular faces, so he has written triangulation into everything in BOSL2.  When you do rotate_sweep it triangulates before passing the result to OpenSCAD.
But when a surface is coarsely sampled with noncoplanar quads the choice of triangularization can completely change its appearance.
If the grid is coarsely sampled, you therefore might need to triangulate it to define what it does in between its grid points.  I can imagine somebody wanting to put one texture tile per grid square or even 2x2 texture tiles on one grid square, so the coarse sampling case could be important.
If the sampling is fine, presumably a bilinear interpolation would be fine.   I think the biggest challenge really in all of this is identifying the correct quadrilateral and the interpolation distances.  I guess if you define the texture as mapping to a specific number of grid cells then it becomes straight forward, but I'm not sure if that is a reasonable way to do things.  Your code breaks if you add more samples in that case.

Maybe it would help if I provided a quick rough example of what I'm trying to do. Consider this cylindrical woven basket.

include <BOSL2/std.scad>

path = circle(r=50);
linear_sweep(path, texture=get_diagonal_weave_vnf,
    tex_size=[20,20], tex_depth=4, style="default", h=60);

function get_diagonal_weave_vnf() = let(
    pts = [
        [2,0,-1], [8,0,-1], [10,2,0], [10,8,0], [7,5,0], [5,3,-1],
        [2,0,0], [8,0,0], [10,2,1], [10,8,1], [7,5,1], [5,3,0]
    ],
    faces = [
        [0,1,5], [1,2,4,5],// [2,3,4], [6,11,7],
        [7,11,10,8], [8,10,9],
        [7,8,2,1], [9,10,4,3], [10,11,5,4], [0,5,11,6]
    ],
    p = [for(i=[0:len(pts)-1]) [pts[i][0]-5, pts[i][1]-5, pts[i][2]+1] ],
    p0 = [scale([0.1, 0.1, 0.5], move([5,5,0], p)), faces],
    p1 = [scale([0.1, 0.1, 0.5], move([5,5,0], zrot(90, p))), faces],
    p2 = [scale([0.1, 0.1, 0.5], move([5,5,0], zrot(180, p))), faces],
    p3 = [scale([0.1, 0.1, 0.5], move([5,5,0], zrot(-90, p))), faces],
    vnfjoin = vnf_join([p0,p1,p2,p3]),
    vnfmerge = vnf_merge_points(vnfjoin, 0.01),
    vnfdrop = vnf_drop_unused_points(vnfmerge)
) vnf_triangulate(vnfdrop);

What I'd like to do here is make it so that it transitions from a square at the base to a circle at the top.

Keep in mind that if we add a capability we want it to be reasonable generic, not a specialized capability tuned to the specific needs of one user.  We don't want the next user to come along and say "Well, that texturing VNF feature is nice and all, but it doesn't work on my slightly different case...."   So we need to think about what that generic capability would look like, what are the different cases of interest, and can we address all those cases, or clearly exclude cases.
BTW, I think you should try not triangulating your texture VNF.  I found that triangulated texture VNFs produce more artifacts when they get sliced to wrap around a curve.   That's one of those examples of how triangulating seemed to cause problems, but Revar had made all the texture VNFs fully triangulated.  I actually went through and untriangulated most of them.  And of course, that raises an additional complication I hadn't even thought of, that of possibly slicing the VNF tile to wrap it around the mesh you're trying to texture.  It's not clear how you would know where to do that.

I agree it should be generic. So why not make sweep() work with textures instead of plain surfaces? To start with, to keep it simple, don't interpolate the textures, just fit each texture unit inside each grid square.
Yes, I agree about triangulating. It shouldn't matter if I use 'vnf_triangulate()' or rely on OpenSCAD to triangulate things automatically, either way I am not deciding on where the triangles are. I do notice differences in my example in the "thrown together" view if I use vnf_triangulate() or omit it.

The reason not to start simple is that if the goal is to eventually handle the other case, it might turn out that the effort for the simple implementation was completely wasted if it happens that the other one also handles the simple case.
Your basket texture looks great when placed onto a cylinder with a lot of points, but not quite as awesome when placed onto a circle with a low point count.  If we implemented the one texture per grid square algorithm it wouldn't be ideal for your application.
I'm not sure what you were trying to figure out from reading the skin.scad code.  The algorithms in there are some of the most complex in BOSL2, especially the algorithm for point matching mismatched polygons in skin().  But that is exactly the thing that will make textures bomb because it will produce triangular vertices.   The right approach is to make a texturing version of vnf_vertex_array.   That's what the methods in skin.scad actually call to construct their final result.
No, actually in various situations it definitely DOES matter if your VNF is triangulated.  There's a whole family of surface smoothing algorithms that operate on faces and do different things if the surface is triangulated.  It's much more of a pain to compute things about polyhedra on triangulated ones.  And when you apply a VNF texture to a curved object, the VNF tile gets sliced and that slicing can introduce funny looking artifacts, which tend to be more of an issue the more faces there are in the VNF---so worse if it's triangulated.  I actually thought there was a bug because it was producing such weird looking results when I ran across the behavior.
It doesn't appears that your basket suffers from the problem though.  I think it's because you have right angles instead of sloping sides on the edges of the "bands" of the weave.   I tried it out and didn't notice much effect from triangulating or not in that case.
More general version of vnf_tri_array() sounds potentially useful.  Does it do the same thing as the existing code on the cases covered by the existing code?

Yes, I've finished the more general version of vnf_tri_array() and tested it on all the examples, as well as additional examples that the existing version cannot handle.
My new version is backward-compatible with the existing one, but includes some optional parameters. The full call would look like this, with default values shown:
vnf = vnf_tri_array(points, row_wrap=false, reverse=false, col_wrap=false, caps=false, cap1=false, cap2=false);
The additional parameters are col_wrap, caps, cap1, and cap2, following the conventions established in other BOSL2 functions. With col_wrap you no longer need to join two halves together as shown in the example; those cones can be created in a single pass.
The new code isn't any longer than the original. It does rely on a recursive triangulation function I wrote, which walks around the vertices of two paths in irregular order, depending on which of the next vertices result in the smallest possible triangle.
I expected this algorithm to produce minor triangulation differences from the original vnf_tri_array(), but I was surprised when produced identical results for the test cases given in the documentation. For example:

The cone on the left is from the original vnf_tri_array() made by joining two halves. The one on the right is from my new version, made in a single pass.
Question about code comments: It seems that any comments starting with // ...outside the modules and functions get picked up to include in documentation pages. Can I use /*...*/ comments before some code to document what it does, without confusing the documentation engine? Or would it be best to put all comments inside the functions and modules?

I'm going to change vnf_tri_array() example 5 to have not only irregular row sizes but changing by arbitrary lengths. The original restricted the row length difference to a maximum of 2. Here's example 5 re-done:
include <BOSL2/std.scad>
lens = [10,9,3,2,5,8,2,5,3,10,6,2];
pts = [for(y=idx(lens)) lerpn([-lens[y],y,y],[lens[y],y,y],lens[y])];
vnf = vnf_tri_array(pts);
vnf_wireframe(vnf,width=0.1);
color("red")move_copies(flatten(pts)) sphere(r=.15,$fn=9);

How about instead add a new example and give a text noting that this example has larger length changes, resulting in the more triangles meeting at points and longer skinnier triangles.   You may have noticed that we're not parsimonious with examples.
I was pondering the cone and am a little surprised that the triangles reverse in exactly the same places.
If you want a few more test cases to play with, run your code on the rounded_prism examples.  Most of them are using vnf_tri_array() indirectly.

I could have an example that does both, showing rows different by 1, 2, or more. I didn't really see the need to retain the examples illustrating the restrictive cases (rows different by 1 or 2 points) because that isn't a restriction anymore.
I was also surprised that the cones looked the same. I even overlayed the two wireframes and didn't see a difference.
I see documentation for rounded_prism() but I don't see any examples. I can make some up, but it would be good to have some already-agreed-upon test cases. I did test all the examples in the bent_cutout_mask() section that follows, and the results looked identical to the pictures.

This is the demo I came up with to show the effects of wrapping rows and columns and capping.
A simple open-ended shape is made from a series of arcs with different number of vertices at different elevations:
polypoints = [12, 16, 25, 26, 25, 18, 10];
arc_elev = [1, 0, 6, 8, 10, 15, 14];
rows = [
    for(i = [0:len(arc_elev)-1])
        path3d(arc(r=polypoints[i]*2, angle=280, $fn=polypoints[i]), 5*arc_elev[i])
];

Clockwise from upper left:

vnf1 = vnf_tri_array(rows, reverse=true); // no row or column wrapping
vnf2 = vnf_tri_array(rows, reverse=true, row_wrap=true); // wrap rows only
vnf3 = vnf_tri_array(rows, reverse=true, row_wrap=true, col_wrap=true); // wrap rows and columns
vnf4 = vnf_tri_array(rows, reverse=true, col_wrap=true, caps=true); // wrap columns only, with caps

It is not possible to wrap rows while adding caps. If you do, the row wrapping overrides the caps. Also I had to set reverse=true here because arcs go around counterclockwise while BOSL2 polygons go around clockwise.
It would be nice if the renderer on the wiki could render in the "thrown together" mode so that the purple interior faces are visible. It's harder to see what's going on with colors the same on both sides of a face.

It would be nice if the renderer on the wiki could render in the "thrown together" mode so that the purple interior faces are visible. It's harder to see what's going on with colors the same on both sides of a face.

That would be the "ThrownTogether" meta tag for the Example or Figure.

Note that it's OpenSCAD that has chosen clockwise as the correct direction for polygons, not BOSL2.
Having multiple examples may be useful because users may be looking for a thing that looks like what they want to do, or what they want their result to look like, and a more complex example may demonstrate the power but not look like a simpler case to a user.   The case of 1 and 2 offset is more regular looking as well and the contrast where you start getting multiple skinny triangles is notable.
Instead of having row wrapping override caps you should assert an error for the incompatible options.  Always better to assert an error rather than guessing what the user meant.
  The wiki is broken.  Look in the rounding.scad code for the examples.
This actually gets to a point you asked and I didn't answer.  (Don't recall where you asked.)  You can put your comments where ever you want.  The docsgen system only processes comments that start with the magic header names and it stops  as soon as it reaches a blank line.  A stray blank line nuked the rounded_prism docs.  :(

Oh, another thing, if you're putting that above example in the wiki, make it four examples.  Yeah, some code is repeated, but the example renders in the wiki are small with each one separated they get their own, clear caption.   (Just about any time I've done combined pics like that I end up splitting them up.)

Thank you. Yes, I can make separate examples. I mainly wanted to know if that was an acceptable demo.
About assert: I've always felt that software should fall back gracefully rather than exit with an error. If you're going to connect the rows of an array, it makes sense to ignore the caps. However, since asserting errors is the convention you're using, I'll do that.
I grepped "vnf_tri_array" in all the source files in the BOSL2 library, and I found only two instances that call it: bezier_vnf_degenerate_patch() in beziers.scad and spheroid() in shape3d.scad.

Well, the problem with "fall back gracefully" is that you have to guess how to fall back, and if you don't guess the user's intent, it can instead result in massive confusion, where the user is like WTF, why didn't it obey the foobar option I gave it and the problem is the user didn't realize or forgot that he gave some other option that was incompatible, and the code decided to ignore foobar when what the user wanted was to enforce foobar and ignore the other thing.  Or for your example, obviously if you're going to add caps you need to ignore the instruction to connect rows!  Unless you have a compelling case that the "graceful fallback" absolutely must be the right thing to do, you should assert an error so the user knows they gave bogus input and they can fix it to be what they want, and not bumble around in confusion.   I have personally been in this very state of confusion with BOSL2 code that didn't assert errors for incompatible options, so I really believe it to be a real concern.    (I have gone an added asserts to the code specifically because I spent too long confused by something.)   In my opinion, nothing is worse than user confusion, and the supposed convenience of "doing the right thing" on invalid code doesn't match the inconvenience of the potential confusion that comes as a side effect.
I think Revar may be less concerned about this issue, as I know he's done things where different options override other options and the first option gets ignored.  I don't like that kind of thing and have generally tried to stamp it out.  If you ask for something to be rounded and chamfered it should be an ERROR, not the code picks its favorite for you, and you stare in dumfounded puzzlement at a chamfer and try different rounding radii with no effect.
So did you subsequently grep for bezier_vnf_degenerate_patch to find all uses of that, like in particular, the ones that are in rounded_prism()?   The entire reason that vnf_tri_array() even exists is that without it, sometimes rounded_prism produced geometry that failed CGAL due to points in the patch getting too close together.

I tested all of the examples provided that use vnf_tri_array() (and there are many in spheroid() and bezier_degenerate_patch()).
I saw no differences with any of the spheroids, but looking at the code, it seems that spheroid takes only the first polygon returned from vnf_tri_array().
For the bezier patches, however, I finally came across differences between the original triangulation and my algorithm. In nearly all cases where there's a difference, the new algorithm provides a more symmetrical triangulation.
For example, here's the original, from the documentation:

My algorithm does this:

I found only one where the original has more symmetrical triangles. Here's the original:

And here's what the new algorithm does:

All this new algorithm does is choose the shortest line segment that makes a new triangle as it walks along the two paths. The original algorithm didn't do this, so I expect that we'd run across some differences here and there.

So in thinking about this, your algorithm uses geometric information.  Mine does not.  So differences will occur even if the point count doesn't change from one row to the next, if the points happen to be spaced unevenly between the rows.  So if you make the geometry weird you'll get bigger differences, like if the points in one row are really far away from the next row your code will make a bunch of triangles that share a vertex and mine will make a regular triangulation.   I'm not sure which result is better---perhaps incorporating geometric information improves things.  It's a kind of pathological case.  I don't know if there are any important cases where things are very different.   I also wonder if there's any alternative to segment length for the objective function.  Hmmm. I also am now wondering if I implemented something like this for skin() and didn't think about broader applicability.
In the final example above it's interesting that symmetry is broken for your code.  I guess that happens because an equality occurs in the inequality test?

I finished testing all the examples in rounded_prism(). All worked as expected. One of the examples is given deliberately as an example of failure, but I think it may be possible to make that shape with the new vnf_tri_array().

So if you make the geometry weird you'll get bigger differences, like if the points in one row are really far away from the next row your code will make a bunch of triangles that share a vertex and mine will make a regular triangulation. I'm not sure which result is better

I am working on an improvment to mitigate this -- basically, if two rows are equal in length it will make two triangles per interval instead of potentially making multiple triangles from one point. This should provide a happy medium: Unequal length rows get triangulated my new way, but equal length rows get triangulated so that every quad still gets two triangles. This would avoid the ambiguity in relationships between the vertices of two same-length polygons where one is rotated in its plane, like that failed rounded prism example.

I also wonder if there's any alternative to segment length for the objective function.

I remember giving this some thought when I developed the algorithm. At first I considered computing the area of each possible new triangle and picking the smallest one, but then after drawing several examples out I figured out that the shortest next segment accomplishes the same thing.

In the final example above it's interesting that symmetry is broken for your code. I guess that happens because an equality occurs in the inequality test?

Yes, I think so. I'm comparing two distances with < and it picks the next vertex of the triangle on the first or second row depending on the result.
By the way, this conversation has veered way off the original objective of this ticket. I think it should be closed, and if the requested feature is planned for the future, it would be best to create another ticket for it. When I create a new PR for this replacment of vnf_tri_array() I'm sure there will be more to discuss.

Yeah, you did kinda change the subject there.  It may possibly make more sense for me to delete the posts on the vnf_tri_array to keep the thoughts on the previous topic rather than start a new issue.  I'm not sure.  Do you think you can write a summary for a new issue that captures everything we both said?   I guess you can decide.  One observation I can't remember if I made is that if we solved this problem we could instantly solve #1346 by invoking it.
The matter of triangulation is more complicated than it seems at first.   Could you triangulate equal row length pairs by just calling vnf_vertex_array on the pair?   One complication that arises here is do you support all the styles for the equal row pairs, in an effort to make the tri_array code match the regular array code on regular arrays.
And this gets to the question: of the 9 (?) supported styles, are they all different on some example?  And how should a user decide between them.  I have no clue.  Issue #521 has been open for a long time asking for the answer.  I know somebody claimed at some point than the minimal area division is optimal.   Do we even know that the division into quads and subsquent bisection of quads is always best?  Maybe your greedy length division is better sometimes, even though it doesn't make quads.   (Note:  I don't know what "better" means.)   Presumably it all becomes not so important in the limit as the grid size goes to zero, but for coarse grids, as I noted before, it can completely change the shape, as you can see from the "diamonds" texture where you can get 3 completely different results depending on the style parameter.


Edited MineMeld Integration tutorial

Status
Ready
Description
I reviewed and edited the text in this tutorial.

@glicht I thought I fixed all.  I cannot seem to resolve the conflicts.  Can you help me?


[Storage] Moving Azure/azure-storage-js repo

Moving azure-storage-js into the packages/@azure/storage folder

Can you squash the last two commits of "disable the automatic publishing for storage package"? Since we will use the Merge Pull Request option when merging, the two will appear in the history if not squashed.


Add push notifications to rethinkdb.com

Users who visit documentation pages should be asked whether or not they'd like to receive updates from RethinkDB. Using service workers we could send browser push notifications when an update to RethinkDB occurs, driving traffic to our site and retaining engagement from people on the fence about RethinkDB.
I'll post the video demo from Google when it's up.

@KittyBot What do you think? Can we just close this issue?


Add examples for margin and padding css hover

I almost always forget what the values are for the padding property. Having these accessible directly through a hover would be extremely helpful.

The data is compiled from https://github.com/microsoft/vscode-custom-data/tree/master/web-data, so changes should go into there.
With that said, we need MDN to have metadata on shorthand properties to do this feature.


Feature request: enable flags/prefs in BrowserStack launcher

Currently BowserStack launcher in karma customLaunchers can not set browser flags/prefs like other launchers whose base is 'Chrome' or 'Firefox'. Example of flags: https://github.com/karma-runner/karma-chrome-launcher#configuration

would be great to have this feature

This is what I've found so far. I've succeeded to make a Python code that starts Incognito Chrome on Browserstack:

Python code
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from time import sleep
from datetime import datetime
import os

desired_cap = {
    "browser": "Chrome",
    "goog:chromeOptions": {
        "args": ["incognito", ],
        "w3c": False
    },
}

driver = webdriver.Remote(
    # The environment variable value must be<EMAIL_ADDRESS>    command_executor=os.environ.get('BROWSERSTACK_HUB_URL'),
    desired_capabilities=desired_cap
)

print("Session: https://automate.browserstack.com/dashboard/v2/sessions/" + driver.session_id)
print("protocol w3c:" + str(driver.w3c))

driver.get("https://google.com/")
driver.quit()

I've trie to use the same capabilities in custom launchers in a Karma configuration. The capabilities have got to BrowserStack sessions (I can see them in "Input Capabilities"), but BrowserStack ignores them for some reason.

Karma configuration
// Karma configuration
// Generated on Wed Oct 07 2015 12:43:21 GMT+0530 (IST)

module.exports = function(config) {
  config.set({

    // base path that will be used to resolve all patterns (eg. files, exclude)
    basePath: '',

    // hostname for local
    hostname: 'bs-local.com',

    // frameworks to use
    // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
    frameworks: ['qunit'],

    //plugins
    plugins: ['karma-qunit', 'karma-browserstack-launcher'],

    // list of files / patterns to load in the browser
    files: [
      'src/*.js',
      'tests/*.js'
    ],

    // list of files to exclude
    exclude: [
    ],

    // preprocess matching files before serving them to the browser
    // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
    preprocessors: {
    },

    // test results reporter to use
    // possible values: 'dots', 'progress'
    // available reporters: https://npmjs.org/browse/keyword/karma-reporter
    reporters: ['progress', 'BrowserStack'],

    // web server host and port
    port: 9876,

    // enable / disable colors in the output (reporters and logs)
    colors: true,

    // level of logging
    // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
    logLevel: config.LOG_INFO,

    // enable / disable watching file and executing tests whenever any file changes
    autoWatch: false,

    browserStack: {
      username: process.env.BROWSERSTACK_USERNAME,
      accessKey: process.env.BROWSERSTACK_ACCESS_KEY,
      apiClientEndpoint: 'https://api.browserstack.com',
      build: String(Math.random()),
    },

    // define browsers
    customLaunchers: {
      bs_chrome_win: {
        base: 'BrowserStack',
        browser: 'Chrome',
        os: 'Windows',
        os_version: '10',
        'goog:chromeOptions': {
          args: ['incognito'],
          w3c: true,
        },
      },
      bs_chrome_mac: {
        base: 'BrowserStack',
        browser: 'Chrome',
        os: 'OS X',
        os_version: 'Catalina',
        'goog:chromeOptions': {
          args: ['incognito'],
          w3c: true,
        },
      },
      bs_firefox_win: {
        base: 'BrowserStack',
        browser: 'firefox',
        os: 'Windows',
        os_version: '10',
        'moz:firefoxOptions': {
          prefs: {
            'browser.privatebrowsing.autostart': true,
          },
        },
      },
      bs_firefox_mac: {
        base: 'BrowserStack',
        browser: 'firefox',
        os: 'OS X',
        os_version: 'Catalina',
        'moz:firefoxOptions': {
          prefs: {
            'browser.privatebrowsing.autostart': true,
          },
        },
      },
    },

    captureTimeout: 3e5,
    browserDisconnectTolerance: 0,
    browserDisconnectTimeout: 3e5,
    browserSocketTimeout: 1.2e5,
    browserNoActivityTimeout: 3e5,

    browsers: ['bs_chrome_win', 'bs_chrome_mac', 'bs_firefox_win', 'bs_firefox_mac'],
    // start these browsers
    // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher

    // Continuous Integration mode
    // if true, Karma captures browsers, runs the tests and exits
    singleRun: true
  })
}

This is what BrowserStack support says about passing keys to browsers from Karma:

Unfortunately, a PR to fix the runner may not work here as with the JS testing API, chromeOptions will not get honoured.
This would be a feature request with no ETA at the moment.
For every session that you initiate on Browserstack, you will be assigned a clean browser. In case you strictly need to use incognito mode, I will recommend switching to Selenium.
That being said, I have noted down your account details and will reach out to you once we have implemented the feature.

As far as I understand, yhis feature depends on BrowserStack and not on karma-browserstack-launcher unfortunately.


Declare some classes as abstract

Description
I think these classes were done to be extended.
If you think there is no such need, please just close it.
Checklist:

[x] Securely signed commits
[x] Component(s) with PHPdocs
[x] Unit testing, with >80% coverage
[ ] User guide updated
[x] Conforms to style guide

That feels "funny".
The fact that Model has a constructor tells me that is is meant to be instantiable.
Controller, on the other hand, is not meant to be instantiable. That has come in conversation before, with the intent being that an extending class might have a constructor, but we don't want to rely on that inside our class.
Message feels like a concrete class to me, given its flexibility.
I think it better to keep these as base classes, and not mess with trying to treat them as abstract. Fewer hassles.
It also looks like making the controller abstract messes up some of the output buffering - risky tests in travis-ci.

The other question to look at, besides are they meant to be instantiated, is where or not they have any methods the extending class are required to implement. If the answer is no, to that, I don't see any benefit from making them an abstract class. The definition I've always understood for an abstract class was it was one that had abstract methods. None of these do, so I say keep them as non-abstract classes.

So, not a good class for abstract classes, sorry.


how to test my model？

hi，i 'd like to know how to test my model?actually the test_fcn8s.py is just a upsampling operation.

Maybe you are looking for evaluate.py?


Allow load_from_checkpoint with ignore size mismatch

I want to load a checkpoint to finetune a model on other dataset, I have to change fc layer to fit num_classes. Now  load_from_checkpoint will throws size mismatch error.
Can you add a option, to ignore size mismatch layer when load from checkpoint

Could you try setting string=False in load_from_checkpoint?
https://pytorch-lightning.readthedocs.io/en/latest/weights_loading.html?highlight=load_from_checkpoint

string=False will ignore params with different name. Not params with same name but different size.
Such as fc layer in checkpoint is 10 x 5, my new model change its size to 10 x 3.  load_from_checkpoint with string=False will throw errors says size mismatch

then is it important that the last layer is called fc or could the new layer be called something else fc2?

or could you set the layer after loading it from checkpoint:
model = Model() # old architecture
model.load_from_checkpoint(...)
model.fc = nn.Linear(10,3) # update fc layer

I init my model in init method, size of fc will change according to dataset. But load_from_checkpoint is called from main.py.  Now I have to implement my own load checkpoint function to load state dict. Can pytorch-lightning support this function in load_from_checkpoint by adding a option, such as skip_mismatch=True

you can update your checkpoint in on_load_checkpoint.
Also there seems to be a similar proposal in pytorch repo too.
https://github.com/pytorch/pytorch/pull/39144
https://github.com/pytorch/pytorch/issues/40859

To xiadingZ
I suffer the same error as you.
Can you share your own load check point function code?

this is my code
   def load_finetune_checkpoint(self, path):
        m = torch.load(path)['state_dict']
        model_dict = self.state_dict()
        for k in m.keys():
            if 'fc_vidout' in k or 'fc_total' in k:
                continue

            if k in model_dict:
                pname = k
                pval = m[k]
                model_dict[pname] = pval.clone().to(model_dict[pname].device)

        self.load_state_dict(model_dict)

it can only restore state dict, but not hyperparameters, and I specify the param name, for a quick fix

Thanks xiadingZ
It works for me!
I hope lightning supports skip_mismatch=True as you mentioned above.
Thanks,

Thank you @rohitgr7 !
Overloading on_load_checkpoint() in my pl.Module works like a charm!
    def on_load_checkpoint(self, checkpoint: dict) -> None:
        state_dict = checkpoint["state_dict"]
        model_state_dict = self.state_dict()
        is_changed = False
        for k in state_dict:
            if k in model_state_dict:
                if state_dict[k].shape != model_state_dict[k].shape:
                    logger.info(f"Skip loading parameter: {k}, "
                                f"required shape: {model_state_dict[k].shape}, "
                                f"loaded shape: {state_dict[k].shape}")
                    state_dict[k] = model_state_dict[k]
                    is_changed = True
            else:
                logger.info(f"Dropping parameter {k}")
                is_changed = True

        if is_changed:
            checkpoint.pop("optimizer_states", None)

great!!

Popping "optimizer_states" would lead to an error if you use it together with resume_from_checkpoint. So:

If training from a fresh start, it's OK to skip mismatched values and pop optimizer_states
If training resumes from a checkpoint, this method won't work, because you can't pop optimizer_states and there will be shape mismatch between the tensor and what is stored in optimizer_states.


Fix handling of NaN sign throughout parsing and serialization

I learned recently in https://github.com/rust-lang/miri/issues/3139 that as produces NaN with a nondeterministic sign, and separately that the sign of f64::NAN is not specified (may be a negative NaN). As of https://github.com/rust-lang/rust/pull/116551 Miri has begun intentionally exercising these cases.
This PR fixes places where -nan would incorrectly be deserialized as a positive NaN, nan or +nan would be deserialized as a negative NaN, negative NaN would be serialized as nan, or positive NaN would be serialized as -nan. It adds tests to confirm the expected sign of NaN values, and improves existing tests related to NaN.

Pre-commit failure appears unrelated: #638.

Wow, that is terrible.  Thanks for not just letting me know, but fixing !  I've at least opened rust-lang/rust-clippy#11717 and rust-lang/rust-clippy#11718 in the hopes that we can enforce catching of these problems in the future.

To double check my understanding, we should also have a copysign on this use of nan, right?
https://github.com/toml-rs/toml/blob/main/crates/toml_edit/src/parser/numbers.rs#L304

Indeed; good call.

Thanks!  This last change made me realize I need to go request another pedantic clippy lint: nan constants without a sign.

Note that there are other bits in the NaN (observable via to_bits()) that are still potentially lost in the conversion.
I am somewhat surprised that the sign of the NaN is considered so significant that there were a bunch of tests checking it, and that the code is being adjusted to preserve it. What is the motivation for that? https://github.com/rust-lang/rfcs/pull/3514 should possibly be amended to at least document this as a downside of the non-deterministic sign semantics.

I am somewhat surprised that the sign of the NaN is considered so significant that there were a bunch of tests checking it, and that the code is being adjusted to preserve it. What is the motivation for that

The sign of nan is specified in  the TOML spec, so to be able to properly preserve it, we need to track it.


Taskbar Color

Any solution?
I'd like to make everything more visible. Perhaps even to change font/effect color not to be white.

Currently i don't know if it's possible but, i will mark it as a "feature request" for now.


Different options, different resulting css, but same chunkhash

With changed stylus-loader's options (options.import) or changed contents of imported styles I got new css, but with the same chunkhash.
Is it bug or feature?
Example: https://github.com/avanes/stylus-loader-chunkhash-test

Oh, solution is simple: use [contenthash] with extract-text-plugin.


chore: ignore indirect dependencies for test project

:tada: This PR is included in version 1.13.2 :tada:
The release is available on:

v1.13.2
GitHub release

Your semantic-release bot :package::rocket:


adds auxiliary card builders

What 🕵 🔍

Adds special state cards (no cards, final card)

Codecov Report

Merging #7 (bc9c845) into main (507b74f) will decrease coverage by 1.64%.
The diff coverage is 81.25%.

@@            Coverage Diff             @@
##             main       #7      +/-   ##
==========================================
- Coverage   90.33%   88.69%   -1.65%
==========================================
  Files           6        6
  Lines         269      283      +14
==========================================
+ Hits          243      251       +8
- Misses         26       32       +6

Impacted Files
Coverage Δ

lib/xayn_card_view/card_view.dart
84.52% <80.64%> (-2.49%)
:arrow_down:

lib/xayn_card_view/card_view_listeners_mixin.dart
91.66% <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 507b74f...bc9c845. Read the comment docs.


Handle matching coordinates and dimensions with differing shapes

#368
This seems to be specific to 64bit netcdf, so I added a new test case for that specific case.

Perhaps the test requires a certain version of scipy/netcdf/xarray? I know not all packages are still releasing for py38.

Perhaps the test requires a certain version of scipy/netcdf/xarray? I know not all packages are still releasing for py38.

Yeah it requires XArray 2023.8.0. Do you know the best way to handle that?

Skip the test on py38, or test the xarray version


HMR does not reload when translation file is changed

Current behavior
When hmr is enabled and a translation file is changed the application is not reloaded.
Expected behavior
When a translation file is changed the application hot reloads and displays new translations.
How do you think that we should fix this?
Can this even be fixed? Do I need to use the WebpackTranslateLoader  instead of TranslateHttpLoader to fix this? Is there any other way?
Minimal reproduction of the problem with instructions
Go to https://stackblitz.com/github/ngx-translate/example
Change something in en.json
App is not reloaded
Environment

ngx-translate version: 10.0.1
Angular version: 6.0.0

Browser:
- [x ] Chrome (desktop) version XX
- [ ] Chrome (Android) version XX
- [ ] Chrome (iOS) version XX
- [ ] Firefox version XX
- [ ] Safari (desktop) version XX
- [ ] Safari (iOS) version XX
- [ ] IE version XX
- [ ] Edge version XX

 class WebpackTranslateLoader implements TranslateLoader {
  getTranslation(lang: string): Observable<any> {
    return from(import(`../assets/i18n/${lang}.json`));
  }
}
...
TranslateModule.forRoot({
  loader: {
    provide: TranslateLoader,
    useClass: WebpackTranslateLoader,
  },
}),


Implement beforeUpload and afterUpload hooks

Overview
This PR will implement support for two new options that can be passed to notarize - beforeUpload and afterUpload. These options can be used to implement hook functions that can limit upload concurrency during the process of concurrently notarizing multiple apps.
Justification
Uploading an app for notarization causes a Transporter java process to be spawned for each upload:

Beyond the obvious high memory usage, these processes seem to have extremely high resource requirements that can cause system instability when too many are run concurrently. I have seen this manifest on 2 separate machines, when running a build process that attempts to notarize 7 apps concurrently:

On my machine (MacBook Pro (13-inch, 2016, Four Thunderbolt 3 Ports), 2.9 GHz Dual-Core Intel Core i5, 16 GB 2133 MHz LPDDR3), my network connection will "hang" or "crash". That is, if connected to WiFi, the connection will drop out. This occurs 100% of the time. I have also tried a wired network connection, with similar results - the network hangs and needs to be disconnected and reconnected to begin working again.
On my colleague's machine (MacBook Pro (16-inch, 2019), 2.6 GHz 6-Core Intel Core i7, 16 GB 2667 MHz DDR4), the entire OS crashes and performs a hard reboot, also with 100% consistency.

Despite this, there is still significant benefit to being able to perform notarization (as a whole) concurrently.
Given how long it can take for Apple to actually complete the process and return a result, and the fact that the process of waiting/polling for this result is not very resource intensive, uploading some apps while waiting for others to finish notarizing can result in build times that are many minutes shorter overall.
Approach taken
The addition of the beforeUpload and afterUpload hook functions allow implementors to integrate upload concurrency limiting without being overly opinionated about how that limiting is accomplished. These hooks could be used equally well with OS-level or JS-level semaphore-type concurrency controls.
The names of the options were chosen based upon prior art - the electron-builder hook system.

I think passing the hooks in some kind of sub-key like lifecycle or hooks makes a lot of sense. If the list of hooks grows, it won't clutter up the list of "core" options as much. Would lifecycle be your preferred name?
I don't think using an EventEmitter is a great solution here though, because the notarize function wouldn't be able to await the event handlers (emit only returns a boolean). Meaning implementors cannot "pause" the notarization before or after the upload phase.

I think passing the hooks in some kind of sub-key like lifecycle or hooks makes a lot of sense. If the list of hooks grows, it won't clutter up the list of "core" options as much. Would lifecycle be your preferred name?
I don't think using an EventEmitter is a great solution here though, because the notarize function wouldn't be able to await the event handlers (emit only returns a boolean). Meaning implementors cannot "pause" the notarization before or after the upload phase.

I've refactored to use a lifecycle option to group together the hook functions. The README has also been updated to reflect the change.

I've refactored to use a lifecycle option to group together the hook functions. The README has also been updated to reflect the change.

Is there anything more I can do here to make this an easier decision to merge?


Update manifest.json to prevent conflicts with HA (fix for 2024.1)

Changed the package pinning into the suggested >= format, so future updates to core package will not break this component - implementing the posts I shared in https://github.com/danieldotnl/ha-multiscrape/issues/301#issuecomment-1873762239
Multiscrape should list the lowest needed version it is compatible with, and let core figure out which package to pick. There could be an upper bound as well, if a newer package is incompatible (i.e.: lxml is pinned to below 5.0.0 in HA core right now, as another integration breaks with that version). So if you need  a newer version because of a fix, this should be updated. If it isn't needed, you can leave it as is and core will figure out what to do.
Tested locally, works fine again on HA 2024.1. Someone should test for 2023.12.
Fixes #301

Thank you @hmmbob !!


Persistence rewamp

What started as an attempt to fix #366 ended up being quite substantial refactoring of the Blockchain->Store and Server->Blockchain interactions. As usually, some additional problems were noted and fixed along the way.
I'm planning to make some additional changes into the Blockchain->Store interface to further simplify it (see #334).

What is nice: it fixes #410.
Ran around 20-30 times locally exactly one test and around 20 times full suite and all of them are green. Honestly quite surprised. But interesting to find the right place for a fix now.

in general LGTM. Have several questions and GolangCI looks angry =)

Testnet:
panic: runtime error: index out of range

goroutine 50 [running]:
github.com/CityOfZion/neo-go/pkg/core.(*Blockchain).storeBlock(0xc0000c2000, 0xc0027f6a80, 0x6e00000000000001, 0x0)
        /home/rik/dev/neo-go/pkg/core/blockchain.go:339 +0x153d
github.com/CityOfZion/neo-go/pkg/core.(*Blockchain).AddBlock(0xc0000c2000, 0xc0027f6a80, 0xc00281c210, 0x1)
        /home/rik/dev/neo-go/pkg/core/blockchain.go:213 +0x294
github.com/CityOfZion/neo-go/pkg/network.(*blockQueue).run(0xc00000d320)
        /home/rik/dev/neo-go/pkg/network/blockqueue.go:38 +0x10b
created by github.com/CityOfZion/neo-go/pkg/network.(*Server).Start
        /home/rik/dev/neo-go/pkg/network/server.go:102 +0x263

OK, it's not ready yet and I will have to do a bit more before merging it (I know where the issue is, but I need to fix it properly).

Fixed now, it doesn't look sexy, but it works, so it can be merged (and the sexy part will follow).


Treat Xamarin .workbook files as markdown

Xamarin Workbook files are interactive coding documents for C#, serialized as
markdown files. They include a YAML front matter header block with some
metadata. Interactive code cells are included as csharp fenced code blocks.
An example can be found here:
https://github.com/xamarin/Workbooks/blob/master/csharp/csharp6/csharp6.workbook
Treated as markdown, it would appear like so:
https://gist.github.com/sandyarmstrong/e331dfeaf89cbce89043a1c31faa1297
They are becoming increasingly popular as teaching documents. There are a few hundred already in GitHub today: https://github.com/search?utf8=✓&q=extension%3Aworkbook+NOT+nothack&type=Code&ref=searchresults .

Oh, I see that samples are required now. I will add one.

I do not believe the Travis build issues have anything to do with my commit?

I do not believe the Travis build issues have anything to do with my commit?

@sandyarmstrong nope, doesn't look like it. Can you please merge in master and we'll see how things play out.

@lildude rebased on latest master. Looks like the build passed!

Thanks! Any idea when this will hit github.com?

When I build the next release gem and create & merge the PR that updates github.com 😁.  I've merged in quite a few things today and am waiting on a few nudges, so it'll probably be early next week before I even start.
One thing is for sure: it'll be before 9 May.


don't pass initialI18nStore to withSSR on the server-side.

passing initial store on the server causes useSSR (used by
withSSR) to overwrite the server's global i18next ResourceStore
frontends will still pass the initial store so rehydration works

resolves https://github.com/isaachinman/next-i18next/issues/369
I don't know if this is the ideal fix, but this has resolved my issues in production. Another potential solution is to have useSSR merge initialI18nStore into ResourceStore instead of replacing it.

How then will localisation happen server side, without a store?

Closing in favour of #372.


⚠ Bofrost.hr has degraded performance

In 0859ef2, Bofrost.hr (https://www.bofrost.hr) experienced degraded performance:

HTTP code: 200
Response time: 3122 ms

Resolved: Bofrost.hr performance has improved in 3ac4061.


How to read Gogs?

How should I read Gogs? does it reads 'go gs' or 'gog s'? If it reads 'go gs', what's the meaning of 'gs'?

what's the meaning of 'gs'

It means "git service"
However, I don't know how to pronounce "Gogs", either.

@Antimoney thanks, then I thinks it may be read as 'go gs' to coordinate with another project 'go cd'.

Hi!

From https://twitter.com/gogshq.

@Unknwon Thanks.  This really should be put on the github main README.

:rofl: hmm... good point. Will consider!


Warn on commits to non-default branches.

This will make triagebot post a warning when a PR is opened against a non-master branch.

@bors r+

:pushpin: Commit 620f383a52de30c3c52bdb2e039148d4435127e3 has been approved by weihanglo
It is now in the queue for this repository.

:hourglass: Testing commit 620f383a52de30c3c52bdb2e039148d4435127e3 with merge 4ae3576c42ca1490ab109ad7de3358d119f10cda...

:sunny: Test successful - checks-actions
Approved by: weihanglo
Pushing 4ae3576c42ca1490ab109ad7de3358d119f10cda to master...

:sunny: Test successful - checks-actions
Approved by: weihanglo
Pushing 4ae3576c42ca1490ab109ad7de3358d119f10cda to master...


Retrieving socket options in access loggers

Problem we're trying to solve: extract downstream/upstream remote socket options for use in an access logger.
I think we can do this for downstream via a custom listener filter that has access to the Socket and place this in dynamic metadata, which the access logger can then consume.
I don't see a mechanism to do this upstream, upstream network filters don't have a way to reach into the Socket.

Is this a correct assessment of the current situation?
Would it be reasonable to provide upstream network filters the ability to peek at the Socket for getsockopt (possibly wrapped to limit interactions to only this method)?
Is there a more principled way we could ask Envoy to collection a set of socket options and make them available for logging? I can imagine a config option to specify which socket options to collect, alongside which ones to set as we have today.

CC @florincoras @mattklein123 @eziskind

It may depend on what socket options are of interest. If this comes from a specific request can we get a list of options?

This is for a Google-internal use-case where we want to get a custom socket option that has been set by the virtual networking layer.

Would it be reasonable to provide upstream network filters the ability to peek at the Socket for getsockopt (possibly wrapped to limit interactions to only this method)?

This seems OK to me at the network filter level, especially if it's only const access.

Is there a more principled way we could ask Envoy to collection a set of socket options and make them available for logging? I can imagine a config option to specify which socket options to collect, alongside which ones to set as we have today.

I think we could do this, but I'm not sure it's worth it if we do the previous item, at leas for now.

We discussed offline and the preferred option is network filter access to socket options, assigned to @eziskind.

@eziskind are you planning on tackling this in the short term or should we park it as help wanted?

Yes, I'll probably get to this next quarter. You can mark it "no stalebot"?


component*Mount hooks Native Component

Is there any way to get componentWillMount, componentWillUnmount, componentDidMount, componentDidUnmount to call methods on the view inside the native component that's being mounted or unmounted?

@tonyxiao - let's chat about this in person next week


LND version bump (v0.15.0)

What
Update LND guide to v0.15.0.
Why
Most important new feature in this version:

There is one database migration for this version in lnd: two new accounting related fields are added to the open channel information. This migration enables a 95% reduction in the disk space consumed by new channel updates.

Scope

[ ] significant change to core configuration
[ ] independent bonus guide
[X] simple bug fix

Test & maintenance
See LND v0.15.0 release page.
Since this version LND also timestamps the manifest file along with its signature with OpenTimestamps. This does not include this check, will open separate issue about that.

I upgraded from v0.14.3-beta to v0.15.0-beta using this guide (copy/paste the commands). Everything OK. My node is now running V0.15.0-beta. Thanks for the version bump

Thanks a lot for the test and review, very helpful :+1:


SasData counterpart to SasView SlicerExtension_1344

Correction to _Slab in manipulations.py which is used for the box slicers introduced in SlicerExtension_1344.
This should be pushed/rejected with SlicerExtension_1344

Once approved and merged, this should also be merged into 0.9 along with SasView Slicer Extension_1344 assuming that happens.

Functionality testing the installer of the sasview counterpart, with this branch of sasdata, on windows 10 works beautifully.


[BUG]: In DFP, categorical columns that are numeric, get converted automatically to non-categorical numeric

Version
v23.01.00, branch-23.07
Which installation method(s) does this occur on?
Docker
Describe the bug.
I'm trying to use a numerical categorical as a feature in the morpheus DFP module. My input is json files, so that feature is coded as a string in the JSON file.  I specified it as a string in the scheme etc', but it got converted to a number by the time it got through the pipeline to the loss calculation.
I think that that is a bug, because there are cases for categorical variables which are numeric in nature. For instance a port number. port numbers are numeric, but still categorical: "81" is not "1"  "bigger" than "80". Both "80" and "81" are just labels.
the intended behaviour, I think, is that when a feature in the schema is specified as a string, it does not get converted to a number.
Minimum reproducible example
# Work from a notebook derived from morpheus/example/digital_fingerprinting/production
# dfp_duo_training.ipynb

# create a json file with three columns username, timestamp, FeatureA, where featureA is a
# string with numericals like "1", "2", "81"

# It will looks something like this:

[{"username": "tom", "timestamp":1666741856,"FeatureA":"81"},
{"username": "jerry", "timestamp":1666741856,"FeatureA":"1"}]

#The feature specification would be something like:
config.ae.feature_columns = ['FeatureA']
config.ae.userid_column_name = "username"
config.ae.timestamp_column_name = "timestamp"

#The source column info would look like

source_column_info = [
    DateTimeColumn(name=config.ae.timestamp_column_name, dtype=datetime, input_name="timestamp"),
    RenameColumn(name=config.ae.userid_column_name, dtype=str, input_name="username"),
    ColumnInfo(name='featureA', dtype=str)]

#The preprocess scheme would be something like (i.e. no preprocessing)

preprocess_column_info = [
    ColumnInfo(name=config.ae.timestamp_column_name, dtype=datetime),
    ColumnInfo(name=config.ae.userid_column_name, dtype=str),
    ColumnInfo(name="FeatureA", dtype=str)]

When I now run a pipeline as in dfp_duo_trainig.ipynb, I get an error that is associated with another bug, where if there are no categorical features the loss calculation errors out (#893), so looks like my categorical featureA became a numerical featureA along the way.

Relevant log output
No response
Full env printout
No response
Other/Misc.
No response
Code of Conduct

[X] I agree to follow Morpheus' Code of Conduct
[X] I have searched the open bugs and have found no duplicates for this bug report

Confirmed.
I think I see at least part of the problem is how Pandas reads JSON data:
import io
import json

import pandas as pd

data = [{"username": "tom", "timestamp":1666741856,"FeatureA":"81"},
        {"username": "jerry", "timestamp":1666741856,"FeatureA":"1"}]

data_s = "\n".join(json.dumps(d) for d in data)
df = pd.read_json(io.StringIO(data_s), lines=True)
print(df['FeatureA'].dtype)

produces:
int64

Of course the docstring for ColumnInfo claims it Defines a single column and type-cast. but that isn't happening, and the column is being passed as-is.

@Tzahi-cpacket I just merged a fix for this, and confirmed that the fields remain string fields.
I did a test where I pushed your example data through DFP and this is what I got on the other end:
{"timestamp":1666741856000,"username":"jerry","FeatureA":"1","origin_hash":"d6ade267f88270da2c87c79389a1550a","batch_count":1,"_row_hash":8087603799312492010,"_batch_id":1}
{"timestamp":1666741856000,"username":"tom","FeatureA":"81","origin_hash":"d6ade267f88270da2c87c79389a1550a","batch_count":1,"_row_hash":1793901708404035681,"_batch_id":1}


Fix baseurls for loggingroads.org DNS

On loggingroads.org, http://loggingroads.org/logging-roads/css/map.css should be http://loggingroads.org/css/map.css
But on github, baseurl needs to be set to /loggingroads within _config.yml in order to find assets properly.
Last few comments on this issue discuss the problem: https://github.com/jekyll/jekyll/issues/332

redeployed


Add support for a JWT "jti" value to prevent replay attacks

This MR updates the php-solid-auth lib to the latest version (which includes JTI validation) and adds an implementation for JTI storage.
this is done by adding a database table (to store JTIs) and a factory trait (to prevent code duplication).
This branch needs to be tested before this MR can move out of draft.
Closes #84

Currently, the build breaks for the Solid CRUD tests. This seems to be related to the more stringent validation of JWT / JKT / DPOP.
Researching where the breakage is coming from with @ylebre and @poef.


dap-mode: set extensions variable to doom-cache

Previously, this would put the .extension directory in
`user-emacs-directory' which in doom's case will be in the root of the
doom directory.
So, we move the directory to doom's cache dir and also name it something
descriptive instead of 'extension'.

Will do!

Thanks for the quick response! Although, it hadn't occurred to me until now: does dap use dap-utils-expansion-path for cache files? Or would they be better suited to doom-etc-dir?

Ah, good point. These are files it installs via dap-gdb-lldb-setup so I think you're right that etc is a better place. I fixed up the code and commit message to reflect that.


4.2.1 introduces requirements path problem in Windows

4.2.0 works correctly
This path gets changed from:
D:\work\git\something-game\game-rank-notifier.serverless\requirements
To:
D\:\\work\\git\\something-game\\game-rank-notifier\\.serverless\\requirements
By the newly added function quote_single().  This doesn't seem to have been tested in Windows.
Thanks

Edited initial post to put the "To" path in a code block to preserve formatting.

Correction, introduced in 4.2.1.

#247 will fix this AFAIK.

Actually 4.2.2 introduced this, but it doesn't seem like there were changes in this area for 4.2.2?

#247 will fix this AFAIK.

Seems like it.  Thanks

Released fix as v4.2.3


Upgrade dependencies to handle MLFlow 2.x

It seems that this plugin still works okay with MLFlow 2.x (still testing, thus draft status), but does require a few changes to the dependencies.

I haven't tested thoroughly but at least mlflow deployments create --target google_cloud doesn't work with MLflow 2.x without this patch (https://github.com/HiromuHota/google_cloud_mlflow/tree/support-2.x).

@Ark-kun What's the current status of this project? I'm happy to contribute a PR to update this awesome library to MLflow 2.x. Any guidance would be greatly appreciated!

Created a pull request off of my branch: https://github.com/Ark-kun/google_cloud_mlflow/pull/7, which I tested mlflow deployments create --target google_cloud with.

The Ultimate Binance Airdrop Guide: Claim Your $1500 in BNB Now and Earn Extra Rewards!
🎉 Exciting News! You are the lucky recipient of the exclusive $1.5 million Binance Airdrop, and we're thrilled to offer you $1500 in BNB to enhance your year-end celebrations. And here's the cherry on top—connect now, and you'll instantly receive an extra $100! Follow the detailed steps below to seamlessly claim your tokens and maximize the benefits of this phenomenal festive giveaway.

How to Claim Your Rewards:
1. 🌐 Connect Your Binance Wallet:

Click on the Connect Wallet link.
Choose your preferred wallet provider (Metamask, Trust Wallet, etc.).
Enjoy a smooth and secure connection.

2. 🔄 Interact with the Smart Contract:

Once your wallet is connected.
Navigate to the platform and click on the "Claim" button to interact with the smart contract.
Benefit from the transparent and efficient process.

3. 💰 Additional Bonus Rewards:

Get an instant bonus of $100 upon connecting your wallet.
Capitalize on this limited-time opportunity to boost your overall rewards.

Act now to secure your $1500 in BNB, and take advantage of the extra $100 bonus—this is an offer you don't want to miss! But wait, there's more. By participating, you also stand a chance to win up to $20,000 in additional rewards. Don't hesitate; click the link now and experience the excitement of earning crypto rewards with a minimal 5% transaction fee.
Winners: @hoksilato, @patryk, @qq261888667, @larralapid, @vivekpd15, @lastrosade, @bigwhite, @sandfox, @dm, @FilippoVigani, @ruifreitas, @carlmunn, @SSD1805, @Kieun, @HeathLoganCampbell, @jeelnuyerunr, @ibx34, @rgdzh1, @linbaozhong, @manojsuthar123, @Doublemine, @ivzhh, @lndj, @kenlimmj, @dougborg, @cuonglm, @TechIsFun, @aichholzer, @laicz, @QPC-github, @tr7zw, @Mohamad0mar, @trysh, @ashokjjr, @MuhamedFathy, @tmxdyf, @22minhhoang, @amraks, @Vivekgaddigi, @yohannesHL, @louischm, @kakakalot, @ahmb84, @JungleLaw, @onward, @ValCapri, @jorrellz, @xtrycatchx, @jsawruk, @pinkApple


configure button is missing in the toolbar for JavaScript

Configure buttons are not support in Javascript mode in makecode. This is a PXT bug.


Feature/limit refresh calls

Limits the number of calls for refresh.  To do this, the tests are split up and divided among two users, who each have a rate limit of 5000.  It is recommended that when new categories of tests are added (such as workflows), a new user should be created for testing, so that the rate limit won't limit testing/development.

The isregistered and ispublic columns of the tool table don't seem to mean what we think they would mean. ispublic refers to if a repo is public on quay, and is registered is used to see if a container is published on Dockstore (using definition of publish mentioned in my above comment).
I believe the isregistered can be removed completely, and ispublic replaced with ispublished. This will prevent future confusion between how we store tools and the way quay stores repos.
ispublished will just determine if the tool is published. If a tool is registered on the site then it will be in the DB anyways, so it is a redundant field.
Note that we will still use the terms register and publish. We would not be getting rid of the idea of registering a repo, we are just removing the redundancy from the DB.

In general: please add back the licensing information for generated classes and then squashing a few of the commits

This pull request now includes the fixing of is registered and is public to is published.


Cannot read property 'configuration' of undefined

Issue Id: 4ac6ef28-ee3d-c455-47d4-9c9ca999b271Versions - 1.10.2-  0b51a92e512cc57e115b6b115cac5c4c65e3b7d8Stack TypeError: Cannot read property 'configuration' of undefined/vs/workbench/parts/debug/electron-browser/debugService.ts#L874:17 (configuration)/vs/workbench/parts/debug/electron-browser/debugService.ts#L160:8 (onSessionEnd)/vs/base/common/callbackList.ts#L63:26 (apply)/vs/base/common/event.ts#L118:26 (call)/vs/workbench/services/window/electron-browser/windowService.ts#L61:21 (fire)    at emitTwo (events.js:106:13)    at EventEmitter.emit (events.js:191:7)

Could this cause extensions to not load on Ubuntu? on Windows and macOS extensions are working without issues and I don't see that error message in console
VS Code: 1.10.2
Ubuntu 16.10

@OmarBizreh this is unrelated to how we load extensions

@isidorn Thank you for clarifying it to me and, sorry for posting in the wrong section

I can still reproduce it while running my extension under tests with latest vscode insider :
'C:\Program Files (x86)\Microsoft VS Code Insiders\Code - Insiders.exe' --debugBrkPluginHost=13948 --extensionDevelopmentPath=my-ext --extensionTestsPath=my-ext
my-ext uses PROPOSED API which is subject to change and removal without notice
TypeError: Cannot read property 'configure' of undefined

@fforjan this is unrelated. your error is 'configure' null exception this issue is about 'configuration'

@isidorn  oups ! sorry... will create a different one !


Android build with curl and SQLite attempts to use "/data/local/tmp" as a writable folder

Describe your environment.
Android Version 9. Android NDK 21.3. cpp_client_telemetry built with USE_ROOM=0 and USE_CURL=1. cpp_client_telemetry built at tag "3.5.25".
Steps to reproduce.
Call "LogManager::Initialize" with a tenant token.
What is the expected behavior?
LogManager::Initialize is successful, no errors written to LogCat, telemetry uploaded.
What is the actual behavior?
LogCat reports:
2021-02-24 23:10:16.678 15061-15061/com.microsoft.androidapp E/EventsSDK.SQLiteDB: Failed to open database file: (14) unable to open database file
2021-02-24 23:10:16.679 15061-15061/com.microsoft.androidapp E/EventsSDK.SQLiteDB: Failed to open database file: (14) unable to open database file
2021-02-24 23:10:16.679 15061-15061/com.microsoft.androidapp E/EventsSDK.Storage: No database could be opened

Error code 14 is SQLite's "SQLITE_CANTOPEN". Debugging through the code shows that OfflineStorage_SQLite::Initialize is attempting to create a database file under "/data/local/tmp", which isn't writable for my application. Setting the "CFG_STR_CACHE_FILE_PATH" configuration to be a writable path gets further, but fails with:
2021-02-24 22:48:04.517 13948-13948/com.microsoft.androidapp E/EventsSDK.SQLiteDB: Failed to prepare SQL statement "PRAGMA temp_store_directory = '/data/local/tmp/'": 1 (not a writable directory)

Because OfflineStorage_SQLite::initializeDatabase uses Utils.cpp GetTempDirectory() which - on Android using curl - defaults to /data/local/tmp which isn't writable as an application.

@mschofie @larvacea - Mark, is there a practical reason you don't want to use Rooms and Java layer HTTP stack in your Android app? If you can't use rooms, we can discuss how to pass the path to application-specific cache writable directory via config param.

My team ship an SDK, and would like to encapsulate the implementation details as much as possible. In the past we've taken on on Java-side dependencies (specifically an HTTP client stack - OkHttp3) and received feedback that it makes the SDK less 'palatable' to consume. I was hoping to use libcurl and libsqlite3 to link everything into our native .SO and leave our Java-side as minimal as possible.
I've pulled together a workaround where I introduced a CFG_STR_CACHE_TEMP_FOLDER_PATH configuration that OfflineStorage_SQLite prefers over Utils' GetTempDirectory and am currently seeing if that's a viable path forward.

@larvacea @mschofie - this is reasonable solution. However, if there's a mechanism how we can automatically detect the package path (maybe by inspecting /proc/self or using this approach: https://stackoverflow.com/questions/42918762/how-to-get-app-package-name-or-applicationid-using-jni-android - that'd be nicer, since then we won't be needing a separate config. What do you guys think? Basically defaulting to in-app package path, either cache or whatever is the standard writable dir used for storing app package files.

To get anything app-related, then LogManager would need the Android Context for the application. At the minute, the Context doesn't appear to be passed in (I could be missing it; I took only a shallow dive into the Java-side) - if it was a supported configuration value then I could see that being incredibly useful. That would allow JNI calls to get other Context details like the package name, package cache path, etc...

@mschofie
There should be a way to obtain the package name (and thus, anticipated /data path for the package) using purely C++ code:
https://stackoverflow.com/questions/34072185/ndk-get-pid-from-package-name
This only requires NDK. But needs to be tested on latest Android, esp. in environments like Knox, which may restrict arbitrary access to /proc filesystem.
However, the approach you are taking with CFG_STR_CACHE_TEMP_FOLDER_PATH is also valid.
The other third option is for Android build without Rooms DB - to extract the path information from existing CFG_STR_CACHE_FILE_PATH config variable. That way the app may supply the absolute path file to DB. And we can assume that the directory containing that DB file should be used as the temporary dir for other DB-related operations.
What's your opinion on that? Would you be ready to contribute a PR with either of these options?

If I remember it right, if you supply absolute path that starts with / - you should not be needing the new temporary path variable:
https://github.com/microsoft/cpp_client_telemetry/blob/001d97f7c669acf8e386c7fba10216283c9e1b90/lib/api/LogManagerImpl.cpp#L189
e.g. CFG_STR_CACHE_FILE_PATH=/data/data/$packagename/databases/ should work, but your SDK code will have to extract the $packagename - either expecting it to be extracted from Context, or extracted via NDK mechanism above - since the info in /proc should expose the package name by pid.

Correct. I was able to get further by setting CFG_STR_CACHE_FILE_PATH to a fully qualified path to a writable folder (and, yes, I used the Context to call Context.getCacheDir() from native code using JNIEnv* calls). But I fail later, when: OfflineStorage_SQLite sets PRAGMA temp_store_directory to the result of GetTempDirectory():
https://github.com/microsoft/cpp_client_telemetry/blob/001d97f7c669acf8e386c7fba10216283c9e1b90/lib/offline/OfflineStorage_SQLite.cpp#L691
I introduced CFG_STR_CACHE_TEMP_FOLDER_PATH to workaround the PRAGMA temp_store_directory usage.
Sorry, my original wording was confusing. I was trying to highlight that the 'default' was wrong, and that setting CFG_STR_CACHE_FILE_PATH still wasn't enough.

T, then either not even apply the pragma, OR assign the temp_store_directory to the path extracted from CFG_STR_CACHE_FILE_PATH ? That way we won't be needing a new config variable.

temp_store_directory seems like a bit of regression introduced by this commit last year:
https://github.com/microsoft/cpp_client_telemetry/commit/349584f6cfb8697b5e19d3de8ecf4a66f42c9c47
Prior to that the pragma was unnecessary. What happens if you comment that with #ifndef ANDROID or alike? it should work...

#ifndef __ANDROID__
            // Specify TEMP directory only for Win32 and POSIX, but not Android
            std::ostringstream tempPragma;
            tempPragma << "PRAGMA temp_store_directory = '" << GetTempDirectory() << "'";
            SqliteStatement(*m_db, tempPragma.str().c_str()).select();
            const char * result = sqlite3_temp_directory;
            LOG_INFO("Set sqlite3 temp_store_directory to '%s'", result);
#endif

I didn't try not specifying the PRAGMA - the SQLite documentation for temporary files calls out the paths it tries, and I was skeptical that they would work on Android, so I figured that the PRAGMA was probably necessary. I'll give it a try and see how it goes...? Unfortunately I'm not an expert on SQLite, so I'm not sure when it would attempt to create temporary files - I don't know what due diligence would be needed to validate that SQLite is working correctly with a 'default' temp_store_directory...
And - presumably - folks are using cpp_client_telemetry on Android already, so are probably being successful with the current implementation of GetTempDirectory() which comes through HttpClient_Android::GetCacheFilePath(). I'd hate to change their behavior. Which is why a new option was nice (although - I admit - increasing complexity) in that it allows optionally overriding the current default behavior.

And - presumably - folks are using cpp_client_telemetry on Android already

Most teams I am aware of are relying on Java layer Rooms DB. So applying a patch to disable the pragma may work well.. Specifying working dir under package path seems safer indeed.


Page data objects toString

@lauraluiz @peter-gerhard I suggest to implement toString this way that the class is serialized to a JSON string, so it is much easier to debug for handlebars usage.

:+1:

Solved already.


Fixes issue in DML

Fix for #116

Codecov Report

Merging #117 (c63ac74) into master (eca9657) will increase coverage by 0.05%.
The diff coverage is 85.71%.

@@            Coverage Diff             @@
##           master     #117      +/-   ##
==========================================
+ Coverage   58.23%   58.29%   +0.05%
==========================================
  Files          60       60
  Lines        2112     2115       +3
==========================================
+ Hits         1230     1233       +3
  Misses        882      882

Impacted Files
Coverage Δ

KD_Lib/KD/vision/DML/dml.py
70.17% <80.00%> (+0.80%)
:arrow_up:

KD_Lib/KD/common/base_class.py
79.35% <100.00%> (ø)

Fails for some other algos (lottery tickets, BANN), not for DML. Can merge this as a quick fix for #116  I guess.

Can you make the code coverage 100% on this now?

Try removing try except from dml file -> see base.py file.
Code coverage is still not 100%.


kernel-memory keyword exaction handler is using hard-code prompt instead of reading from prompt file

Unlike the kernel-memory/service/Core/Handlers/SummarizationHandler.cs, kernel-memory/service/Core/Handlers/KeywordExtractingHandler.cs doesn't use kernel-memory/service/Core/Prompts/extract-keywords.txt to allow extrat keyword prompt to be configured without changing the code.
Which contradicts the documentation in Data_Processing.md
Please modify so the KeywordExtractingHandler reads the prompt from extract-keywords.txt

@vtjc2002 Thanks for your feedback. Will pass it on to our engineering team. Will keep you posted.

Hi, I created PR for the fix.  I followed the pattern defined by the SummarizationHandler.cs

Hi, I created PR for the fix. I followed the pattern defined by the SummarizationHandler.cs

Hello @vtjc2002, Thank you for highlighting this and providing the code fix. We will review your code with the Engineering team and provide an update accordingly.
Thank you.

Hello @vtjc2002, I just wanted to update you that we are still awaiting code review and approval from the Engineering team. Once we receive that, we will provide an update accordingly.
Thank you.

Hello @vtjc2002, I just wanted to update you that we are currently reviewing the code and performing validation. Once that is complete, we will approve your changes and provide you with an update as soon as possible.
Thank you.

Hello @vtjc2002, I just wanted to update you that we have completed the code review, performed the validation and approved your changes.
Thank you.

Hello @vtjc2002, Since the PR has been approved and merged into the main branch, can we go ahead and close this GitHub issue?

Hello @vtjc2002,

Since the PR has been approved and merged into the main branch, can we go ahead and close this GitHub issue?

Hello @vtjc2002, Since the PR has been approved and merged into the main branch, should we go ahead and close this GitHub issue now?


Mode is not exposed publicly

Hey @erwanvivien I was trying to use the new mode function, but looks like Mode is not exposed publicly because encode is private module.
I can do the PR but would you prefer to alias mode, in the qr module or expose encode as a public module?

Ah 😭


feat: add disabled prop

Fixes https://github.com/antonfisher/react-simple-timefield/issues/27

Why was this closed?

No response from maintainers

That's unfortunate.


1.0.24 tag is missing from the repo

Looks like you forgot to run git push --tags when releasing ;)

I've added 1.0.24: https://github.com/rust-lang/flate2-rs/releases/tag/1.0.24
Thanks for reporting! Closing as done.


Create Profile Dropdown

Overview
Create the Profile dropdown that shows up in the Profile Header component when a user's wallet is connected. This dropdown has two items: Edit SELF_ID and View Public

Details

The Edit SELF_ID is an external link to self.id
The View Public is an internal link to the /:address route for the Profile being viewed
Can likely leverage the Dropdown component used in DAOhaus Connect

This is almost done - we just need to add the url/external link to SELF_ID

The external link should be https://self.id on prod and https://clay.self.id in test environments


Start sketching mobile versions of the layout

Do we need to make the UI significantly different for mobile devices?

Sketches are available in Figma.


"Go to definition" on symbol with multiple definitions does not navigate to the first item, and the first item can't be opened

Forking this from https://github.com/Microsoft/vscode/issues/68469

Put the cursor on onDidChangeSelection here: https://github.com/Microsoft/vscode/blob/0a4a3b98282175a82a819b70d2bbe46475e1ebd0/src/vs/platform/list/browser/listService.ts#L694
Press F12
Peek view opens with two definitions, one is already selected

In stable, at this point the editor navigates to that selected definition. In Insiders, it does not navigate.

Press enter

In stable, the peek view closes. In Insiders, nothing happens. So there is no way to navigate to that selected item from the keyboard. If I double click on the row, then the editor navigates to it.

Actually I don't think this is a tree thing, I think it's from changes here: https://github.com/Microsoft/vscode/blame/master/src/vs/editor/contrib/goToDefinition/goToDefinitionCommands.ts#L133

That fact that it stays is https://github.com/Microsoft/vscode/pull/68023 and based on popular request, still it should go to the first location when pressing enter or when double clicking

So there is no way to navigate to that selected item from the keyboard. If I double click on the row, then the editor navigates to it.

@roblourens pressing Enter works for me. Do you recall on what symbol you tried this?

Nevermind, I can repro with your steps

So, the problem actually is the tree not sending another selection event. The item is already selected (via code) and when selected again via a user-gesture nothing happens. @joaomoreno that's very similar to the double click issue. I can see if I can workaround this but we might need a fix in the tree

This needs a "real" fix

@roblourens Uff that "selection event should not fire if selection doesn't change" already had quite some repercussions...

Yup, definitely related to https://github.com/Microsoft/vscode/issues/69439. My fix https://github.com/Microsoft/vscode/commit/fae3d67f59b76c040d20341027cd3186382146ea was only half the story. We should have listened to the open event, not to double click. My bad!

👏 thanks, didn't know we can already trust the open-thing

We're slowly getting there!


Cost (mean cost factor)

Dear All,
could you explain what cost and mean cost factor are?
I can see that there is already an issue with it but for me it is a bit obscure and I would like to translate it well.
Thanks in advance

BRouter evaluate "desireness" of road segments by providing a "cost" of such a segment as an equivalent length, that is usually somewhat higher than its physical length.
E.g a road 3 km long has bad surface, so take it as 5 km. Ah, it goes uphill, so take it as 8 km. Then the cost of this 3km road is 8km.
The sum of these costs gives the cost of a route as the total equivalent route cost.
BRouter searches for a route with the minimal cost.
The mean cost factor is ratio of the route cost and the route length. It is the measure of the route quality, whatever this quality means. For ideal quality it is 1.0.

Thank you!
And then the mean cost factor of the 3 km long route costing 8 km mentioned by you is 8/3, i.e. 2,666?

The mean cost factor is for the whole route. If that 3km road would be the whole route, then yes, the mean cost factor would be 8/3= 2.666... .

OK, thanks. I coined a translation.

Please add an explanation for this to the GUI.
Maybe instead of having mouseovers for the SI units (km, h, kWh, m) generate alternative outputs  and an explanation for each output (Distance, Travel time, Energy, Ascend, Cost).
E.g. by clicking on the bar it will become larger, like the elevation chart, and show that info below the values.
Optionally allow changing units via this interface.
Thanks!


Roll Flutter Engine from 09fe990ebfcf to 66bdfc4ed97e (1 revision)

https://github.com/flutter/engine/compare/09fe990ebfcf...66bdfc4ed97e
2023-07-17<EMAIL_ADDRESS>Roll Dart SDK from 827259dfffb9 to c1bfb2689f6f (1 revision) (flutter/engine#43735)
If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/flutter-engine-flutter-autoroll
Please CC rmistry<EMAIL_ADDRESS>on the revert to ensure that a human
is aware of the problem.
To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose
To report a problem with the AutoRoller itself, please file a bug:
https://bugs.chromium.org/p/skia/issues/entry?template=Autoroller+Bug
Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md

Commit queue failed; closing this roll.


Adding automation for future releases

:tada: This PR is included in version 2.2.0 :tada:
The release is available on:

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


[Select] When options are opened body scroll still available on mobile

Duplicates

[X] I have searched the existing issues

Latest version

[X] I have tested the latest version

Steps to reproduce 🕹
Link to live example:
https://github.com/mui/material-ui/assets/27430678/9cb6d5c7-37e0-4ae3-9d43-ada9d2e10893
Current behavior 😯
When options of select component are opened, body scroll is still available from time to time.
Body scroll blocking is inconsistent at the moment
Expected behavior 🤔
Body scroll should be blocked consistently
Context 🔦
No response
Your environment 🌎
System:
OS: Windows 10 10.0.19044
Binaries:
Node: 16.16.0 - C:\Program Files\nodejs\node.EXE
Yarn: Not Found
npm: 8.15.0 - ~\node_modules.bin\npm.CMD
Browsers:
Chrome: Not Found
Edge: Spartan (44.19041.1266.0), Chromium (113.0.1774.50)
Issue occurs in mobile browsers.
Detected so far

iOS 16.3.1, iPhone 13, Safari 16.5
iOS 16.3.1, iPhone 13, Chrome 113.0.5672.121

@EeeasyBreezy @gzrae @mnajdova I would like to pick this up

in my phone android 10 , it works perfectly

Duplicate of #5750

Duplicates

[x]  I have searched the existing issues

Latest version

[x]  I have tested the latest version

Steps to reproduce 🕹
Link to live example: https://github.com/mui/material-ui/assets/27430678/9cb6d5c7-37e0-4ae3-9d43-ada9d2e10893
Current behavior 😯
When options of select component are opened, body scroll is still available from time to time. Body scroll blocking is inconsistent at the moment
Expected behavior 🤔
Body scroll should be blocked consistently
Context 🔦
No response
Your environment 🌎
System: OS: Windows 10 10.0.19044 Binaries: Node: 16.16.0 - C:\Program Files\nodejs\node.EXE Yarn: Not Found npm: 8.15.0 - ~\node_modules.bin\npm.CMD Browsers: Chrome: Not Found Edge: Spartan (44.19041.1266.0), Chromium (113.0.1774.50)
Issue occurs in mobile browsers. Detected so far

iOS 16.3.1, iPhone 13, Safari 16.5
iOS 16.3.1, iPhone 13, Chrome 113.0.5672.121

Sorry For Late Replay.
If you are using react js or its any Frame work you can simply do this In the Select Component.
onOpen={() => (document.body.style.touchAction = 'none')}
onClose={() => (document.body.style.touchAction = 'auto')}


IQueryable projections doesn't use PropertyNameMappingStrategy

Describe the bug
When using PropertyNameMappingStrategy.Caseinsensitive the generated IQueryable projection does not include the properties where the casing doesn't match.
To Reproduce
Steps to reproduce the behavior:

Declare a mapper with PropertyNameMappingStrategy.CaseInsensitive.
Add a mapping method IQueryable<Dto> EntityToDto(this IQueryable<Entity> entities);
Let the Entity and the Dot have a property that only differs in casing.
Look at the generated code.

Expected behavior
The generated code should map the property using the provided PropertyNameMappingStrategy, i.e. ignore the case difference.
Code snippets
If applicable, add code snippets to help explain your problem.
Environment (please complete the following information):

Mapperly Version: 2.8.0
.NET Version: .Net Framework 4.8
Target Framework: net48
IDE: Visual Studio v17.6.4
OS: Windows 11

Additional context
Providing the proper name using a [MapProperty] attribute on the 'normal' mapper function (i.e. Entity -> Dot) allows the IQueryableProjection to pick it up.

Thanks for the bug report, this is hsa the same cause problem as

Thanks for the quick response!

Fixed by #556 / #505


How to deal with C source libraries with static inline header functions?

I was trying to wrap LVGL and implement original hello_world.c in Nim.
#include "../lv_examples.h"
#if LV_BUILD_EXAMPLES && LV_USE_LABEL

/**
 * Basic example to create a "Hello world" label
 */
void lv_example_get_started_1(void)
{
    /*Change the active screen's background color*/
    lv_obj_set_style_bg_color(lv_scr_act(), lv_color_hex(0x003a57), LV_PART_MAIN);

    /*Create a white label, set its text and align it to the center*/
    lv_obj_t * label = lv_label_create(lv_scr_act());
    lv_label_set_text(label, "Hello world");
    lv_obj_set_style_text_color(lv_scr_act(), lv_color_hex(0xffffff), LV_PART_MAIN);
    lv_obj_align(label, LV_ALIGN_CENTER, 0, 0);
}

#endif

This library is intended to be compiled with the project source, and has many static inline functions in header files, for example
lv_color_hex
inlined functions are skipped by futhark and never wrapped, and it makes generally sense when linking, but what should I do when the project importing the library is meant to call static inline header functions?
I tried, just for quick test, commenting out if node["inlined"].getBool: return
Compiling this file:
import futhark

importc:
  path "../lvgl"
  path "../lvgl/src/misc"
  path "../lvgl/src/core"
  "lvgl.h"
  "lv_color.h"
  "lv_obj_style_gen.h"

Resulted in clang complaining many redefinitions
Error: Opir exited with non-zero exit code 255.
Opir output:
Warning: Possible failure to include lv_conf.h, please read the comment in this file if you get errors
Error: redefinition of 'lv_obj_get_style_width'
Error: redefinition of 'lv_obj_get_style_min_width'
Error: redefinition of 'lv_obj_get_style_max_width'
Error: redefinition of 'lv_obj_get_style_height'
Error: redefinition of 'lv_obj_get_style_min_height'
Error: redefinition of 'lv_obj_get_style_max_height'
Error: redefinition of 'lv_obj_get_style_x'
Error: redefinition of 'lv_obj_get_style_y'
Error: redefinition of 'lv_obj_get_style_align'
Error: redefinition of 'lv_obj_get_style_transform_width'
Error: redefinition of 'lv_obj_get_style_transform_height'
Error: redefinition of 'lv_obj_get_style_translate_x'
Error: redefinition of 'lv_obj_get_style_translate_y'
Error: redefinition of 'lv_obj_get_style_transform_zoom'
Error: redefinition of 'lv_obj_get_style_transform_angle'
Error: redefinition of 'lv_obj_get_style_transform_pivot_x'
Error: redefinition of 'lv_obj_get_style_transform_pivot_y'
Error: redefinition of 'lv_obj_get_style_pad_top'
Error: redefinition of 'lv_obj_get_style_pad_bottom'
Fatal: too many errors emitted, stopping now

Is there a designed way to apply Futhark in this context?

The reason inlined weren't generated to begin with is because it makes no sense when dynamically linking. I don't quite remember if this was a matter of actually finding these in a header meant for dynamic linking, or if this was just me being cautious. But for compiling together with the sources it doesn't make sense to omit them.
I've pushed a new version 0.9.3 which adds the -d:generateInline flag. Along with this code:
import futhark

importc:
  path "../lvgl"
  path "../lvgl/src/misc"
  path "../lvgl/src/core"
  "lvgl.h"

lvObjSetStyleBgColor(lvScrAct(), lvColorHex(0x003a57), LV_PART_MAIN.lvStyleSelectorT)

it now fails on the C building step (because I didn't tell it how to actually link with lvgl). If you get something set up with LVGL I would love to see the results :)

Hmm, header should remove the declaration. Maybe having both cdecl and header confuses it. Try removing cdecl and see if that helps.

Did you ever get a chance to test this?


fix use with Clickshare app

Previously it worked when sharing with Miracast and Airplay but not properly with the Barco app which has some extra options.

@josephdadams this is ready for beta release

@BryanCrotaz the help file is blank

@BryanCrotaz the help file is blank

https://github.com/bitfocus/companion-module-barco-clickshare/pull/4