koord-descheduler: enhance LowNodeLoad scorer

Ⅰ. Describe what this PR does

What is your proposal:
When descheduler evaluates which pod to expel to reduce the utilization of high-load nodes to a reasonable level, can descheduler perform matching calculations on the actual usage of the pod and the amount of eviction resources in advance?
Why is this needed:
This can reduce the number of times a single node is repeatedly entered into the eviction logical unit, reduce the number of single node eviction instances, and indirectly improve the accuracy of the eviction results and the stability of the business while ensuring that hot issues are solved.
Is there a suggested solution, if so, please add it:
evict pod priority selector：podNowResourceUsages >= nodeNowResourceUsages - nodeHighResourceThresholds * nodeResourceAllocatable
Ⅱ. Does this pull request fix one issue?
issue链接：https://github.com/koordinator-sh/koordinator/issues/1975

Ⅲ. Describe how to verify it
I added unit tests
Ⅳ. Special notes for reviews
none
V. Checklist
✅ I have written necessary docs and comments
✅ I have added necessary unit tests and integration tests
✅ All checks passed in make test

@eahydra 你好，E2E-k8s-1.22 中日志显示：I0608 08:49:27.601454       1 leaderelection.go:285] failed to renew lease koordinator-system/koordinator-manager: timed out waiting for the condition
似乎这个错误并不是我引起的，请问有什么解决办法吗？

/assign @eahydra Hi, eahydra, E2E-k8s-1.22 log shows: I0608 08:49:27.601454 1 leaderelection.go:285] failed to renew lease koordinator-system/koordinator-manager: timed out waiting for the condition
It seems that this error is not caused by me. Is there any solution?

/assign @eahydra

/assign @FillZpp

/assign @ZiMengSheng

/assign @songtao98

@saintube hi,The tide process seems to be stuck, what information do I need to add to move the process forward?

Agreed, eviction based solely on the maximum usage of pods will indeed lead to stability problems. The simplest scenario is that after the pod with the largest usage is evicted, few nodes in the scheduler can meet its resource usage requirements, and pending becomes the norm. Even if it can be scheduled on certain nodes, the single-machine hotspot problem is more likely to be triggered during peak usage of multiple pods. Therefore, I agree that this should be addressed by evicting pods whose usage is just enough to meet demand, rather than simply based on maximum usage.

@ZiMengSheng hi,The tide process seems to be stuck, what information do I need to add to move the process forward?
@songtao98 hi,The tide process seems to be stuck, what information do I need to add to move the process forward?

@saintube @eahydra Could you please arrange for a classmate to follow up on this PR? It is currently affecting the stability of our business on the internal cluster. Thank you all.

@saintube @eahydra Could you please arrange for a classmate to follow up on this PR? It is currently affecting the stability of our business on the internal cluster. Thank you all.

@LY-today I'm reviewing this and sorry for the delay. Plesae wait a little bit, I'll do my best and review it ASAP.

@ZiMengSheng hi,The tide process seems to be stuck, what information do I need to add to move the process forward? @songtao98 hi,The tide process seems to be stuck, what information do I need to add to move the process forward?

No more other things to do for now, just need a review and approval.

@saintube @eahydra Could you please arrange for a classmate to follow up on this PR? It is currently affecting the stability of our business on the internal cluster. Thank you all.

@LY-today I'm reviewing this and sorry for the delay. Plesae wait a little bit, I'll do my best and review it ASAP.

thank you for your reply

Agreed, eviction based solely on the maximum usage of pods will indeed lead to stability problems. The simplest scenario is that after the pod with the largest usage is evicted, few nodes in the scheduler can meet its resource usage requirements, and pending becomes the norm. Even if it can be scheduled on certain nodes, the single-machine hotspot problem is more likely to be triggered during peak usage of multiple pods. Therefore, I agree that this should be addressed by evicting pods whose usage is just enough to meet demand, rather than simply based on maximum usage.

Yes, we seem to have the same problem scenario

@LY-today Please check and resolve my review comment here: https://github.com/koordinator-sh/koordinator/pull/2092#discussion_r1635799998.
To be short, prodLowThreshold and prodHighThreshold is just like lowThreshold and highThreshold but only counting the usage of Prod pods. This is used to balance the prod pods distribution. The newest logic is first balance pods on nodes that are overutilized by highThreshold and then balance pods on nodes that are just overutilized by prodHighThreshold.
When we are doing this, the function sortPodsOnOneOverloadedNode is called in function balancePods. balancePods has an arg prod bool and is called first as balancePods(prod: false) then balancePods(prod: true). You can see the related code lines.
I suggest you add an arg prod bool in sortPodsOnOneOverloadedNode too. And pass the value of prod of balancePods to it. If prod is true, you should call usedCopy.Sub(*srcNode.thresholds.prodHighResourceThreshold[or]) in sortPodsOnOneOverloadedNode. This what I need you to modify.
If any further problems, feel free to comment me. :)

@LY-today Please check and resolve my review comment here: https://github.com/koordinator-sh/koordinator/pull/2092#discussion_r1635799998.
To be short, prodLowThreshold and prodHighThreshold is just like lowThreshold and highThreshold but only counting the usage of Prod pods. This is used to balance the prod pods distribution. The newest logic is first balance pods on nodes that are overutilized by highThreshold and then balance pods on nodes that are just overutilized by prodHighThreshold.
When we are doing this, the function sortPodsOnOneOverloadedNode is called in function balancePods. balancePods has an arg prod bool and is called first as balancePods(prod: false) then balancePods(prod: true). You can see the related code lines.
I suggest you add an arg prod bool in sortPodsOnOneOverloadedNode too. And pass the value of prod of balancePods to it. If prod is true, you should call usedCopy.Sub(*srcNode.thresholds.prodHighResourceThreshold[or]) in sortPodsOnOneOverloadedNode. This what I need you to modify.
If any further problems, feel free to comment me. :)

@LY-today Please check and resolve my review comment here: https://github.com/koordinator-sh/koordinator/pull/2092#discussion_r1635799998.
To be short, prodLowThreshold and prodHighThreshold is just like lowThreshold and highThreshold but only counting the usage of Prod pods. This is used to balance the prod pods distribution. The newest logic is first balance pods on nodes that are overutilized by highThreshold and then balance pods on nodes that are just overutilized by prodHighThreshold.
When we are doing this, the function sortPodsOnOneOverloadedNode is called in function balancePods. balancePods has an arg prod bool and is called first as balancePods(prod: false) then balancePods(prod: true). You can see the related code lines.
I suggest you add an arg prod bool in sortPodsOnOneOverloadedNode too. And pass the value of prod of balancePods to it. If prod is true, you should call usedCopy.Sub(*srcNode.thresholds.prodHighResourceThreshold[or]) in sortPodsOnOneOverloadedNode. This what I need you to modify.
If any further problems, feel free to comment me. :)

@LY-today Please check and resolve my review comment here: #2092 (comment).
To be short, prodLowThreshold and prodHighThreshold is just like lowThreshold and highThreshold but only counting the usage of Prod pods. This is used to balance the prod pods distribution. The newest logic is first balance pods on nodes that are overutilized by highThreshold and then balance pods on nodes that are just overutilized by prodHighThreshold.
When we are doing this, the function sortPodsOnOneOverloadedNode is called in function balancePods. balancePods has an arg prod bool and is called first as balancePods(prod: false) then balancePods(prod: true). You can see the related code lines.
I suggest you add an arg prod bool in sortPodsOnOneOverloadedNode too. And pass the value of prod of balancePods to it. If prod is true, you should call usedCopy.Sub(*srcNode.thresholds.prodHighResourceThreshold[or]) in sortPodsOnOneOverloadedNode. This what I need you to modify.
If any further problems, feel free to comment me. :)

and also, remember to check and modify related code carefully. I'll re-review this PR after your modification. About the failed checking of lint and unit-test, I'm fixing it in #2103 .
After all, remember to rebase all commits in your PR and just keep only 1 commit.

@LY-today Please check and resolve my review comment here: #2092 (comment).
To be short, prodLowThreshold and prodHighThreshold is just like lowThreshold and highThreshold but only counting the usage of Prod pods. This is used to balance the prod pods distribution. The newest logic is first balance pods on nodes that are overutilized by highThreshold and then balance pods on nodes that are just overutilized by prodHighThreshold.
When we are doing this, the function sortPodsOnOneOverloadedNode is called in function balancePods. balancePods has an arg prod bool and is called first as balancePods(prod: false) then balancePods(prod: true). You can see the related code lines.
I suggest you add an arg prod bool in sortPodsOnOneOverloadedNode too. And pass the value of prod of balancePods to it. If prod is true, you should call usedCopy.Sub(*srcNode.thresholds.prodHighResourceThreshold[or]) in sortPodsOnOneOverloadedNode. This what I need you to modify.
If any further problems, feel free to comment me. :)

@LY-today Please check and resolve my review comment here: #2092 (comment).
To be short, prodLowThreshold and prodHighThreshold is just like lowThreshold and highThreshold but only counting the usage of Prod pods. This is used to balance the prod pods distribution. The newest logic is first balance pods on nodes that are overutilized by highThreshold and then balance pods on nodes that are just overutilized by prodHighThreshold.
When we are doing this, the function sortPodsOnOneOverloadedNode is called in function balancePods. balancePods has an arg prod bool and is called first as balancePods(prod: false) then balancePods(prod: true). You can see the related code lines.
I suggest you add an arg prod bool in sortPodsOnOneOverloadedNode too. And pass the value of prod of balancePods to it. If prod is true, you should call usedCopy.Sub(*srcNode.thresholds.prodHighResourceThreshold[or]) in sortPodsOnOneOverloadedNode. This what I need you to modify.
If any further problems, feel free to comment me. :)

and also, remember to check and modify related code carefully. I'll re-review this PR after your modification. About the failed checking of lint and unit-test, I'm fixing it in #2103 .
After all, remember to rebase all commits in your PR and just keep only 1 commit.

Received, I am now compatible

@songtao98 Local make test, the feedback is successful, but the CI link is abnormal. Can it be re-executed manually?

@songtao98 Local make test, the feedback is successful, but the CI link is abnormal. Can it be re-executed manually?

I noticed that was caused by lint check. You can run make test, make lint, etc. on your local env to make sure that your commit can pass the checks. Check the make file and you can see what we need.

There is a typo in your PR's title. Consider modify it as koord-descheduler: enhance LowNodeLoad scorer

@LY-today There is a typo in your PR's title. Consider modify it as koord-descheduler: enhance LowNodeLoad scorer

done

@songtao98 All have been modified and passed the CI stage, please check

/lgtm
@LY-today You can mark all conversations as resolved. Then we can continue to merge this PR.

/lgtm @LY-today You can mark all conversations as resolved. Then we can continue to merge this PR.

How do I mark it as resolved?

