Stack overflow: IncrementalTin.floodFillConstrainedRegionsRecursion

I get Stack overflow during processing "hipped roof". When line [1] is commeted code works withou stack overflow. Tomorrow I will do more investigation. Black is polygon constraint. Orange are linear constraints
public static void main(String[] args) {
        double nominalPointSpacing = 0.01;
        IIncrementalTin tin = new IncrementalTin(nominalPointSpacing);
        List<IConstraint> constraintList = new ArrayList<>();

        Vertex v0 = new Vertex(-5.254566785879433, -10.120986399240792, Double.NaN);
        Vertex v1 = new Vertex(11.397855226881802, -0.2510828208178282, Double.NaN);
        Vertex v2 = new Vertex(5.243457765551284, 10.120986400172114, Double.NaN);
        Vertex v3 = new Vertex(-11.397855226648971, 0.2683861115947366, Double.NaN);

        PolygonConstraint polygon = new PolygonConstraint(v0, v1, v2, v3);
        constraintList.add(polygon);

        Vertex v4 = new Vertex(4.862010033102706, 2.8856616728007793, Double.NaN);
        Vertex v5 = new Vertex(-4.867160049267113, -2.8776928577572107, Double.NaN);

        constraintList.add(new LinearConstraint(v4, v5));
        constraintList.add(new LinearConstraint(v4, v2));
        constraintList.add(new LinearConstraint(v4, v1));
        constraintList.add(new LinearConstraint(v5, v0));
        constraintList.add(new LinearConstraint(v5, v3)); // [1] COMMENT THIS LINE

        constraintList.forEach(IPolyline::complete);

        tin.addConstraints(constraintList, false);
    }

Martin,
Well, first off, thanks for the excellent example.   It's very helpful when we can boil down a problem to a small number of samples.
I've got to think about this some more, but here's a short term fix:
In the flood-fill routine, there are blocks of code that look like:
    if (!f.isConstrainedRegionMember()) {
      if (!f.isConstrained()) {
        f.setConstrainedRegionMemberFlag();
        f.setConstraintIndex(index);
      }
      floodFillConstrainedRegionsRecursion(f.getDual(), index);
    }

Move the line setConstrainedRegionMemberFlag before the block as shown:
            f.setConstrainedRegionMemberFlag();
            if (!f.isConstrained()) {
                f.setConstraintIndex(index);
            }

Doing so will make it so that the linear constraints are marked as members of the constrained region and will not be traversed more than once.   However, if the application code requests the constraint index for one of these edges, it will still get the correct value for the linear constraint rather than that of the flood-filled constraint.
On the other hand, I am not sure whether the linear constraints should be  treated as constrained-region members.  Their behavior isn't 100 percent consistent with other member elements.  I'll have to think about that.
Gary
P.S.  I notice that you've introduced special constructors for 2-vertex linear constraints and 4-vertex polygon constraints.  These both make sense to me and I will probably added them to the code base. Do you have any others?

Thank you very much for hint how to fix/workaround the issue.
I added new constructors just for this issue - no time to write another code.
I will try to create some pull requests with improvements/cleanups. To simplify your work.
Martin

2017 v 19:33, gwlucastrig<EMAIL_ADDRESS>

Martin,
Well, first off, thanks for the excellent example. It's very helpful when we can boil down a problem to a small number of samples.
I've got to think about this some more, but here's a short term fix:
In the flood-fill routine, there are blocks of code that look like:
if (!f.isConstrainedRegionMember()) {
  if (!f.isConstrained()) {
    f.setConstrainedRegionMemberFlag();
    f.setConstraintIndex(index);
  }
  floodFillConstrainedRegionsRecursion(f.getDual(), index);
}

Move the line setConstrainedRegionMemberFlag before the block as shown:
        f.setConstrainedRegionMemberFlag();
        if (!f.isConstrained()) {
            f.setConstraintIndex(index);
        }

Doing so will make it so that the linear constraints are marked as members of the constrained region and will not be traversed more than once. However, if the application code requests the constraint index for one of these edges, it will still get the correct value for the linear constraint rather than that of the flood-filled constraint.
On the other hand, I am not sure whether the linear constraints should be treated as constrained-region members. Their behavior isn't 100 percent consistent with other member elements. I'll have to think about that.
Gary
P.S. I notice that you've introduced special constructors for 2-vertex linear constraints and 4-vertex polygon constraints. These both make sense to me and I will probably added them to the code base. Do you have any others?
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub, or mute the thread.

My suggested fix according your proposal. Skip already processed edges.
IncrementalTin:
  public void addConstraints(
    List<IConstraint> constraints,
    boolean restoreConformity)
  {
...
    BitSet processedSet = new BitSet(getMaximumEdgeAllocationIndex() * N_SIDES + 1);
    for (int i = 0; i < constraintList.size(); i++) {
      IConstraint c = constraintList.get(i);
      if (c.definesConstrainedRegion()) {
        ArrayList<IQuadEdge>edgesForConstraint = efcList.get(i);
        floodFillConstrainedRegion(processedSet, c, edgesForConstraint);
      }
    }
}

...

  private static void floodFillConstrainedRegion(
    final BitSet processedSet,
    IConstraint c,
    ArrayList<IQuadEdge> edgeList)
  {
    int index = c.getConstraintIndex();
    for (IQuadEdge e : edgeList) {
      if (e.isConstrainedRegionEdge()) {
        floodFillConstrainedRegionsRecursion(processedSet, e, index);
      }
    }
  }

  private static void floodFillConstrainedRegionsRecursion(final BitSet processedSet, final IQuadEdge e, final int index) {
    // There is special logic here for the case where an alternate constraint
    // occurs inside the floor-fill area. For example, a linear constraint
    // might occur inside a polygon (a road might pass through a town).
    // The logic needs to preserve the constraint index of thecontained
    // edge from the alternate constraint. In that case, the flood fill
    // passes over the embedded edge, but does not modify it.
    IQuadEdge f = e.getForward();
    int edgeIndexF = getEdgeIndex(f);
    if (!f.isConstrainedRegionMember() && !processedSet.get(edgeIndexF)) {
      processedSet.set(edgeIndexF);
      if (!f.isConstrained()) {
        f.setConstrainedRegionMemberFlag();
        f.setConstraintIndex(index);
      }
      floodFillConstrainedRegionsRecursion(processedSet, f.getDual(), index);
    }
    IQuadEdge r = e.getReverse();
    int edgeIndexR = getEdgeIndex(r);
    if (!r.isConstrainedRegionMember() && !processedSet.get(edgeIndexR)) {
      processedSet.set(edgeIndexR);
      if (!r.isConstrained()) {
        r.setConstrainedRegionMemberFlag();
        r.setConstraintIndex(index);
      }
      floodFillConstrainedRegionsRecursion(processedSet, r.getDual(), index);
    }
  }

  private static int getEdgeIndex(final IQuadEdge edge) {
    return (edge.getIndex() * N_SIDES) | edge.getSide();
  }

