It's confusing that links to files behave different to editors than public

Describe the bug
A UX bug is that editors think links will not directly download a file because it doesn't for them
To Reproduce
Create a file.
put it in a listing
note that you see it's view when clicked on rather than downloading it
Expected behavior
It should behave the same as for non logged in users.
To get to the file object so it can be edited should be handled another way. By a on hover popup that allows the user to go directly to edit or view the file.
Screenshots
If applicable, add screenshots to help explain your problem.
Software (please complete the following information):

OS: [e.g. iOS]
Browser [e.g. chrome, safari]
Volto Version [e.g. 8.5.0]
Plone Version [e.g. 5.2.2]
Plone REST API Version [e.g. 7.0.1]

Additional context
Add any other context about the problem here.

I think this could make things less confusing. It needs a specific design proposal, and we should be consistent about how we handle Files and Links.

@davisagli @djay
I think we need less magic and more configurable behavior and predictability. I was bitten today at work with this issue where we are using within https://github.com/eea/volto-listing-block a custom card model for the teaser card where an editor added a file with a preview image as a teaser source. Logged in you see everything fine while anonymous the url contains @@download/file/@images/image/preview which obviously failed.
On top of this I wasn't passing to ConditionalLink to param, only item which meant that UniversalLink didn't receive a href.
https://github.com/plone/volto/blob/main/packages/volto/src/components/manage/UniversalLink/UniversalLink.jsx#L59
With the way UniversalLink is constructed it adds the @@download/file link because again we have magic non authenticated checks and puff for them they get @@download/file/@@download/file.
This is because regardless of what is written here https://github.com/plone/volto/blob/main/packages/volto/src/config/index.js#L115 even if you set it to empty the file arrives from plone.restapi or from plone itself only for anonymous with the /@@download/file at the end of the url. (P.S. If you know how I can turn this off please let me know :))
I propose we add settings to make url display predictable with the possibility to have the same display as auth and anon without auth hardcodes.  There shouldn't be any implicit hardcoded decisions but configurable and documented options.

Yes, the status quo is confusing. Please someone make an actual UI mockup/proposal for how to show a link for editors in addition to the link for normal users.

Yes, the status quo is confusing. Please someone make an actual UI mockup/proposal for how to show a link for editors in addition to the link for normal users.

@davisagli before any visual tricks I think we can make it more configurable at least through code if you want to go one way or the other.
One solution that  might make sense UI wise is when the editor is hovering over the link it get's a popup with icons like we have with the html block when it's focused. Could be expanded for other forms of interactions such as tab focus or you click/touch  the link and it shows popup and you select from it if you want the view or download button.

@ichim-david

I am afraid that with UI solutions we will have a hard time picking one since everyone has their own opinion on what is usable

I couldn't agree more and I think it's creates so much stop energy that it's draining to think about even raising or suggesting solutions to UX problems... or even working on them. This is why I proposed awhile back that unless there is a volunteer, plone should consider paying a UX expert that we all trust to triage and guide solutions. Telling developers how to fix UX problems and have them ignore it is as thank-less a job as the release manager IMO, but just as important.

but for the sake of brainstorming, I got the first ball rolling.

Technically I did and we agreed.

By a on hover popup that allows the user to go directly to edit or view the file.

But I now suspect on hover is no good for accessibility.
I suspect you have to click on the link and then get a popup. Somewhat similar to google docs (but that a slightly different use case)

It's not a great solution because it's still changing the behaviour of that click for logged in and anon users. And the now the logged in user is doing 2 clicks to navigate which could be a pain on some sites.
The only other solution I can think of now is putting an extra icon after the link but that is worse because it can screw up the design and it's likely too small and easy to forget to click there instead.

@ichim-david

I am afraid that with UI solutions we will have a hard time picking one since everyone has their own opinion on what is usable

I couldn't agree more and I think it's creates so much stop energy that it's draining to think about even raising or suggesting solutions to UX problems... or even working on them. This is why I proposed awhile back that unless there is a volunteer, plone should consider paying a UX expert that we all trust to triage and guide solutions. Telling developers how to fix UX problems and have them ignore it is as thank-less a job as the release manager IMO, but just as important.

but for the sake of brainstorming, I got the first ball rolling.

Technically I did and we agreed.

@djay LOL I was referring to being first to share a "mockup" as David was suggesting not that I was the first to come up with the suggestion. Of course you've been mentioning many times the deficiencies of Volto but  as others suggest we can't only complain about hard problems we also must come up with actual proposals which might be accepted as it or iterated until something awesome comes up. Me personally I'm happy with having  progressive improvements, it's better to have 5 pull requests that all build on each other as you get more inspiration or real world usage than 1 big awesome work that takes forever to finish leading only to burnout. It would also make it easier for that work to be reviewed and some agreement going.

LOL I was referring to being first to share a "mockup" as David was suggesting not that I was the first to come up with the suggestion.
fair enough

Of course you've been mentioning many times the deficiencies of Volto
I'm talking about a problem with any open source where the developers aren't the users, not just about volto.

but as others suggest we can't only complain about hard problems we also must come up with actual proposals

" that unless there is a volunteer, plone should consider paying a UX expert that we all trust to triage and guide solutions" is an actual proposal. But Victor said it would never work and no one else seemed to support the idea so I dropped it.

Me personally I'm happy with having progressive improvements, it's better to have 5 pull requests that all build on each other as you get more inspiration or real world usage than 1 big awesome work that takes forever to finish leading only to burnout.

I refer back to the original problem I stated. "t's creates so much stop energy that it's draining to think about even raising or suggesting solutions to UX problems... or even working on them". UI is hard to code. knowing you are headed in to an acceptable solution is motivating.
You seem to be saying just implement anything you come up with as a developer no matter how bad the UX is and then fix it later. Even if it makes the developers happy you get so much churn in the product. changing documentation. chaving customisations. confusion over changing names. UX is not the same as inefficient code.
Hence why a single UX expert would be so much more efficient on developer resources and user good will.
But none of this solves the immediate problem of what makes a good UI for this particular case. I'll see if I can find some more specific examples on solutions that would be WCAG compliant.

@djay What do you expect will happen each time you post your informal proposal in an issue tracker?
I suggest that if you want Plone to pay for anything, then you need to make a formal written proposal to the Plone Foundation Board.
Even then, it is not likely that the Plone Foundation will pay for a development proposal that is not a sprint or conference. With only USD$250K in cash and USD$50 - 80K in annual revenue, with most of it going toward sprints, conferences, and operations (https://apps.irs.gov/app/eos/), there's no money for any large development project. I've also asked about paying for documentation, and it was kindly explained to me that documentation has always been written for free by the community, and paying someone to write documentation could alienate those contributors and disincentivize future contributions.
Thus for Plone documentation, I hunt for external funding sources. The Board supports my efforts, and they are keeping their eyes and ears open for potential funding sources for the development of documentation. I network with documentarians from other projects and organizations. The Write the Docs community is a good resource for the profession. Last spring I wrote a formal proposal with guidance from the Board, and the Board applied for Google Season of Docs, but we were not accepted. I have a few other leads to follow. Of course, if anyone has any suggestions for funding sources for documentation, please hook me up.
If I had any good leads for UX efforts, I'd send them your way.

Me personally I'm happy with having progressive improvements, it's better to have 5 pull requests that all build on each other as you get more inspiration or real world usage than 1 big awesome work that takes forever to finish leading only to burnout.

I refer back to the original problem I stated. "t's creates so much stop energy that it's draining to think about even raising or suggesting solutions to UX problems... or even working on them". UI is hard to code. knowing you are headed to an acceptable solution is motivating. You seem to be saying just implement anything you come up with as a developer no matter how bad the UX is and then fix it later. Even if it makes the developers happy you get so much churn in the product. changing documentation. chaving customisations. confusion over changing names.

@djay it seems I need to explain myself even though I didn't think I needed to just like with the jab about you being first and what I meant by that.
Let me explain than my view about multiple pull requests and continuous improvements vs a single take everything at once.
Let's take the style wrapper which was added in one state and over time improvements came to it in the form of new features as new patterns arose from using it. Or the Object browser which received the ability to select external or not or link mode. It started from one state and it got improved as time went by.
In the same way, you can improve one aspect of the UX of a particular feature and improve it over time as there is more real-world usage and someone has the inspiration to improve it.
Let me tell you also why I think that several pull requests will be needed with a specific example.
Rob from Kitconcept used his time to improve the UX of the file picker by implementing another view with large icons making it easier to know what image you are selecting.
It was merged and I discovered something that was missing from that implementation for which I added an issue as you can see here: https://github.com/plone/volto/pull/6054
Should I complain now that this bug exists or be happy that someone gave me an improvement over what exists for free?
Personally, I am grateful for every improvement and realize that in every aspect of every work, we can do better. We should strive to continuously improve things and not ask for perfection as that will never happen.
I'm so grateful that I will try to fix it myself and not expect him to fix it for me just because he was the one that added this feature as he might have other priorities or could be unable to work on this.
This is all open source which is built on firms that employ individuals and individual contributions. Look at the contributor graph https://github.com/plone/volto/graphs/contributors to see just many many commits are made by so many individuals.
Unfortunately, I don't see your name in even one commit :( although I hope that our call to step up coming up with proposals and then solutions can embolden you to champion some solutions for the many UX issues that you found and added to the Volto repository.
I know that you already started doing something with the decoupled editor for which I applaud your initiative and I look forward to seeing what comes out of it.
Just realize that the free software that you use can only be as good as the investment that is given by all actors that use it and many times if you want something to get done, you will have to do it yourself and contribute it like so many other companies and individuals already did so until now.
Take for example the work that RedTurtle did to create a new plone contents section which they made for their projects and now want to make it even better and have it in core. I can give many other examples of things that were added in core from all of the firms that use Volto and desire to contribute to Volto in order to see it improve.
In the same way, there is more than enough room for your improvements if you are willing to put in the work and champion a solution. Worst case scenario if you create it as an add-on you still remain with your work which is an improvement over what is currently available since you've made it according to your specs.

@ichim-david I think your comments toward @djay miss the mark a bit. Maybe he hasn't made commits himself, but PretaGov developers have. Also, let's be careful not to set the expectation that someone has to make commits in order to be considered a contributor. Participating in discussion of problems and possible solutions is also valuable and I appreciate @djay's work in these areas.
You do have some fair points which I think I could paraphrase as:

Sometimes it's hard to evaluate a possible solution until there's a proof of concept to try out.
It's unrealistic to think many people will have as much motivation to fix a problem as the person who reported it.

@djay, I find your repeated suggestions to hire a UX expert a bit of a distraction. Even if the Plone Foundation had the money and will to do it, it wouldn't make tricky UX problems like this go away. There would still be things to discuss based on the UX expert's input. As things stand currently, you are welcome to hire your own expert, report their input here, and make the case for why the community should follow their advice. kitconcept has done this with the UX people that work on our client projects. Also let's not discount the UX expertise that exists within our community -- we've been around the web for a while and have seen things that work and things that don't. The discussion of possible solutions above and pointers to how other systems do it have been helpful. (I'm not saying UX expertise and experience is worthless, just that there are multiple places we can find it.)