/lgtm @LY-today You can mark all conversations as resolved. Then we can continue to merge this PR.

How do I mark it as resolved?

@songtao98 done

/lgtm @LY-today You can mark all conversations as resolved. Then we can continue to merge this PR.

How do I mark it as resolved?

@songtao98 done

@songtao98 What other links do we need to continue to promote the progress of PR integration?

/lgtm @LY-today You can mark all conversations as resolved. Then we can continue to merge this PR.

How do I mark it as resolved?

@songtao98 done

@songtao98 What other links do we need to continue to promote the progress of PR integration?

An approved label needed. Maintainers will soon do final check ASAP and if no other problems, this PR will be approved and auto-merged.

/lgtm @LY-today You can mark all conversations as resolved. Then we can continue to merge this PR.

How do I mark it as resolved?

@songtao98 done

@songtao98 What other links do we need to continue to promote the progress of PR integration?

An approved label needed. Maintainers will soon do final check ASAP and if no other problems, this PR will be approved and auto-merged.

Received, please work hard and push forward as soon as possible, thank you

/lgtm @LY-today You can mark all conversations as resolved. Then we can continue to merge this PR.

How do I mark it as resolved?

@songtao98 done

@songtao98 What other links do we need to continue to promote the progress of PR integration?

An approved label needed. Maintainers will soon do final check ASAP and if no other problems, this PR will be approved and auto-merged.

Received, thank you for your hard work. We hope to speed up the progress and solve the online problems of our cluster.

/lgtm @LY-today You can mark all conversations as resolved. Then we can continue to merge this PR.

How do I mark it as resolved?

@songtao98 done

@songtao98 What other links do we need to continue to promote the progress of PR integration?

An approved label needed. Maintainers will soon do final check ASAP and if no other problems, this PR will be approved and auto-merged.

Received, thank you for your hard work. We hope to speed up the progress and solve the online problems of our cluster.

@songtao98 Hello, are there any plans to advance this PR today?

PTAL @hormes

/lgtm

/approve

[APPROVALNOTIFIER] This PR is NOT APPROVED
This pull-request has been approved by: ZiMengSheng To complete the pull request process, please ask for approval from eahydra after the PR has been reviewed.
The full list of commands accepted by this bot can be found here.
Needs approval from an approver in each of these files:

pkg/descheduler/OWNERS

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

@eahydra Thank you for your hard work, please review

[APPROVALNOTIFIER] This PR is NOT APPROVED
This pull-request has been approved by: ZiMengSheng To complete the pull request process, please ask for approval from eahydra after the PR has been reviewed.
The full list of commands accepted by this bot can be found here.
Needs approval from an approver in each of these files:

pkg/descheduler/OWNERS

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

@hormes Please check out this PR and let's work together to solve the problem


remove getHandle in UnitreeHW::read

I would like to express my gratitude for the wonderful framework you have shared with the community. It has been instrumental in advancing my project.
I am currently working on implementing two distinct, self-defined ROS controllers to control separate groups of joints. But this would cause resource conflict in ros control manager, the error information would be like:
[ WARN] [1723711230.086462426]: Resource conflict on [left_ankle_joint].  Controllers = [controllers/init_joint_pos_controller, controllers/upper_joint_controller, ]
[ WARN] [1723711230.086604701]: Resource conflict on [left_elbow_joint].  Controllers = [controllers/init_joint_pos_controller, controllers/upper_joint_controller, ]
[ WARN] [1723711230.086661049]: Resource conflict on [left_hip_pitch_joint].  Controllers = [controllers/init_joint_pos_controller, controllers/upper_joint_controller, ]
[ WARN] [1723711230.086710601]: Resource conflict on [left_hip_roll_joint].  Controllers = [controllers/init_joint_pos_controller, controllers/upper_joint_controller, ]
[ WARN] [1723711230.086752277]: Resource conflict on [left_hip_yaw_joint].  Controllers = [controllers/init_joint_pos_controller, controllers/upper_joint_controller, ]
[ WARN] [1723711230.086901553]: Resource conflict on [left_knee_joint].  Controllers = [controllers/init_joint_pos_controller, controllers/upper_joint_controller, ]
[ WARN] [1723711230.086953870]: Resource conflict on [left_shoulder_pitch_joint].  Controllers = [controllers/init_joint_pos_controller, controllers/upper_joint_controller, ]
[ WARN] [1723711230.086997766]: Resource conflict on [left_shoulder_roll_joint].  Controllers = [controllers/init_joint_pos_controller, controllers/upper_joint_controller, ]
[ WARN] [1723711230.087036690]: Resource conflict on [left_shoulder_yaw_joint].  Controllers = [controllers/init_joint_pos_controller, controllers/upper_joint_controller, ]
[ WARN] [1723711230.087073432]: Resource conflict on [not_use_joint].  Controllers = [controllers/init_joint_pos_controller, controllers/upper_joint_controller, ]
[ WARN] [1723711230.087122926]: Resource conflict on [right_ankle_joint].  Controllers = [controllers/init_joint_pos_controller, controllers/upper_joint_controller, ]
[ WARN] [1723711230.087178554]: Resource conflict on [right_elbow_joint].  Controllers = [controllers/init_joint_pos_controller, controllers/upper_joint_controller, ]
[ WARN] [1723711230.087232702]: Resource conflict on [right_hip_pitch_joint].  Controllers = [controllers/init_joint_pos_controller, controllers/upper_joint_controller, ]
[ WARN] [1723711230.087275688]: Resource conflict on [right_hip_roll_joint].  Controllers = [controllers/init_joint_pos_controller, controllers/upper_joint_controller, ]
[ WARN] [1723711230.087315841]: Resource conflict on [right_hip_yaw_joint].  Controllers = [controllers/init_joint_pos_controller, controllers/upper_joint_controller, ]
[ WARN] [1723711230.087356746]: Resource conflict on [right_knee_joint].  Controllers = [controllers/init_joint_pos_controller, controllers/upper_joint_controller, ]
[ WARN] [1723711230.087425316]: Resource conflict on [right_shoulder_pitch_joint].  Controllers = [controllers/init_joint_pos_controller, controllers/upper_joint_controller, ]
[ WARN] [1723711230.087476459]: Resource conflict on [right_shoulder_roll_joint].  Controllers = [controllers/init_joint_pos_controller, controllers/upper_joint_controller, ]
[ WARN] [1723711230.087515868]: Resource conflict on [right_shoulder_yaw_joint].  Controllers = [controllers/init_joint_pos_controller, controllers/upper_joint_controller, ]
[ WARN] [1723711230.087555049]: Resource conflict on [torso_joint].  Controllers = [controllers/init_joint_pos_controller, controllers/upper_joint_controller, ]
[ERROR] [1723711230.087743598]: Could not switch controllers, due to resource conflict

More details can be found in my forked version: https://github.com/zitongbai/bipedal_control/issues/3
Upon further examination, I found that the calling of the getHandle("handle_name") function of HybridJointInterface would claim the "handle_name" resource, which can be referred here:
https://github.com/ros-controls/ros_control/blob/6b9fd8b3605e047ae1b925857c92998074c803c4/hardware_interface/include/hardware_interface/internal/hardware_resource_manager.h#L65-L70
And I found that the getHandle function is called in UnitreeHW::read, which causes all the joints resources are claimed each time UnitreeHW::read is invoked, no matter whether they are used in the controller:
https://github.com/qiayuanl/legged_control/blob/715cc5327e7f4af0531b22e83844dcf569919126/legged_examples/legged_unitree/legged_unitree_hw/src/UnitreeHW.cpp#L85-L92
Of course, it poses no issues in the context of a single controller implementation. But it will cause some trouble when attempting to operate multiple controllers concurrently, which may be essential for further development.
Furthermore, I have yet to conduct real-world experiments to validate this behavior. It would be highly beneficial to have this aspect confirmed through practical testing :)

Hi, thanks for your contribution, I think you are right. I left some details comments for the code. In addition, can you use clang-format for your code with this configuration so I can merge it into the master repo?


Generic Pass Upcoming Notifications  .NET Core

Greetings, I have successfully integrated the google wallet API in my .NET Core application and used the generic pass template.
I need to know how to implement the upcoming notifications feature in it, I have seen the official wallet documentation but couldn't figure it out if anyone has implemented it. I really appreciate any help I can get.

Hello,
Congratulations on integrating Google Wallet into your application :)
There are two main properties that must be set in a pass object to enable upcoming notifications:

genericobject.notifications
genericobject.validTimeInterval

There are a couple important things to consider when setting these:

This is configured on the pass object, not on the pass class.
Make sure to specify the fully-qualified class for any Google.Apis.Walletobjects.v1.Data.DateTime fields (so they aren't confused with System.DateTime).
In the notifications configuration, expiryNotification takes precedence over upcomingNotification. If you plan to set expiryNotification, setting upcomingNotification will have no effect.
The start property of validTimeInterval must be set for upcomingNotification to work.
Including an offset in the value of the start property will make it a specific time across the entire world. If you do not include an offset, the time will be for the local time zone the pass holder is in.

I've included a basic generic pass object definition below that includes the needed settings. Please give it a try and let me know if you run into any trouble!
GenericObject genericObject = new GenericObject
{
  Id = $"{issuerId}.{objectSuffix}",
  ClassId = $"{issuerId}.{classSuffix}",
  CardTitle = new LocalizedString
  {
    DefaultValue = new TranslatedString
    {
      Language = "en-US",
      Value = "Demo GenericObject Notifications"
    }
  },
  Header = new LocalizedString
  {
    DefaultValue = new TranslatedString
    {
      Language = "en-US",
      Value = "DboukAli98"
    }
  },
  Notifications = new Notifications
  {
    UpcomingNotification = new UpcomingNotification
    {
      EnableNotification = true
    }
  },
  ValidTimeInterval = new TimeInterval
  {
    Start = new Google.Apis.Walletobjects.v1.Data.DateTime
    {
      Date = "2022-11-15T10:30:00.00"
    }
  }
};

Thank you very much  @ncalteen !
One last question what is the AddMessage property in Loyalty Pass ? I'll be glad to know more , because the official documentation is really ambiguous .
Thanks once again for your help,

And another thing can upcoming notifications be customized or they are not customizable?

I'm happy to help! :)
The AddMessage method lets you add text data to pass details. You can add messages either to classes or objects. Adding a message to a class will affect all pass holders, while adding a message to an object affects only the user(s) who have that specific object in their wallet.
When you add a message to a pass, it appears in the pass details section. I made a very simple example below. In this case, I have a loyalty card for my coffee shop (if only I could fit one in my office...) and want to let users know I have a new mocha available. I can add this message so it will appear in my pass details.
From the user's point of view, they will first open their pass in Google Wallet:

Next, they will select Details and see the new message I added.

The code to do this for a pass object is below. I'd recommend including an ID in the message so that they can be managed more easily, and making sure that the ID is not one that would likely be duplicated later (if this is something you plan to do).
AddMessageRequest request = new AddMessageRequest
{
  Message = new Message
  {
    Id = "2022-11-15_MochaAnnouncement",
    Body = "Try our new Mocha today!"
  }
};

Stream responseStream = DemoLoyalty.service.Loyaltyobject
            .Addmessage(request, $"{issuerId}.{objectSuffix}")
            .ExecuteAsStream();
StreamReader responseReader = new StreamReader(responseStream);
JObject jsonResponse = JObject.Parse(responseReader.ReadToEnd());

Console.WriteLine("Message insert response");
Console.WriteLine(jsonResponse.ToString());

To answer your second question, notification text can't be customized currently. The specific text will always be:

Upcoming notification: genericObject.cardTitle is available now
Expiry notification: genericObject.cardTitle expires in [x] days

Thanks very much @ncalteen  you really cleared the path!


Web: Format files.go when it is built.

This will avoid unrelated changes appearing
when you do a make fmt.
@juliusv

:+1:

How about just ignoring it in https://github.com/prometheus/prometheus/blob/master/Makefile#L76. The generated bit there isn't needed anymore.

meh - gofmt all the way!

Hm, ok.

I mean, unless you feel strongly about it. Last time we were discussing whether generated Go code should have proper comments everywhere so having it formatted seems reasonable.

Nah, it's fine. We just need to clean some stuff up from the make format in the Makefile. I'll do that.


fix: Fix the typo comment

Please provide a description of this PR:
Fix the typo comment

/ok-to-test


@conda-forge-admin,please add bot automerge

Additional comment:
No response

Hi! This is the friendly automated conda-forge-webservice.
I just wanted to let you know that I added bot automerge in conda-forge/dvc-azure-feedstock#4.


Non UI Projects as .netstandard2.0 libraries

Solves Issue 1479
Checklist

[ ] I have included examples or tests: No example needed. Solution must compile. Unit tests and DemoMap can be used
[ ] I have updated the change log : Yes
[ ] I am listed in the CONTRIBUTORS file : Yes
[ ] I have cleaned up the commit history (use rebase and squash) : Yes

Changes proposed in this pull request:
Projects that are not UI Projects are converted to .netstandard 2.0 libraries
These can be flexibly used in

Other netstandard libraries
NET 6 libraries and applications
NET Framwork 4.8 libraries and applications

Note that some unit tests in OpenFileThrowsRightException fail because of Assertion in AttributeTable.Open
But this happened also before this change (should be another issue)

I added a commit that switches also GdalExtension to netstandard

@UliEgger build failed

I reverted my last change again. It was not correct since the project depends on .net 6 project DotSpatial.Controls

We would need new adaptions because of Commit  5c7dbe931466411e5ca7e4a3d62da20bddc0e868
System.Range is not supported in a .netstandard project without declaring System.Range and System.Index
There would be a way as proposed here
https://www.meziantou.net/how-to-use-csharp-8-indices-and-ranges-in-dotnet-standard-2-0-and-dotn.htm
But since it is only one line of code affected, it seems to be easier to use the old syntax for this line.

Seems we should merge this before we do anything else so we don't create more things you'll have to revert. But I sure don't like being forced to stick to old syntax.

Seems we should merge this before we do anything else so we don't create more things you'll have to revert. But I sure don't like being forced to stick to old syntax.

I will ask my team about the best way to allow this new language features within netstandard projects.


://google/link/?is_weak_match=1 when opening app normally in simulator

Hello,
We are experiencing an issue with Dynamic Links. Passing in and parsing REAL dynamic links works fine for us and we are thrilled that they are, as they're a powerful tool. However, we're noticing that on app startup, even though we're just launching the app regularly through Xcode, that a <my-app-scheme>://google/link/?is_weak_match=1 link is being passed to the openURL method. This invokes our attempt to parse, etc...
Right now we added some error handling to just resume the app normally if the link is not parseable, however this is not ideal as it means that the user has no idea if the link worked. If we add an alert, then every user will get that alert whether or not they attempted to open the app from a Dynamic Link.
Any ideas?

@matcartmill I found a reference to this issue (I've also noticed this)
https://github.com/firebase/firebase-ios-sdk/issues/233#issuecomment-327863307
Hope that helps.

cc @OleksiyA

What ended up being my problem, is that I wasn't parsing the dynamic link properly in the scenario where I've clicked on the dynamic link, then installed (via app store, or launched via simulator).
per the docs:
https://firebase.google.com/docs/dynamic-links/ios/receive#open-dynamic-links-in-your-app

func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
  let dynamicLink = DynamicLinks.dynamicLinks()?.dynamicLink(fromCustomSchemeURL: url)
  if let dynamicLink = dynamicLink {
    // Handle the deep link. For example, show the deep-linked content or
    // apply a promotional offer to the user's account.
    // ...
    return true
  }

  return false
}

the line let dynamicLink = DynamicLinks.dynamicLinks()?.dynamicLink(fromCustomSchemeURL: url) parsed it correctly, and also acknowledged the server that I've opened it.  W/o that line, I would get the link passeed in on every launch.
Hope that helped

@matcartmill Sorry for late update.
FDL iOS SDK will pass found dynamic link to your App when dynamic link is found. If dynamic link is not found, you will see link similar to ://google/link/?is_weak_match=1. This link notifies your App that FDL tried to find pending dynamic link but did not found any.
Best way to handle this case:
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
  let dynamicLink = DynamicLinks.dynamicLinks()?.dynamicLink(fromCustomSchemeURL: url)
  if let dynamicLink = dynamicLink {
    if let deepLink = dynamicLink.url {
      // Handle the deep link. For example, show the deep-linked content or
      // apply a promotional offer to the user's account.
      // ...
    } else {
      // dynamic link is not available or error occurred
    }
    return true
  }
  return false
}


Track Puma master changes to stats method

Follow-up to https://github.com/yob/puma-plugin-statsd/pull/14 :) changes were undone in https://github.com/puma/puma/pull/2253

Thanks!


onnx

An error occurred while converting　：：onnx
ValueError: Unable to find out a correct type for tensor type = 20 of normalization/Reshape/ReadVariableOp/resource:0

i have same issue, and do you find ways to deal with it


Missing file in precompiled windows package?

Hi,
We've upgrading from Ospray 2.4 to 2.8.  In the 2.4 bundle, there is a file named openvkl_module_ispc_driver.dll that does not exist in the 2.8 bundle.  Our build on VisualStudio 2019 is failing, supposedly due to this missing file.
I don't see this file referenced anywhere in our configuration, so I'm wondering if it's missing from the Windows .zip, linked here.
The VS2019 error message is below.  Thank you!
29>CPack: Create package using NSIS
29>CPack: Install projects
29>CPack: - Install project: VAPOR3 [Release]
29>CPack: -   Install component: Dependencies
29>CMake Error at C:/Users/pearse/VAPOR/build/cmake_install.cmake:36 (file):
29>  file INSTALL cannot find
29>  "C:/2019-Aug/Ospray/bin/openvkl_module_ispc_driver.dll": No such file or
29>  directory.

In v2.8 the file is named openvkl_module_cpu_device.dll. Is that error coming from VAPOR's CMake files? In OSPRay we have renamed it already: cmake/ospray_redistribute_deps.cmake.


Add custom CSS for cell wrapping and no-scrolling in demo table

This enables word-wrapping in the demo tables (in all tables, in fact) so that they don't take up so much horizontal room. In addition, it allows the table to overflow the right margin of the docs, so that there's no scrolling required on large screens. (This tries to use a media query, so that only the table scrolls on a small/narrow screen, not the whole page.)

Rendered top level index: https://stellargraph--1456.org.readthedocs.build/en/1456/demos/index.html#find-a-demo-for-an-algorithm

Rendered sub-index (node classification): https://stellargraph--1456.org.readthedocs.build/en/1456/demos/node-classification/index.html

See: #1418

This landed in #1472.


Fix test description in coordinate-transformation

In the previous test description we state that the "correct" order is g(f(x)). Since the order should be the opposite in the description being fixed, it should be f(g(x))
  test('should compose in the correct order: g(f(x))', () => {
    const composed = composeTransform(scaler, translator);
    expect(composed(0, 0)).toEqual([-6, 10]);
  });

  test('should compose in the opposite order: f(g(x))', () => {
    const composed = composeTransform(translator, scaler);
    expect(composed(0, 0)).toEqual([-18, 20]);
  });

Thanks! You are correct :)


link tags should not be closed

Hey,
I noticed that link tags rendered with helmet are self-closed with a slash at the end like all valid HTML tags should be but apparently, they should leave open.
when the browser reads those tags he automatically fixes those tags and removes slash from them which create inconsistency between server and client which according to google "SEO experts" might affect somehow on what google reads...
for example canonical link tag looks like this:
current behavior:
server:
<link rel="canonical" href="url" />

client:
<link rel="canonical" href="url">

expected behavior:
server:
<link rel="canonical" href="url">

client:
<link rel="canonical" href="url">

Both formats are valid syntax. Google is smart to handle such things.


Find a better QR generator library