Similar fix for SemiVirtualIncrementalTin:
  @Override
  public void addConstraints(List<IConstraint> constraints, boolean restoreConformity) {

...
    BitSet processedSet = new BitSet(getMaximumEdgeAllocationIndex() * N_SIDES + 1);
    for (int i = 0; i < constraintList.size(); i++) {
      IConstraint c = constraintList.get(i);
      if (c.definesConstrainedRegion()) {
        floodFillConstrainedRegions(processedSet, c, icArray[i]);
      }
    }
...
 private void floodFillConstrainedRegions(final BitSet processedSet, IConstraint c, IntCollector intCollector) {
    int constraintIndex = c.getConstraintIndex();
    for (int i = 0; i < intCollector.n; i++) {
      IQuadEdge e = this.edgePool.getEdgeForIndex(intCollector.buffer[i]);
      if (e.isConstrainedRegionEdge()) {
        floodFillConstrainedRegionsRecursion(processedSet, e, constraintIndex);
      }
    }
  }

  private static void floodFillConstrainedRegionsRecursion(final BitSet processedSet, final IQuadEdge e, final int constraintIndex) {
    // There is special logic here for the case where an alternate constraint
    // occurs inside the floor-fill area. For example, a linear constraint
    // might occur inside a polygon (a road might pass through a town).
    // The logic needs to preserve the constraint index of thecontained
    // edge from the alternate constraint. In that case, the flood fill
    // passes over the embedded edge, but does not modify it.
    IQuadEdge f = e.getForward();
    int edgeIndexF = getEdgeIndex(f);
    if (!f.isConstrainedRegionMember() && !processedSet.get(edgeIndexF)) {
      processedSet.set(edgeIndexF);
      if (!f.isConstrained()) {
        f.setConstrainedRegionMemberFlag();
        f.setConstraintIndex(constraintIndex);
      }
      floodFillConstrainedRegionsRecursion(processedSet, f.getDual(), constraintIndex);
    }
    IQuadEdge r = e.getReverse();
    int edgeIndexR = getEdgeIndex(r);
    if (!r.isConstrainedRegionMember() && !processedSet.get(edgeIndexR)) {
      processedSet.set(edgeIndexR);
      if (!r.isConstrained()) {
        r.setConstrainedRegionMemberFlag();
        r.setConstraintIndex(constraintIndex);
      }
      floodFillConstrainedRegionsRecursion(processedSet, r.getDual(), constraintIndex);
    }
  }

  private static int getEdgeIndex(final IQuadEdge edge) {
    return (edge.getIndex() * N_SIDES) | edge.getSide();
  }

I introduced static getEdgeIndex() to compute index. This is more general than getMarkBit/setMarkBit.

Modified algorithm is not throwing exception. It produces wrong results. (LogoCDT is OK)

Well, first off, thanks for the smart idea.  It's better than the approach I had in mind.
The problem that you are seeing  may be due to your edge index routine.  Your code is trying to treat the edges as having two flags, one for each side.  But in this case, you only want one flag indicating that the edge was visited during the flood-fill.   The build-in edge-index is defined differently for the QuadEdge and SemiVirtualEdge classes.  For QuadEdge, the same index is returned for either side of the edge. For SemiVirtualEdge, an even index is returned for the primary side (the "base reference") and an odd index is returned for the secondary side.  So you might try implementing your getEdgeIndex() routine so that, for QuadEdge, it's just a pass-through returning the index of the quad edge. For a semi-virtual edge, you would want to return the value of SemiVirtualEdge.getIndex()/2.
The original approach that I was considering was to give the edge class a "visited" flag that the algorithm could use to mark where it had processed.  But I didn't like my approach because the flags would be left in an undefined state when the flood-fill algorithm terminated.  Even if Tinfour cleaned up the flags when the algorithm was done, there would be no guarantee that other applications that used the visited flag would do so. So anyone using the visited flag would have to write defensive code to protect itself against an API that lent itself to poor coding practice.  Your approach voids that and shows good judgement in  API design.
I don't have my lab notes with me right now, so I can't look this up.... At some point I did a bunch of tests comparing the performance of BitSet versus writing to an array of integers using custom code.  The reason I though that custom code might be faster is because it could make simplifying assumptions such as the fact that you were always setting bits but never clearing them, that you knew the number of bits you needed a priori, that your index value was never out-of-bounds, etc.  As I recall, it turned out that the performance difference, if any, was smaller than I could reliably measure giving the noisy test environment that is a modern operating system.

There are still some artifacts (missing triangles). Even when I use following code for SemiVirtual implementation. I suppose that I have some problems with input data. I have to check it.
 private static int getEdgeIndex(final IQuadEdge edge) {
    return edge.getIndex() / 2;
  }

The flood-fill algorithm is something I devised myself without doing much research.  There might be something better in the published literature.
I don't have a mathematically rigorous proof that the flood-fill reaches all triangles for all topologies, but I can't think of a counter example.  Of course, that doesn't mean much...  After all, I didn't think of your hipped-roof example either.

Depending on the nature of your problems, the following could be helpful or it could be extraneous information.
Recall that if an edge is shared by two polygon constraints (which is allowed, as long as the same vertices are used for the endpoints of the edge), the flood fill algorithm does not define which constraint index will be set for the edge.   In the example image that I posted showing European countries with color-coded edges, the borders of the countries were actually rendered in gray.  The application code uses the isConstrainedRegionEdge() method to make this determination.  In practice, for shared edges the constraint-index assigned to the edge by addConstraints() method is generally an artifact of the order in which edges are constructed.  The flood-fill only guarantees the constraint index for the interior edge.
If you were color-filling triangles, and wished to determine which color to use, you should not use the constrained region edge, but should look for an interior edge.
However, there is one case where you can get ambiguous results.  Image a case where an application specified a polygon constraint consisting of three vertices and the resulting constrained region formed a single triangle, so that there were no interior edges.  If that constrained region did not border other constrained regions, everything would be fine because the edges would be unambiguous.  But if any of the edges bordered other regions, there would be some doubt as to which constraint the enclosed area was associated with.
This last situation is a weakness in the current algorithm. One work-around for the shortcoming is to simply insert a single vertex into the TIN so that it is positioned in the interior of the triangular polygon.

There is a way to address the weakness I described above, though it would require a code change.  The addConstraints() method keeps an internal list of the edges that are formed as each constraint is added to the TIN.  This internal data preserves information about which side of each edge faces inward to the polygon constraint. It is used to ensure that the flood-fill operates correctly.  Currently, the internal data is discarded when the code exists addConstraints().
As an alternate approach, we could make addConstraints return an object holding this data.  An API could be developed to expose the relevant information.

Attached ZIP contains constrained TriangleCollector + modified version of LogoCDT with test data and LogoPanel modified to display filled triangles.
LogoCDT displays constrained edges correctly but I'm not able to get correct triangles.
There is one line with TODO in comment. With this line there is only outline of polygon. After commenting you will get polygon with holes + linear constraints.
I suppose that I have wrong algorithm in TriangleCollector
tinfour-collector.zip

Thank you.  I will look at it as soon as I can.  Currently, I'm looking at
the BitSet change.
On Tue, Oct 31, 2017 at 4:17 PM, Martin JANDA<EMAIL_ADDRESS>wrote:

Attached ZIP contains constrained TriangleCollector + modified version of
LogoCDT with test data and LogoPanel modified to display filled triangles.
LogoCDT displays constrained edges correctly but I'm not able to get
correct triangles.
There is one line with TODO in comment. With this line there is only
outline of polygon. After commenting you will get polygon with holes +
linear constraints.
I suppose that I have wrong algorithm in TriangleCollector
tinfour-collector.zip
https://github.com/gwlucastrig/Tinfour/files/1432132/tinfour-collector.zip
[image: ss-collector]
https://user-images.githubusercontent.com/7425758/32246921-e04be9f8-be80-11e7-888f-9c5159057752.png
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/gwlucastrig/Tinfour/issues/24#issuecomment-340893623,
or mute the thread
https://github.com/notifications/unsubscribe-auth/ASyR4Yza9bBkgiwYDdrGUze-KwTBW9xoks5sx4BigaJpZM4QLb7P
.

I did some work. Here's the result.

The modified TriangleCollector class follows.  Due to the way edges are indexed, this class will work only for the SemiVirtualIncrementalTin.  The issue with edge indexing working differently for QuadEdge and SemiVirtualEdge has been presenting itself quite a bit lately.  I'm going to have to think about a better way to handle that (I am open to suggestions).
The main issue with the original code was in the visitTrianglesConstrained() method where it decided whether to call processEdge().    The method isConstrainedRegionEdge() indicates that an edge is the boundary of a constrained region.  Recall that, in the current state of the implementation, the constrained region edge does not carry information indicating on which side of the edge the constraint belongs. So only the interior edges are a reliable indicator.  So the new version looks for isConstrainedRegionMember() and an indicator of where to start. Recall that there is an additional complication in the current implementation: a constrained region boundary is also a constrained region member.  Thus there is the compound test in the code
e.isConstrainedRegionMember() && !e.isConstrainedRegionEdge()
The other issue that still remains is the one I described in yesterday's posts above...  There can be an ambigous case where a polygon constraint includes 3 vertices and is bordered by other polygon constraints on all three sides.  In such as case, the code below will produce a triangular hole.
I am planning on doing additional work on this issue as we learn more about the problem.  Also, as I wrote the answer above, I realized that I probably should have named the method isConstrainedRegionEdge() to be isConstrainedRegionBoundary() so that the meaning of the method would have been more clear.  Alas...
TriangleCollector.zip

Thank you very much for partial fix.

I am interested in creating a permanent solution for your requirements.   If you have time and it would not require excessive effort on your part, please let me know what you are trying to accomplish.
Also, I have a question.  I am beginning to thing that, once again, I need to give my methods better names that would more clearly convey the meaning of their operations.  For example:

isConstrainedRegionEdge() would become isOnConstrainedRegionBorder()
isConstrainedRegionMember() would become isInConstrainedRegionInterior()

The question I have is whether the alternate names would have helped you better understand the methods when you were implementing your triangle count code?
In terms of the impact on my user base...  As far as I know you are the only user currently working with constraints.  So if the name change does present a problem for you, there is no reason to not do it.  On the other hand, if the name change wouldn't have helped, I have less motivation to make it.

My idea is to use tinfour as general tin generator in all parts of my project. It means generating tins for buildings and state borders. There is no other library that is so fast and can work with high precision and stability and with such huge amount of input data. You've made excellent work. Main problem is that I don't have enough time to study and better contribute to your library. So I report issues only. I work parallel on 3 modules and my boss has another 2 modules on queue :-(.

Different code for floodFill in standard and semi virtual implementation:
*) semi virtual  uses different flag for forward and reverse edges.
Forward calls if (!f.isConstrainedRegionEdge... and Reverse calls if (!r.isConstrainedRegionMember()
Standard implementation calls isConstrainedRegionEdge in both cases.
*) there is another difference in code floodFill. Semi virtual uses .getIndex()|0x01 for visited index and standard uses only .getIndex().
I suppose that code should be same after latest changes

The OR operation should be there, but the code probably works okay without
it. The edges only need to be visited once. So the OR ensures it gets
marked as visited no matter which side it is traversed from. The OR
improves efficiency. I will write more detail when i have access to my
computer
On Nov 6, 2017 1:13 AM, "Martin JANDA"<EMAIL_ADDRESS>wrote:

Different code for floodFill in standard and semi virtual implementation:
*) semi virtual uses different flag for forward and reverse edges.
Forward calls if (!f.isConstrainedRegionEdge... and Reverse calls if
(!r.isConstrainedRegionMember()
Standard implementation calls isConstrainedRegionEdge in both cases.
*) there is another difference in code floodFill. Semi virtual uses
.getIndex()|0x01 for visited index and standard uses only .getIndex().
I suppose that code should be same after latest changes
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/gwlucastrig/Tinfour/issues/24#issuecomment-342055881,
or mute the thread
https://github.com/notifications/unsubscribe-auth/ASyR4UeM4T5cCGgwiX89NMeWJxfW2AK5ks5szqN-gaJpZM4QLb7P
.

I understand that getIndex()|0x01 means that edge and its dual are marked as visited. So this performance improvement can be used in standard TIN too.

I've updated the indexing in both standard and semi-virtual cases to use the divide-by-two approach.

I've made the last of the name changes to the public methods in IQuadEdge to support the constrained region concept.  I believe that I have finally settled on method names that will be meaningful to developers writing their own applications.  I apologize for the many revisions this process required. But the names will not change again.  The method names are now

IQuadEdge.isConstrainedRegionBorder()
IQuadEdge.isConstrainedRegionInterior()
IQuadEdge.isConstraiedRegionMember ()

The Javadoc has been updated accordingly.

Found a bug in the recent changes.
In IncrementalTin (line 1869) and SemiVirtualIncrementalTin (line 1776) , the setConstrained() method incorrectly calls edge.setConstrainedRegionInteriorFlag().   This call should be removed.  I will update the code on Github later today.

I have added the TriangleCollector class to the Tinfour code. The triangle collector class was contributed by Martin Janda.  It provides a mechanism for traversing the TIN and collecting triangles.  One use of this new feature is illustrated in the image below.

To produce the image, a set of polygon constraints were generated using the Java TextLayout class.  Each of the constraints associated with a particular letter was assigned a Java Color object.  After the constraints were inserted into the TIN, the TriangleCollector was used to obtain the triangles for each constraint. The triangles were drawn with an area fill in the indicated color.   Finally, the border edges of each letter were drawn in black to outline the letters.

I have added the triangle collector to the LogoCDT application which is included in the test.example package shipped with Tinfour.  This latest version was used to create the colorful "Tinfour" graphic shown in my post above.
After a lot of changes, this matters cited in this Issue are now resolved.   My thanks to Martin Janda who offered a remarkable amount of support and analysis on this issue.
This issue is now closed.


Support indenting .cruft.json with two spaces instead of four

Dear cruft maintainer team, would you be open to change the indentation of .cruft.json to use two spaces? Or to provide an option for this? The reason being that linters like prettier require two spaces of indentation by default for JSON files, which unfortunately breaks my pre-commit suite. Not arguing that two spaces is better :laughing:  it just appears to be a widespread convention for JSON, and it would be nice not having to special-case .cruft.json.

#90 simply changes the indentation width to two spaces. Happy to use another approach though if you prefer.


Add successConditionDuration option for k8s resources

Summary
When using successConditions for k8s resources during update operations the resource can already be in the correct state which causes the step to succeed. This is problematic when operators have delays in reconciling after an update action.
https://github.com/argoproj/argo/tree/master/examples#kubernetes-resources
Use Cases
Our use case is a custom operator that has occasional delays at reconciling when it is busy.
One possibility is introducing a successConditionDurationSeconds that would wait for the state to be in the desired state for the specified duration.
  templates:
  - name: pi-tmpl
    resource:
      action: apply
      [...]
      successCondition: status.status == Synced
      successConditionDurationSeconds: 30
      [....]

Message from the maintainers:
Impacted by this bug? Give it a 👍. We prioritize the issues with the most 👍.

you can use activeDeadlineSecondto  fail the step if the successCondition is not meet within a given duration
templates:
  - name: pi-tmpl
     activeDeadlineSeconds: 30
    resource:
      action: apply
      [...]
      successCondition: status.status == Synced

@sarabala1979 We already use activeDeadlineSecond to fail the step in that case.  The issue we are seeing is something like the following:
status = Synced
k8s update
status = Synced          # custom operator has not reconciled yet
argo step completes
status = Syncing        # custom operator has reconciled
status = Synced         # custom operator has finished it's update to dependent resources and reconciled

We need successCondition to be true for a duration let's say 30 seconds otherwise there is a chance that the resource can be in the correct state because the operator hasn't reconciled before the argo step checks the successCondition.
status = Synced
k8s update
status = Synced          # custom operator has not reconciled yet
argo step waits for status to be Synced for 30 seconds
status = Syncing        # custom operator has reconciled
status = Synced         # custom operator has finished it's update to dependent resources and reconciled
argo step completes once 30 seconds have elapsed

you can use suspendtemplate for waiting duration.
templates:
  - name: main
     steps:
      - - name: pi-tmpl
           template: pi-tmpl
      - - name: wait
           template: wait-tmpl

  - name: pi-tmpl
    resource:
      action: apply
      [...]
      successCondition: status.status == Synced
 - name: wait-tmpl
    suspend:
        duration: "20"

We worked around this by setting the status on the k8s update to "Syncing" and ensuring our controller waited for dependent resources to sync before changing to Synced.


Wrong event names after minification

Not sure what's up and how to properly debug this.
I have a preact app and while I dev, the lib is working properly.
But in prod the event handlers bound to the element don't get called.
touch* event handlers are working fine.
I set the DEBUG to true, the PointerListener gets initialised and I get the debug info in the prod build.
But it's a lot of data and I'm not sure what to look for to understand the issue.
I tried different options to initialise with, but it makes no difference.
UPD
I think it's the minification that is messing up the code.
The event names get optimised, so for example panup becomes qup.
I'm not an expert in this, but if I'm not mistaken these event names should be assigned as strings and not variables. This way they'll get through the optimisations intact.

Thanks for reporting and debugging! Currently, event names are built using constructor.name and DIRECTION_* variables, which seems to not work after minification. For minification gulp-minify is used. Using its option mangle:false should solve the problem. In the next build, I will include this option.

Great! Thanks!
Could you also add the debug flag to options? I found the only way to turn it on is to edit the lib code directly in the node_modules.

I uploaded a new minified version for testing in the /build folder of this repository which should work.
I will add the debug flag to the options.

While this can be useful for manual imports, I believe it won't help to solve the issue while using npm/yarn. In this case it depends on the uglifying package that is used in the project. In my case I'm using preact cli which is using TerserPlugin. I'll need to update my webpack config to make TerserPlugin extract the chunk with the contactjs package into a separate one without mangling.
So it looks while the gulp flag can be a solution, it is not universal.

In this case, I think it would be best to implement the event name as a string as you initially suggested. The library should not be rendered unusable by uglifying packages.

The latest release fixes the issue. Awesome. Thanks!


update packages

:white_check_mark: Build TheIdServer 7.4.4-fix-dependencies1-0078 completed (commit https://github.com/Aguafrommars/TheIdServer/commit/e3d3e03e5e by @invalid-email-address)

:white_check_mark: Build TheIdServer 7.4.4-fix-dependencies1-0079 completed (commit https://github.com/Aguafrommars/TheIdServer/commit/ddf06f9f30 by @invalid-email-address)


Instructions for running the thing

Just add instructions on how to run the project to the README. The project is packaged as a pre-built Docker image, so it's just a few commands.
Optionally instructions for running the project without Docker.

Before any official documentation is added - the Docker image expects configuration to be mounted in /config. Config file names are already mentioned in the README.


Pathfinder

Name your screen design
Let me know the title/name, e.g.: My Custom App
Share the design source / link
Let me know the design source or link (preferable from dribbble)

@CristinaMrtn thank you for your suggestion. Could you share an example app link?


returned to N times and vue-router BUG

Version
2.4.0
Reproduction link
Https://vue-hn.now.sh/top
Steps to reproduce
Https://vue-hn.now.sh/top
Jump page 2 times after the return is also returned to 2 times to return
What is expected?
1 time
What is actually happening?
2 times

that is vue-router bug

I'm sorry, I don't understand what do you mean and the repro is not valid. Can you create a repro using this: http://jsfiddle.net/posva/9r6xhqbp/ Thanks

This is already addressed and will be fixed in next router release.

What time is the next version?


[flutter_tools] fix coverage measurement to report on lib and not test

Description
I needed to do a closer eyeball - we're currently reporting the test script's own coverage. Verified locally that lcov files are correct now

FYI @keyonghan


When execute the build could perform uglify

If we think in the way: plug & play it's really necessary to minify for reduce the file size.
I'm not familiar with the command line of babel but I saw that we can use plugins, like: https://www.npmjs.com/package/babel-plugin-uglify
Or it's possible too with task runner, like gulpjs.

You're right, but I was thinking about it...
If they use our component on their application, they will uglify the code when build to production. This means that we're doing something that they will do later...
But if they don't uglify their code and we did it, we're doing our part to best performance...

I'm working on this, I'm minifying and uglifying but I'm not adding the minified version as main in package.json.
ref lyef/lyef-react-counter#15
What do you guys think? I'm basically adding this just for showing what the component's size will be using it in production.


Fix observability status check

Description
Currently, the observability status check implicitly requires all components of observability to be deployed, but in fact there are legitimate use cases where the customer only deploys some of the components. This PR changes the logic of the status check to only check the status of the enabled modules.
GitHub Issues

GitHub Issue #

https://github.com/dell/csm/issues/1159

Checklist:

[ ] I have performed a self-review of my own code to ensure there are no formatting, vetting, linting, or security issues
[ ] I have verified that new and existing unit tests pass locally with my changes
[ ] I have not allowed coverage numbers to degenerate
[ ] I have maintained at least 90% code coverage
[ ] I have commented my code, particularly in hard-to-understand areas
[ ] I have made corresponding changes to the documentation
[ ] I have added tests that prove my fix is effective or that my feature works
[ ] I have maintained backward compatibility

How Has This Been Tested?
Installed happy-path and negative cases of all valid component combinations (topology, otel+metrics, topology+otel+metrics). For negative test cases, just used an invalid image value for the observability component to force a pod to fail. Made sure the csm status field always reflected the state of the deployment.
Additionally, this PR adds a few E2E test scenarios where we only install topology and only install otel+metrics -- these scenarios will cover this defect as well. https://github.com/dell/csm-operator/pull/494

BEAUTIFUL!!!!

thank you 😍


BUG: ecowitt2mqtt sometimes stops reporting to HA

Describe the bug
Every so often (I have observed it 3 times in the past 2 weeks now), HA stops seeing values from Ecowitt. Restarting the ecowitt2mqtt container fixes this. I just did this for the 3rd time, and now feel it's a pattern. I do not have logs. Please let me know what to enable for debugging, or where to get logs next time this happens (should be in the next week).
I did check the container logs, and it's sending the standard message regularly (I'm guessing 8 times a minute since I have 2 devices)
2023-11-21 08:00:16,567 | INFO | Published to Home Assistant MQTT Discovery

To Reproduce
Just running the container and waiting a week.
Additional context
This is a new issue that has started November 5th. So it may be something introduced with the 2023.11 version.
Next time I'll grab an MQTT Explorer output to see what's in there. Is there anything in the container to enable for more in depth debugging? I just enabled ECOWITT2MQTT_DIAGNOSTICS, and did notice this:
2023-11-21 08:25:27,771 | INFO | *** DIAGNOSTICS COLLECTED
2023-11-21 08:25:27,771 | DEBUG | Stopping runtime
2023-11-21 08:25:27,771 | DEBUG | Runtime shutdown complete
2023-11-21 08:25:27,772 | DEBUG | Sending DISCONNECT
2023-11-21 08:25:27,772 | DEBUG | Stopping MQTT process loop
ERROR:    Traceback (most recent call last):
  File "/venv/lib/python3.11/site-packages/starlette/routing.py", line 686, in lifespan
    await receive()
  File "/venv/lib/python3.11/site-packages/uvicorn/lifespan/on.py", line 137, in receive
    return await self.receive_queue.get()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/asyncio/queues.py", line 158, in get
    await getter
asyncio.exceptions.CancelledError

(This seems to happen after every publish data event)

With the ECOWITT2MQTT_DIAGNOSTICS enabled, my Uptime Kuma is reporting ecowitt2mqtt down regularly.

I'm updating that to allow for more retries for now (since we do want the diagnostics for when this breaks again). But something is now preventing network access (Uptime Kuma is just checking if port 8080 can receive TCP. Nothing more)

This is a duplicate of #760. Try the suggestion in this comment and if the problem persists, please contribute any additional information over there. Thanks for your help!

No problem. It didn't look the same as that (at first glance) looked like it did not work at all (versus stopping after a while).
But on reading the thread it seems like this is indeed related. I just checked my outage times, and it was pretty much when I upgraded HA (so HA went down for reboot).


split controller code to master and node controllers

Motivation behind this change is:

we can make node controller as self contained, i.e, each node can create and
delete volumes independent of controller.
clearly divides what parts are handled by master and node, say for example
nothing related to DeviceManager should be in master code.
this is an enabler change to implement fully topology aware provisioning by
dropping workaround solution of creating pmem device on attachment.

Chose reattachment strategy(this only valid till we implement full topology aware):

reattaching to same node without data lose. The assumption is that, it
helps for "cahche volume" type usecases.
reattaching to different node, with no data.

Overall this sounds like the direction, but it is not clear to me what the result or next steps will be after merging this.
Does it fully implement one of the persistency models described in PR #160? Which one?
If it changes user-visible behavior, then the README.md must be updated in the same PR, otherwise we end up describing one thing while providing another.

Overall this sounds like the direction, but it is not clear to me what the result or next steps will be after merging this.

The next step in my plan(which i am working on) is to make use of CSINodeInfo support in external-provier, in other words implement CreateVolumeRequest.AccessibilityRequirement in our driver.

Does it fully implement one of the persistency models described in PR #160? Which one?

No, i cannot say at the moment  that this change address fully any of three models you proposed. I could see this as enabler towards supporting them.

If it changes user-visible behavior, then the README.md must be updated in the same PR, otherwise we end up describing one thing while providing another.

The only change with existing behavior is,  addressing at some degree of reattaching issue. Two reasons why i did not touch README is:

the reattachment policy we chose is a temporary solution, it might change(atlest needs to revisit) after implementing   CreateVolumeRequest.AccessibilityRequirement.
the current README does not mention anything related to reattachment.

Amarnath Valluri<EMAIL_ADDRESS>writes:

Does it fully implement one of the persistency models described in PR #160? Which one?

No, i cannot say at the moment  that this change address fully any
of three models you proposed. I could see this as enabler towards
supporting them.

Is it worth merging the PR while further work is still needed?

If it changes user-visible behavior, then the README.md must be updated in the same PR, otherwise we end up describing one thing while providing another.

The only change with existing behavior is,  addressing at some degree
of reattaching issue.

How? Or phrased differently, what works now that didn't work before?

Two reasons why i did not touch README is:

the reattachment policy we chose is a temporary solution, it might change(atlest needs to revisit) after implementing   CreateVolumeRequest.AccessibilityRequirement.
the current README does not mention anything related to
reattachment.

This leaves people currently trying to use pmem-csi in the dark about
this crucial aspect. I think it is worthwhile adding a section now, even
if it just mentions the problem and says that work is in progress.

Amarnath Valluri<EMAIL_ADDRESS>writes:

Overall this sounds like the direction, but it is not clear to me what the result or next steps will be after merging this.

The next step in my plan(which i am working on) is to make use of
CSINodeInfo support in external-provier, in other words implement
CreateVolumeRequest.AccessibilityRequirement in our driver.

Hmm, why work on that first? The most important persistency mode is
"ephemeral volumes", and CreateVolumeRequest.AccessibilityRequirement is
not needed for that, is it?
Which of the four modes are you trying to implement?

Amarnath Valluri<EMAIL_ADDRESS>writes:

Does it fully implement one of the persistency models described in PR #160? Which one? > No, i cannot say at the moment that this change address fully any of three models you proposed. I could see this as enabler towards supporting them.
Is it worth merging the PR while further work is still needed?

The main goal of this change is to split the controller code. that way it is self contained. The further work I mentioned was about "reliable scheduling issue", which i would like to address in next PR. So lets consider this for merging.

If it changes user-visible behavior, then the README.md must be updated in the same PR, otherwise we end up describing one thing while providing another. The only change with existing behavior is, addressing at some degree of reattaching issue.
How? Or phrased differently, what works now that didn't work before?

Currently pmem-csi is deleting the volume on Unpublish call, which means we don't support volume "persistency". This change address this by keeping the volume till we get Delete call. While reattaching we check if its moving to different node or not. if its same node we keep the data(cache usecase), else clean the device on unpblished node and create new one where its being attached.

I would prefer to merge this once it fully implements one of the described persistency modes together with a user-visible description. As it stands now, at least I don't see the full picture of how you intend to make those modes work and thus can't review.
But if you feel that it's worthwhile to merge some intermediate step already now, then I won't object.

Currently pmem-csi is deleting the volume on Unpublish call, which means we don't support volume "persistency".

ControllerUnpublishVolume or NodeUnpublishVolume? I assume you mean the former, because reusing a volume on the same node works fine in the E2E testing.
Speaking of the E2E testing, does that still pass with this change here?

closing this PR infavour of #177  as it is containing these changes


[24.05]  paperless-ngx: 2.9.0 -> 2.10.1

Description of changes

backport #321072
2.10.0 changelog: https://github.com/paperless-ngx/paperless-ngx/releases/tag/v2.10.0
2.10.1 changelog: https://github.com/paperless-ngx/paperless-ngx/releases/tag/v2.10.1
Things done

Built on platform(s)

[x] x86_64-linux
[ ] aarch64-linux
[ ] x86_64-darwin
[ ] aarch64-darwin

For non-Linux: Is sandboxing enabled in nix.conf? (See Nix manual)

[ ] sandbox = relaxed
[ ] sandbox = true

[ ] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[ ] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[ ] Tested basic functionality of all binary files (usually in ./result/bin/)
24.11 Release Notes (or backporting 23.11 and 24.05 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module

[x] Fits CONTRIBUTING.md.

Add a :+1: reaction to pull requests you find important.

This seems to not compile anymore after being rebased to nixos-24.05 after latest staging (neither does paperless-ngx compile without this pr).

#319086 related, I believe

Tested again that it compiles now and the tests run.


update to bunlder version: 2.1.2

This is a bug fix
Summary
Solve bundler version conflict on 'jekyll serve' command execution
Context
Latest bundler version is "2.1.2"
Local bundle installation fails as gemspec is pointing to previous version - "2.0.2".

This is PR for issue #363
PR also has commit for locale support for Kannada (kn)


Add multi-process guide to docs.

This is the first section of the internal doc I drafted. I still need
to add the "Common multi-process idioms" and "Multi-host workflows"
sections.

Internal link for googlers: https://docs.google.com/document/d/1KpxNC2XcBAt4G8Ch5FQ-DgQTTf5fLn8u1RN4Q_L6wTI/edit
@jakevdp this should be identical to what's in the doc, minus the missing sections and references to them. Feel free to review the contents or just the formatting etc.


chore(deps): update dependency com.sun.xml.bind:jaxb-impl to v2.3.2

This PR contains the following updates:

Package
Update
Change

com.sun.xml.bind:jaxb-impl
minor
2.2.7-b41 -> 2.3.2

Renovate configuration
:date: Schedule: At any time (no schedule defined).
:vertical_traffic_light: Automerge: Disabled by config. Please merge this manually once you are satisfied.
:recycle: Rebasing: Whenever PR is stale, or if you modify the PR title to begin with "rebase!".
:no_bell: Ignore: Close this PR and you won't be reminded about this update again.

[ ] If you want to rebase/retry this PR, check this box

This PR has been generated by Renovate Bot.

PR has been edited
:construction_worker: This PR has received other commits, so Renovate will stop updating it to avoid conflicts or other problems. If you wish to abandon your changes and have Renovate start over you may click the "rebase" checkbox in the PR body/description.

PR has been edited
:construction_worker: This PR has received other commits, so Renovate will stop updating it to avoid conflicts or other problems. If you wish to abandon your changes and have Renovate start over you may click the "rebase" checkbox in the PR body/description.


Create a page to show all codetrek applicant's feedback

Describe the task
Currently, we give feedback to applicants by selecting their names from the sidebar menu and saving it in our database. Now, we want to create a new page where we can display all the feedback received for a specific applicant. To make it organized, we plan to use an accordion-style layout for the feedback. Additionally, when we click on the feedback button, the new page should open and show the relevant feedback.
Expected behavior
We need to make a new page that shows all the feedback for a particular Codetrek applicant. The feedback will be displayed in a way that is easy to navigate, like an accordion. When we click on the feedback button, the new page will open and show us all the feedback given to the particular applicant.

The image below shows an example of how the feedback button should look like.

Take accordion reference --> Codetrek module  -> click on evaluate button.

The accordion heading will contains -

user name who give the feedback
feedback categories
feedback type
date

The accordion body will contains -

feedback

References

Take database reference

code_trek_candidate_feedback

Take feedback accordion UI reference figma link

@Priyanka-Kaintura You can start working on this task. For this task you need to create a new branch from this branch feature/3067/functionality-to-provide-feedbacks-to-codetrek-candidates

@Priyanka-Kaintura You can start working on this task. For this task you need to create a new branch from this branch feature/3067/functionality-to-provide-feedbacks-to-codetrek-candidates, as the PR related to this branch is not yet merged in master #3131

Breakdown of the Task:

[ ] Create function in controller and service file to fetch the data
[ ] Error Fix in data fetching
[ ] Create the UI as per the expectation
[ ]  Enhancement on UI
[ ] Create a PR
[ ] Work on further suggested changes

This has been deployed. Closing this now


[WIP] Implement vanila mcts

Implementation of vanila MCTS, currently only support two kinds of rollout strategy, greedy_by_prm and random_by_lm_prior_prob

问下这个MR什么时候合，想试下新的MCTS

When this MR is going to close, would like to try the new MCTS

Hi!
You can use bb9b884e0be38e0a99e56e5ee46816d7c0a5365d currently. We still need some efforts to confirm the hyperparameters of MCTS and improve the code structure.


Refactor of build strategy detection

This is in prep for refactoring runmount detection to look for BUILD_OUT instead of grepping for runmount in the Dockerfile


server integration test - coverage >=90% (istanbul report)

It's impossible to reach 90%, because there are some cases that are impossibile to test (some errors related to db, or passportjs and so on...)
I decided to accept >=85% (it's still very high, 90% probably it is really to much ) 👍

But I should find a way to test catch/errors methods that call Utils.isJwtValid(token) (with inside jwt.verify).

Ok 90% is possible :)
=============================== Coverage summary ===============================
Statements   : 88.97% ( 984/1106 )
Branches     : 88.22% ( 382/433 )
Functions    : 89.55% ( 60/67 )
Lines        : 88.97% ( 984/1106 )

89% ... damn a little 1% 👍

89,8%
I close this issue :)


Support for user UUIDs

I'd like to see this working for user UUIDs out of the box. For now, I help myself with 2 subsequent migrations which alter the columns bannable_id and created_by_id to string(36). This works so far but I am not sure about any side effects. It would be great if there would be a config option for this.

Hi @johlton! Thank you for the feedback.
There is no plan to make bannable_id & created_by_id column types configurable. Motivation not obvious on the first sight, but pretty simple in fact. Imagine the situation when you have 2 Bannable models:

User model has BIGINT id key
Bot model has UUID id key

There is no way to store both of this models IDs in bannable_id column without enormous database queries performance issues.
As a solution I'd prefer to refactor this package to new architecture similar to the Laravel Love package. Then package wouldn't know anything about bannable models structure and will be able to work with any column type.
I noticed that you've using string(36) for UUID columns. This might lead you to performance issues on big databases. There is Laravel $table->uuid('id_column') helper method which should work better.

Hi Anton, thanks for your quick reply.

I noticed that you've using string(36) for UUID columns. This might lead you to performance issues on big databases. There is Laravel $table->uuid('id_column') helper method which should work in more optimized way.

I tried to do it with type uuid but then Doctrine DBAL threw an Exception:

Doctrine\DBAL\DBALException  : Unknown column type "uuid" requested. Any Doctrine type that you use has to be registered with \Doctrine\DBAL\Types\Type::addType(). You can get a list of all the known types with \Doctrine\DBAL\Types\Type::getTypesMap(). If this error occurs during database introspection then you might have forgotten to register all database types for a Doctrine Type. Use AbstractPlatform#registerDoctrineTypeMapping() or have your custom types implement Type#getMappedDatabaseTypes(). If the type name is empty you might have a problem with the cache or forgot some mapping information.

So I figured the string type.

If UUID is not working for you - you'd better use CHAR(36) instead of VARCHAR. UUID has fixed length and your ids will consume more database storage if they will be stored as variable-length strings. Here is a MySQL reference about CHAR column type.

Totally agree with you here, but it throws the same DBAL exception which does Not recognize the char type.

I could use a DB::table construct here, or dropping and re-adding the columns. Thanks for your input!

If you have time - I advise you to look for a solution in StackOverflow or ask in Laravel discord or Slack chats how to deal with this exception. I'm sure it could be fixed very easy, but don't clearly remember how.
Using DB::table is not that bad, but it's hardcode and if you will decide to switch database, for example on PostgreSQL later - then you have to rewrite your migrations.

It works now. After fetching ramsey/uuid-doctrine via composer require ramsey/uuid-doctrine --dev, add the following:
app/Providers/AppServiceProvider.php
try {
    \Doctrine\DBAL\Types\Type::addType('uuid', 'Ramsey\Uuid\Doctrine\UuidType');
} catch (DBALException $e) {
    Log::error($e->getMessage());
}

Now it's possible to use a migration like this:
Schema::table('bans', function (Blueprint $table) {
    $table->uuid('bannable_id')->change();
    $table->uuid('created_by_id')->change();
});

Thanks again, Anton, and keep up the good work!

Thanks for sharing the solution! It might be useful for others too.


fix(travis): fix travis failure + small cleanup

Current coverage is 63.04% (diff: 25.00%)

No coverage report found for master at 2555e2c.

Powered by Codecov. Last update 2555e2c...ae39ab5


Dockerize the GM Fabric development environment

The goal of this issue is to replicate all of the external dependencies that gm-fabric-jvm uses in the production environment in local docker-compose infrastructure on the developer's workstation.
This should include the following:

Developing an NGINX / Gatekeeper container that runs the dashboard being developed. This should be integrated into the WebPack build pipeline and maintain hot reloading.
Dockerizing multiple fake GM-Fabric-JVM microservices using the mock-json Node.js app in the project.
Using Node.js to mock out the API of the new microservice Josh is creating???
Adding Zookeeper
????

Note: This should be implemented in separately from the docker-compose infrastructure that Josh built containing Envoy, Graphite, statsd, etc.

This is partially dependent on the completion of #318


Save geo information for clinics

Thanks for creating an issue! Please fill out this form so we can be sure to have all the information we need, and to minimize back and forth.

What are we trying to do?
The clinic finder lookup is slow and doesn't cache the lat/long. We should persist clinic l/l in db so we're only doing a lat/long lookup for the patient.

What feature or behavior is this required for?
Making clinic finder not take 30 seconds every time to do 60 clinic lookups

How could we solve this issue? (Not knowing is okay!)
Either a clinic finder change or a rake task

Anything else?
nope!

@natedana

Rough steps to solve:

Add geo field(s) to Clinic model
Clinic finder returns geo lat/long data when called; the Clinic model should save that data from the call if it isn't set
Clinic geo fields should expire if the address of the clinic changes


[🐛 Bug]: First Notebook Cell Execution Fails with Multiple Scope Errors

👶 Getting Started
Please search the history to see if an issue already exists for the same problem.

[X] I have searched the existing issues.
[X] I have tested the latest version.

📝 Describe the bug
This project looks interesting but I'm unable to proceed past the first step in notebook 1 which is installing dependencies. Running the first cell in the Rust kernel results in 4 errors, each stating: "multiple applicable items in scope".
🕹 Steps to reproduce

Follow the install instructions from the README file.
Open and run the first notebook.
Switch to the Rust kernel.
Run the first cell in the notebook.
After about 45 seconds, the cell fails with errors.

😯 Current behavior
The cell fails to complete and instead throws 4 errors indicating "multiple applicable items in scope". (See attached screenshot for more details)
🤔 Expected behavior
The cell should complete its execution successfully and allow me to advance to the next notebook cell.
📸 Screenshots

🔦 Additional context
I'm new to Rust-based data analysis (but not data analysis in general) and was really looking forward to going through the notebooks. This issue has currently halted my progress and I'm unable to move beyond the first notebook.

Hi there, @rrrodzilla! I really appreciate you taking the time to report this issue. It looks like the newer releases of evcxr have come up with a new feature – they now support those informative "Compiling" messages starting from version v0.15.0. From what I can gather, you must be using a version that's newer than v0.15.0. My last experience was with version v0.14.2.
As the output suggests, you might want to try breaking down your statements into separate cells and running each line as its own command. If no one gets around to addressing this issue by the weekend, I'm planning on diving into the latest version myself. Thanks again for raising this concern!


Only Browser Audit Showing

Expected vs actual behavior
Within the dashboard, only the logs related to the browser commands are showing under the Audit Logs option. This is using the postgres audit option. Any audit pertaining to the CLI or KUBECTL is not there, even though I can see it within the relay-tail and paralus-tail pods.

[x] I've described the bug, included steps to reproduce it, and included my environment setup with all customizations.
[x] I'm using the latest version of the project.

While we check this out, meanwhile you can still you API Logs option under kubectl audit logs to filter all the commands executed by a user via browser shell or using download kubeconfig.

With Paralus 0.2.7 I'm unable to see kubeconfig actions logs even in paralus-tail pod, any ideas why/when the issue will be fixed? :)


Does powershell recognize $IPADDR written in the "Switch based on platform" example YAML?

It seems necessary to rewrite to %IPADDR%.

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

ID: 797838e7-f32b-868e-8766-8d96973bf18f
Version Independent ID: 20c9e62d-56ec-f5a0-c3f9-6f72bf96252e
Content: Cross-platform scripting - Azure Pipelines
Content Source: docs/pipelines/scripts/cross-platform-scripting.md
Product: devops
GitHub Login: @andyjlewis
Microsoft Alias: alewis

The $(IPADDR) syntax is actually a pipeline variable, not an environment variable that would be specific to the script type.


Commands refactoring using Executor superclass

All commands should inherit from this Executor class. Each command class should have a #run method.
The ouput is set to $stdout when calling super. The method #print will print out to console and #system_exec is in charge of executing system commands. This all makes for a much cleaner and DRY design and makes it easy to add new Commands.

class Jeweler
  module Commands
    class Executor
      attr_accessor :output

      def initialize
        self.output = $stdout
      end

      def run
        raise "Must be implemented by subclass"
      end

      protected

      def print msg
        output.puts msg
      end

      def system_exec command
        print "Executing #{command.inspect}:"
        Kernel::system command
      end
    end
  end
end

I'm closing out old PRs as part of #283 . I'm sorry I was never able to help get this to a point to be merged.


Bring back communicator

Makes the communicator functional again after data loading rewrite.
Adds a few more flow types / annotations
Simplifies data loading wrt current user / conversations / comments
Everything is now realtime, including lists of conversations / comments
Still needs some work to make it as responsive as it should be when posting comments/conversations (should do optimistic updates on the collections)

Once this is merged into refactor/data-loading, I think we can merge refactor/data-loading into master.

LGTM, let's go!


Create a secret that's used by the tuf server, run the webserver for tuf.

@asraa I created this off of your great start (thank you!). I added a new script setup-scaffolding.sh that is required because we have to shuffle secrets from multiple namespaces. The current idea is to split the tuf into two steps:

Combine public keys, certs in the job into a single secret called tuf-secrets
tuf-secrets then gets mounted to the service as files, and then it can only read local filesystem

Looks like things are up adn running from a quick test that I ran.
vaikas@villes-mbp scaffolding % curl -v http://tuf.tuf-system.svc:8080/keys/root.json
*   Trying <IP_ADDRESS>:8080...
* Connected to tuf.tuf-system.svc (<IP_ADDRESS>) port 8080 (#0)
> GET /keys/root.json HTTP/1.1
> Host: tuf.tuf-system.svc:8080
> User-Agent: curl/7.79.1
> Accept: */*
>
Handling connection for 8080
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< accept-ranges: bytes
< content-length: 407
< content-type: application/json
< date: Sun, 31 Jul 2022 21:04:30 GMT
< last-modified: Sun, 31 Jul 2022 21:04:22 GMT
< x-envoy-upstream-service-time: 522
< server: envoy
<
{
	"encrypted": false,
	"data": [
		{
			"keytype": "ed25519",
			"scheme": "ed25519",
			"keyid_hash_algorithms": [
				"sha256",
				"sha512"
			],
			"keyval": {
				"public": "e63cea0a1e23162b1cbf8e29828568f263e5eff0f98d4ffca0c69443bff5b99e",
				"private": "<redacted not that it matters..."
			}
		}
	]
}

Signed-off-by: Ville Aikas<EMAIL_ADDRESS>

When I fetch the root and try to use it (I have port forwarding set up):
like so:
kubectl -n kourier-system port-forward service/kourier-internal 8080:80 &

I have added an /etc/hosts entry coupled with that (just like discussed in the getting-started.md ):
<IP_ADDRESS> tuf.tuf-system.svc

And grab the root:
kubectl -n tuf-system get secrets tuf-root -ojsonpath='{.data.root}' | base64 -d > /tmp/root.json

Followed by this.
vaikas@villes-mbp scaffolding % cosign initialize --mirror http://tuf.tuf-system.svc:8080 --root /tmp/root.json
Handling connection for 8080
Handling connection for 8080
Handling connection for 8080
Handling connection for 8080
Handling connection for 8080
Handling connection for 8080
Error: updating local metadata and targets: error updating to TUF remote mirror: tuf: missing remote metadata timestamp.json
remote status:{
	"mirror": "http://tuf.tuf-system.svc:8080",
	"metadata": {}
}
main.go:62: error during command execution: updating local metadata and targets: error updating to TUF remote mirror: tuf: missing remote metadata timestamp.json
remote status:{
	"mirror": "http://tuf.tuf-system.svc:8080",
	"metadata": {}
}

Yeah, I tried to jot down the steps in this file:
https://github.com/asraa/scaffolding/pull/1/files#diff-3d56f080bbe91814f938f3fc46dac11063873b04c71d32adc9c3315360b40be4

Ok, things seem to work now:
vaikas@villes-mbp scaffolding % kubectl -n tuf-system get secrets tuf-root -ojsonpath='{.data.root}' | base64 -d > /tmp/root.json

vaikas@villes-mbp scaffolding % cosign initialize --mirror http://tuf.tuf-system.svc:8080/ --root /tmp/root.json
Handling connection for 8080
Handling connection for 8080
Root status:
 {
	"local": "/Users/vaikas/.sigstore/root",
	"remote": "http://tuf.tuf-system.svc:8080/",
	"metadata": {
		"root.json": {
			"version": 1,
			"len": 2178,
			"expiration": "01 Feb 23 21:35 UTC",
			"error": ""
		},
		"snapshot.json": {
			"version": 1,
			"len": 618,
			"expiration": "01 Feb 23 21:35 UTC",
			"error": ""
		},
		"targets.json": {
			"version": 1,
			"len": 1028,
			"expiration": "01 Feb 23 21:35 UTC",
			"error": ""
		},
		"timestamp.json": {
			"version": 1,
			"len": 619,
			"expiration": "01 Feb 23 21:35 UTC",
			"error": ""
		}
	},
	"targets": [
		"fulcio_v1.crt.pem",
		"rekor.pub",
		"ctfe.pub"
	]
}


[GSOC]: Create a Data Card Using New Template

Several of you have expressed interest in creating your own Data Card. To that end, one of our starter tasks involves using our new template.
This template, which you can find inside the template directory, was created to help onboard developers in creating transparent dataset documentation—while at the same time providing pedagogical practices around transparency.
Contributions to this starter task will help us explore how this template could scale and adapt across domains. In turn, this starter task provides a general overview of our transparency documentation efforts, and sets expectations for the Benchmark Detectives project.
This starter task is open for multiple submissions by multiple participants.
To prepare:

Choose any dataset out there that does not already have a corresponding Data Card. You may even use datasets that you are currently working on as long as your Data Card will be published with open-access.
Gather any existing documentation associated with your selected dataset. If it’s an academic dataset, for example, then this could include its original publication.
Explore the Data Cards Playbook.
Read our short paper that was recently featured at NeurIPS 2021 Data-Centric AI Workshop to develop a conceptual understanding of Data Cards.

Timeline and submission logistics:

While filling out a Data Card template can take up to a few hours, keep in mind that needing to conduct additional analysis or investigations could substantially increase the time taken to complete a template.
If you are using Colab to probe the dataset, train the model, or perform analysis, please include them in your submission.
When you are done, please commit your completed template to the Benchmark Detectives directory as a Markdown or PDF file.
Include a short note on your experience in your proposal for Benchmark Detectives.

GSOC proposals deadline is soon approaching. I highly recommend working on the starter tasks and adding them to your application. This will help set your application apart. Please let us know if you need any help. :) Good luck!

@bhaktipriya I have also included my starter project for this task here is the PR https://github.com/PAIR-code/datacardsplaybook/pull/10


resources.Get throwing error with argument from shortcode parameter

Environment
hugo v0.87.0+extended linux/amd64 BuildDate=unknown
Issue
I don't know if this is a bug or just a leaky abstraction but inside a shortcode...
...this work as expected:
{{ $src := "image.jpg" }}
{{ $image := resources.Get $src }}

while this doesn't:
{{ $src := .Get "src" }}
{{ $image := resources.Get $src }}

throwing this error:
Error: Error building site: "/site/content/my-page.md:56:1": failed to render shortcode "image": failed to process shortcode: "/site/themes/my-theme/layouts/shortcodes/image.html:8:18": execute of template failed: template: shortcodes/image.html:8:18: executing "shortcodes/image.html" at <$image.RelPermalink>: nil pointer evaluating resource.Resource.RelPermalink

Is this related to #7960?

How are you calling the shortcode?

Curious, what do you mean by leaky abstraction in this particular context?

@jmooring I'm not using page bundles.
The shortcode is called by the following on content/section/page.md
{{< image src="/img/subdir/image.jpeg" alt="Description" width="640" height="400">}}

Note: I moved the img dir to assets/.
Note 2: Currently I'm using it without problems with src="{{ .Get "src" }}" and images under static/.

In the future, please use the forum (https://discourse.gohugo.io) for questions and troubleshooting. We prefer to use GitHub for verified bugs and vetted enhancements. Thanks.

Curious, what do you mean by leaky abstraction in this particular context?

Because in my limited high level (superficial) undestanding the method resources.Get can be used like this. But maybe there are limitations for it that are not clear to anyone reading the documentation or at least for me.

That said, resources.Get is the exact same function in both scenarios.

It is but the later does not work.

@jmooring Thanks and in the future I will to that. But as far as I know this is not invalid and not solved. Why it is invalid?

Link to dicussion (just opened): https://discourse.gohugo.io/t/resources-get-throw-error-if-argument-is-a-shortcode-parameter/34299


Update Android SDK with latest source code

Guys,
First of all, thank you for your awesome API.
I realize that some EXTRAS is not available in the latest SDK (3.2.0), but it is available in the source code (https://github.com/card-io/card.io-Android-source).
Properties like EXTRA_HIDE_CARDIO_LOGO, EXTRA_SCAN_INSTRUCTIONS  etc.
Would you update the build with this new source code please?
Regards

We're going to update the official build with a 4.0 release, but we're doing some update work in sync with that. Once the package is ready, we'll release it.

Hi Tom
Here is my updated result:

"RESULT_SCAN_SUPPRESSED" is the result code passed to onActivityResult() method, not something we can pass to CardIOActivity. This means the "capture image only" mode is not available, you can only scan payment card.
Even we can set EXTRA_USE_CARDIO_LOGO param, this version can only switch between "card.io" logo and "Paypal" logo not hiding them.

Best Regards
Xiao Lu
On Jan 7, 2015, at 2:30 PM, Tom Whipple<EMAIL_ADDRESS>wrote:

We're going to update the official build with a 4.0 release, but we're doing some update work in sync with that. Once the package is ready, we'll release it.
—
Reply to this email directly or view it on GitHub.

Thank you Tom,
We will wait. Do you have an estimate of a new release date?

Yeah, I'm interested in the release date too.


Sync address corrupted with CLEAR $9FFF prior to .sync

Sync address corrupted ("INVERSE w") if CLEAR $9FFF is issued in NextBASIC prior to a manual .sync from the the NextBASIC editor.
Link to discussion: https://discord.com/channels/556228195767156758/753259643051966554/1284854875741618219

note for future me: problem is with delaying command line reading before mucking about with the memory map

In thisscenario (misbehavior after "CLEAR $9FFF : .sync") that CLEAR moved the stack to the only part of the memory where it can be corrupted by the active crt0 code:
shutdown:
    	ld	    a,      #0x54 ; nextreg
        ld      bc,     #0x243B   ; nextreg select
        out     (c),    a
        inc     b                 ; nextreg i/o
        ld      a, (_mmu4)
        out     (c),     a
        ; * <=============== ld sp,(#store_sp)   is needed here to avoid the corruption of the paged in page

    	ld	    de, (_pagehandle)       ; page
        ld      hl, #0x0003             ; free zx memory
        exx                             ; place parameters in alternates
        ld      de, #0x01bd             ; IDE_BANK
        ld      c, #7                   ; "usually 7, but 0 for some calls"
        rst     #0x8
        .db     #0x94                   ; +3dos call
allocfail:
		ld sp,(#store_sp)		; restore original SP


Add validation guidance and examples

Validation styles and guidance, plus examples.
This can be previewed here: http://govuk-elements-test.herokuapp.com/#guide-errors
with static error examples on the index page and three example pages, following Léonie's advice.
[1. A single question per page]
(http://govuk-elements-test.herokuapp.com/examples/form-validation-single-question)
[2. A single question per page - radio buttons]
(http://govuk-elements-test.herokuapp.com/examples/form-validation-single-question-radio)
[3. Multiple questions]
(http://govuk-elements-test.herokuapp.com/examples/form-validation-multiple-questions)

Interesting. Like the extra weight of colouring the question title. Do we really need the duplicate 'please answer x' as well though?
What about nuances like Register to vote's, that put the validation message near where you click (client side validation, so page refresh not required).

When there's only one question per page and we're not showing a summary box with a heading "There was a problem submitting the form", yes we do. I'm keen to have a statement indicating something has gone wrong "Please answer x" or "Enter your x" (in addition to the bold label and border), to ensure this is read out for anyone using Assistive Tech.
These examples are based on feedback from Léonie on how we should be marking up our forms. I'll ask @joelanman and @tombye for their thoughts on Register to Vote.

Validation messages are traditionally placed high on the page, because validation required a full page refresh. This means a user would be looking at the top of the page, and the validation message explains why they have not continued to the next page.
Register to vote uses JavaScript validation for a faster, more fluid response to user input. The idea of placing the validation message just above the continue button is that in this situation, that is where the user's eye-line is. In general I don't like jumping people around a page as it can be disorientating.
Maybe for now it would be enough to say that the styles/layouts in this PR relate to server-side validation?

Also that there's a need to be pragmatic with the design - the aim of validation is ultimately to let a user know that something didn't work, and steps to fix. Different situations have different needs.

I agree with Joe that part of this pattern is designed around a page reload (the summary appearing at the top) should be marked as such. We advise that sites should use progressive enhancement so these patterns will always be implemented at the HTML/CSS level.
We could probably do with more testing around how JavaScript validation layers on top of this (ie. how fall-through is handled and what users read from the difference in messaging speed) before looking at that in this level of detail.

Should required and aria-required be added to compulsory inputs? Can suppress any native validation with "novalidate" attr on the <form>

We suppress native validation on passports. Better to have a single consistent way of doing it (in my view).

One case I want to do better on is where there's only a single field on the page, but it's below a lot of content. We have a declaration style page on passports like this, and as the field is 'below the fold', the validation message at the top is out of context for users and confuses them.

@jonnywyatt We have a pattern to surface which fields are required through the text in their labels so that information is available to users at the point they decide which fields to enter something into:
https://designpatterns.hackpad.com/Required-and-optional-fields-Vl1ydPMta7T
I'd argue that use of native validation (through aria-required & novalidate) is to do with the JavaScript layer which is out of the scope of this particular pull request. No reason why it can't form part of further advice in future where it can be covered properly.

@edwardhorsford I don't think your example runs contrary to this pattern as long as the reasoning for having a summary or not is made clear.
In the majority of cases having no summary for pages with a single field means less content to navigate so is the right thing to do but that reasoning doesn't discount the need you describe. It would be useful if you could add that example to the hackpad so everyone is aware of the possible variations when checking the evidence for that decision.

@tombye - aria-required would be for screenreaders rather than validation, but see what you're saying, if the labels indicate that then job done.

@jonnywyatt yeah, that's a better explanation of what I meant: that information should sit at the level most users can access which is always text above semantics.

@tombye in that case we have a summary, but it still isn't sufficient for all users. I'm thinking of ways to improve this. Unrelated to this PR though.

@gemmaleigh Will these new screenshot examples be added to the elements page?

Hi @kelliematheson,
The latest work on errors and validation is here:
https://github.com/alphagov/govuk_elements/pull/64
There will be working examples, rather than screenshots

the screenshots are to preview the changes to be made.


Fix file not closed warnings

I ran into warnings about files not being closed at these lines,
which used to say json.load(open(<fname>, 'r')).
At first, I thought that would have resulted in the file being
closed when the variable left scope, but, in retrospect, the file
object was returned to json.load, which would not have closed it
on its own.
This PR fixes that by manually opening and closing the file.
Question:
Is this the best Pythonic way to do this?

Coverage increased (+0.05%) to 71.756% when pulling f98b7258262b5fe8492a6621f7b75f0b670bf05a on awwad:fix_file_not_closed_warning into 7b8f7522a5de8c6f044e9248e871e1ded876d120 on uptane:develop.

'''with open('foo.json', 'w') as file_obj:
json.load(file_obj)
'''

Yeah, I guess I agree. No other issues, I gather? (Am I wrong about the diagnosis or something?) I think I once had some pushback for "with" statements in the lab, but I don't recall anymore. Anyway, I'll do it that way.

Coverage increased (+0.02%) to 71.732% when pulling 1b650e0997f946332ba0ac9110be361dca7ae518 on awwad:fix_file_not_closed_warning into 3391dc1da11fe962e13b442fd44458821cecdfe3 on uptane:develop.


generate a very basic DIVAnd example analysis with time dependence from 2018 synthetic obs data

$T(x,y,t)$
$T(x,y,t) = \tilde{T}(y) + T^{*}(x,y)+T'(x,y,t)$
where:

$T(x,y,t)$ is our final mapped temperature

$\tilde{T}(y)$ is the latitudinal dependence for all 2018 synthetic obs data

$T^{*}(x,y)$ is the mapped analysis from all 2018 synthetic obs data data with latitudinal dependence removed

$T'(x,y,t)$ are mapped monthly slices (12 total) from 2018 of the residuals from previous "all 2018" analysis

[ ] choose some optimum lenx & leny from current work on issue #6

[ ] split the residuals from the $T^{*}(x,y)$ 2018 data into 12 monthly time slices.

[ ] generate 12 monthly $T'(x,y,t)$ mapped analyses.

[ ] generate 12 $T(x,y,t)$ slices from $\tilde{T}(y) + T^{*}(x,y)+T'(x,y,t)$

Hey @ChrisC28  - see above for what I'm working towards next.  I think this is a correct summary of our last meeting next steps?

closing this as @ChrisC28 has pushed on with the Julia \ DIVA development.


View estimated hours permission problem and not useful

Good day! First I want to thank you for this great plugin! :)
Second, I noticed a problem with the estimated hours view permission;  Let say I have an issue with 10.0 hours as estimated time.  I am a developer, I have the view rights on estimated time and I am the one who entered this 10.0 hours estimate. No problem yet.  Now let say that user Bob which has the role "Client" in the project (and "client" do not have the view rights on estimated hours) edit the issue and add a note to it, Bob will still see the estimate time edit box but it will be empty.  bob does not touch this edit box, only write a note in the issue and save it.  Now, when any user (who has the right to view estimated hours) access this issue, the estimated time field will not be present (as if the 10.0 hours was deleted from this box).  But there are no mention in the historical notes of the issue that anyone has deleted the estimated time! It is deleted but with no mention of deletion in the notes!  My actual work around, I give all roles the view estimated hour rights, which means I do not use this permission at all for now.
Third, I mention "not useful" in the title because even if the user does not have the right to view estimated hours, he can still see it in the issue historical notes : "Estimated time set to 10.0".
Here are my Redmine versions :
Environment:
Redmine version                3.0.2.stable
Ruby version                   2.0.0-p645 (2015-04-13) [i386-mingw32]
Rails version                  4.2.1
Environment                    production
Database adapter               Mysql2
SCM:
Subversion                     1.8.13
Git                            1.9.5
Filesystem
Redmine plugins:
advanced_roadmap_v2            2.4.1
clipboard_image_paste          1.10
issuefy                        0.2.0
localizable                    0.3.0
progressive_projects_list      2.0.1
redmine_banner                 0.1.1
redmine_base_deface            0.0.1
redmine_checklists             3.1.1
redmine_ckeditor               1.1.0
redmine_code_review            0.7.0
redmine_dashboard              2.5.0
redmine_didyoumean             1.2.0
redmine_documents_short        0.3.0
redmine_helpdesk               0.0.14
redmine_ics_export             3.0.1.dev
redmine_issue_favicon          0.0.1
redmine_lightbox2              0.2.2
redmine_local_avatars          0.2.0
redmine_mail_reminder          <IP_ADDRESS>1
redmine_maintenance_mode       2.0.1
redmine_my_page                0.1.4
redmine_per_project_formatting 0.0.4
redmine_silencer               0.4.0
redmine_wktime                 1.8.1
redmine_xlsx_format_issue_exporter 0.1.2
sidebar_hide                   0.0.7
Thank you again.
Thierry

Hi,
Thanks for your support and your detailed issue.
I did not manage to clearly reproduce your issue.
If one can edit issue, then yes, he will be able to change estimated time. And he will see current estimated time in the field.
If one cannot edit issue and does not have any rights about estimated time, he won't see anything at all about this matter and won't be able to modify it. He'll just be able to add a note.

Hi,
I think the feature is broken (at least on redmine 3.1 here).  If someone doesn't have the right to view the estimated time (but can edit the issue, but this is irrelevant i'd say), he will not see the estimated time edit box, but will see any previous changes made to the estimated time in the journals.
AdvancedRoadmap::IssuesControllerPatch is for sure not working with redmine 3.1 (and probably 3.0 also).
I'll try to submit a pull request later with the change I made here to have the estimated time logs hidden when the user doesn't have the right to view estimated time.
Regards,
Martin

3715ec83ceb0c5114a97fc15f369312cc4d4d468 fixes the issue here.

I don't know how you submit your fix, so I had to re-write your fix.
It's applied.  Thanks.


Add an Example for Buffer.AddBuffer Method

Please add an example for Buffer.AddBuffer Method.
TODO (optional): Describe a specific scenario you would like to see addressed.
Help Topic: ms-its:E:\FGIS\DotSpatial.chm::/html/b6b18b83-d610-b757-eef9-16e068a48ca5.htm

Have a look at the example that was just added.


app crash on Marker definition

I used eclipse and osmdroid.jar file . app show map but when add marker app crash in this line :
Marker startMarker = new Marker(mMapView);
Environment
If it's a bug, version(s) of android this affects:
All
Version of osmdroid the issue relates to:
6.1.0

anymore info on this?

Hi
i used aar 6.1.0 file , unzip it and change classes.jar to osmdroid.jar and use as lib in Eclipse
i can show google map on app with this code :
mMapView = new MapView(this);
mMapView.setTilesScaledToDpi(true);
mMapView.setBuiltInZoomControls(false);
mMapView.setMultiTouchControls(true);
	rl.addView(mMapView, new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT,
			LayoutParams.FILL_PARENT));

	// zoom to the netherlands
	mMapView.getController().setZoom(1.);
	mMapView.getController().setCenter(new GeoPoint(32, 50));

	// Add tiles layer with custom tile source
	final MapTileProviderBasic tileProvider = new MapTileProviderBasic(getApplicationContext());
	final ITileSource tileSource = new XYTileSource("FietsRegionaal",  3, 18, 256, ".png",
			new String[] { "http://overlay.openstreetmap.nl/openfietskaart-rcn/" });

	final OnlineTileSourceBase GoogleHybrid = new XYTileSource("Google-Hybrid",
			0, 19, 256, ".png", new String[] {
			"http://mt0.google.com",
			"http://mt1.google.com",
			"http://mt2.google.com",
			"http://mt3.google.com",

			}) {
			@Override
			public String getTileURLString(long pMapTileIndex) {
				return getBaseUrl() + "/vt/lyrs=y&x=" + MapTileIndex.getX(pMapTileIndex) + "&y=" +MapTileIndex.getY(pMapTileIndex) + "&z=" + MapTileIndex.getZoom(pMapTileIndex);
			}
		};

	tileProvider.setTileSource(GoogleHybrid);
	tileProvider.getTileRequestCompleteHandlers().add(mMapView.getTileRequestCompleteHandler());
	final TilesOverlay tilesOverlay = new TilesOverlay(tileProvider, this.getBaseContext());
	tilesOverlay.setLoadingBackgroundColor(Color.TRANSPARENT);
	mMapView.getOverlays().add(tilesOverlay);

	GeoPoint startPoint = new GeoPoint(32, 50);

    /*
    Marker startMarker = new Marker(mMapView);
    startMarker.setPosition(startPoint);
    startMarker.setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_BOTTOM);
    mMapView.getOverlays().add(startMarker);

*/
but app crash on this line :   Marker startMarker = new Marker(mMapView);
Thanks .

probably failing due to a missing resource....by using eclipse for android projects, you are just making your life harder. we don't really support this configuration nor does google.
do you have a stacktrace or a line number where its failing

i think if you include all the resource files from the aar into your project, it should work. since this hasn't been updated in a few months, i'm closing it. reopen if needed


Graph Sharing and Author Crediting

*We also need to implement sharing of each graph along with a line that credits the creator of the graph. The blog is a good start but having something on site might make the experience better.

per @HiGregory

Same as this ticket: https://github.com/Code-for-Miami/miami-budget/issues/31


Skip invalid outlink

When one of the outlinks is http://-1/ urlcanon.whatwg raises an
unhandled exception ipaddress.AddressValueError and the capture fails.
We can skip the problematic outlink and keep the rest without crashing.

You can replicate this if you try to capture http://musicmachinery.com/2009/04/27/moot-wins-time-inc-loses/


1.20.6 Support!

This mod brings a cool new vanilla-friendly challenge that I'd love to have in the latest version of Minecraft, I would be really happy if you updated this mod after a year of inactivity.

I updated the mod to 1.20.6. You can get the mod on modrinth.
https://modrinth.com/mod/mendingless-netherite/version/1.1+1.20.6


CLI post and upvotes queries

Closes #57
Closes #58
As we discussed in Slack, we don't need to query for ALL posts or ALL upvotes as there might be tons of those.

Also:

Closes #61
Closes #62


Do you know?

FYI https://github.com/torodb/torodb

Yeah, there are a few of them out there now, including one by one of the plv8 maintainers.


Create unit tests for darkness-checking logic

Summary:
Would be good to have a unit test for the darkness checking algorithm. It could use the 4 images in #1767 as samples.
See https://github.com/commons-app/apps-android-commons/pull/2639#issuecomment-473773865

For someone picking this up: it might be useful to reuse the generate image methods from #2626

Added beginner-friendly label, this would be great for a GSoC student.

Hello @domdomegg @misaochan can i work on this issue ?

Sure take this up @silkypriya

Go for it! :)

Created PR #2727 for this.
Kindly review. Thank you!

@misaochan @maskaravivek @nicolas-raoul
Can I work on closing this issue?

Yes, sure. It is yours.

I wrote some tests of ImageUtils class. But I'm not able to run it. It shows error "No tests were found".
I try to run tests using both ImageUtilsTest Class and the test function I created. But it's showing the same error. It's showing the same error, for tests written in the past as well by someone else.
Can anyone help?

@ciphereck  Please attach a screenshot

Here it is @ashishkumar468

Such things happen due to invalid-test configurations. To Validate, try this open any Test class and right-click and Run.

I did the same thing. Ran from the green arrow button and by right-clicking also.
Although just changed from prodDebug to betaDebug and clean and build it again. And it's working. Idk why it's working now.

@ciphereck  My guess would be that this could be because of some improper configurations, anyways, it's working for you now, right?

Hi,
I'm getting a problem.
The line number 99 ( bmp = BitmapFactory.decodeFile(imagePath); ) which is supposed to convert an image into bitmap is always returning null when I'm calling it from the text file.
I tried whether it is the same case when running on mobile with debugging, but on mobile while debugging it's working just fine and returning bitmap as required.
While testing it returns null always.
Can anyone help? @ashishkumar468 @maskaravivek @nicolas-raoul

Hi,
Can anyone help why BitMapFactory is not able to convert image into Bitmap in darkness checking logic?

Hi,
I'm getting a problem. When I'm writing tests for ImageUtils class.
The line number 99 ( bmp = BitmapFactory.decodeFile(imagePath); ) which is supposed to convert an image into bitmap is always returning null when I'm calling it from the text file.
I tried whether it is the same case when running on mobile with debugging, but on mobile while debugging it's working just fine and returning bitmap as required.
While testing it returns null always.
Can anyone help? @ashishkumar468 @maskaravivek @nicolas-raoul @misaochan @neslihanturan

@ciphereck While running a unit test BitmapFactory.decodeFile won't be available and you might need to mock it as its a static class. See FileUtilsWrapper and FileUtils to see how it can be done.

@misaochan @maskaravivek
I tried mocking ImageUtils as static class using wrapper as was in FileUtilsWrapper.
There's already a wrapper for ImageUtils i.e. ImageUtilsWrapper, but it's still returning null to me.
I also tried @RunWith as mentioned in StackOverflow somewhere, but it's still of no help :(
Can you please help me on this?

Hi @misaochan @maskaravivek @nicolas-raoul
Can I work on this issue?

@gengarrrr Yes thanks! :-)

@nicolas-raoul. Hello, I found that there already exists an ImageUtilsTest file, and I think it contains the check for dark with no image example through the merged pull request of Add ImageUtils Tests #4542. Should I just work on adding some images? or Can I write my own test functions within the file. Thank you

@gengarrrr Good find, please add your oyn test fuctions within that file 🙂


test(acme): fix acme flaky test

wait until admin API takes effect

Reran 3 times and they all passed.


Filters only look at the highest MSD chart of a song for each skill type

Describe the bug
Filters will not include songs that have matching charts if the matching chart within the song does not contain the highest-rated MSD of the song's charts for the filter's skill type.
To Reproduce

Find a song with multiple charts. POTATOE from Bursts of a Teitoku is one such song.
Apply a filter which matches a chart from the song that is not the highest difficulty of the song's charts.
In the above example, applying a filter of "Overall 22-23" should include the song, because it's hard chart matches this query, but does not.

Expected behavior
Filters should include songs in the results if any of the song's charts match the filter parameters, not only just the highest-MSD one.
Desktop (please complete the following information):

OS: MacOS Mojave
Version: Commit c258f715876e37759f3987bccbd9ba65c11d12bd (develop branch)
64bit

Additional context
This is due to the way filtering is implemented in
MusicWheel::FilterBySkillsets(vector<Song*>& inv)
I'm currently trying to fix this issue.

Oh, and I feel I should specify.
This occurs with Highest-Only off, which I believe is supposed to toggle this behavior.

I don't know if highest only is about this or about the highest skillset for each chart only
This function seems to handle the MSD search:
https://github.com/etternagame/etterna/blob/423a0fb9cdb85676dd4f76a33f770cef7063d226/src/Etterna/Actor/Menus/MusicWheel.cpp#L719
Specifically the calls to IsSkillsetHighestOfAnySteps I think
@MinaciousGrace do you know if this was intentional? How should this be fixed in your opinion?

It only looks at the highest MSD for each skill, within all charts.
val = inv[i]->GetHighestOfSkillsetAllSteps(ss, currate); (ss=skill, currate=rate modifier)
The fix I'm currently trying to do is to make filters look through all combinations of every chart and rate, to see if any at all match the filter queries. (Which would make sense from a logical standpoint, you're usually using a filter to look for charts matching parameters, not just to look at the highest chart on a song)
IsSkillSetHighestOfAnySteps actually does something different, which is works properly as far as I can tell.

Ok, I think I've got a good fix to this. I'll make a PR once my other filter PR gets approved.

#795


(maint) Add more logic to a teardown stage in a test

The should_run_command_in_cwd test on ubuntu2204 leaves behind a few
processes that take a few seconds to run. Those processes are associated
with the test user, and when we try to delete the test user and the processes
are still around the test fails.

Huh, I forgot about this. I thought this got merged. It might not be needed? The last three acceptance tests ubuntu2204 have had it didn't run into this issue. I'll keep an eye for the next week and if we don't see this issue pop up I say we can just close this PR.

@cthorn42 are we good to close this?

 Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.You have signed the CLA already but the status is still pending? Let us recheck it.

@cthorn42 if this is still needed could you retarget 7.x?

Going to close this based on the last few comments


[Feature Request] Add screenshots and/or demo site

It would be cool to see what this CMS looks like without having to install it first.

The following site seems to be using this CMS, so I'm closing this issue: https://knightnoscanlation.com/

This site using Wordpress and Madara theme.

https://knightnoscanlation.com/

@jhin1m Thanks for the info. Do you know of a website which is using ReaderFront?

@whalehub I'm sorry for the late response, but https://ravens-scans.com/ is using ReaderFront.

@dvaJi Thanks!


THEEDGE-3348: Create structs for /updates REST endpoints (wip)

Description

This creates structs under pkg/routes/updates_api.go to document the various REST endpoints under the /updates route. Some things to check:

Hopefully this is right :-) I used the [swaggo/swag] documentation from https://github.com/swaggo/swag and partially referenced an old PR #2056 to create this. Please lmk if I'm going in the right direction and what to change!
[ ] Add the request body schema for /updates/validate (PostUpdatesValidateEndpoint)