Possibility to override robot:recursive-continue-on-failure with non-recursive continuing on [Teardown]

By default, test case teardowns implicitly run on robot:recursive-continue-on-failure mode. As I rely on keywords that are not only used in teardowns, I need robot:continue-on-failure mode. But setting the tag on teardown-keyword does not have any effect.
Example:
*** Test Cases ***
Demo Continue On Failure In Teardown
    Log    Hello World
    [Teardown]    Cleanup Test Case

*** Keywords ***
Cleanup Test Case
    [Tags]    robot:continue-on-failure
    Step 1
    Step 2

Step 1
    Log    All good.

Step 2
    Fail    When this fails
    Fail    Then this 2nd FAIL must not be executed!!!

I do want the teardown keyword to continue on failure, just not recursively. The only workaraound is to add robot:stop-on-failure to all keywords.
Easiest way would be, if robot:continue-on-failure would override the default behaviour of teardown keywords.

If you'd use robot:recursive-stop-on-failure in Cleanup Test Case, execution would stop for the first failure in Step 2. If Step 1 would fail, Step 2 wouldn't be executed at all, though. Did I get it right that this is not the behavior you want?

If I got it right, you'd want to continue in the top level keyword but stop in child keyword. That's the mode templates use and what you can enable normally with robot:continue-on-failure. This doesn't work with teardowns, because they continue recursively by default. I guess the mode you want could be set by using both robot:recursive-stop-on-failure and robot:continue-on-failure. The former would disable the default teardown behavior and the latter enable continuing on the top level. This doesn't work now, but it ought to be easy to change.

Exactly, I need to coninue-on-failure only in the teardown keyword, not in the sub-keyword.
why would it require to set robot:recursive-stop-on-failure together with robot:continue-on-faliure ?
Can't robot:continue-on-failure override robot:recursive-continue-on-failure like in #4303 ?

At the moment robot:continue-on-failure and robot:stop-on-failure affect only the keyword where they are defined, they don't change the behavior of the lower level keywords. Changing that behavior in this case would feel somewhat odd to me and it would also be hard to explain. Explaining that recursive-stop-on-failure changes the behavior recursively but continue-on-failure overrides it in that context would be a lot more straightforward.

I find it intuitive to set the mode where it happens :D  the teardown sets recoursive-continue-on-failure implicitly, so i want to override it.
Combining the tags on the other hand is quite confusing. Anyways, if it works that way i only need to get used to :)

If you explicitly use recursive-continue-on-failure and then use stop-on-failure in a lower level keyword, the latter configuration affects only the keyword where it is used. The initial recursive configuration is active on the keywords below that. It would be somewhat inconsistent if implicitly set recursive mode would be overridden by recursive-continue-on-failure also in the lower level keywords. I guess we could make teardowns an exception, but it would still be confusing in my opinion. That said, I can see that using
Example
    [Tags]    robot:recursive-stop-on-failure    robot:continue-on-failure
    Keyword 1
    Keyword 2

would be somewhat odd too. I would assume that this is a pretty rare need so it ought to be fine.

I made a quick prototype and supporting the above wasn't too complicated. I'm in the middle of something else and won't have time to create tests for this, and we haven't yet agreed is this the best way to solve the issue, but here's the patch for future reference and if someone wants to try the change locally:
diff --git a/src/robot/running/context.py b/src/robot/running/context.py
index c5764aa1f..b8f045752 100644
--- a/src/robot/running/context.py
+++ b/src/robot/running/context.py
@@ -171,11 +171,13 @@ class _ExecutionContext:
     def continue_on_failure(self, default=False):
         parents = ([self.test] if self.test else []) + self.user_keywords
         for index, parent in enumerate(reversed(parents)):
-            if (parent.tags.robot('recursive-stop-on-failure')
-                    or index == 0 and parent.tags.robot('stop-on-failure')):
+            if index == 0 and parent.tags.robot('stop-on-failure'):
                 return False
-            if (parent.tags.robot('recursive-continue-on-failure')
-                    or index == 0 and parent.tags.robot('continue-on-failure')):
+            if index == 0 and parent.tags.robot('continue-on-failure'):
+                return True
+            if parent.tags.robot('recursive-stop-on-failure'):
+                return False
+            if parent.tags.robot('recursive-continue-on-failure'):
                 return True
         return default or self.in_teardown

I had forgotten this issue and now noticed it when going through the issue tracker before finalizing RF 7.0. This isn't a super important issue, but the code above works so implementing this only requires writing some tests and documentation. That's so little work that it's worth doing and getting this issue closed.


tsc 2344 emitted when using Parameters, despite resolving the argument type.

TypeScript Version:  4.1.3
Search Terms:
2344
Code
type DomainFunction<Request, Response> = (
   request: Request
) => Promise<Response>;

interface CreateRequest {};
interface CreateResponse {};

interface IItemDomain {
   create: DomainFunction<CreateRequest, CreateResponse>;
};

interface DomainObjects {
   item: IItemDomain;
}

export type DomainFuncRequest<
   Domain extends keyof DomainObjects,
   Func extends keyof DomainObjects[Domain]
> = Parameters<DomainObjects[Domain][Func]>;

type CreateItemRequest = DomainFuncRequest<"item", "create">[0];

Expected behavior:
Code is expected to compile.
CreateItemRequest  should resolve to CreateRequest.
Actual behavior:
Although IDE hints that CreateItemRequest  resolves to CreateRequest, tsc emits the following error in regard to the  Parameters<DomainObjects[Domain][Func]> statement:
Type 'DomainObjects[Domain][Func]' does not satisfy the constraint '(...args: any) => any'.
  Type 'DomainObjects[Domain][keyof DomainObjects[Domain]]' is not assignable to type '(...args: any) => any'.
    Type 'DomainObjects[Domain][string] | DomainObjects[Domain][number] | DomainObjects[Domain][symbol]' is not assignable to type '(...args: any) => any'.
      Type 'DomainObjects[Domain][string]' is not assignable to type '(...args: any) => any'.ts(2344)

Playground Link
Related Issues

TypeScript doesn't have the higher-order reasoning required to figure that anything produced from that set of constraints would have to match the Parameters constraint.
You can add
   [k: string]: DomainFunction<any, unknown>;

to IItemDomain to fix that. Alternatively, you could write
type ParametersOrNot<T> = T extends (...args: any[]) => any ? Parameters<T> : never;
export type DomainFuncRequest<Domain extends keyof DomainObjects, Func extends keyof DomainObjects[Domain]> = ParametersOrNot<DomainObjects[Domain][Func]>;

@RyanCavanaugh
Thanks for taking the time to answer this!
What I don't get is how does the IDE (VS Code) know to hint exactly what I expect it to?

@RyanCavanaugh
Thanks for taking the time to answer this!
What I don't get is how does the IDE (VS Code) know to hint exactly what I expect it to?


[Feature request] Adding a Cask

It would be nice to have an ability to
brew cask install keeweb

Thank you !

Thanks, I'll add it, once updater and versioning will be ok.

I can be a Mac maintainer and do it, if you want...

I'm just waiting for some more stable version... I'll add it once it happens. :neutral_face:

Done in https://github.com/caskroom/homebrew-cask/commit/080a1eafdd90591595252693aa70cf7b8f51e47f


[Question] Document of "multilingual HTTP client" update request

Question
https://shenyu.apache.org/docs/developer/developer-shenyu-client/
There are two questions:

Request path for English version is http://soul-admin/soul-client/springmvc-register,
while for Chinese version is: http://shenyu-admin/shenyu-client/springmvc-register.
I sent the request and got "token is error", so I thought the doc should be updated to tell how to deal with admin's username and password.

I thought "port" is not a required param if the "host" param is not an IP but like a dns, but I have not tested yet.


Chosen FancyZones layout resets when restarting Windows.

Microsoft PowerToys version
0.45.0
Running as admin

[X] Yes

Area(s) with issue?
FancyZones, Settings
Steps to reproduce
Restarting Windows.
✔ Expected Behavior
Should keep the previously marked as default layout when rebooting.
❌ Actual Behavior
Restarting Windows causes the active fancyzone preset to it's default layout.
Other Software
No response

Duplicate of #13069

Thanks for reporting this. This issue is a duplicate. We'll track this in #13069 to centralize the discussion thread.


Template caching should be off by default