We currently utilize a library called @vkontakte/vk-qr but it is not well maintained. We should find a better alternative (maybe smth like https://github.com/rosskhanas/react-qr-code)

I had to change the size of the QR code so I just swapped it for the new library while I was doing it.

This work was included in https://github.com/leather-wallet/extension/pull/5176/


update redux-mock-store documentation

I have updated https://github.com/arnaudbenard/redux-mock-store to be framework agnostic and have less errors.
This PR updates the documentation with the new syntax.

Thanks!


Usage should indicate default centerline method

sorry i didn't see the "default value...". Which also suggests that we really need to work on our parser formatting (very difficult to read on a 80-column terminal).
anyways, i agree with your first suggestion.


[Bug][Helm] fix image.registry

Purpose of the pull request

close #15804

Brief change log

Verify this pull request

This pull request is code cleanup without any test coverage.
(or)
This pull request is already covered by existing tests, such as (please describe tests).
(or)
This change added tests and can be verified as follows:

(or)
If your pull request contain incompatible change, you should also add it to docs/docs/en/guide/upgrede/incompatible.md

Codecov Report
All modified and coverable lines are covered by tests :white_check_mark:

Project coverage is 39.49%.  Consider uploading reports for the commit a21e983 to get more accurate results

Additional details and impacted files
@@             Coverage Diff              @@
##                dev   #15860      +/-   ##
============================================
- Coverage     39.57%   39.49%   -0.08%
+ Complexity     5010     4988      -22
============================================
  Files          1347     1347
  Lines         45629    45594      -35
  Branches       4890     4867      -23
============================================
- Hits          18057    18008      -49
- Misses        25648    25661      +13
- Partials       1924     1925       +1

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.


Cannot combine adjacent partial and final AggregateExecs into a single AggregateExec

Describe the bug
It seems a optimizer cannot combine adjacent partial and final AggregateExecs into a single AggregateExec. Because a EnforceDistribution rule which runs before a CombinePartialFinalAggregate rule inserts a RepartitionExec for hashing between adjacent partial and final AggregateExecs.
To Reproduce
No response
Expected behavior
A optimizer should combine adjacent partial and final AggregateExecs, if possible.
Additional context
No response

A optimizer should combine adjacent partial and final AggregateExecs, if possible.

I agree it should combine the adjacent aggregators if possible. One reason it may not be combining them is to increase parallelism as the initial partial AggregateExec runs in parallel on the raw data stream and then the second final AggregateExec runs after the initial pass has run.
This is partly illustrated here
https://docs.rs/datafusion/latest/datafusion/logical_expr/trait.Accumulator.html#tymethod.state
If you can share an EXPLAIN PLAN showing what you are seeing and we can perhaps help diagnose if there is an improvement to make in DataFusion or if something else is going on

I think this is expected behavior. Closing it.
Feel free to reopen if you have further info.


[WIP] Optimize the download manager

@jmbejar  This pull request has not been tested yet, and there might be some minor changes, so please do not merge it.
I submitted it because I made significant changes to your previous code. You can offer some suggestions, and we can discuss how to make better changes here.

I merged pending_downloads into downloads_files as per the TODO. This part of the functionality is not yet complete, mainly because get_all_pending_downloads does not retrieve files that are currently being downloaded.

@jmbejar This pull request has not been tested yet, and there might be some minor changes, so please do not merge it.
I submitted it because I made significant changes to your previous code. You can offer some suggestions, and we can discuss how to make better changes here.

Thanks for the help again, and also thanks for sharing this partial progress... so we can track efforts.
I did a quick review and I like the direction, so please go ahead 👏

@L-jasmine Any updates on this? I'm asking because we're looking to wrap up in the following days the implementation of the build we're going to demo in the NL rust conference. Please let me know if you need something from our end.

@jmbejar This pull request is ready to be merged.
If there are any bug, I will open a new pull request to fix them.


Update functions-html.php

To enable a filter-function to decide separately for each entry wether a user should get the edit/delete/... buttons displayed, the keyword is a necessary context information and should therefore be provided as parameter.

@LeoColomb This won't break existing hook functions that expect just one arg, right?


Support client-cert auth for mitmproxy

Codecov Report

Merging #61 into master will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##           master      #61   +/-   ##
=======================================
  Coverage   62.46%   62.46%
=======================================
  Files          29       29
  Lines        2206     2206
  Branches      338      338
=======================================
  Hits         1378     1378
  Misses        760      760
  Partials       68       68

Impacted Files
Coverage Δ

adaptdl/adaptdl/reducer.py
88.00% <0.00%> (-2.00%)
:arrow_down:

sched/adaptdl_sched/policy/pollux.py
96.92% <0.00%> (+0.87%)
:arrow_up:

Continue to review full report at Codecov.

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


Converting from Scikit-Learn or ONNX models

We have trained tree ensemble models using Scikit-Learn (converted to ONNX) and XGBoost.
Is there a way to load the model into yggdrasil so that we can leverage the fast serving engine for inference?

Yes.
The Scikit-Learn Converter is a python script that converts tree-based Scikit learn models into TensorFlow Decision Forests (TF-DF) models.
Since TF-DF is build on top of Yggdrasil, you can use all the Yggdrasil framework (including the infernece code) on TF-DF models.

That works! Thanks. Is there any tfdf converter for XGBoost models? If not, is it easy for us to develop such a converter? Any suggestions?

Great to hear the Scikit-learn convertor works for your case :).
I am not aware of a converter from XGBoost→TF-DF or XGBoost→Scikit-learn. It seems the only solution to access the tree structure of an XGBoost model programmatically in python is to parse the string returned by dump_model (see this post).
If and once you figure a way to obtain the structure of the trees, you can use the TF-DF model builder (example) to create the TF-DF model. This is what the Scikit-learn→TF-DF converter is doing.
Please, keep us in touch if you find a better alternative, or if you make progress in this direction!

The below fix seems working now:
feature = tfdf.py_tree.dataspec.SimpleColumnSpec(
              name = f"feature_{jsnode['split'][1:]}",
              type = tfdf.py_tree.dataspec.ColumnType.NUMERICAL,
              col_idx = jsnode['split'],)

def _convert_xgboost_node_to_tfdf_node(
    jsnode: str,
) -> tfdf.py_tree.node.AbstractNode:
  """Converts a node within a xgboost tree into a TFDF node."""

  if 'children' in jsnode:
      feature = tfdf.py_tree.dataspec.SimpleColumnSpec(
              name = f"feature_{jsnode['split'][1:]}",
              type = tfdf.py_tree.dataspec.ColumnType.NUMERICAL,
              col_idx = jsnode['split'],)
      neg_child = _convert_xgboost_node_to_tfdf_node(
              jsnode['children'][1],
              )
      pos_child = _convert_xgboost_node_to_tfdf_node(
              jsnode['children'][0],
              )
      return tfdf.py_tree.node.NonLeafNode(
              condition = tfdf.py_tree.condition.NumericalHigherThanCondition(
                  feature = feature,
                  threshold = jsnode['split_condition'],
                  missing_evaluation = False,
                  ),
              pos_child = pos_child,
              neg_child = neg_child,
              )
  else:
      target_value = jsnode['leaf']
      node_value = tfdf.py_tree.value.RegressionValue(target_value)
      return tfdf.py_tree.node.LeafNode(value = node_value)

Thank you very much for keeping us updated!
If there's any details you can share about your project / findings (either here or through email), we'd be happy to learn more.

Thanks for posting your solution @jiazou-bigdata !
Would you be interested in contributing it as another converter in TF Decision Forests ?
Also, let us know if you need anything from the Yggdrasil Decision Forests library. When possible we collaborate with research teams (we have both problems and sometimes solutions that may be research worthy), and the library, while production ready, was made to be relatively easily extended, to facilitate research and experimentation.

@rstz and @janpfeifer
I've just tried more tests and found the testing accuracy dropped with the converted XGBoost model trained on Higgs.
I noticed that the XGBoost model used Branch_LT (less than) mode for node conditions. But the TF-DF is using tfdf.py_tree.condition.NumericalHigherThanCondition. I am looking into this, and any comments or suggestions are highly appreciated. I am interested in contributing this as a converter if this issue can be figured out.
We are mainly interested in the performance of the QuickScorer algorithm for XGBoost model inference. We think that TF-DF may be something we can leverage. By the way, during the process of figuring out TF-DF, we did have some observations on the performance of TFDF regarding CopyVerticalDatasetToAbstractExampleSet, multi-threading, etc. We wil be happy to summarize and share such findings with the development team later.

@rstz and @janpfeifer
I want to report the progress here. Now the accuracy is consistent before and after the conversion. The trick I made is to switch the true node and false node, so that the true/false node in XGBoost model becomes the false/true node in TFDF.
The complete conversion code is pasted below. Please let me know if any issues and the process to contribute the code.
"""Utilities for converting XGBoost models into Tensorflow models."""

import json
import numpy as np
import os
import tempfile
from typing import Any, Dict, List, Optional, TypeVar, Union

from xgboost import XGBClassifier
import tensorflow as tf
import tensorflow_decision_forests as tfdf

def get_trees(xgboost_model):
    booster = xgboost_model.get_booster()
    # The json format was available in October 2017.
    # XGBoost 0.7 was the first version released with it.
    js_tree_list = booster.get_dump(with_stats=True, dump_format='json')
    js_trees = [json.loads(s) for s in js_tree_list]
    return js_trees

def convert(
    xgboost_model: XGBClassifier,
    intermediate_write_path: Optional[os.PathLike] = None,
) -> tf.keras.Model:
  """Converts a tree-based XGBoost model to a tensorflow model.
  Args:
    xgboost_model: the XGBoost model to be converted.
    intermediate_write_path: path to a directory. As part of the conversion
      process, a TFDF model is written to disk. If intermediate_write_path is
      specified, the TFDF model is written to this directory. Otherwise, a
      temporary directory is created that is immediately removed after this
      function executes. Note that in order to save the converted model and
      load it again later, this argument must be provided.

  Returns:
    a keras Model that emulates the provided XGBoost model.
  """
  if not intermediate_write_path:
    # No intermediate directory was provided, so this creates one using the
    # TemporaryDirectory context mananger, which handles teardown.
    intermediate_write_directory = tempfile.TemporaryDirectory()
    path = intermediate_write_directory.name
  else:
    # Uses the provided write path, and creates a null context manager as a
    # stand-in for TemporaryDirectory.
    intermediate_write_directory = contextlib.nullcontext()
    path = intermediate_write_path
  with intermediate_write_directory:
    tfdf_model = build_tfdf_model(xgboost_model, path)
  # The resultant tfdf model only receives the features that are used
  # to split samples in nodes in the trees as input. But we want to pass the
  # full design matrix as an input to match the scikit-learn API, thus we
  # create another tf.keras.Model with the desired call signature.
  template_input = tf.keras.Input(shape=(xgboost_model.n_features_in_,))
  # Extracts the indices of the features that are used by the TFDF model.
  # The features have names with the format "feature_<index-of-feature>".
  feature_names = tfdf_model.signatures[
      "serving_default"].structured_input_signature[1].keys()
  template_output = tfdf_model(
      {i: template_input[:, int(i.split("_")[1])] for i in feature_names})
  return tf.keras.Model(inputs=template_input, outputs=template_output)

def build_tfdf_model(
    xgboost_model: XGBClassifier,
    path: os.PathLike,
) -> tf.keras.Model:
  """Converts a XGBoost model into a TFDF model."""
  bias = 0.0

  gbt_builder = tfdf.builder.GradientBoostedTreeBuilder(
      path=path,
      objective=tfdf.py_tree.objective.ClassificationObjective(label="label",
          classes=[str(c) for c in xgboost_model.classes_],
      ),
      bias=bias,
  )

  js_trees = get_trees(xgboost_model)

  params = xgboost_model.get_xgb_params()

  print("XGBOOST_MODEL LEARNING RATE:")
  print(xgboost_model.learning_rate)

  for jstree in js_trees:
    gbt_builder.add_tree(convert_xgboost_tree_to_tfdf_pytree(
        jstree,
        xgboost_model.learning_rate,
    ))
  gbt_builder.close()
  return tf.keras.models.load_model(path)