FIXES: THEEDGE-3348
Type of change
What is it?

[ ] Bug fix (non-breaking change which fixes an issue)
[x] New feature (non-breaking change which adds functionality)
[ ] Documentation update
[ ] Tests update
[ ] Refactor

Checklist:

[ ] I have commented my code, particularly in hard-to-understand areas
[ ] I have made corresponding changes to the documentation
[ ] I have added tests that prove my fix is effective or that my feature works
[ ] New and existing unit tests pass locally with my changes
[ ] I run make pre-commit to check fmt/vet/lint/test-no-fdo

Codecov Report
Patch and project coverage have no change.

Comparison is base (e5ddb71) 60.59% compared to head (0913c0c) 60.59%.

Additional details and impacted files
@@           Coverage Diff           @@
##             main    #2095   +/-   ##
=======================================
  Coverage   60.59%   60.59%
=======================================
  Files          74       74
  Lines       11064    11064
=======================================
  Hits         6704     6704
  Misses       3800     3800
  Partials      560      560

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Do you have feedback about the report comment? Let us know in this issue.


Component events are transformed to camelCase

Version
3.0.2
Steps to reproduce
It is recommended to emit kebab-case events from components (per v3 docs and eslint vue/custom-event-name-casing rule).
The component:
export default defineComponent({
  name: "ResultsBar",
  emits: ["select-result"]
});