Hey there. I just lost a bunch of time today trying to debug why changes in my Nunjucks templates weren't being reflected in the Metalsmith output in a build-and-watch-for-changes scenario, and it turns out that it was because Nunjucks is one of the Consolidate-supported libraries that supports caching.
This doesn't seem like a sensible default for a static-generation scenario. (And I'm surely not the first one to have been bitten by it!)  Template caching in Nunjucks and other engines is a feature designed for server-side scenarios where there might be significant network load and where rendering bottlenecks are a real concern. By contrast, the performance benefits of having it enabled for something like Metalsmith are probably imperceptible for the average use case. I think caching for this plugin should be strictly opt-in, and ideally better-documented as well (eg. it should be supported as a proper option rather than as a param that gets tossed over to Consolidate if metalsmith-layouts doesn't recognize it as one of its own.)

Thank you for your submission. I think you made a good case to have it off by default.
Would you mind opening a pull request with the necessary changes?

Closing due to inactivity
reopen at will


Improvement to t-digest stability under merging

I noticed that merging t-digests appeared to cause some drift from the underlying distribution, at least using the method mentioned in the original paper where clusters are randomly shuffled and inserted.  Inserting combined clusters from largest-to-smallest gave a big improvement in "convergence" of the merged clusters.  I wrote up the results here:
http://erikerlandson.github.io/blog/2016/12/19/converging-monoid-addition-for-t-digest/

Hmm...
The more modern implementations (MergingDigest) already use a sorted merge approach. Check out the faster-merge branch for implementation. Also the new-article branch for some discussions on how this all works.

I did some checking on an R implementation of the merging algorithm and didn't see any of this behavior. Here, for instance, is evolution of KS over 100 merges:

On the left is a picture of the cluster sizes and on the right is KS over iterations.

Code at https://gist.github.com/tdunning/26ce5f109cd0ea044caaf3ebfd21eb99

Aha, that explains the code I was looking at.  I'll work on including that algorithm in my comparisons

Here is a comparison of a bunch of computations of ks statistic using a
t-digest or the original data:
[image: Inline image 1]
This indicates to me that the t-digest is doing a good job of representing
the distribution. This is for \delta = 100.
On Thu, Dec 22, 2016 at 3:32 PM, Erik Erlandson<EMAIL_ADDRESS>wrote:

Aha, that explains the code I was looking at. I'll work on including that
algorithm in my comparisons
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/tdunning/t-digest/issues/78#issuecomment-268913993,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAPSekezAshgDe_b0n23UgLhfEszbKERks5rKwiRgaJpZM4LUGkf
.

Your code looks wrong here
https://github.com/erikerlandson/isarn-sketches-algebird-api/blob/blog/t_digest_sum_2/src/main/scala/org/isarnproject/sketchesAlgebirdAPI/AlgebirdFactory.scala#L108-L113
.
The problem is that you are merging clusters with the same centroid.  That
isn't right. You should only merge them if they satisfy the merge criterion.
My guess is that if that code is being triggered, then you are getting
clusters that are larger than allowed. I don't see that this code should be
triggered in your test case, however.
Also, remember that this form of the algorithm with k2q(q+dq) - k2q(q) is
fine for testing, but keep in mind that you can go about 10x faster with
some limit caching and if you are merging many digests in one go.
All that said, I think that I am seeing poor convergence like you are
seeing.  Looking at ks.test of sample data versus cdf's estimated from the
t-digest is showing limited convergence like you show.
I will have to think on it.
On Fri, Dec 23, 2016 at 4:42 PM, Erik Erlandson<EMAIL_ADDRESS>wrote:

I implemented the new merge-based combining algorithm for comparison. The
code is here
https://github.com/erikerlandson/isarn-sketches-algebird-api/blob/blog/t_digest_sum_2/src/main/scala/org/isarnproject/sketchesAlgebirdAPI/AlgebirdFactory.scala#L107
-- I believe I have it working correctly, but it hasn't been reviewed by
anybody else.
My updated plots look like this (merge-based algorithm added in green):
[image: merge_compare]
https://cloud.githubusercontent.com/assets/259898/21464321/c1cbf850-c936-11e6-9a27-40b31403bd2f.png
Assuming my code is all working as expected, largest-to-smallest converges
a bit better than merge-based, although either is clearly far better than
the older random-insertion algorithm.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/tdunning/t-digest/issues/78#issuecomment-269060593,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAPSetnzaOCRCV85dPcAETlFmQOGE4_Zks5rLGpugaJpZM4LUGkf
.

I wonder how important it really is, especially if it's inconvenient to change.  My original goal was to just find something that didn't keep getting worse, like the older random-insertion algorithm does.   The merge-based algorithm clearly meets and exceeds that requirement already.
My logic for combining clusters with exactly the same centroid is a by-product of my choice of backing data structure.  Since I'm using a map whose key is the centroid location, multiple clusters with the same centroid are inconvenient to work with, so I decided to just live with the possibility of violating the cluster size bound.  I predicted it would be a rare event in most scenarios.

If you look at the test cases for the Java version of t-digest, you will
find a number of cases that deal with lots of repeated data values. These
tests are in there because of how badly I have been burned by real data
like that.
For instance, take a payment amounts on a mixed transaction stream. These
are often zero, often stereotypical numbers like 9.95 (plus tax). The
result of such repeated values is that you get multiple centroids with the
same mean. It is important, however, to be able to peel out one of these
centroids at a time to express some subtlety to the distribution.
A good test case for this has input that is 100,000 zero values followed by
10,000 exponentially distributed values. If you merge centroids, you get
one massive centroid from the first part of the data and then singletons.
Some of the singletons will combine with the massive centroid and shift it.
The resulting KS difference can be very near 1.
On Sat, Dec 24, 2016 at 7:32 AM, Erik Erlandson<EMAIL_ADDRESS>wrote:

I wonder how important it really is, especially if it's inconvenient to
change. My original goal was to just find something that didn't keep
getting worse, like the older random-insertion algorithm does. The
merge-based algorithm clearly meets and exceeds that requirement already.
My logic for combining clusters with exactly the same centroid is a
by-product of my choice of backing data structure. Since I'm using a map
whose key is the centroid location, multiple clusters with the same
centroid are inconvenient to work with, so I decided to just live with the
possibility of violating the cluster size bound. I predicted it would be a
rare event in most scenarios.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/tdunning/t-digest/issues/78#issuecomment-269088767,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAPSeqdBdNvpgis_O-3P1Rw7j0mJ1VmFks5rLTsngaJpZM4LUGkf
.

An easy, though slightly hacky, workaround would be to use the Go
equivalent of java.lang.Math.nextAfter() method instead of merging the
values. The resulting centroids would not be identical and thus would key
differently in your data structure.
My preference in such cases is actually to use an unstable sort so that you
get any of the equal centroids. This avoids a problem where one of the
"equal" centroids might shadow the others. In the original t-digest, I did
a lot of work to scan all equally distant centroids to avoid this. In the
merging digest, I plan to simply destabilize the merge with random numbers.
On Sat, Dec 24, 2016 at 10:56 AM, Ted Dunning<EMAIL_ADDRESS>wrote:

If you look at the test cases for the Java version of t-digest, you will
find a number of cases that deal with lots of repeated data values. These
tests are in there because of how badly I have been burned by real data
like that.
For instance, take a payment amounts on a mixed transaction stream. These
are often zero, often stereotypical numbers like 9.95 (plus tax). The
result of such repeated values is that you get multiple centroids with the
same mean. It is important, however, to be able to peel out one of these
centroids at a time to express some subtlety to the distribution.
A good test case for this has input that is 100,000 zero values followed
by 10,000 exponentially distributed values. If you merge centroids, you get
one massive centroid from the first part of the data and then singletons.
Some of the singletons will combine with the massive centroid and shift it.
The resulting KS difference can be very near 1.
On Sat, Dec 24, 2016 at 7:32 AM, Erik Erlandson<EMAIL_ADDRESS>wrote:

I wonder how important it really is, especially if it's inconvenient to
change. My original goal was to just find something that didn't keep
getting worse, like the older random-insertion algorithm does. The
merge-based algorithm clearly meets and exceeds that requirement already.
My logic for combining clusters with exactly the same centroid is a
by-product of my choice of backing data structure. Since I'm using a map
whose key is the centroid location, multiple clusters with the same
centroid are inconvenient to work with, so I decided to just live with the
possibility of violating the cluster size bound. I predicted it would be a
rare event in most scenarios.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/tdunning/t-digest/issues/78#issuecomment-269088767,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAPSeqdBdNvpgis_O-3P1Rw7j0mJ1VmFks5rLTsngaJpZM4LUGkf
.

nextAfter() is a cool widget!  I like the idea of introducing jitter.  Why not, it's just a sketch anyway.
I have a theory my logic could work OK with a big spike of zeros (or other numbers); such a spike would not merge with different cluster locations (and then shift) on the grounds of already being larger than the nominal limit.   Clusters only get to grow past their limit by acquiring new mass at exactly the same location.  But, that needs either proof or disproof via additional unit testing.
My original concept involved a sort of back-off sketching model where discrete values were stored in a map, unless and until some sufficient number of unique values was encountered, and then it would back-off to a t-digest.  I suppose a hybrid model might be possible, where large spikes get stored exterior to the digest.

On Tue, Dec 27, 2016 at 11:44 AM, Erik Erlandson<EMAIL_ADDRESS>wrote:

My original concept involved a sort of back-off sketching model where
discrete values were stored in a map, unless and until some sufficient
number of unique values was encountered, and then it would back-off to a
t-digest. I suppose a hybrid model might be possible, where large spikes
get stored exterior to the digest.

I can't remember if I mentioned this, but the merging versino of t-digest
effectively does just this.

Erik,
Thanks again for your excellent observation. I just wanted to mention that the MergingDigest now has an add function that takes a list of TDigests. This mega merge is handled very efficiently and accuracy should be better than monoid style accumulation.

That sounds very cool!  👍

Btw... I think that you may actually have been seeing the thin end of https://github.com/tdunning/t-digest/issues/89
AVLTreeDigest has a serious bug with repeated values.

This seems better lately. This is from the data produced by TDigestTest.testKSDrift.

Note that the algorithms are different in that the AVLTreeDigest uses a size limit that results in the number of centroids to grow without bound roughly according to \delta * log(n) while MergingDigest uses a size limit that results in the number being strictly bounded by 2 \delta and practically speaking by about 1.3 \delta. In any case, the KS statistic is very small in both cases.

Nice, it looks like that cut the D in half!

Well, it isn't clear that this is all apples to apples. But, yes. This is encouraging.
The MergingDigest has different size limits that make things behavior very differently in terms of centroid count. When I goosed the compression limit to give similar centroid count MergingDigest and AVLTreeDigest have very similar D.
I was going to say that there were some not yet understood initial convergence behavior. Not significant as far as I can tell.

I think that this is resolved. It wasn't a single issue, but resulted in significant improvements.
Thanks to all!


.tap() throws pumpandSettle timedout when tap to navigating on the fluter view

Steps to reproduce
Trying to tap on the flutter screen
    await _requestAndGrantMicrophonePermission($);

    if (await $(S.current.skip).visible) {
      while (await $(S.current.skip).visible) {
        await $(S.current.skip).tap();
      }
    }else{
      await $(S.current.continue_).waitUntilVisible();

      await $(S.current.continue_).tap();

    }

Actual results
java.lang.AssertionError: Dart test failed: tests.course_test
══╡ EXCEPTION CAUGHT BY FLUTTER TEST FRAMEWORK ╞═════════════════
The following assertion was thrown running a test:
pumpAndSettle timed out
When the exception was thrown, this was the stack:
#0      WidgetTester.pumpAndSettle. (package:flutter_test/src/widget_tester.dart:707:11)

#1      TestAsyncUtils.guard. (package:flutter_test/src/test_async_utils.dart:114:7)

The test description was:
Assigned Courses Test
═════════════════════════════════════════════════════════════════
at pl.leancode.patrol.PatrolJUnitRunner.runDartTest(PatrolJUnitRunner.java:130)
at pl.leancode.patrol.example.MainActivityTest.runDartTest(MainActivityTest.java:30)
Logs

Logs
<!-- Replace this line with your logs. Do not remove the backticks! -->

Patrol version
patrol: ^2.0.0
Patrol Doctor output
You're using Patrol CLI 2.0, which has breaking changes.
Read the migration guide at https://patrol.leancode.co/v2.
Disable this warning by setting the PATROL_MIGRATED environment variable.
Patrol CLI version: 2.1.0
Program adb found in C:\Users\achannav\scoop\shims\adb.exe
Env var $ANDROID_HOME set to C:\Users\achannav\AppData\Local\Android\sdk
Flutter Doctor output
[√] Flutter (Channel stable, 3.10.6, on Microsoft Windows [Version 10.0.19045.3208], locale en-US)
• Flutter version 3.10.6 on channel stable at C:\Users\achannav\flutter
• Upstream repository https://github.com/flutter/flutter.git
• Framework revision f468f3366c (4 weeks ago), 2023-07-12 15:19:05 -0700
• Engine revision cdbeda788a
• Dart version 3.0.6
• DevTools version 2.23.1
[√] Windows Version (Installed version of Windows is version 10 or higher)
[√] Android toolchain - develop for Android devices (Android SDK version 33.0.2)
• Android SDK at C:\Users\achannav\AppData\Local\Android\sdk
• Platform android-33-ext4, build-tools 33.0.2
• ANDROID_HOME = C:\Users\achannav\AppData\Local\Android\sdk
• Java binary at: C:\Program Files\Android\Android Studio\jbr\bin\java
• Java version OpenJDK Runtime Environment (build 11.0.15+0-b2043.56-9505619)
• All Android licenses accepted.
[√] Chrome - develop for the web
• Chrome at C:\Program Files\Google\Chrome\Application\chrome.exe
[X] Visual Studio - develop for Windows
X Visual Studio not installed; this is necessary for Windows development.
Download at https://visualstudio.microsoft.com/downloads/.
Please install the "Desktop development with C++" workload, including all of its default components
[√] Android Studio (version 2022.1)
• Android Studio at C:\Program Files\Android\Android Studio
• Flutter plugin can be installed from:
https://plugins.jetbrains.com/plugin/9212-flutter
• Dart plugin can be installed from:
https://plugins.jetbrains.com/plugin/6351-dart
• Java version OpenJDK Runtime Environment (build 11.0.15+0-b2043.56-9505619)
[√] IntelliJ IDEA Community Edition (version 2021.3)
• IntelliJ at C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.3
• Flutter plugin version 72.1.5
• Dart plugin version 231.8109.91
[√] VS Code (version 1.81.0)
• VS Code at C:\Users\achannav\AppData\Local\Programs\Microsoft VS Code
• Flutter extension version 3.70.0
[√] Connected device (4 available)
• Pixel 3 (mobile)  • 8AXX11EA2 • android-arm64  • Android 12 (API 31)
• Windows (desktop) • windows   • windows-x64    • Microsoft Windows [Version 10.0.19045.3208]
• Chrome (web)      • chrome    • web-javascript • Google Chrome 115.0.5790.171
• Edge (web)        • edge      • web-javascript • Microsoft Edge 115.0.1901.188
[√] Network resources
• All expected network resources are available.
! Doctor found issues in 1 category.

Hi @ashwinichannaveerappa,
Your issue is not reproducible. Please provide accourate reproduction steps so we can help you. Otherwise this issue will be closed.
Usually, the error you're getting is caused by the app having some infinite animation that causes "settling" to never stop.

Closing because of lack of response.


Error communicating with remote server.

Using a clean install I get the error Error communicating with remote server.
I just did a docker run -p 3000:3000 -t xiam/go-playground
When trying to compile the hello world in the web browser that error appears, console shows
➜  Documents docker run -p 3000:3000 -t xiam/go-playground 2019/10/30 03:44:43 Serving Go Playground at :3000 (with compiler https://play.golang.org/compile?output=json) 2019/10/30 03:45:06 compile error: "Post https://play.golang.org/compile?output=json: x509: certificate signed by unknown authority"

I had the same issue - ended up including my certs in the Dockerfile for webapp so it wouldn't have an issue calling the backend.

@JohnRoesler  Can u raise a PR for the Same

I added something like this to my docker - not sure it's worth adding in a PR because it would likely be different for each user:
RUN mkdir /usr/local/share/ca-certificates/my-certs
RUN curl http://url-to-my-cert-bundle.crt
RUN update-ca-certificates


ECONNREFUSED

Describe the bug
I tried running this on my website https://eggtrainer.com, but I received this error.
Error: Unable to launch browser for worker, error message: connect ECONNREFUSED <IP_ADDRESS>:51667
    at Cluster.<anonymous> (/home/kruse/.npm/_npx/944abecbf21dfffb/node_modules/puppeteer-cluster/dist/Cluster.js:146:23)
    at Generator.throw (<anonymous>)
    at rejected (/home/kruse/.npm/_npx/944abecbf21dfffb/node_modules/puppeteer-cluster/dist/Cluster.js:6:65)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)

Node.js v18.15.0

My website does require authentication, but IDK if that is what caused this. Thanks in advance.
Reproduction
No response
System / Nuxt Info
System:
    OS: Linux 5.15 Ubuntu 22.04.2 LTS 22.04.2 LTS (Jammy Jellyfish)
    CPU: (12) x64 Intel(R) Core(TM) i5-10500H CPU @ 2.50GHz
    Memory: 2.47 GB / 3.72 GB
    Container: Yes
    Shell: 5.1.16 - /bin/bash
  Binaries:
    Node: 18.15.0 - ~/.nvm/versions/node/v18.15.0/bin/node
    npm: 9.5.0 - ~/.nvm/versions/node/v18.15.0/bin/npm
  Browsers:
    Chrome: 112.0.5615.49

Hey @Ratstail91, thanks for the issue :)
I wasn't able to replicate this issue but I did notice a bug with your site in that only the home page was being scanned. Maybe you could try with the latest version and see if you still have issues.
npx<EMAIL_ADDRESS>--site eggtrainer.com