def convert_xgboost_tree_to_tfdf_pytree(
    xgboost_tree: str,
    weight: Optional[float] =None,
) -> tfdf.py_tree.tree.Tree:
  """Converts a XGBoost decision tree into a TFDF pytree.

  Args:
    xgboost_tree: a XGBoost decision tree in JSON format.

  Returns:
    a TFDF pytree that has the same structure as the xgboost tree.
  """

  root_node = _convert_xgboost_node_to_tfdf_node(
      xgboost_tree,
      weight,
  )
  return tfdf.py_tree.tree.Tree(root_node)

def _convert_xgboost_node_to_tfdf_node(
    jsnode: str,
    weight: Optional[float] =None,
) -> tfdf.py_tree.node.AbstractNode:
  """Converts a node within a xgboost tree into a TFDF node."""

  if 'children' in jsnode:
      feature = tfdf.py_tree.dataspec.SimpleColumnSpec(
              name = f"feature_{jsnode['split'][1:]}",
              type = tfdf.py_tree.dataspec.ColumnType.NUMERICAL,
              col_idx = jsnode['split'],)
      neg_child = _convert_xgboost_node_to_tfdf_node(
              jsnode['children'][0],
              )
      pos_child = _convert_xgboost_node_to_tfdf_node(
              jsnode['children'][1],
              )
      return tfdf.py_tree.node.NonLeafNode(
              condition = tfdf.py_tree.condition.NumericalHigherThanCondition(
                  feature = feature,
                  threshold = jsnode['split_condition'],
                  missing_evaluation = False,
                  ),
              pos_child = pos_child,
              neg_child = neg_child,
              )
  else:
      target_value = jsnode['leaf']
      scale_factor = 1.0
      if weight:
          scale_factor = weight
      node_value = tfdf.py_tree.value.RegressionValue(target_value*scale_factor)
      return tfdf.py_tree.node.LeafNode(value = node_value)

@jiazou-bigdata Thank you very much, this looks great and we would love to add this converter to TF-DF.
The easiest way to officially contribute this is if you could put the above code into tensorflow_decision_forests/contrib/xgboost_model_converter/xgboost_model_converter.py and open a PR with this file.
A bot will then prompt you to sign the Contributor License Agreement, see https://github.com/google/yggdrasil-decision-forests/blob/main/CONTRIBUTING.md . You (or your employer) retain the copyright to your contribution, this simply gives us permission to use and redistribute your contributions as part of the project.
Please let us know if there is any issue with this process.

@rstz Thank you so much for the guidance. Will do!

@rstz @janpfeifer,
Hi, I hope this message finds you well.
Recently we finished a benchmark study of more than ten decision forest inference platforms on eight diversified datasets using different number of trees (10, 500, 1600) and different forest algorithms (RandomForest, XGBoost, LightGBM) on CPU and GPU.  You can find the study here.
We also considered TFDF and Yggdrasil in single-thread comparison (Table 10 in the paper). It showed that the single-thread performance of Yggdrasil (using the QuickScorer algorithm) outperformed most of other platforms!
(We didn't consider TFDF and Yggdrasil in other multi-threading comparisons, because it seems as to this point, there is no knob to fully parallelize the inference process in Yggdrasil to make it a fair comparison.)
If possible, please do not hesitate a moment to let us know if you have any questions or suggestions for our study.
Thank you!

hi @jiazou-bigdata , thanks for sharing the results, the paper is super interesting, and I'm looking forward to learning more about netsDB -- as I understand it, it's a great thing when computation should move closer to the data whenever possible.
About the multi-threading: it's a long standing TODO for us to implement the model parallelism -- data parallelism is easier achieved by the client, since our library is re-entrant.
In part because our clients are either (1) very latency conscious -- in which case they usually use small models (<100 trees, usually inference < 1 microsecond) and the overhead of parallelism may not pay off(?) -- or (2) they don't care, and they are more interested in throughput, in which case data parallelism (separate threads doing inference in separate batch of examples) is simpler and efficient.
GPU is also something we have some experiments with ... we haven't yet invested because of we haven't seen the need from clients. I'm assuming netDBs would run on servers with GPUs and would benefit from it, is that correct ?
Btw, one suggestion for the study: what about an additional table on throughput (as opposed to latency) ? Specially for the larger models ... Given a fixed hardware, how many inferences/second can one get through ... For our use cases this is often more relevant (and the same may be true for many use cases of netsDB, no?)
cheers, and again thanks for sharing! This motivates us to improve it even further.
ps.: And btw, let us know if you find out special cases that could be really important (help lots of folks), that would guide our optimization efforsts.


NullReferenceException in DefaultPageLoader.Load if ContentRoot starts with '\?'

I'm creating a 2.1-preview1 project and doing some non-standard configuration.
I found some API's will return directory names starting with \\?\ and Mvc doesn't eat them.
cd C:\
mkdir razor | Out-Null
cd razor
dotnet new razor
(gc .\Program.cs) -join [System.Environment]::NewLine `
    -replace "\.UseStartup", ".UseContentRoot(@`"\\?\C:\razor`").UseStartup" |
    Out-File .\Program.cs -Encoding utf8
start https://localhost:5001
dotnet run

Hosting environment: Development
Content root path: \\?\C:\razor
Now listening on: https://localhost:5001
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
      Request starting HTTP/1.1 GET https://localhost:5001/
fail: Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware[1]
      An unhandled exception has occurred while executing the request.
System.NullReferenceException: Object reference not set to an instance of an object.
   at Microsoft.AspNetCore.Mvc.RazorPages.Internal.DefaultPageLoader.Load(PageActionDescriptor actionDescriptor)
   at Microsoft.AspNetCore.Mvc.RazorPages.Internal.PageActionInvokerProvider.OnProvidersExecuting(ActionInvokerProviderContext context)
   at Microsoft.AspNetCore.Mvc.Internal.ActionInvokerFactory.CreateInvoker(ActionContext actionContext)
   at Microsoft.AspNetCore.Mvc.Internal.MvcAttributeRouteHandler.<>c__DisplayClass12_0.<RouteAsync>b__0(HttpContext c)
   at Microsoft.AspNetCore.Builder.RouterMiddleware.<Invoke>d__4.MoveNext()
   at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.<Invoke>d__7.MoveNext()
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]
      Request finished in 228.8637ms 500 text/html; charset=utf-8

Just curious: Is there a reason that \\?\-style paths are being used? Is it to get past MAX_PATH?

No, they magically appear when running behind IIS.

Hi @ericwj. Can you please share a repro project?

"ancmHostingModel": "InProcess" in launchSettings.json is the offender.
{
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development",
        "ASPNETCORE_HTTPS_PORT": "44393"
      },
      "ancmHostingModel": "InProcess"
    }
}

The screenshot will hopefully do the trick, if not - let me know. Not quite the whole scoop because in my original project I get \\?\ for Directory.GetCurrentDirectory() even. And I seem to be completely unable to produce any stdout logs running under IIS after publishing, although IIS Express writes them happily.
If you hand any directory derived from Assembly.GetEntryAssembly().Location to UseContentRoot without stripping the \\?\ you should get the NullReferenceException I reported. E.g. new DirectoryInfo(...).Parent.Parent.FullName - which is essentially what I was doing, looking for web.config and appconfig.json.
I also had a very odd crash with a NullReferenceException using Assembly.Location in an initializer for a static readonly field in a Razor Page. Could be related.
Startup was Hello world but I had a full Pages folder running dotnet new razor, a VS 15.7 update 3 glitch hopefully...sorry for the design ;)

Likely a duplicate of https://github.com/aspnet/IISIntegration/issues/725

Yup, looks exactly the same.

Thanks folks. Closing this one as a dupe.


Investigate incorrect feature output

Describe the bug
User @ZhengLeon claims no output is being generated for a video.
To Reproduce
Details not provided
Screenshots/Code Output
Loading Video List ...
Done
1 videos to be processed...
0. Processing /home/work/slowfast_feature_extractor/video/0a244c71991f386b161bcd787c7da607...

@ZhengLeon currently the framework does seem to be broken due to the updates made to detectron2 and slowfast. I am working on fixing it now but it will be a while before it is working again.

@ZhengLeon The code has been updated to work with the latest PyTorch. Please follow the modified instructions to install the latest requirements. I tested it with a sample video and found features to be extracted. If it still does not work for you, please provide a complete guide to reproduce your issue.

Closing issue due to lack of follow up.


create_queries.py

Thanks for sharing your code!
How to run the create_queries.py file? How do I set parameters
In addition, in the index_dataset function, only the train_indexified.txt was generated. Does the program only need to generate the train_indexified.txt file?

Hi, thanks for your interest. please let me know which parameter you are confused about. Please feel free to add valid and test index files to the line as well. If you want to generate validation/test queries, you also need to index them.

Hi, I wonder is there any file about the entity names?
Most entities are represented with an index currently.
It is hard to interpret them with semantic meanings.
Thanks

Hi, I wonder is there any file about the entity names? Most entities are represented with an index currently. It is hard to interpret them with semantic meanings.
Thanks

最全面的方法是下载freebase知识图谱，在里面可以找到实体的对应的含义。

Hi, I wonder is there any file about the entity names? Most entities are represented with an index currently. It is hard to interpret them with semantic meanings.
Thanks

最全面的方法是下载freebase知识图谱，在里面可以找到实体的对应的含义。

多谢~


Bump default plugin versions

@cldwalker @rundis FYI
Plugins with changes not included in the latest version:

Paredit
CSS
HTML

@kenny-evitt Thanks for looking into this. If you don't mind, I'd like to keep this open and bump to Clojure 0.2.0. I should have that out by Friday

@cldwalker I'll followup this weekend then.

Clojure 0.2.0 has been released. Feel free to bump "version" in version.json to 0.8.0-alpha while you're at it since we're about to freeze master

@cldwalker What about deploy/core/package.json? Should we update that version to 0.8.0-alpha too?

@kenny-evitt Yep. It's not functionally important but makes sense for consistency

@cldwalker I also updated the core Leiningen project, for extra consistency.

Looks good! Feel free to merge :+1: :dancers:


Feature request

Hi, pleae would you be so kind and could u add also log for victims inventory ?
In the case of troll kill it would help a lot to restore victims stuff.
If thats possible to add, it would be really lovely

Will look into it

Closed: Want to keep the resource standalone for people so they can use on any framework. If anyone wants to make a pull request that keeps in mind about people running servers without inventories I will review it and merge.


Add mixer and initial_state properties to QAOA

Summary
Added mixer and initial_state properties to the QAOA implementation. No changes in the logic.

If the mixer or initial_state change, should the var_form be recreated if it already exists ? (self.var_form)

If the mixer or initial_state changes, should the var_form be recreated if it already exists ? (self.var_form)

It is not required, if you call VQE.compute_minimum_eigenvalue after you call the setters. VQE assigns an operator via the operator property and the var form is re-created automatically. These setters are like a postponed call of the constructor.

@manoelmarques Forgot to mention. The idea is to have a single instance of QAOA for multiple problems, then change initial_state and mixer, solve a problem, and again and again.