This is how it is used in a component:
<ResultsBar @select-result="onSelectResult($event)" />

It seems event names are transformed to camelCase before reaching the component, resulting in an error:
Extraneous non-emits event listeners (selectResult) were passed to component but could not be automatically inherited because component renders fragment or text root nodes. If the listener is intended to be a component custom event listener only, declare it using the "emits" option.
What is expected?
Event name should be kept as is camelCase
What is actually happening?
Event name is transformed to camelCase

Duplicate of https://github.com/vuejs/vue-next/issues/2540

Please, search existing issues and pull requests before opening issues, it saves maintainers a lot of time 🙏


Reconciliation fails when deploying a kube-prometheus stack (bad dry-run behavior)

This is my Kustomization resource:
---
apiVersion: kustomize.toolkit.fluxcd.io/v1beta1
kind: Kustomization
metadata:
  name: kube-prometheus
  namespace: flux-system
spec:
  interval: 1m0s
  path: ./apps/kube-prometheus
  prune: true
  sourceRef:
    kind: GitRepository
    name: flux-system

And this is my apps/kube-prometheus directory:
kube-prometheus
  kube-prometheus-components.yaml
  kube-prometheus-crds.yaml
  kube-prometheus-namespace.yaml
  kustomization.yaml

And this is my kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
  - kube-prometheus-namespace.yaml
  - kube-prometheus-crds.yaml
  - kube-prometheus-components.yaml  # template rendering of the kube-prometheus-stack Helm chart (without CRDs)