Hey @harlan-zw,
Same issue - it's still the same error, but a different port number.
Error: Unable to launch browser for worker, error message: connect ECONNREFUSED <IP_ADDRESS>:63113
    at Cluster.<anonymous> (/home/kruse/.npm/_npx/f748e5d196c066c9/node_modules/puppeteer-cluster/dist/Cluster.js:146:23)
    at Generator.throw (<anonymous>)
    at rejected (/home/kruse/.npm/_npx/f748e5d196c066c9/node_modules/puppeteer-cluster/dist/Cluster.js:6:65)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5

Thanks for getting back to me. This isn't a super urgent issue, it's more curiosity, but if it helps you out, that's awesome.

Yes, sorry I thought I mentioned that. I'll try these solutions too.

Here's the full log after successfully installing google chrome into WSL. I'm not sure what's causing it.

Please try using the latest npx<EMAIL_ADDRESS>--debug :crossed_fingers:
If it doesn't work you can try either providing your chrome path or disabling the system chrome, see https://unlighthouse.dev/guide/guides/chrome-dependency.

This is now documented here https://unlighthouse.dev/guide/guides/common-errors

It's working! Thank you very much!


Set ETW event name and options for logrus hook

Added functionality to set the event (task) name and options (such as
event or associated event ID) for ETW events created by the hook based
on the logrus.Entry fields.
This PR supports enhanced logging in the shim.
Signed-off-by: Hamza El-Saawy<EMAIL_ADDRESS>

@kevpar resolved, PTAL


Can't include js from assets folder

Hello,
I can't  use an external js.
If i include it with
   <script src="/assets/js/jquery-3.2.1.min.js" type="text/javascript"></script>
It gives me this error (in console):

Refused to execute script from 'http://localhost:3000/assets/js/jquery-3.2.1.min.js' because its MIME type ('text/html') is not executable, and strict MIME type checking is enabled.

What am i doing wrong?

I use endless JS files. Check your path maybe. Where you put this code?  Add more details
Anyway use CDNs for Jquery
https://www.sitepoint.com/7-reasons-to-use-a-cdn/


Add modal confirmation for Unapprove button.

In the host dashboard, we recently added an Unapprove button for expense.
There are several buttons for expense within the dashboard, it's easy to use the wrong button unconsciously, like what could have happened in https://github.com/opencollective/opencollective/issues/2539#issuecomment-544446419. Having a confirmation modal could have prevented that.

Would be great to take the opportunity to refactor the modal, we have already too many copy/paste for that in the codebase.


MAINT: remove stray bento.info files

These were forgotten when we removed support for the Bento build system.
[ci skip]

merging straight away, no CI needed


t3c-apply should not attempt to login multiple times

While using t3c-apply. I noticed that it tries to login 3 times. Should we expect a single login to be performed?
I could not test the behavior when testing against the same Traffic Ops API level.
This is t3c 6.0 against TO 5.1.2.
[2001:578:30:9101:68:1:14:142]:46606 - - [08/Sep/2021:13:09:23 +0000] "POST /api/4.0/user/login? HTTP/1.1" 501 223 0 "t3c-request/0.1"  NON_IMS
[2001:578:30:9101:68:1:14:142]:46610 - - [08/Sep/2021:13:09:23 +0000] "POST /api/3.1/user/login? HTTP/1.1" 200 85 1 "t3c-request/0.1"<PHONE_NUMBER>3 NON_IMS
[2001:578:30:9101:68:1:14:142]:46610 - chs [08/Sep/2021:13:09:23 +0000] "GET /api/3.1/parameters?configFile=global HTTP/1.1" 200 686 7 "t3c-request/0.1"<PHONE_NUMBER>3 NON_IMS
[2001:578:30:9101:68:1:14:142]:46612 - - [08/Sep/2021:13:09:23 +0000] "POST /api/4.0/user/login? HTTP/1.1" 501 223 0 "t3c-request/0.1"  NON_IMS
[2001:578:30:9101:68:1:14:142]:46614 - - [08/Sep/2021:13:09:23 +0000] "POST /api/3.1/user/login? HTTP/1.1" 200 85 1 "t3c-request/0.1"<PHONE_NUMBER>3 NON_IMS
[2001:578:30:9101:68:1:14:142]:46614 - chs [08/Sep/2021:13:09:23 +0000] "GET /api/3.1/servers/cdn1cdedge0002/update_status? HTTP/1.1" 200 139 11 "t3c-request/0.1"<PHONE_NUMBER> NON_IMS
[2001:578:30:9101:68:1:14:142]:46616 - - [08/Sep/2021:13:09:23 +0000] "POST /api/4.0/user/login? HTTP/1.1" 501 223 0 "t3c-request/0.1"  NON_IMS
[2001:578:30:9101:68:1:14:142]:46618 - - [08/Sep/2021:13:09:23 +0000] "POST /api/3.1/user/login? HTTP/1.1" 200 85 1 "t3c-request/0.1"<PHONE_NUMBER>3 NON_IMS
[2001:578:30:9101:68:1:14:142]:46618 - chs [08/Sep/2021:13:09:23 +0000] "GET /api/3.1/servers/cdn1cdedge0002/update_status? HTTP/1.1" 200 139 6 "t3c-request/0.1"<PHONE_NUMBER> NON_IMS