VQE assigns an operator via the operator property and the var form is re-created automatically.
That seems only to be the case when an operator is passed into the compute min eigenval. If its passed in on the start, i.e. None to the compute min eigen val, then it seems not to be. (or maybe I am missing something)

Either way I think it would be clearer and far less prone to issues if the recreation of the the var form is done when setting explicitly in QAOA when using the initial state and mixer setters


Add files via upload

Added animations on the about section
Transitions added to the all the elements of the laughter page
Signed-off-by: Eknoor Singh<EMAIL_ADDRESS>Issue #466  Issue #467

attach screenshot to explain

Area marked with the blue has been animated

@Eknoor02 fix merge conflicts and pull recent changes in the website

Conflics merged.

All Conflicts have been merged.Kindly review this.

@Eknoor02 Your changes are not reflected in the deploy preview link and also Standup section is duplicated. Check and correct it and then attach a video to show your changes

I cannot figure out why the deploy preview is showing as such.I have reviewed the code and there are not as such flaws in it.


Helm ls performance degradation with many releases

Hey folks,
We're using helm quite extensively and some operations (primarily helm ls) are really starting to grind now.
GKE 1.10.7, helm 2.10.
With 122 releases, the ls takes around 15 seconds.  We plan to be floating around the 500 mark on this particular cluster.
❯ time helm ls | wc -l
     122
helm ls  0.32s user 0.25s system 3% cpu 14.760 total
wc -l  0.00s user 0.00s system 0% cpu 14.759 total

Looking at the resource use, doesn't seem to be a CPU thing... so guessing it's just making a hell of a lot of calls to the kubernetes API.

Just wondering if I should be worrying about using this at scale?  Are there any notable improvements in 2.11?

I don't think any patches were merged that changed how helm ls works internally. A check to confirm would never hurt.
Are you able to identify what API calls are being made between Tiller and the Kubernetes API? That way it'd be easier to identify where we'd need to make changes.

another related issue is #4543, though I don't think anyone from the community has identified the root problem either.

@Stono Can you check how many ConfigMaps you actually have in etcd that belongs to Helm? This command should give you the count:
kubectl -n kube-system get cm --no-headers -l OWNER=TILLER | wc -l

Based on just a quick look at the code, it seems like pretty much all filtering, including the size limit, is enforced in Tiller and not in the ApiServer/etcd. So you could potentially be pulling in a large number of ConfigMaps from the ApiServer.

We are seeing performance degradation over time on older clusters. Every execution of helm upgrade or helm list is churning the API servers and causes 1-2 GB additional RAM use. Chaining command just keeps allocating more RAM. Waiting a decent period of time allows some RAM to be released.
This command a one cluster took a while and there are 3.5k ConfigMaps. Each is 1MB max, so up to 3.5GB data. The most frequently deployed application has >1000 revisions.
$ kubectl -n kube-system get cm --no-headers -l OWNER=TILLER | wc -l
3417

How can we prune ConfigMaps for older revisions of deployments with out deleting deployed, in-production applications?

closing as a duplicate of #4543. Let's keep the discussion in the same ticket as they seem to be both pointing at the same issue @mortent is alluding to.


Set up Sentry error tracking

Description
Ross got the account in #15 and sent creds to Jason via email.
Related items
#15
Resolution

Follow Sentry tuts to set up "Project"
Start adding error handlers (at a minimum for fetch requests)

@rperlin-ela I got this up and running. Setup for the basics was easy but there's A LOT to Sentry. First time using it so quite a plunge, but I really like the UI and capabilities.
I created a non-admin Sentry acct for myself so I can log in to see problems if needed. I don't anticipate fixing any outside today-ish since we've had a pretty good review window to catch the problems, but it will be handy to know what the problems are in order to document and address them.
If you start getting pummeled by notifications at your ELA email let me know and we can dial it down. The ones you saw so far were a good indication that it's working, but one of them was just me testing and the other has been fixed.
I also ended up setting it to only accept events from the project's primary domain and (if i did it right) the Netlify deploys.
The free acct they gave us does not appear to have fancier things like performance monitoring and tracing, but the error monitoring is what we want so that was nice of them.
Like I said, lots more to it so I opened up #90. I don't know a ton but this is the first project (sadly) where I've ever gotten to use an error monitoring service like this and I have to say it's very comforting to know when 💩  is breaking!

Cool, no problem getting notifications, just won’t really know what to know make of them or do with them, but this all sounds good.

On Sep 24, 2020, at 5:12 PM, Jason Lampel<EMAIL_ADDRESS>wrote:

@rperlin-ela https://github.com/rperlin-ela I got this up and running. Setup for the basics was easy but there's A LOT to Sentry. First time using it so quite a plunge, but I really like the UI and capabilities.
I created a non-admin Sentry acct for myself so I can log in to see problems if needed. I don't anticipate fixing any outside today-ish since we've had a pretty good review window to catch the problems, but it will be handy to know what the problems are in order to document and address them.
If you start getting pummeled by notifications at your ELA email let me know and we can dial it down. The ones you saw so far were a good indication that it's working, but one of them was just me testing and the other has been fixed.
I also ended up setting it to only accept events from the project's primary domain and (if i did it right) the Netlify deploys.
The free acct they gave us does not appear to have fancier things like performance monitoring and tracing, but the error monitoring is what we want so that was nice of them.
Like I said, lots more to it so I opened up #90 https://github.com/Language-Mapping/language-map/issues/90. I don't know a ton but this is the first project (sadly) where I've ever gotten to use an error monitoring service like this and I have to say it's very comforting to know when 💩 is breaking!
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub https://github.com/Language-Mapping/language-map/issues/48#issuecomment-698590859, or unsubscribe https://github.com/notifications/unsubscribe-auth/AMNKB5CLVDVSAEP5ME6EE5TSHOY2VANCNFSM4O253KFQ.


Staging wifi 3590

@raj-TIP where is the iOS reboot lib method?

Reboot script have been added in Tools library as part of other jira. @raj-TIP  closing this request.


Port to new gongdoc load.Load API

A parameter has been added.
template should be changed

template changed, but the number of instances is not updated. why ?
Reference instances are stored in the gongdoc stage. But when entering the LoadDiagramPackage, it not not on the stage anymore. Ah ah, this is because, is it because it is not committed ?


(GH-1310) Remove generated docs, update docs rake task

This PR:

Removes the generated doc plan_functions.md and adds it to
.gitignore
Removes the git diff check for the plan_functions page from travis
Updates the pattern for Strings to find files in to just be the
bolt-modules directory, so that warnings about lib/*.rb don't
clutter the output.

Closes #1310

CLA signed by all contributors.


Windows x64 prebuilds

Fixed in https://github.com/libsql/libsql-js/commit/0e7fe92ec8d62150450f0659829124c1cf68228f


Raising hands feedback

After raising hands (manually for remote, as the OSC does not function, and using Companion for zOSC contributor), I then used Lower All Hands to... do that... the hands went down, but the hand images on buttons indicating raised hands in Companion remained. Clicking either of my 2 active Panelist selection buttons updated the state of both to remove Hand image.

it is possible that lowerAllHands does not send per-participant OSC feedback in ZoomOSC/ISO. You may have to assume the hands are lowered when you send the command from companion. The callback may not be triggered by Zoom SDK


Bro , when i install msf using mega pack when I type msfconsole , it is saying , Traceback (most recent call last): ruby: no Ruby script found in input (LoadError)  Please help

Bro , when i install msf using mega pack it is saying when i type msfconsole
Traceback (most recent call last):
ruby: no Ruby script found in input (LoadError)
Please help

You need to do bundle install ,it says gems was not installed

You need to do bundle install ,it says gems was not installed

You need to do bundle install ,it says gems was not installed

lol its obvious i hav no idea wht im doing srry


Release 1.13.0

Description
Prepare release 1.13.0
Checklist

[ ] My changes follow the contributing guidelines of this project.
[ ] New and existing unit tests pass locally with my changes.

Coverage remained the same at 95.036% when pulling 17cf4b08c6aab14a33ca73ebdb7d44d110925dd4 on release/1.13.0 into 805cb79f3a7b46422f51e5248be49090bf9d6359 on main.


Enabled flag

To avoid having to inject the flag into all controllers, and to wrap every service call, the flag should be switch in the client.

263f8ac138e995f71b3fec6ec4cfa98754902234 200 Success (OK) response mocked to allow for standard workflow in dev, and staging environments.


Deep-setting properties broken

(Applies to phantomjs > 2, untested in earlier versions or with slimerjs)
Properties of the page object seem to be some kind of getter/setter properties that don't return a reference to the original object. As a result, deep-setting properties with page#set() (done in the bridge using the lookup helper) doesn't work because the original object is not modified.
See svvac/node-phantom-simple@a028fbaf (included in PR #89) for details and a fix.

Could you do it as separate PR?

@svvac, could you please show an example of real case for this issue?
And about your PR, maybe you could also add test case?

@svvac, could you please show an example of real case for this issue?
And about your PR, maybe you could also add test case?

Fixed by https://github.com/baudehlo/node-phantom-simple/commit/4c1e3e60e41433a6789821e81c4a44b7463595c7


Feature Request: Media Keys Support?

I know the app supports arrow keys for fwd/rwd and space bar to toggle pause/play.  Would it be possible to also support media keys with something like SPMediaKeyTap?
Edit: Actually, rather than SPMediaKeyTap which is pre-arc ObjC, MediaKeyTap is a nice little Swift rewrite/wrapper.  Getting this working was pretty easy, only really required lightly modifying AppDeligate.swift.  There's also a Cocoapod for it.  If you're interested, I can make a pull request, although it's really only a few minutes effort.
https://github.com/nhurden/MediaKeyTap
I'm quite happy now.  I can listen to text with my bluetooth headphones, and pause and rewind as needed while away from my desk.   (I use BTHSControl to allow BT to send media keys, and got a cheap long USB range bluetooth adapter that lets me roam quite far.)

I would love to be able to stop/play Dictater using keyboard shortcuts even when the app isn't in focus (You can already set a keyboard shortcut to start Dictater, but there is no pause button).
Please add something like this. Thanks!


az aks update: error: argument --api-server-authorized-ip-ranges: expected one argument

When running the aks update for authorized IP range i am getting the below error
az aks update     --resource-group aks-poc-seab
--name aksseabpoc `
--api-server-authorized-ip-ranges
az aks update: error: argument --api-server-authorized-ip-ranges: expected one argument

thanks for reporting, we are looking at it

any update on the below

We are trying to delete the IP authorization
https://docs.microsoft.com/en-us/azure/aks/api-server-authorized-ip-ranges
az aks update
--resource-group myResourceGroup
--name myAKSCluster
--api-server-authorized-ip-ranges ""
This is the command but its not running

hi @jluk could you have a look at this?

An empty string is required like the second command you ran
az aks update --resource-group myResourceGroup --name myAKSCluster --api-server-authorized-ip-ranges ""
Can you share the error message returned when running that? The original post shows an error that will return if the empty string is not passed in.

Hi Jluk,
I was geeting the same error as before when using the "" also

any update

which cli version are you using ? and can you copy paste the error?
@feiskyer FYI

Having the same issue. Running command:
az aks update --resource-group my-resource-group --name my-aks --api-server-authorized-ip-ranges ""

returns:
az aks update: error: argument --api-server-authorized-ip-ranges: expected one argument

az version -o json returns:
This command is in preview. It may be changed/removed in a future release.
  "azure-cli": "2.2.0",
  "azure-cli-command-modules-nspkg": "2.0.3",
  "azure-cli-core": "2.2.0",
  "azure-cli-telemetry": "1.0.4",
  "extensions": {}
}

Just updated to Azure CLI 2.2 before I had Azure CLI 2.1 but error was the same.
But running that in https://shell.azure.com gives me completely different error:
Operation failed with status: 'Bad Request'. Details: Changing enablePrivateCluster is not allowed. It can only be set while creating the cluster.

Details: Changing enablePrivateCluster is not allowed issue has been fixed by #12589.
For the first error, I couldn't reproduce it. @yonzhan have you seen similar errors on other CLI commands?

Details: Changing enablePrivateCluster is not allowed issue has been fixed by #12589.
For the first error, I couldn't reproduce it. @yonzhan have you seen similar errors on other CLI commands?

hi @fengzhou-msft  could you pls help to look at the error to see if it caused by empty string? thanks

@nidiculageorge @pvasek Are you using Powershell? You can pass --api-server-authorized-ip-ranges= instead of --api-server-authorized-ip-ranges "".  Powershell has known issues to strip double quotes when passing parameters in a batch script which is what our az.cmd/az.bat does.
A more general workaround is to replace one double quotes with three double quotes  --api-server-authorized-ip-ranges """""" or add stop-parsing symbol --% after az: az --% aks update --resource-group myResourceGroup --name myAKSCluster --api-server-authorized-ip-ranges "". More about quoting issues in our doc.

@fengzhou-msft you are right, I am using powershell and your solution works for me.  Thanks a lot!
The working command:
az aks update --resource-group my-resource-group --name my-aks --api-server-authorized-ip-ranges=""

@fengzhou-msft thanks for the detailed guides.

Hello Team,
The above command worked fine .Thanks team.


Added Data Modeling/Parsing Rules Instructions to Event Collector

Status
Ready
Related Issues
fixes: https://jira-hq.paloaltonetworks.local/browse/CIAC-5880
Description
Added Data Modeling Rules Instructions to Event Collector

@julieschwartz18 - FYI, these are changes we will incorporate into the XSIAM dev docs in the Integrations and Scripts section.


The new SortedList method naming scheme is not user friendly

The old method names were better as they directly copied sortedcontainers. Using multiset method names is annoying.

Can you be more specific?

SortedList in python uses bisect_left (not lower_bound) and bisect_right (not upper_bound)
lower_bound and upper_bound is the method names for C++ and many python users arent very good at it, which makes it very confusing

A remove method would be good as s.pop(s.lower_bound(val)) is not so obvious


java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3

Describe the bug
When installing 1.2.3 or 1.2.4 on PaperMC 1.20.6 i get the java error in the log attached.
How to reproduce
install the plugin and try starting the server
Screenshots / Videos
No response
Server Log
https://mcpaste.io/165dbdfd7b4da42d

Solved


Vulkan: Unexpected behaviour of DEPTH_TEXTURE or INV_VIEW_MATRIX

Godot version
Godot 4.0 alpha 7
System information
Windows 11
Issue description
I've tried to make simple water shader with refraction with Godot 4, but was unable to get world position by depth properly.
It seams to be still affected by view since closer camera is to the plane, closer to reality world position becomes. Also there is a strange outline appears. In Godot 3 same code works fine. The only difference is change CAMERA_MATRIX to INV_VIEW_MATRIX.
It might be an expected behaviour since there are no docs yet and i could get something wrong. Fix me if that's the case.
Godot 4 screenshot
Godot 4 screenshot (Camera closer to the plane)
Godot 3 screenshot
Steps to reproduce
All you need is to create a cube, a big plane and a shader material applied to the plane.
Godot 4 shader:
shader_type spatial;
render_mode world_vertex_coords, unshaded;

varying vec3 world_pos;

void vertex() {
	world_pos = VERTEX;
}

void fragment() {
	float d = texture(DEPTH_TEXTURE, SCREEN_UV).r;
	vec3 s = texture(SCREEN_TEXTURE, SCREEN_UV).rgb;

	vec3 ndc = vec3(SCREEN_UV, d) * 2. - 1.;
	vec4 world = INV_VIEW_MATRIX * INV_PROJECTION_MATRIX * vec4(ndc, 1.);
	vec3 depth_pos = world.xyz / world.w;

	float depth_mix = float(world_pos.y > depth_pos.y);
	depth_mix *= float(d != 1.);

	ALBEDO = vec3(depth_mix);
}

Godot 3 shader:
shader_type spatial;
render_mode world_vertex_coord, unshadeds;

varying vec3 world_pos;

void vertex() {
	world_pos = VERTEX;
}

void fragment() {
	float d = texture(DEPTH_TEXTURE, SCREEN_UV).r;
	vec3 s = texture(SCREEN_TEXTURE, SCREEN_UV).rgb;

	vec3 ndc = vec3(SCREEN_UV, d) * 2. - 1.;
	vec4 world = CAMERA_MATRIX * INV_PROJECTION_MATRIX * vec4(ndc, 1.);
	vec3 depth_pos = world.xyz / world.w;

	float depth_mix = float(world_pos.y > depth_pos.y);
	depth_mix *= float(d != 1.);

	ALBEDO = vec3(depth_mix);
}

Minimal reproduction project
No response

Also there is a strange outline appears.

This is a known issue: https://github.com/godotengine/godot/issues/55755

In Vulkan ndc depth has a range 0-1, so it should not scaled into the -1 to 1 range.
You will likely find the docs beneficial here as they explain how to get world space depth from the DEPTH_TEXTURE https://docs.godotengine.org/en/latest/tutorials/shaders/advanced_postprocessing.html

Somehow I haven't noticed this quote about vulkans ndc. Thanks.

Please let me know if that fixes the issue for you! If we can keep digging to try to figure out the bug.

No response so closing


[BUG] Fix responsiveness issue with clubs page heading

Description
The current implementation of the clubs page heading in the project is not fully responsive, causing it to appear distorted and unattractive on certain screen sizes. This issue hampers the overall user experience and aesthetic appeal of the page.
Expected Behavior:

The clubs page heading should adjust its size and layout dynamically based on the screen size.
The heading should look visually appealing and maintain its legibility across various devices and resolutions.

Proposed Solution:
To resolve this issue, I suggest the following steps:

Identify the CSS code responsible for styling the clubs page heading.
Add appropriate CSS rules and media queries to make the heading responsive.
Test the changes thoroughly across various screen sizes and devices to ensure consistent and visually pleasing rendering.
Make any necessary adjustments to ensure the heading remains readable and visually appealing in all scenarios.

Screenshots

Browser 🥦
Google Chrome
Checklist ✅

[X] I checked and didn't find similar issue
[X] I have read the Contributing Guidelines
[X] I am willing to work on this issue (blank for no)

That sounds good, but we have purposely used the word-break: break-all property so that huge words like communities! do not messes up the responsiveness when we are in smaller devices, what changes do you suggest ?

Introducing a media query to target devices where the heading breaks and decreasing the font size can be a simple solution to maintain responsiveness across all devices.

Well i think we can give this  a try ⚡
Please make sure that you have read our documentation on Commiting guidelines and Pull request guidelines, without proper format the PR might be closed.


Split Trackings from Tractoflow

One QC - two tabs -> Local Tracking, PFT Tracking

Should be handle with dmriqc_flow not dmriqcpy.


fix typos

Signed-off-by: yuexiao-wang<EMAIL_ADDRESS>I am sorry to leave a typos in #1199 and fix it now.

LGTM
exec decision!  :-)


User is unable to determine the transition from one API lifecycle status to another and the transition time

Usability Issue:
An API user might wish to see the most recent transition from one API lifecycle status to another and the transition time. Moreover, API owner might wish to recall when s/he changed the status and the transition between two statuses. With the current design, it is not possible to determine so.
Suggestion
Show the most recent lifecycle transition history on the top part of API profile (preferably beside lifecycle tag) as text.
The format can be: "Status changed from "Development" on 25.12.2016 14:00 UTC + 3"

This issue was moved to apinf/platform#2052


[WIP] Java2.0 proto jenkins

Description
For development, to trigger jenkins job for java package ci.
Checklist
Essentials

None.

Changes

None.

Comments

None.

@mxnet-bot run unix-cpu

@mxnet-bot run ci [unix-cpu]


Remove global logger

gnatsd currently uses a global logger. This can cause some problems
(especially around the config-reload work), but global variables are
also just an anti-pattern in general. The current behavior is
particularly surprising because the global logger is configured through
calls to the Server.
This addresses issue #500 by removing the global logger and making it a
field on Server.
@nats-io/core

Coverage decreased (-0.09%) to 91.066% when pulling 28160f1de26601e0e9b95398cef571f763aef5a9 on logging_refactor into d6069447d22cc48d7b70c144f4634784748852bb on master.

Results from running benchmarks before and after logging changes:
benchmark                         old ns/op     new ns/op     delta
Benchmark_____Pub0b_Payload-4     102           103           +0.98%
Benchmark_____Pub8b_Payload-4     108           102           -5.56%
Benchmark____Pub32b_Payload-4     160           123           -23.12%
Benchmark___Pub128B_Payload-4     205           127           -38.05%
Benchmark___Pub256B_Payload-4     223           200           -10.31%
Benchmark_____Pub1K_Payload-4     529           484           -8.51%
Benchmark_____Pub4K_Payload-4     1992          1961          -1.56%
Benchmark_____Pub8K_Payload-4     4639          4225          -8.92%
Benchmark_AuthPub0b_Payload-4     231           221           -4.33%
Benchmark____________PubSub-4     273           236           -13.55%
Benchmark____PubSubTwoConns-4     239           239           +0.00%
Benchmark____PubTwoQueueSub-4     317           287           -9.46%
Benchmark___PubFourQueueSub-4     300           255           -15.00%
Benchmark__PubEightQueueSub-4     303           270           -10.89%
Benchmark___RoutedPubSub_0b-4     761           607           -20.24%
Benchmark___RoutedPubSub_1K-4     2180          2385          +9.40%
Benchmark_RoutedPubSub_100K-4     190695        165742        -13.09%

benchmark                         old MB/s     new MB/s     speedup
Benchmark_____Pub0b_Payload-4     107.45       106.01       0.99x
Benchmark_____Pub8b_Payload-4     175.84       185.70       1.06x
Benchmark____Pub32b_Payload-4     274.54       357.46       1.30x
Benchmark___Pub128B_Payload-4     686.76       1106.86      1.61x
Benchmark___Pub256B_Payload-4     1201.65      1344.83      1.12x
Benchmark_____Pub1K_Payload-4     1962.03      2141.75      1.09x
Benchmark_____Pub4K_Payload-4     2062.49      2095.26      1.02x
Benchmark_____Pub8K_Payload-4     1768.77      1942.21      1.10x
Benchmark_AuthPub0b_Payload-4     47.54        49.59        1.04x

If you add nil checks, what is the performance impact?

LGTM, we can add nil checks as needed in real life scenarios.


cmake.mingwSearchDir not work

the settings.json
{
    "C_Cpp.default.configurationProvider": "vector-of-bool.cmake-tools",
    "cmake.cmakePath": "C:\\msys64\\mingw32\\bin\\cmake.exe",
    "cmake.mingwSearchDirs": [
        "C:\\msys64\\mingw32"
    ],
    "cmake.configureSettings": {},
}

the  output
[cmake] -- Found SQLite3: C:/msys64/mingw64/include (found version "3.31.1")
[cmake] -- SQLite3_INCLUDE_DIRS = C:/msys64/mingw64/include.
[cmake] -- SQLite3_LIBRARIES = C:/msys64/mingw64/lib/libsqlite3.dll.a.

i want use "= C:/msys64/mingw32/lib/libsqlite3.dll."
Platform and Versions

Operating System: Windows 10 2004
CMake Version: 3.17.2
VSCode Version:  1.45.0
CMake Tools Extension Version: 1.3.1
Compiler/Toolchain: i686-w64-mingw32-gcc.exe

Closing as duplicate of https://github.com/microsoft/vscode-cmake-tools/issues/1064.


chore: Enable Open API links traversal by default

Codecov Report

Merging #1401 (7bb84ef) into master (a929849) will decrease coverage by 0.15%.
The diff coverage is 100.00%.

:exclamation: Current head 7bb84ef differs from pull request most recent head 039d126. Consider uploading reports for the commit 039d126 to get more accurate results

@@            Coverage Diff             @@
##           master    #1401      +/-   ##
==========================================
- Coverage   99.18%   99.03%   -0.16%
==========================================
  Files          83       83
  Lines        6416     6418       +2
  Branches     1132     1132
==========================================
- Hits         6364     6356       -8
- Misses         26       32       +6
- Partials       26       30       +4

Flag
Coverage Δ

unittests
99.03% <100.00%> (-0.13%)
:arrow_down:

Flags with carried forward coverage won't be shown. Click here to find out more.

Impacted Files
Coverage Δ

src/schemathesis/cli/__init__.py
99.05% <ø> (ø)

src/schemathesis/cli/callbacks.py
98.33% <100.00%> (-1.67%)
:arrow_down:

src/schemathesis/stateful.py
100.00% <100.00%> (ø)

src/schemathesis/_compat.py
77.77% <0.00%> (-11.12%)
:arrow_down:

src/schemathesis/runner/impl/threadpool.py
98.23% <0.00%> (-1.77%)
:arrow_down:

src/schemathesis/extra/pytest_plugin.py
98.24% <0.00%> (-1.76%)
:arrow_down:

src/schemathesis/specs/openapi/loaders.py
98.31% <0.00%> (-0.85%)
:arrow_down:

src/schemathesis/cli/output/default.py
99.68% <0.00%> (-0.32%)
:arrow_down:

Continue to review full report at Codecov.

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


Run sonobuoy cli with custom plugins from local filesystem

Is this a BUG REPORT or FEATURE REQUEST?:
Feature request
What happened:
I'd like to sonobuoy run with custom plugins. Right now it's not possible. I need to:

run sonobuoy gen > file.yaml
modify configmap with plugins definitions
kubectl apply -f file.yaml

What you expected to happen:
I'd like to us only sonobuoy cli without editing yaml files.
F.e.:

I have custom config.json with list of the plugins
I have folder with my plugin definitions, each in a separate yaml file
I run:
sonobuoy run --config config.json --pluginsFolder <path_to_folder>
sonobuoy would get files from folder, parse and validate it, and modify configmap 'in fly' before hitting apiserver

How to reproduce it (as minimally and precisely as possible):
Anything else we need to know?:
Environment:

Sonobuoy tarball (which contains * below)
Kubernetes version (use kubectl version):
Cloud provider or hardware configuration:
OS (e.g. from /etc/os-release):
Kernel (e.g. uname -a):

Currently I am post-processing the output of sonobuoy gen ... with some jq/yq magic. Doing that sort of thing in the sonobuoy binary would be a great UX improvement.

One thing that seems unusual/unnecessary/unnatural is the way the plugins are loaded/created by the master/aggregator.
For one, it seems unnecessary to me why we are allowing for the customization of the plugin search directory. Since we control the whole flow and where the mounts go, it seems like we could just have removed those options.
One of the issues I see about extending the UI here is how to deal with the "duplication" of plugin info in the yaml. The config.json has a list of all the plugins we've "selected" and then we also create config maps for a set of plugins. Right now those are completely decoupled and the master/aggregator does this:

loads the config.json and sees selected plugins and plugin search path
loads all plugins in the search path
filters the loaded plugins to only have the selected ones

It seems to me the reason why those are decoupled is because the filename is not necessarily indicative of the plugin name (which is a field in the yaml).
I'd rather just improve the logic around the plugins configmaps that are mounted into the container and then anything that is loaded is run (I dont see why we have to have a duplicate list of "selected" plugins if we just ensure to only make configmaps for the selected ones in the first place)
Once we settle that I think we can add flags pretty easily for just pointing to a list of files you want to load as plugins.
Then a final thing to consider is how to solve this use case: you want to run run a custom list of plugins and include just e2e and your plugin. Using the flag described above to point to your plugin file would add yours, but then you would have to decide how to add the e2e plugin. Locally you wont have the yaml for that so we seem to have a few options:

add separate flags for plugins which exist internal to sonobuoy (e2e and systemd_logs) (e.g. sonobuoy run --plugins e2e --plugins-file mypluginDef.yaml
add separate flags for each of the internal plugins which would be a boolean (sonobuoy run --e2e --systemd_logs=false --plugins-file mypluginDef.yaml
add special keywords which the new plugins flag will recognize and treat differently (sonobuoy run --plugins-file mypluginDef.yaml --plugins-file e2e)

I'm going to put a design doc together for this because there are details to work out but I thought I would just start with a description here of some of the ideas/issues

I think dropping the config.json with respect to plugins would be a good move. I like the idea of Sonobuoy searching for plugins in a location(s), this way we just need to drop in configuration plugin files and sonobuoy will just pick them up.

Wrote design doc here, please take a look and comment. I think this should be pretty straight forward if ya'll agree with the plan. I've been looking at the code a lot today on this and dont anticipate big problems/complications.
https://docs.google.com/document/d/1TN_k0TlOmoqHv4QCJWKVt_WmSq9o5LWPRlvcIFLA4R4/edit?usp=sharing
tl;dr; I wrote this up to go with the 3rd option I listed. A single flag with 2 special cases. I think for the user that is pretty straightforward rather than having multiple flags.


feat: show the branch and target in each DeploymentItem

Changes the format for the deployments panel to: production/preview: branch - date, time

closes #6
@GorvGoyl, is this something like what you're thinking?

lovely!


Changes to update password page to explain password change

Test:

give your user in keycloak the update password action in users -> user details -> required user actions
try to log in and make sure you are redirected to the update password page
try updating your password to something that doesn't match the requirements and make sure it fails
update your password
check that if you login again, you are not redirected to the update password page


Feature request: remember categories and suggest

Remember last users categories and suggest them by default to the user

As @nicolas-raoul  mentioned that the app already does this, does that not happen for you @egils-consulting . Also it would be really helpful if you could follow the issue template and add more tags, removing the bug tag for now while we receive more information on the issue.

I no longer use the application and resort to the browser based upload instead which work better for me 🤷♂
Closing this.


fix: replace session id by task id in tasks

replace session id by task id in tasks menu

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


Return proper response when creating multiple droplets.

When creating multiple droplets using the API client by supplying an array as name attribute, the API will respond accordingly as explained in the docs:
https://developers.digitalocean.com/documentation/v2/#create-multiple-droplets
It would be nice to have a proper response from the client instead of the current null return value...
A patch for this can be found in this pull request.

Thanks.


Reach out to communities/moderators to ask for community description for the directory?

Many communities are missing one and I don't want to add them myself and risk describing communities badly.

Naw, too much work and totally not worth it.

Agreed - if anybody has a problem with their description, they'll tell us. We don't need to go and ask everyone.

I think we should mention this in the intro post for the directory when it eventually comes: https://github.com/fnic-lemmy/lemmy-directory/issues/39


[Bug] Cobbleworks Not Consuming Energy

Basically the title. I have the Cobbleworks hooked up to a basic capacitor bank and it drain's the initial 100,000 RF to fill the internal buffer but no more than that. Instantly produces stacks of cobblestone and instantly performs all processing actions as well with no power costs. Settings are default, with 10 percent power reduction on each processing action and 100 RF per cobblestone.
Ender IO version: <IP_ADDRESS>1_beta
Ender IO Addons version: <IP_ADDRESS>1_beta-<IP_ADDRESS>_beta

Oops, the whole mod defaulted to that mode being on instead being off.


Pull setLastModifiedDate() out of JCRNodesProcessor and into ProtoNodeDecorator

@viveksachdeva @sagarsane if you could take a quick look. This is a something small I've been wanting to do. Since written required nodes don't circle back to JcrNodesWriter, setLastModified() isn't set for these nodes. With this change we will have completely segregated business logic out of the Spring Framework, and enabled delta sync to become more effective. Spring simply controls the flow now. :-)

Thanks @viveksachdeva !

👍 :-)


webots_ros: 2.0.4-1 in 'lunar/distribution.yaml' [bloom]

Increasing version of package(s) in repository webots_ros to 2.0.4-1:

upstream repository: https://github.com/omichel/webots_ros.git
release repository: https://github.com/omichel/webots_ros-release.git
distro file: lunar/distribution.yaml
bloom version: 0.8.0
previous version for package: 2.0.3-1

We can't merge this. Lunar's now EOL. following it's final sync a few weeks ago: https://discourse.ros.org/t/final-lunar-sync/9629


Add support for Travis CI and codecov.io

Adds support for unit test builds on Travis CI

Adds support for code coverage reports on codecov.io

Great work @prachigauriar!

Thanks @prachigauriar!