namespace: monitoring

The reconciliation fails because it tries to perform a server-side dry-run, but this would require a service account to be present (chicken-and-egg issue):

Pod/monitoring/kube-prometheus-grafana-test dry-run failed, reason: Forbidden, error: pods "kube-prometheus-grafana-test" is forbidden: error looking up service account monitoring/kube-prometheus-grafana-test: serviceaccount "kube-prometheus-grafana-test" not found

My environment:

Kubernetes v1.23.0
openSUSE MicroOS (Kubic)
ghcr.io/fluxcd/kustomize-controller:v0.18.2
kube-prometheus-stack chart version: 30.0.1

Those Helm tests should be Kubernetes Jobs instead of bare pods. A workaround is to generate the manifests with Helm by disabling the tests, given that you're not using Helm, those tests have little value. Another option is to use a Flux HelmRelease, here is hoe we recommend installing kube-prometheus-stack: https://github.com/fluxcd/flux2/tree/main/manifests/monitoring/kube-prometheus-stack

Thanks Stefan! I was able to deploy the kube-prometheus-stack with a
HelmRelease.
I think this will be a better workflow overall, since Helm releases also
allow querying of cluster info (e.g., Capabilities) during the installation
process.
Besides, we often rely on the dependsOn feature of Flux, so it makes
sense to use HelmReleases for as many charts as possible.
Thanks again for your help.
On Wed, 12 Jan 2022 at 05:58 Stefan Prodan @.***> wrote:

Those Helm tests should be Kubernetes Jobs instead of bare pods. A
workaround is to generate the manifests with Helm by disabling the tests,
given that you're not using Helm, those tests have little value. Another
option is to use a Flux HelmRelease, here is hoe we recommend installing
kube-prometheus-stack:
https://github.com/fluxcd/flux2/tree/main/manifests/monitoring/kube-prometheus-stack
—
Reply to this email directly, view it on GitHub
https://github.com/fluxcd/kustomize-controller/issues/531#issuecomment-1010800901,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AQ4UAO234LGMXUHC4QL5U6LUVU7DHANCNFSM5LXKB2EQ
.
You are receiving this because you authored the thread.Message ID:
@.***>