Logs:
[2001:578:30:9101:68:1:14:142]:46606 - - [08/Sep/2021:13:09:23 +0000] "POST /api/4.0/user/login? HTTP/1.1" 501 223 0 "t3c-request/0.1"  NON_IMS
[2001:578:30:9101:68:1:14:142]:46610 - - [08/Sep/2021:13:09:23 +0000] "POST /api/3.1/user/login? HTTP/1.1" 200 85 1 "t3c-request/0.1"<PHONE_NUMBER>3 NON_IMS
[2001:578:30:9101:68:1:14:142]:46610 - chs [08/Sep/2021:13:09:23 +0000] "GET /api/3.1/parameters?configFile=global HTTP/1.1" 200 686 7 "t3c-request/0.1"<PHONE_NUMBER>3 NON_IMS
[2001:578:30:9101:68:1:14:142]:46612 - - [08/Sep/2021:13:09:23 +0000] "POST /api/4.0/user/login? HTTP/1.1" 501 223 0 "t3c-request/0.1"  NON_IMS
[2001:578:30:9101:68:1:14:142]:46614 - - [08/Sep/2021:13:09:23 +0000] "POST /api/3.1/user/login? HTTP/1.1" 200 85 1 "t3c-request/0.1"<PHONE_NUMBER>3 NON_IMS
[2001:578:30:9101:68:1:14:142]:46614 - chs [08/Sep/2021:13:09:23 +0000] "GET /api/3.1/servers/cdn1cdedge0002/update_status? HTTP/1.1" 200 139 11 "t3c-request/0.1"<PHONE_NUMBER> NON_IMS
[2001:578:30:9101:68:1:14:142]:46616 - - [08/Sep/2021:13:09:23 +0000] "POST /api/4.0/user/login? HTTP/1.1" 501 223 0 "t3c-request/0.1"  NON_IMS
[2001:578:30:9101:68:1:14:142]:46618 - - [08/Sep/2021:13:09:23 +0000] "POST /api/3.1/user/login? HTTP/1.1" 200 85 1 "t3c-request/0.1"<PHONE_NUMBER>3 NON_IMS
[2001:578:30:9101:68:1:14:142]:46618 - chs [08/Sep/2021:13:09:23 +0000] "GET /api/3.1/servers/cdn1cdedge0002/update_status? HTTP/1.1" 200 139 6 "t3c-request/0.1"<PHONE_NUMBER> NON_IMS

Traffic Control Cache Config (T3C, formerly ORT)

Current behavior:
t3c doesn't seem to cache login/token information
New behavior:
t3c should only request a token once for a session.

This is an artifact of the "UNIX-style" of having multiple apps.
I think the solution is to make each app that talks to TO (t3c-request, t3c-update) capable of taking a token instead of credentials. We'll probably also have to make them able to return a token somehow, so t3c-apply can get it in order to cache and pass later.
Long-term we'd also like to support Client Certificates.

They could look for something like ~/.t3c-token and read/write tokens from there unless disabled/overridden by flags. Also, I think t3c will attempt multiple logins if the first fails; it'll fall back on an older API version when a request fails, right? No matter the reason?

Ok. In this case, could we have a different user agent for the different components? The logs let me believe it was the same app login in 3 times.  "t3c-request/0.1"

I believe that's actually correct, t3c-update will use a different user agent, for example: t3c-update/0.1 - so if you're seeing t3c-request/0.1 three times I think it's actually t3c-request all three times.

this PR https://github.com/apache/trafficcontrol/pull/6570 added using mojolicious cookie for authentication and have reduced the logins to 1 per t3c run

this PR https://github.com/apache/trafficcontrol/pull/6570 added using mojolicious cookie for authentication and have reduced the logins to 1 per t3c run

Neat, sounds like #6173 can be closed.


chore: bdd-sbhg-1575455534 to 0.0.1

chore: Promote bdd-sbhg-1575455534 to version 0.0.1

[APPROVALNOTIFIER] This PR is NOT APPROVED
This pull-request has been approved by:
To fully approve this pull request, please assign additional approvers.
We suggest the following additional approvers:
If they are not already assigned, you can assign the PR to them by writing /assign  in a comment when ready.
The full list of commands accepted by this bot can be found here.
The pull request process is described here

Needs approval from an approver in each of these files:

OWNERS

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment


Support terminalShellType context key on non-Windows

This will allow separating commands in command detection by shell (esp. important for pwsh).

To verify on mac or linux, bind a keybinding to use the terminalShellType context key (eg. bash or zsh) and ensure it works as expected depending on the active terminal session.

A couple cases I can hit on OSX:

Create a zsh terminal
Observe terminalShellType == zsh ✅
Reload the window
Observe that the terminal is restored, but terminalShellType is not set 🐛

Create a zsh terminal
Observe terminalShellType == zsh ✅
Create a bash terminal in a new tab
Observe terminalShellType == bash ✅
Switch back to the zsh terminal
Observe terminalShellType == bash 🐛


error-related count metrics initialized with 0

Issue: https://github.com/strimzi/strimzi-canary/issues/215
All error-related count metrics except "client_creation_error_total" are initialized with value of 0 to prevent PromQL recognizing first exported metric with error to be initial value.
This way, we can define such prometheus alert rule: increase(strimzi_canary_topic_alter_configuration_error_total[5m]) > 0

@ppatierno fyi

@k-wall can you have also a look on this PR please?

Oh.   Interesting.  I wasn't aware of this problem before.   I agree with @leewoobin789, the canary's behaviour is wrong.
The prometheus docs state that "Counters MUST start at 0.".   The prometheus client library can't predict the set of the labels that the canary is going to use, so it seems reasonable that the canary itself has to cause the 0 value to be recorded.
I found this blog post informative: https://www.section.io/blog/beware-prometheus-counters-that-do-not-begin-at-zero/

@leewoobin789 I think we are close! Last request is about adding a line in the CHANGELOG related to the 0.7.0 about Fixed error-related metrics starting from 0 (#215) or something similar.

@ppatierno Done ✅ thanks a lot for reviewing!

@k-wall Maybe your review here would make sense as well?

I tested @leewoobin789 changes locally, all lgtm.

Thanks @k-wall !


AdonisJS v5.0

Does this library support AdonisJS v5.0 or will support in the future? https://preview.adonisjs.com/

@zLupa no plans to support AdonisJS v5.0 at the moment


[Bug] [Metadata Utilities] Conditional action doesn't work when run manually

Describe the bug
A conditional action can't match a game when run manually
To Reproduce
Steps to reproduce the behavior:

Add a game containing "Demo" word in it's name (for example "Labyrinth Of The Demon King Demo")
Create a category "🧩 Demo"
Create a Conditional action:
Name: Set "🧩 Demo" category
Type: Any condition is true
Enabled: true
Can be executed manually: true
Conditions: contains > Name > Demo
Actions: add > Category > 🧩 Demo
Save
Open game context menu > Metadata utilities > Conditional actions > Set "🧩 Demo" category
Examine the game's assigned categories
"🧩 Demo" is not assigned
Restart Playnite and Examine the game's assigned categories
"🧩 Demo" is assigned

Expected behavior
The "🧩 Demo" category is set since the game's Name contains word "Demo"
Screenshots

please complete the following information:

Windows version: 10 Pro (10.0.19045 Build 19045)
Playnite version: 10.34
Extension version: 1.5.1

Additional context
Logs only say:
01-11 23:50:38.836|DEBUG|MetadataUtilities#Log:===> Started MetadataUtilities.Actions.ExecuteConditionalActionsAction for 1 games. =======================
01-11 23:50:38.836|DEBUG|MetadataUtilities#Log:===> Finished MetadataUtilities.Actions.ExecuteConditionalActionsAction with 0 games affected. =======================

Nevermind, sorry.
Everything works as intended - I was confused by not updated column Category value on List view


bug: Message is cut short following a comma

Description of the bug
If the deprecation message includes a , (comma), everything from the symbol directly preceding the comma and to the end is removed from the rendered output.
To Reproduce

Create virtual environment, install requirements:
python3.13 -m venv .venv
. .venv/bin/activate
pip install griffe-warnings-deprecated mkdocs-material mkdocstrings-python

Create the files test.py, mkdocs.yml and docs/index.md:
# test.py
from warnings import deprecated

@deprecated("Lorem ipsum dolor sit amet, consectetur adipiscing elit")
def f() -> None:
    """Some function"""
    pass

# mkdocs.yml
site_name: test site

theme:
  name: material

plugins:
  - mkdocstrings:
      default_handler: python
      handlers:
        python:
          paths: [.]
          options:
            extensions:
              - griffe_warnings_deprecated:
                  kind: danger
                  title: Deprecated

<!-- docs/test.md -->
::: test

Serve the docs:
mkdocs serve

Expected behavior
I expected the deprecation message to show as:

Instead, everything from the just before the comma and on is not rendered:

Environment information

python -m griffe_warnings_deprecated.debug  # | xclip -selection clipboard

System: Linux-6.8.0-49-generic-x86_64-with-glibc2.39
Python: cpython 3.13.0 (/home/stefan/test-griffe/.venv/bin/python)
Environment variables:
Installed packages:

griffe-warnings-deprecated v1.0.0

Thanks for the report @connesy! The code was meant to split args and keep only the message, but it's obviously too naive. I think I wrote this before we had proper Griffe expressions, I should be able to rewrite it to be more robust 🙂
If you want to tackle it, let me know, I can provide guidance. Otherwise I'll get to it soon (bugs are prioritized).

Sure, I can give it a go!
Do you have an example of how to use expressions?

I see you sent a PR already! Let me comment there :slightly_smiling_face:


add the hierarchy child tag

似乎已经在 https://github.com/GCL-Seminar/Awesome-Graphics-Papers/pull/23 中修复啦


Send to Unreal - Not working on mac

You mentioned that you tried to work on it but it is not quite working with your VM.
https://github.com/EpicGamesExt/BlenderTools/issues/695
I'm on a mac and could help you fixing this issue.
I've tinkered around on the mac like the others with ports and Multicast Bind Address but nothing helps.
Can you tell me how or where I can get logs from unreal regarding the initialisation of the python plugin?

hey thanks for the assist! In blender can you please open blender console (In Window) and post the result of starting RPC servers? (pipeline->utilities->Start RPC Servers)

So I played around a bit, added prints to the plugin code locally and started blender via console to see them but until now, I could not really track down completely, what the issue might be.
Via netstat -an | grep 6766 I can see that when I check the box in unreal for remote execution that it actually opens something on <IP_ADDRESS>:6766 as expected but then, the plugin gets a socket timeout when _run_broadcast_listen_thread tries to data = self._broadcast_socket.recv(DEFAULT_RECEIVE_BUFFER_SIZE).
I'm not into python so I can't tell too much what would be needed here to fix it but what I tried was to change this
self._broadcast_socket.sendto(message.to_json_bytes(), self._config.multicast_group_endpoint) (runs on <IP_ADDRESS> normally)
to self._broadcast_socket.sendto(message.to_json_bytes(), ('<IP_ADDRESS>', 6766)) and in fact at least it is sending a ping now but that of course would not lead to a solution, was just playing around.
Here is the output of the plugin running with my custom prints where you can see a bit whats happening. If you need to dig in further, I also have discord and other tools where we could work together on the code and debugging.

Awesome thank you for that! I'm unavailable this weekend but will be back Monday to dig in.

Hey @andygagnon I do not have a M1 mac, but the issue has got to be within this remote_execution.py.
This is what I know. Send to Unreal has its own rpc package it uses for remote calls to unreal and thats all http over 9998
The only reason it needs remote_execution.py is to initially spawn its own rpc server. Once that is created and responding it doesn't need it anymore.
https://github.com/poly-hammer/BlenderTools/blob/0a3ab4fe560448123944138e96535d184d10ac55/send2ue/dependencies/unreal.py#L184
So hypothetically, I think just running this in the unreal python REPL would initialize the connection blender needs.
import sys
import os
import threading
for thread in threading.enumerate():
    if thread.name =="UnrealRPCServer":
        thread.kill()
        os.environ["RPC_TIME_OUT"] = "{rpc_response_timeout}"
        sys.path.append(r"{dependencies_path}")
        from rpc import unreal_server
        rpc_server = unreal_server.RPCServer()
        rpc_server.start(threaded=True)

Beyond that I would probably reccomend using a debugger and dropping some breakpoints in remote_exection.py probably some compatibility logic need to be added for mac somewhere in there, maybe with the sockets api? But maybe it will be easy to find since you are on a M1 Mac.

remote_execution.py was copied from Epic's Python plugin with no changes. I wonder if that's causing a conflict?

I'm terrible with network stuff, but I see suggestions out there to try adding a 1 or 2 second sleep before searching for nodes. It looks like Epic has tried account for that with a .1s sleep, maybe it's just not long enough for some systems?
Line 118 in dependencies/unreal.py
There could also be a secondary issue of some systems not having a <IP_ADDRESS> loopback thus relying on <IP_ADDRESS>. Based on comments in remote_execution.py, changing the multicast to <IP_ADDRESS> could very well be a valid solution for some.

Sorry, guys, I am also looking into this issue, trying to figure out what is going on.  I ran up a simple test python, to execute against unrealEditor.  What I received back is confirmation to me that the problem is entirely blender plugin side.
Using the provided remote_execution,
import time
import send2ue

from send2ue.dependencies import unreal
from send2ue.dependencies import remote_execution

if __name__ ==  '__main__':
    '''
    remote_conf = remote_execution.RemoteExecutionConfig()
    remote_conf.multicast_ttl = 60
    remote_conf.command_endpoint = "<IP_ADDRESS>:6766"
    '''
    send2ue.register()

    remot = remote_execution.RemoteExecution()  #remote_conf)
    remot.start()
    connection = unreal.UnrealRemoteCalls()
    unr = unreal.Unreal()

    while 1:
        time.sleep(1)
        print(str(unr))
        print(connection)

I managed to retrieve with tcpdump -A -I en0  & tcpdump -A -I lo0  on my Mac I was able to confirm that these files send appropriate messages into unrealEditor, and unreal editor responds with its node identification as one would expect.
When getting the plugin to do this it sent the information from what I can tell, but unreal didn't receive it.
The two tcpdump commands were executing on my Network interface (wireless) and on the loopback interface and messages would appear on on each when working.
For clarity unreal was configured to listen on <IP_ADDRESS> as per previous discussion points the test python got responses from unreal.

Sorry, guys, I am also looking into this issue, trying to figure out what is going on. I ran up a simple test python, to execute against unrealEditor. What I received back is confirmation to me that the problem is entirely blender plugin side.

So I have dug a little deeper, and I have managed to get the ping pong to respond to Blender but this is not an advancement.
Between mowing the lawn and general other general activities today.  I replaced this line in unreal.py
'''
def bootstrap_unreal_with_rpc_server():
"""
Bootstraps the running unreal editor with the unreal rpc server if it doesn't already exist.
"""
if not os.environ.get('TEST_ENVIRONMENT'):
if not is_connected():
#import bpy
#rpc_response_timeout = bpy.context.preferences.addons["send2ue"].preferences.rpc_response_timeout
rpc_response_timeout = 60
dependencies_path = os.path.dirname(file)
result = run_commands(
[ .......
'''
Essentially I came across this issue a few times while debugging it but thought this was because I wasn't running blender.
bpy.context == None
Following the previous trend, of packet monitoring I noticed additional requests going through now ping / pong from ue, and then a new one open_connection but it was not responded to. I suspect it will be a similar issue.  Now this didn't sit right why would context be a problem, its part of blender and confirmed its relevant to blender running.
altered it like so and received the same result. Where previously I did not receive anything except ping now its ping pong open and close connections. The open being an attempt to link up to Unreals Command Port.
'''
def bootstrap_unreal_with_rpc_server():
"""
Bootstraps the running unreal editor with the unreal rpc server if it doesn't already exist.
"""
if not os.environ.get('TEST_ENVIRONMENT'):
if not is_connected():
import bpy
send2ue_addon = bpy.context.preferences.addons.get("send2ue")
rpc_response_timeout = send2ue_addon.preferences.get("rpc_response_timeout")
dependencies_path = os.path.dirname(file)
result = run_commands(
[ .......
'''
Anyway I dont know if I'm barking up the wrong tree or not. but my gut feeling is that Blender's bpy_struct base class and preferences implementations may have changed under the hood.
Anyway, my progress towards figuring this out got to the redirection to the command_port, at 6776.  Alas I haven't figured out where this happens in the code yet.  baby steps :)
'''
22:07:36.752277 IP ##.##.##.171.6766 > <IP_ADDRESS>.6766: UDP, length 210
E..........%
MX......n.n..R.{"version": 1, "magic": "ue_py", "type": "open_connection", "source": "c170####-####-####-####-c20d5ae8434f", "dest": "A751554D6########5A1B2CBB91515", "data": {"command_ip": "<IP_ADDRESS>", "command_port": 6776}}
22:07:37.316431 IP ##.##.##.171.6766 > <IP_ADDRESS>.6766: UDP, length 154
E... .....Ge
MX......n.n..R.{"version": 1, "magic": "ue_py", "type": "close_connection", "source": "c170####-####-####-####-c20d5ae8434f", "dest": "A751554D6########5A1B2CBB91515"}
'''

Thank you everyone for your support!
I've committed some changes here https://github.com/poly-hammer/BlenderTools/commit/639b537aff9f44a2dc2b7b60912968f0d2047a1a that I'd like tested please!

Thank you everyone for your support!
I've committed some changes here 639b537 that I'd like tested please!

Hey so I ran that up, in my blender and it behaved the same as what I did was doing ti tries to reach out for the command endpoint on 6776. but ends in closing the connection.  Looks like my biggest issue in figuring out this issue Is getting a development plugin running appropriately.  Can load a plugin no problem but getting any useful information out of a running blender Logs dont seem to appear,
This is the logs from blender on a run with this configuration.

Hope it helps you, it sure doesnt look useful to me.

any guess is as good as mine if not better lol. I just rely on printing to the console (Window > Toggle System Console)
Going back to your first comment, this is interesting
send2ue_addon = bpy.context.preferences.addons.get("send2ue")             rpc_response_timeout = send2ue_addon.preferences.get("rpc_response_timeout")
So it works after making this change? I wonder why it works on Windows then?

any guess is as good as mine if not better lol. I just rely on printing to the console (Window > Toggle System Console)
Going back to your first comment, this is interesting send2ue_addon = bpy.context.preferences.addons.get("send2ue") rpc_response_timeout = send2ue_addon.preferences.get("rpc_response_timeout")
So it works after making this change? I wonder why it works on Windows then?

So I think that is a red herring, I think I made that change after making a similar change to yours locally that caused it to work.
The Crux of the problem is this one.
I played around in unreal with changing directory and navigating to where it should be loading the python module from for RPC,  And what I see is that the Mac OS is definitely stepping in and stopping unreal from loading files outside its ownership.
Essentially After Each print(os.getcwd()) I got these  in the log
System Policy: UnrealEditor(2036) deny(1) file-read-data /Path/To/Plugin/BlenderTools/send2ue/dependencies
System Policy: UnrealEditor(2036) deny(1) file-read-data /Path/To/Plugin/BlenderTools/send2ue

Albeit I'm using an alias / symbolic link to link send2ue into blenders plugin directory.
Was reading some information about code signing, but think this is more a general Mac Developer configuration issue. Where applications have to be whitelisted to access files from another location.
In this instance send2ue contains a module that is loaded by unreal, one in blender one trying to load it from inside blenders safe area.  Im going to have to dig some more I think in Mac forums to figure out how to either Whitelist this behaviour or figure out what the right way to handle it is.

So I have a Hack of a solution to make it work.
cd /Path/To/Send2UEPlugin/
cp -r dependencies /Users/Shared/Epic\ Games/UE_5.3/Engine/Plugins/Experimental/PythonScriptPlugin/Content/Python/

Make sure

Josh's Changes are applied to your version of send2ue
Send2ue is installed in blender
UERigify is installed in blender
The above command is then executed. Copying the Send2Ue Dependencies folder into the Unreal Python script plugin where it can load them without interception by the MacOS security features.

What this does is it allows someone to use the plugin while running Unreal 5.3 / 5.4 on a Mac. If anything changes in the future though these steps would need to be repeated.
This is a work around for the Mac OS Security Feature.

So I have gotten a significant step forward...
cd /Path/To/Send2UEPlugin/
cp -r dependencies /Users/Shared/Epic\ Games/UE_5.3/Engine/Plugins/Experimental/PythonScriptPlugin/Content/Python/

What this does is it allows someone to use the plugin while running Unreal 5.3 / 5.4 on a Mac. What it does not do, is allow UE to save the model. UE gets the temporary file and loads it but when it tries to save the asset it fails when creating the new asset, you will be able to place move the actor around but the asset will be lost when UE is closed.
To fix that issue you need to go to system settings -> Privacy and Security -> Files and Folders -> Unreal Editor etc etc, Enable both Documents Folder and Downloads Folder. One enabled saving the asset is possible.

Very interesting! I initially suspected there was a problem related to security but was expecting it be a firewall issue. Is there a way to prompt for permission request on mac instead of having to manually check Security for blocked actions?

Very interesting! I initially suspected there was a problem related to security but was expecting it be a firewall issue. Is there a way to prompt for permission request on mac instead of having to manually check Security for blocked actions or adding exceptions?
If there isn't then the solution may just be to create a first run guide for mac users. Which really sucks, I want this to be a smooth no hassle process for everyone.
EDIT: Looks like the closest you can get is opening system preferences to the Privacy page with webbrowser.open('x-apple.systempreferences:com.apple.preference.security?Privacy') which ironically prompted me to allow access to Documents for python in my VM lol

Possibly, That downloads folder issue may have been a misclick when playing with unreal, I can't remember when I installed it was a while back :(.
But with the python library needing to be somewhere it can be accessed by unreal is annoying.   The dependencies either need to be copied over and overwritten each time it runs (which may be possible but fear the security layer will block this behavior as one app reaches inside another.)
Or, as you say Manual step for Mac Users to copy the dependencies into a place unreal can use them.  Which I feel this may be the safest way forward but is prone to human error.

So I was able to get my hands on a Mac this weekend. The addon wasn't working until I changed the multicast bind address to <IP_ADDRESS> in both the unreal project and the remote_execution.py

After that and rebooting unreal and blender it works fine for me.
I didn't hit the permissions issue, but I didn't use a symlink though.

okok. So then I think it would be worth pushing the following before diving into a full macos first-run process/guide:

Keep my lines setting the multicast and command endpoint IPs based on OS (127 for windows, else 0)
Add a visible red warning for macOS/linux users in the Addons preferences menu and/or at the top of the Send2UE settings menu that informs the need to verify/set the IP's in their Unreal python settings.

Yea I think the <IP_ADDRESS> will work on any machine. I think the unreal python plugin defaults to <IP_ADDRESS> when creating a new project. If the default was updated to <IP_ADDRESS> in the addon code, and then we update the quick start with a step to change multicast bind address to <IP_ADDRESS> when they enable remote execution, then I think that would be the most universal configuration.
I know seeing <IP_ADDRESS> scares some people, but with multicast TTL set to 0 I don't think it matters since you shouldn't be able to connect to it from anything but your own computer's network interface. Maybe we can also have these be read from addon preferences instead of hardcoded values incase people want to customize these?

Yeah good points. I will implement these changes in the next few days and upload a test package for everyone to try before pushing to main.

@JoshQuake I'm ready to test this on Mac OS, but I'm not sure how to get this recent build from github
onto my machine for testing.
The latest release is 2.4.5 from June 17.
https://github.com/poly-hammer/BlenderTools/releases
Suggestions?  Thanks.

We're close to pushing a release but in the meantime the src/addons/send2ue folder can be zipped and installed to test:
send2ue.zip


Seasteads are not counted for housing

I am playing a late game and noticed that after putting 4 seasteads there was no increase in Housing in the city. It was showing 31. I disabled CQUI and the vanilla interface shows a correct value of 39.
Also, I may add that Better Report Screen also shows the correct value, so the issue is the routine in CQUI that calculates housing from improvements.

I expected CQUI to reuse the calculation function from the base game, and show the results in some improved UI. if CQUI includes code to calculate housing and everything else, that sounds like a huge maintenance burden. I suppose reusing that code from the base game is not possible? otherwise it would have been done already.

The reason is explained in #34

You can use my code from #34, if you want. It is working. Just leave the comment with my name.

Of course! Appreciated.  Your code effectively replaces the entirety of the CQUi-getrealhousing function, right?
I created a branch for this yesterday and have been working to do the extend/replace instead of replacing the entire file.  I am also hoping to put this logic in a common file instead of having to duplicate it for each expansion file.

Well, not entire exactly. In cqui there is some event handling at the end. And my code just takes city as an argument, cqui takes 3 params, so check what they are used for exacly.

submitted #48 as a starting point to discuss ways to improve reusability of our code.

To understand correctly, is the **sole ** reason for calculating housing separately just to determine if the housing is x.5 or x.0?
If so, then would it be more prudent to just use the game's own housing function and then determine if there should be a .5 or not?  This would possibly save from having to factor in all of the other aspects involved. This way, worst-case scenario, the housing calculation is only off by 0.5.
Alternatively—or in addition to—you could compare the resulting housing calculation against the game's as a sanity check and, if they differ more than 1.0, fall back to showing the game's value in the UI (maybe prefix it with ~ to indicate that the half-housing calculation isn't known).

@SmithsonianDSP To be precise, to determine if the housing is x.0 or x.y. The game’s routine just returns an integer part. The remainder is atm always 0.5 because there are only “2 tiles required” cases, but is possible to create cases like 2 housing for 3 improvements.
Anyway, in #34 I proposed the same approach as you described.

Still working on this - I have the extension file working for expansion2, got a few things cleaned up and done correctly tonight.
While I'm in here I'm going to move the CityStrike button to above the banner because I tire of not being able to hit the button when I have another unit in the city

Also, based on what the basegame returns for the Mayan farms, it seems the bonus is +1 housing in addition to the 0.5 housing farms already give.  For example when there's 2 farms for a Mayan city, the basegame will report 3 housing from improvements... so that's fixed here:

Also updated the tooltip to show 1.5 housing for the Maya builder

@the-m4a I think moving the bombardment button is an interesting idea, but let's keep that in a separate feature branch? we can review and merge that one independently from the housing changes.

Yep, no problem.  It is a fairly easy change - small chunk of code isolated to a single function.  Hoping to turn this into a full PR today or tomorrow, didn’t have as much time as I thought I would over the weekend

Seasteads are fixed, so I can close this. Anyone wants to leave it open for some reasons?

I just realized I haven't uploaded the changes yet - leave it open until I update the files on the workshop

It's been uploaded, closing this issue


Sometimes model do not respond until user speak some another sentence

I'm using a custom instruction in the model instead of defaults instructions suggestions, and using the model in Brazil Portuguese language.
Sometimes the model freezer in a 'thinking' state and do not respond to user. After some seconds waiting for a response when user says 'keep going' or 'hello, you still there', the model response and keep the chat flow.
This issue is not persistent, in the most case this situation does not happen and the chat (user/model audios) flow and fluence occurs perfectly.
I double-checked my network stability, avoiding any input audio noising and OpenAI API quota to ensure that it is not a network, audio, or quota limit problem.
Follow an example video when the problem occurs:
https://github.com/user-attachments/assets/b1a72b96-feb5-4f7c-8bb6-6e5daef50293
There is anyone with a similar issue?
This is a LiveKit or OpenAI issue?
Regards,
Joselito Ribeiro

are you using OpenAI Realtime API? can you turn on detailed debug logs (--dev) and include the latest logs when the agent freezes?

I think I'm facing exactly the same problem. I am using VoicePipelineAgent. It's a bit hard to reproduce. The easiest way I found to reproduce is to successively interrupt the agent. After X interruptions, it always end up being stuck in thinking state.
As you can see in the logs, it stays more than 30s in thinking state.


pokepaste uploading

I"m trying to figure out how automatically upload teams to pokepaste from the builderbot, but the pokepaste api is hidden, so I'm kinda stuck.

Fixed!


GOBBLIN-930: Add number of topic partitions of a topic in each workunit

Dear Gobblin maintainers,
Please accept this PR. I understand that it will not be reviewed until I have checked off all the steps below!
JIRA

[x] My PR addresses the following Gobblin JIRA issues and references them in the PR title. For example, "[GOBBLIN-XXX] My Gobblin PR"

https://issues.apache.org/jira/browse/GOBBLIN-930

Description

[x] Here are some details about my PR, including screenshots (if applicable):
Adding number of topic partitions of a topic to each workunit, which can be used for workunit size estimation.

Tests

[x] My PR adds the following unit tests OR does not need testing for this extremely good reason:
Trivial change

Commits

[x] My commits all reference JIRA issues in their subject lines, and I have squashed multiple commits if they address the same issue. In addition, my commits follow the guidelines from "How to write a good git commit message":

Subject is separated from body by a blank line
Subject is limited to 50 characters
Subject does not end with a period
Subject uses the imperative mood ("add", not "adding")
Body wraps at 72 characters
Body explains "what" and "why", not "how"

@autumnust Please review.


Send systemd notifications for both server and agent

This issue serves to track the testing of #3430
Original RKE2 issue: https://github.com/rancher/rke2/issues/989
Verification
Start k3s server and verify that there is a wait from the time systemctl start k3s.service is issued to the time the command returns. Same thing needs to be done for the agent, however the wait period is shorter for agent.

This has been previously validated, and confirmed it continues to happen so closing


Remove unix dependency for tests

Allows stack test to build and pass on Windows.

Merge
(Why was it there anyway?)

Not sure how it got there, but just discovered that it breaks tests on windows so it's gone now.


Preserve privacy in e-mail headers

Similar to how the big e-mail providers do it, strip out some personally
identifying information from e-mails.
I have used this on my own e-mail server for a while and it works fine.

Cherry-picked in acd28b0.


sketch is not defined

I get this error:
/Users/konsumer/Desktop/data-locations/node_modules/sketch-api/exposed-npm-package.js:9
module.exports = sketch
                 ^

ReferenceError: sketch is not defined
    at Object.<anonymous> (/Users/konsumer/Desktop/data-locations/node_modules/sketch-api/exposed-npm-package.js:9:18)
    at Module._compile (internal/modules/cjs/loader.js:702:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:713:10)
    at Module.load (internal/modules/cjs/loader.js:612:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:551:12)
    at Function.Module._load (internal/modules/cjs/loader.js:543:3)
    at Module.require (internal/modules/cjs/loader.js:650:17)
    at require (internal/modules/cjs/helpers.js:20:18)
    at Object.<anonymous> (/Users/konsumer/Desktop/data-locations/index.js:1:78)
    at Module._compile (internal/modules/cjs/loader.js:702:30)

from this code:
const api = require('sketch-api')
console.log(api)

Oh I see, I need to make a plugin with this, I can't just arbiltrarilly hook into the running sketch window.

indeed, it's not an npm module, more like a core nodejs module that is provided by sketch. You can var sketch = require('sketch') without installing any npm module. It does work in the "run plugin" panel as well

Yep, totally figured it out by downloading the hello-world example plugin, and scripted a solution to my problem in like 5 minutes. Great lib!


Add ToggleBorderlessWindowed and GetMonitorRefreshRate

Add ToggleBorderlessWindowed function
Add GetMonitorRefreshRate function
Add FLAG_BORDERLESS_WINDOWED_MODE flag to the ConfigFlags
Add members previousPosition and previousScreen to Window - Required for BorderlessWindowed mode support

NOTE: This is untested! (hence Draft status) I haven't been able to successfully build with the new build system. As soon as I am able I will test these changes.
This PR will increase raylib coverage (raylib.h/raymath.h) from 75.29% (at 4c7478e) to 75.59% (0.3% increase).

Latest commit fixes some problems with ToggleBorderlessWindowed and ToggleFullscreen where they would not correctly restore size/position of the window when toggling off.
It also replaces the GetWindowPosition implementation with a more memory safe version and uses it in both functions. The old int[]{} method was not working to store window positions, so this commit uses IntBuffers instead in a try-with-resource block. There is still one remaining use of nglfwGetWindowPosition but that didn't seem to be a drop-in replacement so I have left it for now.

This PR is ready for review. If it is helpful, here is the code I used to test everything:
public class HelloWorld {
    public static void main(String[] args) {
        Raylib rlj = new Raylib();
        rlj.core.InitWindow(800, 600, "Raylib-J Test");

        while (!rlj.core.WindowShouldClose()) {
            rlj.core.BeginDrawing();
            rlj.core.ClearBackground(Color.RAYWHITE);
            rlj.text.DrawText(
                "Congrats! You created your first window!",
                400 - (rlj.text.MeasureText("Congrats! You created your first window!", 20) / 2),
                300,
                20,
                Color.DARKGRAY
            );
            rlj.text.DrawText(
                rlj.core.GetMonitorRefreshRate(0) + "Hz detected",
                400,
                400,
                20,
                Color.DARKGRAY
            );

            if (rlj.core.IsKeyPressed(Keyboard.KEY_B)) {
                rlj.core.ToggleBorderlessWindowed();
            }

            if (rlj.core.IsKeyPressed(Keyboard.KEY_F)) {
                rlj.core.ToggleFullscreen();
            }

            if (rlj.core.IsKeyPressed(Keyboard.KEY_P)) {
                Vector2 pos = rlj.core.GetWindowPosition();
                System.out.println(
                    "Window Position: " + pos.x + ", " + pos.y
                );
            }

            rlj.core.EndDrawing();
        }
    }
}

I'll review when I get home from work! Thanks for your support on the project recently!

I'll review when I get home from work! Thanks for your support on the project recently!

NP! Please feel free to criticise or nit pick or reject, these PRs are unsolicited after all 😅. Let me know if there is any part of the project you'd like some help on.


Travis yml force docker-engine update added

Hello @SergeyPirogov! Thanks for submitting the PR.
Cheers ! There are no PEP8 issues in this Pull Request. :beers:


Remove FileAccess.Reserved in v2.0.0

This is a reminder to remove the deprecated FileAccess.Reserved in the next major release. This is according to the specification in SemVer

As it already is a breaking change in version 1.1.0, I think it is ok to fick this issue in that version to.

We are now following dokany version + patch like: dokany 1.3.0 + patch 0 => <IP_ADDRESS>
This change can be done in the next Dokany minor <IP_ADDRESS>


Scratchpad

Should be it for scratchpad. One more thing to cross off of #2.
Implemente both, move scratchpad and scratchpad show

Code looks good. Will test soon

Good first pass. However, it doesn't match the i3 functionality. Try this from i3:

move scratchpad
scratchpad show
scratchpad show

The second "show" will return the window to the scratchpad.

How to break this:

Move app to scratchpad
workspace right

Fix before merge

should probably add the command to man page aswell.

More rewriting in hope of getting it right, it's now more broken than before. But! workspace next_on_output works correctly now :)
I get the feeling like remove_child should hide a window as long as it's not attached to anything. Container/view visibility is really a pain currently.

Let me know when it's ready for testing/review.

I'll make a new PR when I got it right.


Issues about BKIDefender

I have several questions regarding to the implementation of BKIDefender
First, according to the docstring, it should have a parameter called threshold
https://github.com/thunlp/OpenBackdoor/blob/58dcbdc1d0c81188ddb536d13683a6dcbf742416/openbackdoor/defenders/bki_defender.py#L19
But in fact, no argument needs to be passed according to the definition.
Second, the BKIDefender would never work according to the current logic.
We know that BKIDefender requires a backdoored model to filter the training data, as also reflected in https://github.com/thunlp/OpenBackdoor/blob/58dcbdc1d0c81188ddb536d13683a6dcbf742416/openbackdoor/defenders/bki_defender.py#L32-L44
However, according to the logic of the Attacker, it would not pass the victim model to the defender:
https://github.com/thunlp/OpenBackdoor/blob/58dcbdc1d0c81188ddb536d13683a6dcbf742416/openbackdoor/attackers/attacker.py#L58-L60
And similar to CUBEDefender, BKIDefender should set pre=True but the code does not do that.
In this case, I suggest that the implementation for CUBEDefender and BKIDefender  should be unified.
For example, for their correct method, they should receive an argument for the backdoored model (and also Attacker.attack should have an additional backdoored model argument apart from victim ) instead of using an inside trainer and victim model for the defender

Thank you for pointing this out!
It was indeed a bug, and it's fixed now.

https://github.com/thunlp/OpenBackdoor/blob/18a65d701f5c50d619bacb8d02076b78b0a6e1df/openbackdoor/defenders/bki_defender.py#L45
You forget to import PLMVictim in this file


White letterboxing should be black

Describe the solution you'd like
Letterboxing is white, should be black.
Additional context
https://itch.io/t/257225/020-update-feedback

1307f6d07686ef2eacd9efa8a0e414562082d61c


[E] Error[4]: If_1249_OutputLayer: IIfConditionalOutputLayer inputs must have the same shape.

01/30/2024-18:29:22] [E] Error[4]: If_1249_OutputLayer: IIfConditionalOutputLayer inputs must have the same shape.
[01/30/2024-18:29:22] [E] [TRT] ModelImporter.cpp:773: While parsing node number 1249 [If -> "output"]:
[01/30/2024-18:29:22] [E] [TRT] ModelImporter.cpp:774: --- Begin node ---
[01/30/2024-18:29:22] [E] [TRT] ModelImporter.cpp:775: input: "1593"
output: "output"
name: "If_1249"
op_type: "If"
attribute {
name: "then_branch"
g {
node {
input: "1588"
output: "1595"
name: "Squeeze_1250"
op_type: "Squeeze"
attribute {
name: "axes"
ints: 1
type: INTS
}
}
name: "torch-jit-export1"
output {
name: "1595"
type {
tensor_type {
elem_type: 1
shape {
dim {
dim_param: "Squeeze1595_dim_0"
}
dim {
dim_param: "Squeeze1595_dim_1"
}
dim {
dim_param: "Squeeze1595_dim_2"
}
}
}
}
}
}
type: GRAPH
}
attribute {
name: "else_branch"
g {
node {
input: "1588"
output: "1596"
name: "Identity_1251"
op_type: "Identity"
}
name: "torch-jit-export2"
output {
name: "1596"
type {
tensor_type {
elem_type: 1
shape {
dim {
dim_param: "Squeeze1595_dim_0"
}
dim {
dim_param: "Identity1596_dim_1"
}
dim {
dim_param: "Squeeze1595_dim_1"
}
dim {
dim_param: "Squeeze1595_dim_2"
}
}
}
}
}
}
type: GRAPH
}
[01/30/2024-18:29:22] [E] [TRT] ModelImporter.cpp:776: --- End node ---
[01/30/2024-18:29:22] [E] [TRT] ModelImporter.cpp:779: ERROR: ModelImporter.cpp:180 In function parseGraph:
[6] Invalid Node - If_1249
If_1249_OutputLayer: IIfConditionalOutputLayer inputs must have the same shape.
[01/30/2024-18:29:22] [E] Failed to parse onnx file
[01/30/2024-18:29:22] [I] Finish parsing network model
[01/30/2024-18:29:22] [E] Parsing model failed
[01/30/2024-18:29:22] [E] Failed to create engine from model or file.
[01/30/2024-18:29:22] [E] Engine set up failed
The above error was reported when using onnx model to export to tensorrt engine model. Have you ever encountered it？

Yes i had some problem. I fixed it removing squeeze operation in dpt.py. Copy and paste dpt.py in this repo to <depth_anything_installpath>/depth_anything folder.

Thank you for your reply, I have solved the problem. Now I have a new question. Do you have any ideas?
LLVM ERROR: out of memory
Aborted (core dumped)

I didn't llvm. Where did you get this error?

When I use the model to inference image.
./depth-anything-tensorrt-simplified depth_anything_vits14.engine test.jpg

You may compile on a machine of one architecture but copy all the files to run on a machine of another architecture. You can try just to remove the build folder or reclone the whole repository and then rebuild it. If it doesn't work you should consider checking out the configuration of environment variables.

I build this program on the linux side. Do you run it successfully on the linux side？

Thanks, I solved the problem, I did not infer the image it can be used normally, maybe there is a problem with my internal library.


fix modules.yaml to make test work.

The test will not work if modules.yaml is wrong, modify the modules.yaml file to make test work.

@lmxia  Thanks for the fix! Now beehive is in kubeedge/kubeedge/staging/src/github.com/kubeedge/beehive, and the PR should send to kubeedge/kubeedge, we will sync the commits here.
Would you like raise a pr in kubeedge/kubeedge/staging/src/github.com/kubeedge/beehive? And now we add the Enable func in every modules, so you need to add the Enable func to every module and delete the config files.  https://github.com/kubeedge/kubeedge/blob/master/staging/src/github.com/kubeedge/beehive/pkg/core/module.go#L16

@fisherxu  sure.
https://github.com/kubeedge/kubeedge/pull/1588 please check and review.

@fisherxu sure.
kubeedge/kubeedge#1588 please check and review.

I think we can close this one now :) @lmxia


BL-6138 Trace ID added to the main logs

What are the relevant Jira tickets?
BL-6138
Where should the reviewer start?
main.js
Trace id is readed from http header x-moth-trace-id field.
Log examples with trace id received from local MOTH:
{
   "name":"NotSet",
   "env":"NotSet",
   "functionName":"NotSet",
   "functionVersion":"NotSet",
   "level":"error",
   "context":{
...
   },
   "traceId":"1-1510949885-5a0f43fdcd531",
   "msg":"SMMT communication issue.",
   "time":"2017-11-17T20:18:05.877Z",
   "v":0
}

{
   "name":"NotSet",
   "env":"NotSet",
   "functionName":"NotSet",
   "functionVersion":"NotSet",
   "traceId":"1-123123-123123123123",
   "level":"info",
   "context":{
      "make":"BMW",
      "vin":"12345",
      "recall":{
         "success":true,
         "errors":[

         ],
         "description":"No Recall Outstanding",
         "status":"",
         "lastUpdate":"19022015"
      }
   },
   "msg":"Recall fetched successfully.",
   "time":"2017-11-20T12:21:40.244Z",
   "v":0
}

Dev checklist:

Is proper destination branch selected?
Are proper label and reviewers selected?
Has code been tested manually?
Has code been covered by unit tests?
Are unit test executed on Jenkins during pull request build?
Do all unit tests pass?
Is Jira ticket state updated?

Code review checklist (for reviewers -> Copy to your comment)

Is proper destination branch selected?
Are proper label and reviewers selected?
Do you understand task goal and business context?
Is documentation updated and understandable?
Has code been covered by unit tests?
Did you identify technical issues/debt and reported it to TA?
Does code meet SOLID principles?
Does code meet DRY principle?
Is code in better state than before (scout rule)?

Logger is injected and all logs will now contain traceId field

New commits deliver logger injection and from now all logs will contain trace ID field fetched from request header.


Metric idea: Communication Inclusivity in Event Focus Area

CHAOSS D&I Badging recently had a Pilot Testing phase.
During that time, @ElizabethN opened an issue for providing feedback for the process, which lives here - https://github.com/badging/event-diversity-and-inclusion/issues/8
A particular fraction of the feedback contained these questions that can be asked to a CHAOSS Badging Applicant:
  - is the event website accessible for visually and hearing impaired folks?
  - is the venue wheelchair friendly?
  - are there sign language interpreters or closed captioning available?
  - are there resources for visually impaired folks? (Volunteers to assist as guides, alternative versions of schedules in Braille or available besides just online?)

This part of the feedback can possibly be looked into and expanded upon to create a new Event focus area metric about how the talks and other conference material can be made more accessible.

These are encompassed in our Event Accessibility Metric.


Possible to use "true" .sass?

I'd like to use .sass not SCSS. I gave it a try by importing a file called "grid.sass" but this causes the theme file to not load without any errors on slate command line.
Any suggestions? Is it possible? I'd really prefer .SASS as the syntax is cleaner.
Great work!

I was able to solve this by use theme watch on a compiled version, and using code kit to compile my sass.


improve http-dependencies documentation #1341

Try to improve documentation as requested in https://github.com/fsprojects/Paket/issues/1341

Minimum change that might work.

awesome. thx