Cannot resolve bootnodes' libp2p multiaddr(/dnsaddr) in chainspec

Is there an existing issue?

[X] I have searched the existing issues

Experiencing problems? Have you tried our Stack Exchange first?

[X] This is not a support question.

Description of bug
libp2p supports /dnsaddr multiaddr(s) by looking up TXT records in DNS. https://github.com/multiformats/multiaddr/blob/master/protocols/DNSADDR.md
I assumed that https://github.com/paritytech/substrate/issues/7811 made it possible to use multiaddr. However, Substrate returns errors when /dnsaddr is defined in chainspec's bootnodes list.
Error: Input("Error parsing spec file: Peer id is missing from the address at line 7 column 3")

Steps to reproduce

Register TXT record
_dnsaddr.{domain name} and value is dnsaddr=/ip4/{ip address}/tcp/30333/p2p/{parachain node identity}

Make sure libp2p-lookup works

$ libp2p-lookup direct --address /dnsaddr/{domain name}
Lookup for peer with id PeerId("{Actual Peer Identity}") succeeded.
...

Add /dnsaddr to raw chain spec json

{
    "bootNodes": [
        "/dnsaddr/{domain name}"
    ],
...

Pass json file to Substrate --chain args

We have the custom MultiaddrWithPeerId in Substrate. This requires that you have a multi-address that has a peer id attached. A lot of our code currently "requires" that we already know the peer id. We would probably need to change the code to first resolve the peer ids. However, I don't know how to do this actually. @kpp @tomaka do you maybe know if we can resolve a multiaddr that starts with dnsaddr to some "normal" multiaddr? (I mean it is done somewhere in libp2p, I just don't know how complicated it is to do this from the outside)

Well, our transport is wrapped into a dns resolver. The issue should be in a correct validation of the given addr. I can prepare a PR, but I don't know how to test it. Can you help me?

There could be multiple records associated with the provided dnsaddr, section #suffix-matching says how to match against peer id in order to get the right record. Even ipfs has to specify p2p|ipfs peer id in their list of bootstrap nodes.
@bkchr do we need a different approach? Something like resolve -> get list of nodes -> add to bootstrap list?

@bkchr do we need a different approach? Something like resolve -> get list of nodes -> add to bootstrap list?

Sounds correct to me.


DSL extensions for ActiveRecord and Mongoid relations.

What is this?
A lot of what people use grape out of the box for is to make CRUD APIs against relational data. If they adhere strictly to RESTful conventions, we can infer what their routes are going to look like and provide an easy DSL for making response entities around ORMs/ODMs they likely use (e.g. active_record or mongoid).
The behavior this PR introduces aims to provide a flexible, opt-in route for presenting an entity's relationships using HAL. This is still a draft with some features that I want to flesh out in discussion.
Overview

Moved the example grape app in spec into a shared_context.
Updated rubocop to a more recent version and changed some rules.
Added Grape::Roar::Extensions::RelationalModels.

Integration tests
Unit tests for DSL methods, adapters, etc.

Modified .travis.yml to include the mongodb service.
mongoid and active_record are added as development dependencies.

Usage
API
The scenario from the tests illustrates this well!
Representers

You are not constrained to using decorator classes. If using a module, you can just mix in Grape::Roar::Extensions::RelationalModels.

You need not mix in Grape::Roar::Representer

class MongoidCartRepresenter < Grape::Roar::Decorator
  include Roar::JSON
  include Roar::JSON::HAL
  include Roar::Hypermedia

  include Grape::Roar::Extensions::RelationalModels

  relation :has_many, :items

  link_self
end

class MongoidItemRepresenter < Grape::Roar::Decorator
  include Roar::JSON
  include Roar::JSON::HAL
  include Roar::Hypermedia

  include Grape::Roar::Extensions::RelationalModels

  relation :belongs_to, :cart, embedded: true

  link_self
end

An example cart
{
    "_links": {
        "self": {
            "href": "http://example.org/carts/1"
        },
        "items": [{
            "href": "http://example.org/items/594dce2620ea7ad0540f03f4"
        }, {
            "href": "http://example.org/items/594dce2620ea7ad0540f03f5"
        }, {
            "href": "http://example.org/items/594dce2620ea7ad0540f03f6"
        }, {
            "href": "http://example.org/items/594dce2620ea7ad0540f03f7"
        }, {
            "href": "http://example.org/items/594dce2620ea7ad0540f03f8"
        }]
    }
}

An example item
{
    "_embedded": {
        "cart": {
            "_links": {
                "self": {
                    "href": "http://example.org/carts/594dced520ea7ad89910cb0a"
                },
                "items": [{
                    "href": "http://example.org/items/1"
                }]
            }
        }
    },
    "_links": {
        "self": {
            "href": "http://example.org/items/1"
        }
    }
}

Adapters
Some will have custom domain objects. Adapters and Validations attempt to shape your domain object. Validations are optional, but recommended so that you can ensure that the data you are describing (e.g. which is to be consumed) matches what you are asking of the object.
Example: ActiveRecord Adapter
module Extensions
  module RelationalModels
    module Adapter
      class ActiveRecord < Base
        include Validations::ActiveRecord

        valid_for { |klass| klass < ::ActiveRecord::Base }

        def collection_methods
          @collection_methods ||= %i(has_many has_and_belongs_to_many)
        end

        def name_for_represented(represented)
          klass_name = case represented
                       when ::ActiveRecord::Relation
                         represented.klass.name
                       else
                         represented.class.name
                       end
          klass_name.demodulize.pluralize.downcase
        end

        def single_entity_methods
          @single_entity_methods ||= %i(has_one belongs_to)
        end
      end
    end
  end
end

Example: ActiveRecord Validation Method
These can probably be compacted more cleverly, but it is fine for now.
def belongs_to_valid?(relation)
  relation = klass.reflections[relation]

  return true if relation.is_a?(
    ::ActiveRecord::Reflection::BelongsToReflection
  )

  invalid_relation(
    ::ActiveRecord::Reflection::BelongsToReflection,
    relation.class
  )
end

Errors
Should you incorrectly describe a relationship (e.g. you specify has_one but your model specifies has_many), an exception will be raised to notify you of the mismatch:
Failure/Error:
  raise Exceptions::InvalidRelationError,
        "Expected #{valid}, got #{invalid}!"

Grape::Roar::Extensions::RelationalModels::Exceptions::InvalidRelationError:
  Expected Mongoid::Relations::Referenced::One, got Mongoid::Relations::Referenced::Many!

TODOs / Discussion

#map_base_url, #map_resource_path defaults work for very simple setups but more configuration is required to do routes for nested resources.

Users should be able to override the "out of box" / global defaults and provide per entity overrides. How do we do this without making things clunky?

Refactor the DSLMethods to extract all URL mapping logic into a separate module?
Support for pagination
Is there anything that can be done to make this more flexible?
Versioning? Minor version bump for this sounds OK to me.
Will rebase commits when I catch some spare time.

Thanks all!

@mach-kernel LMK when you want me to re-review

@dblock: Sort of ready for another pass right now, but I have a question about testing.
I think that testing with pg might be a bit redundant and could add to the complexity of maintaining the tests. One integration test was written to ensure that the mixin works properly, and that the DSL methods produce the correct JSON. Specifically, I don't think that this is additional coverage of the Mongoid adapter.
We test that the DSL methods correctly delegate to the mapper. We have specific tests against the ActiveRecord and Mongoid adapters where we bring in those dependencies and test them exhaustively (plus, the logic for "matching" against the type of domain object live here so we do not need to rely on stubbing). We also test that the mapper selects the correct adapter.
If we were to also test SQL we would have to maintain a test schema and then set up database truncation for that test, would we gain any more coverage over the ActiveRecord code?

Everything you say re: testing makes sense, as long as we have appraisals with one or the other adapter we're good. I'm squash-merging, iterate on top.

@mach-kernel this was a lot of work, thanks for hanging in with my picky CR - want to join the maintainers list?  You're the man. I'm a little slow today, US holiday :)

@dblock: I want to do the release: confirmation on minor version bump?

Up to you, but sounds good.


To fix the issue, I have correctly output the requested info

Pull Request Type
What kind of change does this PR introduce?
[- ] Solved an issue/task
[ ] Bugfix
[ ] Feature
[ ] Code style update (formatting, local variables)
[ ] Refactoring (no functional changes, no api changes)
[ ] Build related changes
[ ] CI related changes
[ ] Documentation content changes
[ ] Other... Please describe:
What is the current behavior?
Now it prints the output after performing the opertation

Merged

This is an automated message from Fork, Commit, Merge [BOT].

Thank you for your contribution! Your pull request has been merged. The files have been reset for the next contributor.
What's next?
If you're looking for more ways to contribute, I invite you to check out our forkcommitmerge.io website repository. The repository contain real issues that you can help to resolve or create some of your own if you see any bugs or want to add new features to the site, etc. You can also check out the Influences section in the README to find more projects similar to this one.
Also please leave a star to this project if you feel it helped you, i would really appreciate it.
I look forward to seeing your contributions!


nvr --remote-tab* creates an empty tab when it spawns a new neovim server

When we call, for instance, nvr --remote-tab-silent a and we don't have the neovim server instance yet the spawned neovim instance has two tabs, [No Name], a.
This doesn't match the behavior of vim --remote-tab-silent a which only creates a.
I think it makes sense to call :edit for the first file even in --remote-tab* (or maybe add an option to do that) when we spawn a new server.

You're right, that's inconvenient and nvr -p file already acts properly.
I'll make them behave the same tonight.

Fixed. Thanks for reporting! ✨

Thank you for your quick action!!:smile:
Although it works fine for a single file (and this is what I almost always use), and -p works fine even for multiple files, it looks like nvr --remote-tab-silent a b opens both a an b with :edit which results in the same tab :cry:

*doh*
Obviously we also have to check if the first buffer was handled already, otherwise it would use :edit all the time. My bad!
Uploaded a new version.


deleteAll(beans) return int , but deleteAll(beanType,ids) return void in EbeanServer

I'm curious about why deleteAll(beans) return int , but deleteAll(beanType,ids) return void in EbeanServer . andsave insert update ...  the same

For deleteAll() I'll change those to all return int.
saveAll(), insertAll(), updateAll() are much less interesting as they don't have the bulk statement mechanism that delete can use.  I'm not sure if returning int for saveAll(), insertAll() or updateAll() is actually useful or informative.
So for this I'm changing the deleteAll() methods to return int.


Zuul /routes endpoint issue with consul registered services.

Zuul's /routes endpoint, with the default configuration in application.yml, returns {}, for successfully registered services in consul.
Zuul Service
@EnableZuulProxy
@SpringBootApplication
@EnableDiscoveryClient
public class GatewayApplication {
See this in Gateway logs,  2018-04-12 22:25:04.700  WARN 41888 --- [nio-8080-exec-1] o.s.c.n.zuul.web.ZuulHandlerMapping      : No routes found from RouteLocator
Sample Service Registering successfully to consul
@EnableDiscoveryClient
@RestController
@SpringBootApplication
public class BookApplication {
@RequestMapping(value = "/available")
public String available() {
return "Spring in Action";
}

/routes is returning the data, only if the route is explicitly configured...
zuul:
  routes:
    book:
      path: /book/**
      serviceId: book

Any help would be appreciated... Thank you.

Can you check with the latest versions and see if this is still an issue?

Closing due to lack of requested feedback. If you would like us to look at this issue, please provide the requested information and we will re-open the issue.


env step time

Hi! Just want to double check. I noticed that rollouts are a lot longer than I expected and created a simple test with random actions:
import gym
import memory_maze
from tqdm.auto import trange

def rollout(env):
    done = False
    obs = env.reset()
    total_reward = 0.0
    while not done:
        obs, reward, done, _ = env.step(env.action_space.sample())
        total_reward += reward
    return total_reward

env = gym.make("MemoryMaze-9x9-v0")

for _ in trange(10):
    rollout(env)

On my M1 this will take almost 2 minutes just for 10 random rollouts. Is it normal? Because it's very slow (~80fps).

Yes, ~80 fps sounds reasonable. That comes down to MuJoCo engine, see e.g. #openai/mujoco-py/issues/277

Also note: there are different MuJoCo rendering settings so you can try setting MUJOCO_GL=glfw|egl|osmesa and see if it makes a difference. EGL is supposed to be the fastest, if supported, and we are defaulting to that.


Fix Parse kafaka request failed by index out of range

The clientLength is negative that caused index out of range.

Other functions have been checked and fixed. Methods like ReadInt64() which is not used is now removed.


Support pattern /articles/:id.:format

"A router" should "handle dots" in {
  val router = new Router[String]
  router.pattern("/articles/:id",         "show")
  router.pattern("/articles/:id.:format", "show")

  val routed1 = router.route("/articles/123")
  routed1.target           should be ("show")
  routed1.params.size      should be (1)
  routed1.params.get("id") should be ("123")

  val routed2 = router.route("/articles/123.json")
  routed2.target               should be ("show")
  routed2.params.size          should be (2)
  routed2.params.get("id")     should be ("123")
  routed2.params.get("format") should be ("json")
}

+1

I though this is a glitch on my side but actually perhaps there is more general pattern here.
At the moment it seems this is not possible to handle variables inside strings:
.GET("/{:segment}-inserat/:seo-part/{:adId}.html", vipHandler)
Ideally for me I am only interested in segment and adId as variables not other strings.


Update wget from L105 of the action to be universal.

I'm testing on both Ubuntu and Windows for my actions but it kept failing at Lines 102 - 107 due to wget only available when the OS is set to Ubuntu.

A quick fix of having a conditional step for this or using suisei-cn/actions-download-file workflow can be applied to prevent such errors.
This line would suffice for the latter option:
    - name: Download fabric-api v${{ inputs.fabric-api }}
      uses: suisei-cn/actions-download-file@818d6b7dc8fe73f2f924b6241f2b1134ca1377d9
      with:
        url: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api/${{ inputs.fabric-api }}+${{ inputs.mc }}/fabric-api-${{ inputs.fabric-api }}+${{ inputs.mc }}.jar
        target: "run/mods"

@Virus5600 any specific reason you're running the action on a Windows runner?
I'm willing to work towards supporting Windows runners if there's a genuine use-case.
I would be entirely opposed to using that action you mentioned though, it seems to be wildly overcomplicated for fetching a single file, I'd consider a conditional perhaps.
I'm also relatively sure curl in some form is in GitHub's Windows runner images, so I'd also be keen to avoid a conditional if possible in favor of something universally available.

I just checked, curl is available on the Windows runners @Virus5600
I'll accept a PR if you'd like to go that direction.


#195

Here's a draft api revamp for #195.
Basicallly the idea is that not the host decides how something is loaded and managed but the Loader implements all the logic. As such these loaders will now manage the load, update,  remove functionality.
At this point it's not 100% backwards compatible, here's the catch:

You'll need to update all your Loaders to use the new Loader.load method.

For Maya there's avalon.maya.pipeline.ReferenceLoader - when you inherit your Loader from that specific loader you can keep your old process logic and it should work as expected.

Any calls to host.load, host.update or host.remove should be respectively refactored to api.load, api.update, api.remove.

Also check for this in your current Loaders! If you trigger a host.load from your plug-in make sure to also refactor that to use the new api.load() method.

Other notes:

The logic for "inheritance" check in discover has changed so that it allows checking multiple inheritance instead of only name of direct parent class.
This could have some other commits that haven't been pulled into getavalon/core yet, but they should be minor.
Note that the update method on the Loader plug-in doesn't have the same signature as the api.update method. (Because the api.update method already gets the representation for you based on version number alone so that logic doesn't have to be pushed into the Loader and Avalon's core handles the main logic there.)
Renaming the Loader can have confusing results - currently the loader that's picked to remove or update a container is based on its loader data, which is purely the Loader's class name. As such, when a Loader class is renamed (or removed!) it cannot be managed anymore. @mottosso Not sure how to deal with that otherwise?

Note: I've tested some tools but of course take a run with this yourself to see whether it's stable!

Here's how we refactored our config to update with these changes: https://github.com/BigRoy/colorbleed-config/commit/fcd0498f7cad0cca744f624f2d3262c90b40f0c3
And here's how with these new API we're able to load gpuCaches and manage them through the manager: https://github.com/BigRoy/colorbleed-config/commit/88ff47311efaa38b7b99033e5b1fae033524c421

The logic for "inheritance" check in discover has changed so that it allows checking multiple inheritance instead of only name of direct parent class.

A little warning here, the original reason for doing it this way was because when Avalon modules are reloaded the Loader classes lose their "identity" and can't be compared with the current class anymore, causing a isinstance to fail with a hard-to-debug error message.
Not everyone does this, and it's solely for debugging and development and won't affect the end user. But the alternative is either (1) having to reload Maya when changing modules or (2) finding a way of breaking the cyclic dependency currently causing this issue.

Renaming the Loader can have confusing results

Yes, that's the nature of identifying objects by name. IMO the convenience trumps the complication in this case and I'd say the solution is to simply never change the name of loaders. We could embed an "id" or "label" though, rather than the class name so that devs can refactor at-will, without breaking things.

At this point it's not 100% backwards compatible, here's the catch:

Sorry, this is a must. Even if it's temporarily 100% compatible, it's important for the transition.

Could you share an example of a loader using this new API?

Could you share an example of a loader using this new API?

Sorry, I just saw you shared one in your subsequent post!

Not everyone does this, and it's solely for debugging and development and won't affect the end user. But the alternative is either (1) having to reload Maya when changing modules or (2) finding a way of breaking the cyclic dependency currently causing this issue.

Actually, I believe the code I implemented is still doing a check based on names but allows any of the parent classes to be named like that. :) So have a look and maybe test it... but it's working here.

Sorry, this is a must. Even if it's temporarily 100% compatible, it's important for the transition.

In that case I believe we need to have a metaclass kind of backwards compatibility like in Pyblish where it would "magically" rebuild.
The compatibility is currently only for the notes at the top! And, to clarify, it's compatible with older assets and scenes, you just need to update your local code too use these new classes/methods.

Note: I'm still fixing some tiny quirks and typos in the code, but it should be relatively stable - though don't merge until I've the extra fixes in of course. The current state should allow you to play around.

With this new API here's another Loader preview, a draft for a "setdress" kind of package that can hold any other type of asset linked into its hierarchy... almost like a shot builder.

I've cherry-picked the relevant commits from my dev branch and tested it here locally with my colorbleed config.

Note: I'm still fixing some tiny quirks and typos in the code, but it should be relatively stable - though don't merge until I've the extra fixes in of course. The current state should allow you to play around.

These are now resolved.

The compatibility is currently only for the notes at the top! And, to clarify, it's compatible with older assets and scenes, you just need to update your local code too use these new classes/methods.

This is still true. As such read the refactoring notes at the top.

If you have custom code outside of avalon calling host.load you'll need to refactor to api.load, the same for host.update and host.remove.
If you have loaders with process implemented for Maya you can inherit from avalon.maya.pipeline.ReferenceLoad to preserve old behavior. To update to the new api you can inherit from api.Loader and implement your load logic completely.

@mottosso could you test this on your end?

Having a look now

Ok, it isn't backwards compatible. It has to be.
I've pushed a suggested method of retaining backwards compatibility. It's incomplete, but should highlight the essentials. Have a look and let me know what you think.

Ok, it isn't backwards compatible. It has to be.

Very unfortunate, the code could have been so much cleaner. Just to be sure. In what way does it need to be backwards compatible? If you'd update the config your scenes should be backwards compatible.
In a way it's only a code breaking compatibility, with an update there you can continue to work with older scenes. Refactoring my config took me 5 minutes. ;)

It needs to not interrupt the artist in any way, the old Loader plug-ins must work as-is, such that they can transition piece by piece.
Pyblish is a good example of this. You'll still find some plug-ins use the very old set_data interface. When encountered, you swap it for .data.
We need to make this a habit; upgrades should never break anything. It'll create a few of upgrading and I want upgrades to be trustworthy.

It needs to not interrupt the artist in any way, the old Loader plug-ins must work as-is, such that they can transition piece by piece.

Sure. The change doesn't interrupt the artists, just the tech will need to be updated along. I've had this from time to time too with Pyblish though but I understand where you're coming from. This will just be much harder to maintain.
I'll have a look at getting this backwards compatible.

This will just be much harder to maintain.

It will be worth it. The alternative is being afraid of upgrades, and having to update large portions of code, in multiple repositories, all at once. That is hard.
Once we're in the compatibility mindset, we'll find ways of making it elegant. It takes some getting used to. For one, those functions I chucked back into maya.pipeline can go into a maya.compat and implicitly imported into maya.pipeline. See how pyblish does this its compat module. The result is static, legacy functions, residing away from relevant code so it doesn't bother anyone. Virtually zero cost to readability and maintenance.

We're in a good position here, as the loaders use different names for its inner methods. It'd be much harder to do this have we used the old process name!

It'd be much harder to do this have we used the old process name!

Sure, but if someone know ever implements a process method than it would automatically assume it's an older loader which it might not be. To me it's just an error in the new logic, but again, I can see where it's good to maintain older logic too - looking at it from my perspective it tends to just create more code that can break.
For example, in this case it'd mean the backwards compatibility is only maintained for Maya functionality. What if there was already code for the same in other hosts. It's not actually maintaining that too.

For example, in this case it'd mean the backwards compatibility is only maintained for Maya functionality.

The legacy load was only ever implemented for Maya, so it's quite safe to assume. These kind of things will have to be made on a case-by-case basis.

Sure, but if someone know ever implements a process method than it would automatically assume it's an older loader which it might not be.

Yes, a better approach would be to embed something in  your new Loader classes that distinguishes itself from the old ones. Maybe add a version = "2.0"?  I seem to be unable to commit to my branch. Do I need to revert yours first?

Pull/merge mine first

There we go, that should be it.

I'm going into a meeting now; then I'll give this another test. Could you check this on your end for now @mottosso?

Will do

I think this latest commit was another crucial thing I missed. :) Now it should be there.

Looking good Roy, I've made a few cosmetic tweaks (please install a linter), but other than that I think it's great.

Looks good. I'm merging this.


Node modules css test

This PR introduces a test failure that can only be fixed when this is too or we find a workaround in Nuxt itself.

To debug locally:
bin/nuxt dev test/fixtures/basic/

@Atinux @clarkdo Just to be clear guys, this test is failing because of the vue-style-loader related bug. What it demonstrates is that you cannot have a node_modules CSS import inside a Vue template running in Nuxt:
import 'module/modules-internal-path/file.css'

Now, let me know if we're not going to dedicate efforts into fixing this and I'll open a PR to make a note about this limitation in the documentation. I'm probably removing the import from my use-case app and adding that CSS manually to my build.

This is unfortunately a regression for Nuxt because the same statement works in 1.4.2 :(

For reference, discusson on the vue-style-loader's PR: https://github.com/vuejs/vue-style-loader/pull/30

Well I found where it comes from, and it's not from Nuxt.js or Vue Server Renderer but the library itself that is not constructed correctly.
It works perfectly when doing:

vue build --target lib --name test-module index.vue inside the node_modules/test-module/ directory (think of npm install -g @vue/cli @vue/cli-service-global)
Updating node_modules/test-module/index.vue to:

<script>
import './test-style.css'

export default {}
</script>

Updating plugins/testModule.js to:

import '../node_modules/test-module/'
import '../node_modules/test-module/dist/test-module.css'

Also, since the library is only a CSS file at the end, import '../node_modules/test-module/' is useless :)
It is crucial that CSS is exported for a library, otherwise, Webpack will add document.createElement.... to add dynamically the CSS, and it is not recommended at all.

Cool, I'm adding docs to prevent people from doing this mistake :)


ReconnectPeerOnError

AddPeerWithConnection takes persistent bool. If true, the onError for the newPeer is ReconnectPeerOnError, which calls StopPeerForError and then attempts to establish a new connection and run back through AddPeerWithConnection, adding the new peer to the switch.
Issue https://github.com/tendermint/go-p2p/issues/13

replaced by https://github.com/tendermint/go-p2p/pull/18


Project popup

Mostly complete, some work still to be done but time is way up.

Invalid 🔴
Hi @razvanso,
While you made a great effort in this project, unfortunately, I cannot proceed to review your code.
Invalid Code Review Request
You have submitted a project, that linters are not passing and a Pull request description is not descriptive please fix them and resubmit
Your Code Review Request will be marked as invalid in your Dashboard, so please submit a new one once you are ready 🙏
Cheers and Happy coding!👏👏👏
Feel free to leave any questions or comments in the PR thread if something is not 100% clear.
Please, remember to tag me in your question so I can receive the notification.
Please, do not open a new Pull Request for re-reviews. You should use the same Pull Request submitted for the first review, either valid or invalid unless it is requested otherwise.

Invalid Code Review Request does not count into the code reviews limit.


Cache transform in rigidbody and shape

Adds transform caching to rigidbody and shape. Also, changes the way to apply the position and rotation to use the SetPositionAndRotation method.
I noticed that retrieving the position and rotation over the matrix is really slow in comparison.
My test-results with 2400 rigidbodys for the PostStepForward method:
Current: ~4.1 ms
With caching: ~ 3.6 ms
With caching+SetPositionAndRotation: ~ 3.3ms => 20% less
With caching+SetPositionAndRotation+Using matrix: ~5.6ms
Maybe you can confirm this.

Thank you very much for your contribution! I didn't know this could be an issue and I found out the Unity community is rather inconclusive about it so I did my own tests, in a Player. ~2050 rigid bodies and ~2050 static shapes (to trigger Shape.transform to be used). Without caching (reference):

With caching and using SetPositionAndRotation:

Without caching and using SetPositionAndRotation performs better than the reference but is still significantly worse than your caching approach.


CFP: Update Cilium Helm install docs for EKS and the AWS VPC CNI

Cilium Feature Proposal
Is your proposed feature related to a problem?
The documentation for installing CIlium in EKS with Helm currently recommends patching the VPC CNI with kubectl to enable Cilium to manage ENIs instead of the VPC CNI. While this does work, it adds a manual step that prevents bootstrapping a Cilium EKS cluster using Terraform or eksctl.
# Relevant code
kubectl -n kube-system patch daemonset aws-node --type='strategic' -p='{"spec":{"template":{"spec":{"nodeSelector":{"io.cilium/aws-node-enabled":"true"}}}}}'

Describe the feature you'd like
Please update the docs to instead recommend using addon configuration values to patch the vpc-cni at the time its deployed. Please note that nodeSelector is not a value that can be configured, so instead, affinity must be used.
The VPC CNI can be configured to not run on Cilium managed nodes using the following configuration values:
{"affinity":{"nodeAffinity":{"requiredDuringSchedulingIgnoredDuringExecution":{"nodeSelectorTerms":[{"matchExpressions":[{"key":"io.cilium/aws-node-enabled","operator":"In","values":["true"]}]}]}}}}

Sounds like this would be quite helpful, next step would be creating a concerete PR proposal.

Hi @caleb-devops , thanks for the tips but when i put this configuration prior to cilium install the coredns addon doesn't start. (Obviously because no CNI are found).

Hi @Smana. CoreDNS requires that the CNI is deployed, so with the vpc-cni configuration values in place, Cilium will need to be installed before CoreDNS can run. The recommended node taint should prevent other pods (like coredns) from being scheduled on the node until Cilium is deployed.
  taints:
   - key: "node.cilium.io/agent-not-ready"
     value: "true"
     effect: "NoExecute"

Thx @caleb-devops , Actually I already have a toleration. However the cilium install only starts after the EKS module deployment is finished (including CoreDNS which is an EKS addon).

@Smana you don't need to add the toleration to CoreDNS. Because CoreDNS relies on the CNI, it will need to be deployed after Cilium is installed. For the terraform-aws-modules/eks/aws module, try the following:

Set vpc-cni configuration_values in the terraform-aws-modules/eks/aws module
  cluster_addons = {
    vpc-cni = {
      most_recent              = true
      before_compute           = true

      configuration_values = jsonencode({
        affinity = {
          nodeAffinity = {
            requiredDuringSchedulingIgnoredDuringExecution = {
              nodeSelectorTerms = [{
                matchExpressions = [{
                  key      = "io.cilium/aws-node-enabled"
                  operator = "In"
                  values   = ["true"]
                }]
              }]
            }
          }
        }
      })
    }
  }

Install the Cilium Helm chart using the Terraform Helm provider

Install remaining addons (I use the terraform-aws-eks-blueprints-addons module for this)

The AWS EKS team will be adding an option to initialize a bare EKS cluster (without any addons) through https://github.com/aws/containers-roadmap/issues/923. After they do, it should no longer be necessary to patch the VPC CNI to disable it.

EKS clusters can now be created without any addons: https://aws.amazon.com/about-aws/whats-new/2024/06/amazon-eks-cluster-creation-flexibility-networking-add-ons/

@caleb-devops may I know your eventual script to setup eks together with cilium in one go?

@caleb-devops may I know your eventual script to setup eks together with cilium in one go?

@caleb-devops  I am very interested in this too, I'm deploying a bare EKS cluster and there's some very strange order-of-eventing going on with coreDNS refusing to become healthy (and thus the nodes stall out in not ready state)


Install documentation and Python 3 support

Currently INSTALL says that cf-units is not compatible with Python 3. Looking at the code and travis builds, it looks like that's no longer the case, and that the install documentation should be updated.
Can cf-units be installed with conda-forge on Python 3? I tried and it looks like it's unavailable there.

This works,
conda create --name TEST --channel conda-forge python=3 cf_units

Ah thanks, you are correct. conda install cf_units works. Before I was using conda install cf-units, as the documentation suggests (which should also be updated).


NEED HLEP: Why need to reopen a link for each local xa transaction?

https://github.com/dtm-labs/dtm/blob/a788ebe5e83b9f61af44430c1d2a7eb6ffe104da/client/dtmcli/xa.go#L41-L60

@yedf2 another question, i check the code of dtm about xa local transaction, find that the server side has to do sql.Open in every transaction. I think it will cause bad performance. It there any approach i can just pass a connection instead of the DBConf?
https://github.com/dtm-labs/dtm/blob/31bf7d9fad4d0b6a15b5573229053eda5603b745/dtmcli/dtmimp/trans_xa_base.go#L36
Originally posted by @SgtDaJim in https://github.com/dtm-labs/dtm/issues/277#issuecomment-1106117540

got it, thanks for your reply


Busybox tr compatibility

Busybox tr doesn't support groups like [:digit:]. Using digits directly is not as clean but improves portability.

Hey @Frederick888 👋
Thanks for spotting this.
Can you please rewrite your commit message to:
fixed BusyBox's tr command compatibility, fixes #441

Thanks!

Hey @Frederick888 👋
Thanks for spotting this.
Can you please rewrite your commit message to:
fixed BusyBox's tr command compatibility, fixes #441

Thanks!

@gpakosz Done :)

@gpakosz Done :)

Hey @Frederick888 👋
LOL I deleted my comment because I thought "well I avoid bothering them and do it myself" 😅
Thanks, merging!

Hey @Frederick888 👋
LOL I deleted my comment because I thought "well I avoid bothering them and do it myself" 😅
Thanks, merging!

And now I'm curious: what's your BusyBox use case?

And now I'm curious: what's your BusyBox use case?

Haha no worries. Thanks for the prompt response.

Haha no worries. Thanks for the prompt response.

BusyBox use case?

I use it in OpenWRT, where by default it's all busybox utils.

BusyBox use case?

I use it in OpenWRT, where by default it's all busybox utils.

I see thanks for the information

I see thanks for the information


Fix dependencies in dockerfile

I've fixed the dependencies on trt=8.5. 8.6 removes the plugin support and this results in the performance degradation.

Fixes #8


Excessive FeedIterator looping

Describe the bug
A query that takes 1 round trip to execute at https://cosmos.azure.com/ is taking 16 round trips when using the Microsoft.Azure.Cosmos NuGet library. The database I am running this against has Read and Write Locations in North Central US
and South Central US.
To Reproduce
Solution attached.
Expected behavior
1 round trip.
Actual behavior
16 round trips.
Environment summary
SDK Version: 3.16.0 for sure, but goes back further.
OS Version: Windows.
SdkIssue.zip

@timsander1 or @bchong95 can you please take a look?

Hi @jackbond
We were able to reproduce your issue. In the more recent SDKs versions we added more preemption points in the query iteration logic. The FeedIterator yields a page of result for every page it gets from the service. Before we used to batch these pages as much as possible for the caller and return a single large page. This led to two issues. The first is that the query was less responsive, since the caller would have to await for results from all partitions before getting a single page back. The second is that if the FeedIterator retrieved a page from the backend that wouldn't fit in the caller's specified maxItemCount, then it would throw away the result essentially wasting RUs.
If the concern is the number of roundtrips from your middle tier to your application layer, then you can batch pages manually in the middle to optimize for this. Some psuedoish code would be:
List<Item> items = new List<Item>();
int middleTierPageSize = 100;
string continuationToken = null;
FeedIterator<Item> feedIterator = CreateFeedIterator(continuationToken, middleTierPageSize);
while (feedIterator.HasMoreResults && items.Count != middleTierPageSize)
{
        FeedResponse<Item> page = feedIterator.ReadNextAsync();
        int roomLeftInPage = middleTierPageSize - items.Count;
        if(page.Count > roomLeftInPage)
        {
               // We grabbed too many results for the batching of pages
               feedIterator = CreateFeedIterator(continuationToken, roomLeftInPage);
               page = feedIterator.ReadNextAsync();
        }

        items.AddRange(page);
        continuationToken = page.ContinuationToken;
}

return (items, continuationToken);

Please let us know if you have any other concerns.

Hi @bchong95
Thank you for your quick response. Something seems VERY WRONG here. Setting aside potential workarounds for a second, when I run one of my queries locally, it's taking 10 seconds to return 11 documents from a collection with 966 total documents. I think a lot of people would be surprised for that to be the default behavior from the code below. I'm also not sure what you mean by "from your middle tier to your application tier". To make it really concrete, my concern is how many round trips it takes from my application code to Cosmos. I've included the debug output I'm seeing below. Is it normal to be seeing this many connections and handshakes operations? As I said earlier, this same query in the portal takes about 2 seconds.
            using FeedIterator<DocumentWrapper<T>> iterator =  query.ToFeedIterator();

            string queryText = query.ToQueryDefinition().QueryText;

            DateTimeOffset startTime = DateTimeOffset.UtcNow;

            Debug.WriteLine($"QueryText: {queryText}");

            while (iterator.HasMoreResults)
            {
                FeedResponse<DocumentWrapper<T>> items = await iterator.ReadNextAsync(cancellationToken).ConfigureAwait(false);

                totalCharge += items.RequestCharge;
                roundTrips++;

                result.AddRange(items.Select(z => z.Document));
            }

            Debug.WriteLine($"Duration: {DateTimeOffset.UtcNow - startTime}");
            Debug.WriteLine($"Roundtrips: {roundTrips}");

QueryText: SELECT VALUE root FROM root WHERE (((root["deletedOn"] = null) OR (NOT IS_DEFINED(root["deletedOn"]))) AND ((root["label"] = "SampleDocument") AND (ARRAY_LENGTH(root["document"]["items"]) > 2)))
DocDBTrace Information: 0 : Opened 1 channels to server rntbd://cdb-ms-prod-northcentralus1-fd2.documents.azure.com:14094/
DocDBTrace Information: 0 : Awaiting RNTBD channel initialization. Request URI: rntbd://cdb-ms-prod-northcentralus1-fd2.documents.azure.com:14094/apps/8c4bc221-6e30-4a7a-b066-532e6f758bbf/services/1b5dc0d4-e24a-49f0-8efa-c05dba0a408c/partitions/8d392908-47d9-4456-a779-f827ca97568e/replicas/132454938164596948s/
DocDBTrace Information: 0 : Port reuse mode: ReuseUnicastPort. Connection:  -> rntbd://cdb-ms-prod-northcentralus1-fd2.documents.azure.com:14094/
DocDBTrace Information: 0 : RNTBD: ConnectUnicastPortAsync connecting to rntbd://cdb-ms-prod-northcentralus1-fd2.documents.azure.com:14094/ (address <IP_ADDRESS>)
DocDBTrace Information: 0 : RNTBD connection established <IP_ADDRESS>:61524 -> <IP_ADDRESS>:14094
DocDBTrace Information: 0 : RNTBD SSL handshake complete <IP_ADDRESS>:61524 -> <IP_ADDRESS>:14094
DocDBTrace Information: 0 : Opened 1 channels to server rntbd://cdb-ms-prod-northcentralus1-fd2.documents.azure.com:14118/
DocDBTrace Information: 0 : Awaiting RNTBD channel initialization. Request URI: rntbd://cdb-ms-prod-northcentralus1-fd2.documents.azure.com:14118/apps/2c855c97-f894-4f78-b82e-7d2da642b013/services/3d19529b-c89d-4081-b6b9-5042305cf676/partitions/b8b859b2-742b-4534-8e3b-54306a056bfe/replicas/132455244324372032s/
DocDBTrace Information: 0 : Port reuse mode: ReuseUnicastPort. Connection:  -> rntbd://cdb-ms-prod-northcentralus1-fd2.documents.azure.com:14118/
DocDBTrace Information: 0 : RNTBD: ConnectUnicastPortAsync connecting to rntbd://cdb-ms-prod-northcentralus1-fd2.documents.azure.com:14118/ (address <IP_ADDRESS>)
DocDBTrace Information: 0 : RNTBD connection established <IP_ADDRESS>:61525 -> <IP_ADDRESS>:14118
DocDBTrace Information: 0 : RNTBD SSL handshake complete <IP_ADDRESS>:61525 -> <IP_ADDRESS>:14118
DocDBTrace Information: 0 : Opened 1 channels to server rntbd://cdb-ms-prod-northcentralus1-fd2.documents.azure.com:14345/
DocDBTrace Information: 0 : Awaiting RNTBD channel initialization. Request URI: rntbd://cdb-ms-prod-northcentralus1-fd2.documents.azure.com:14345/apps/8c4bc221-6e30-4a7a-b066-532e6f758bbf/services/a2018b46-d587-406f-9589-5485ab937fb4/partitions/9a905070-6452-4223-855e-4c511777b189/replicas/132449295631809176s/
DocDBTrace Information: 0 : Port reuse mode: ReuseUnicastPort. Connection:  -> rntbd://cdb-ms-prod-northcentralus1-fd2.documents.azure.com:14345/
DocDBTrace Information: 0 : RNTBD: ConnectUnicastPortAsync connecting to rntbd://cdb-ms-prod-northcentralus1-fd2.documents.azure.com:14345/ (address <IP_ADDRESS>)
DocDBTrace Information: 0 : RNTBD connection established <IP_ADDRESS>:61527 -> <IP_ADDRESS>:14345
DocDBTrace Information: 0 : RNTBD SSL handshake complete <IP_ADDRESS>:61527 -> <IP_ADDRESS>:14345
DocDBTrace Information: 0 : Opened 1 channels to server rntbd://cdb-ms-prod-northcentralus1-fd2.documents.azure.com:14078/
DocDBTrace Information: 0 : Awaiting RNTBD channel initialization. Request URI: rntbd://cdb-ms-prod-northcentralus1-fd2.documents.azure.com:14078/apps/8c4bc221-6e30-4a7a-b066-532e6f758bbf/services/a7f852ef-063b-4ef0-b7a3-8a60d76530f4/partitions/6f88c6a4-190e-4d83-804f-f73d1a8a511d/replicas/132554496817986890s/
DocDBTrace Information: 0 : Port reuse mode: ReuseUnicastPort. Connection:  -> rntbd://cdb-ms-prod-northcentralus1-fd2.documents.azure.com:14078/
DocDBTrace Information: 0 : RNTBD: ConnectUnicastPortAsync connecting to rntbd://cdb-ms-prod-northcentralus1-fd2.documents.azure.com:14078/ (address <IP_ADDRESS>)
DocDBTrace Information: 0 : RNTBD connection established <IP_ADDRESS>:61528 -> <IP_ADDRESS>:14078
DocDBTrace Information: 0 : RNTBD SSL handshake complete <IP_ADDRESS>:61528 -> <IP_ADDRESS>:14078
DocDBTrace Information: 0 : Opened 1 channels to server rntbd://cdb-ms-prod-northcentralus1-fd2.documents.azure.com:14104/
DocDBTrace Information: 0 : Awaiting RNTBD channel initialization. Request URI: rntbd://cdb-ms-prod-northcentralus1-fd2.documents.azure.com:14104/apps/2c855c97-f894-4f78-b82e-7d2da642b013/services/bcfe1d18-396e-4b08-8881-275609f3cca4/partitions/c08d916d-f23f-43f0-acbe-fb8526c60bf1/replicas/132576306466603955s/
DocDBTrace Information: 0 : Port reuse mode: ReuseUnicastPort. Connection:  -> rntbd://cdb-ms-prod-northcentralus1-fd2.documents.azure.com:14104/
DocDBTrace Information: 0 : RNTBD: ConnectUnicastPortAsync connecting to rntbd://cdb-ms-prod-northcentralus1-fd2.documents.azure.com:14104/ (address <IP_ADDRESS>)
DocDBTrace Information: 0 : RNTBD connection established <IP_ADDRESS>:61529 -> <IP_ADDRESS>:14104
DocDBTrace Information: 0 : RNTBD SSL handshake complete <IP_ADDRESS>:61529 -> <IP_ADDRESS>:14104
DocDBTrace Information: 0 : Opened 1 channels to server rntbd://cdb-ms-prod-northcentralus1-fd2.documents.azure.com:14378/
DocDBTrace Information: 0 : Awaiting RNTBD channel initialization. Request URI: rntbd://cdb-ms-prod-northcentralus1-fd2.documents.azure.com:14378/apps/2c855c97-f894-4f78-b82e-7d2da642b013/services/6ccb25c5-a368-4edf-ad28-1787afacd9fe/partitions/5169f631-5d3b-46f9-aba6-bfe3499f1281/replicas/132488686519934568s/
DocDBTrace Information: 0 : Port reuse mode: ReuseUnicastPort. Connection:  -> rntbd://cdb-ms-prod-northcentralus1-fd2.documents.azure.com:14378/
DocDBTrace Information: 0 : RNTBD: ConnectUnicastPortAsync connecting to rntbd://cdb-ms-prod-northcentralus1-fd2.documents.azure.com:14378/ (address <IP_ADDRESS>)
DocDBTrace Information: 0 : RNTBD connection established <IP_ADDRESS>:61530 -> <IP_ADDRESS>:14378
DocDBTrace Information: 0 : RNTBD SSL handshake complete <IP_ADDRESS>:61530 -> <IP_ADDRESS>:14378
DocDBTrace Information: 0 : Opened 1 channels to server rntbd://cdb-ms-prod-northcentralus1-fd2.documents.azure.com:14387/
DocDBTrace Information: 0 : Port reuse mode: ReuseUnicastPort. Connection:  -> rntbd://cdb-ms-prod-northcentralus1-fd2.documents.azure.com:14387/
DocDBTrace Information: 0 : Awaiting RNTBD channel initialization. Request URI: rntbd://cdb-ms-prod-northcentralus1-fd2.documents.azure.com:14387/apps/2c855c97-f894-4f78-b82e-7d2da642b013/services/d458f27c-ab83-43ad-a356-70fe1e59f0e0/partitions/da6a0c56-d287-470c-9da4-669ebf89ebf1/replicas/132572926655511494s/
DocDBTrace Information: 0 : RNTBD: ConnectUnicastPortAsync connecting to rntbd://cdb-ms-prod-northcentralus1-fd2.documents.azure.com:14387/ (address <IP_ADDRESS>)
DocDBTrace Information: 0 : RNTBD connection established <IP_ADDRESS>:61531 -> <IP_ADDRESS>:14387
DocDBTrace Information: 0 : RNTBD SSL handshake complete <IP_ADDRESS>:61531 -> <IP_ADDRESS>:14387
DocDBTrace Information: 0 : Opened 1 channels to server rntbd://cdb-ms-prod-northcentralus1-fd2.documents.azure.com:14386/
DocDBTrace Information: 0 : Awaiting RNTBD channel initialization. Request URI: rntbd://cdb-ms-prod-northcentralus1-fd2.documents.azure.com:14386/apps/8c4bc221-6e30-4a7a-b066-532e6f758bbf/services/bd14d3a8-e0ae-43bd-bd6a-f629e0aefe74/partitions/58265910-7584-484b-93c1-3e21f6284477/replicas/132470244707743200p/
DocDBTrace Information: 0 : Port reuse mode: ReuseUnicastPort. Connection:  -> rntbd://cdb-ms-prod-northcentralus1-fd2.documents.azure.com:14386/
DocDBTrace Information: 0 : RNTBD: ConnectUnicastPortAsync connecting to rntbd://cdb-ms-prod-northcentralus1-fd2.documents.azure.com:14386/ (address <IP_ADDRESS>)
DocDBTrace Information: 0 : RNTBD connection established <IP_ADDRESS>:61532 -> <IP_ADDRESS>:14386
DocDBTrace Information: 0 : RNTBD SSL handshake complete <IP_ADDRESS>:61532 -> <IP_ADDRESS>:14386
DocDBTrace Information: 0 : Opened 1 channels to server rntbd://cdb-ms-prod-northcentralus1-fd7.documents.azure.com:14302/
DocDBTrace Information: 0 : Awaiting RNTBD channel initialization. Request URI: rntbd://cdb-ms-prod-northcentralus1-fd7.documents.azure.com:14302/apps/75156c2e-1811-4881-834d-262db7d6e6f3/services/6614d59a-1090-41c4-ab3f-d8c76602319d/partitions/57abc04b-6632-4405-a6ba-589e2adad60c/replicas/132555781465838632s/
DocDBTrace Information: 0 : Port reuse mode: ReuseUnicastPort. Connection:  -> rntbd://cdb-ms-prod-northcentralus1-fd7.documents.azure.com:14302/
DocDBTrace Information: 0 : RNTBD: ConnectUnicastPortAsync connecting to rntbd://cdb-ms-prod-northcentralus1-fd7.documents.azure.com:14302/ (address <IP_ADDRESS>)
DocDBTrace Information: 0 : RNTBD connection established <IP_ADDRESS>:61533 -> <IP_ADDRESS>:14302
DocDBTrace Information: 0 : RNTBD SSL handshake complete <IP_ADDRESS>:61533 -> <IP_ADDRESS>:14302
DocDBTrace Information: 0 : Opened 1 channels to server rntbd://cdb-ms-prod-northcentralus1-fd7.documents.azure.com:14335/
DocDBTrace Information: 0 : Awaiting RNTBD channel initialization. Request URI: rntbd://cdb-ms-prod-northcentralus1-fd7.documents.azure.com:14335/apps/75156c2e-1811-4881-834d-262db7d6e6f3/services/afe228a6-d3d6-450e-b537-0d5ade9747af/partitions/27e09018-8860-49d0-803a-32c5df874ae2/replicas/132560426677020402s/
DocDBTrace Information: 0 : Port reuse mode: ReuseUnicastPort. Connection:  -> rntbd://cdb-ms-prod-northcentralus1-fd7.documents.azure.com:14335/
DocDBTrace Information: 0 : RNTBD: ConnectUnicastPortAsync connecting to rntbd://cdb-ms-prod-northcentralus1-fd7.documents.azure.com:14335/ (address <IP_ADDRESS>)
DocDBTrace Information: 0 : RNTBD connection established <IP_ADDRESS>:61534 -> <IP_ADDRESS>:14335
DocDBTrace Information: 0 : RNTBD SSL handshake complete <IP_ADDRESS>:61534 -> <IP_ADDRESS>:14335
DocDBTrace Information: 0 : Opened 1 channels to server rntbd://cdb-ms-prod-northcentralus1-fd3.documents.azure.com:14198/
DocDBTrace Information: 0 : Awaiting RNTBD channel initialization. Request URI: rntbd://cdb-ms-prod-northcentralus1-fd3.documents.azure.com:14198/apps/ec38ea0b-bcae-4fd9-8cab-15dc46e5cec0/services/47b03172-b344-413f-9e3f-cf187fdeb52a/partitions/ee8a7892-2a9b-474e-9320-c0bb22757aeb/replicas/132552294819203683p/
DocDBTrace Information: 0 : Port reuse mode: ReuseUnicastPort. Connection:  -> rntbd://cdb-ms-prod-northcentralus1-fd3.documents.azure.com:14198/
DocDBTrace Information: 0 : RNTBD: ConnectUnicastPortAsync connecting to rntbd://cdb-ms-prod-northcentralus1-fd3.documents.azure.com:14198/ (address <IP_ADDRESS>)
DocDBTrace Information: 0 : RNTBD connection established <IP_ADDRESS>:61537 -> <IP_ADDRESS>:14198
DocDBTrace Information: 0 : RNTBD SSL handshake complete <IP_ADDRESS>:61537 -> <IP_ADDRESS>:14198
DocDBTrace Information: 0 : Opened 1 channels to server rntbd://cdb-ms-prod-northcentralus1-fd3.documents.azure.com:14386/
DocDBTrace Information: 0 : Awaiting RNTBD channel initialization. Request URI: rntbd://cdb-ms-prod-northcentralus1-fd3.documents.azure.com:14386/apps/ec38ea0b-bcae-4fd9-8cab-15dc46e5cec0/services/4b0a67c9-88da-40fb-8715-3ce797ce22fd/partitions/b519eb6c-44e4-410d-86a3-0b8c9b6fa39f/replicas/132551522949775568p/
DocDBTrace Information: 0 : Port reuse mode: ReuseUnicastPort. Connection:  -> rntbd://cdb-ms-prod-northcentralus1-fd3.documents.azure.com:14386/
DocDBTrace Information: 0 : RNTBD: ConnectUnicastPortAsync connecting to rntbd://cdb-ms-prod-northcentralus1-fd3.documents.azure.com:14386/ (address <IP_ADDRESS>)
DocDBTrace Information: 0 : RNTBD connection established <IP_ADDRESS>:61538 -> <IP_ADDRESS>:14386
DocDBTrace Information: 0 : RNTBD SSL handshake complete <IP_ADDRESS>:61538 -> <IP_ADDRESS>:14386
DocDBTrace Information: 0 : Opened 1 channels to server rntbd://cdb-ms-prod-northcentralus1-fd3.documents.azure.com:14393/
DocDBTrace Information: 0 : Awaiting RNTBD channel initialization. Request URI: rntbd://cdb-ms-prod-northcentralus1-fd3.documents.azure.com:14393/apps/e76e515e-a556-4c72-bee2-85eae0a7fad3/services/805c6bf0-6909-4d1f-9c37-0d06959a9377/partitions/88020475-21d9-4c0d-9a5b-25350711fc8b/replicas/132563073861760504s/
DocDBTrace Information: 0 : Port reuse mode: ReuseUnicastPort. Connection:  -> rntbd://cdb-ms-prod-northcentralus1-fd3.documents.azure.com:14393/
DocDBTrace Information: 0 : RNTBD: ConnectUnicastPortAsync connecting to rntbd://cdb-ms-prod-northcentralus1-fd3.documents.azure.com:14393/ (address <IP_ADDRESS>)
DocDBTrace Information: 0 : RNTBD connection established <IP_ADDRESS>:61539 -> <IP_ADDRESS>:14393
DocDBTrace Information: 0 : RNTBD SSL handshake complete <IP_ADDRESS>:61539 -> <IP_ADDRESS>:14393
DocDBTrace Information: 0 : Opened 1 channels to server rntbd://cdb-ms-prod-northcentralus1-fd3.documents.azure.com:14348/
DocDBTrace Information: 0 : Awaiting RNTBD channel initialization. Request URI: rntbd://cdb-ms-prod-northcentralus1-fd3.documents.azure.com:14348/apps/e76e515e-a556-4c72-bee2-85eae0a7fad3/services/9dac0443-6f52-46df-a9d6-56ed7430a125/partitions/156fcbb2-16e8-42a1-8499-1093b57d03cb/replicas/132531128349323697s/
DocDBTrace Information: 0 : Port reuse mode: ReuseUnicastPort. Connection:  -> rntbd://cdb-ms-prod-northcentralus1-fd3.documents.azure.com:14348/
DocDBTrace Information: 0 : RNTBD: ConnectUnicastPortAsync connecting to rntbd://cdb-ms-prod-northcentralus1-fd3.documents.azure.com:14348/ (address <IP_ADDRESS>)
DocDBTrace Information: 0 : RNTBD connection established <IP_ADDRESS>:61540 -> <IP_ADDRESS>:14348
DocDBTrace Information: 0 : RNTBD SSL handshake complete <IP_ADDRESS>:61540 -> <IP_ADDRESS>:14348
DocDBTrace Information: 0 : Opened 1 channels to server rntbd://cdb-ms-prod-northcentralus1-fd1.documents.azure.com:14312/
DocDBTrace Information: 0 : Awaiting RNTBD channel initialization. Request URI: rntbd://cdb-ms-prod-northcentralus1-fd1.documents.azure.com:14312/apps/8c91a418-c1cf-4beb-a4b8-73c0abb39bb4/services/fb18ee42-e9ed-4a22-8b3d-cfd227685d37/partitions/15d9a085-818c-4483-86e7-294ca019b30f/replicas/132580038854488399s/
DocDBTrace Information: 0 : Port reuse mode: ReuseUnicastPort. Connection:  -> rntbd://cdb-ms-prod-northcentralus1-fd1.documents.azure.com:14312/
DocDBTrace Information: 0 : RNTBD: ConnectUnicastPortAsync connecting to rntbd://cdb-ms-prod-northcentralus1-fd1.documents.azure.com:14312/ (address <IP_ADDRESS>)
DocDBTrace Information: 0 : RNTBD connection established <IP_ADDRESS>:61541 -> <IP_ADDRESS>:14312
DocDBTrace Information: 0 : RNTBD SSL handshake complete <IP_ADDRESS>:61541 -> <IP_ADDRESS>:14312
DocDBTrace Information: 0 : Opened 1 channels to server rntbd://cdb-ms-prod-northcentralus1-fd1.documents.azure.com:14326/
DocDBTrace Information: 0 : Awaiting RNTBD channel initialization. Request URI: rntbd://cdb-ms-prod-northcentralus1-fd1.documents.azure.com:14326/apps/8c91a418-c1cf-4beb-a4b8-73c0abb39bb4/services/ea5c28a7-1f27-4db6-bcd7-43e2c52c15f5/partitions/8b9ebead-9248-43de-8b23-b500f846b3a2/replicas/132570006778202098s/
DocDBTrace Information: 0 : Port reuse mode: ReuseUnicastPort. Connection:  -> rntbd://cdb-ms-prod-northcentralus1-fd1.documents.azure.com:14326/
DocDBTrace Information: 0 : RNTBD: ConnectUnicastPortAsync connecting to rntbd://cdb-ms-prod-northcentralus1-fd1.documents.azure.com:14326/ (address <IP_ADDRESS>)
DocDBTrace Information: 0 : RNTBD connection established <IP_ADDRESS>:61542 -> <IP_ADDRESS>:14326
DocDBTrace Information: 0 : RNTBD SSL handshake complete <IP_ADDRESS>:61542 -> <IP_ADDRESS>:14326
Duration: 00:00:13.4751403
Roundtrips: 16

It's hard to tell where the time is being spent. Can you provided CosmosDiagnostics traces with this nuget package?
https://github.com/Azure/azure-cosmos-dotnet-v3/issues/2172
Or you can wait till SDK 3.17 is out, which has the needed details.

Would the 3.17 preview work?

Yeah preview works :)

I've updated to the preview, the debug output looks pretty much the same. Do I have to change a setting to get additional information?

oh make sure you are logging items.CosmosDiagnostics

Hopefully you'll be able to make some sense of this... :)
diagnostics.json.txt

From the diagnostics it looks like your client is spend most of the time on the network. Please rerun this on a machine that is collocated with your data and also set the max degree of parallelism + max buffered item count to a high value.

Previously I had set {MaxBufferedItemCount = int.MaxValue} and didn't see any change. I just updated QueryRequestOptions to  {MaxConcurrency = 16} and the total duration of the while loop went down to 1.5 seconds, pretty much on par with what I've been seeing when running through the portal. I then changed to {MaxConcurrency = -1} and also saw 1.5 seconds. Am I correct in concluding that not setting MaxConcurrency is equivalent to {MaxConcurrency = 1}?
Upping the concurrency certainly reduces the overall query time, but I'm curious what "round trips" means in the "Query Stats" tab on cosmos.azure.com. I had assumed that number lined up with the number of calls to ReadNextAsync on an iterator. If the number circled on this page is accurate, how are they getting all the results in 1 trip?

@southpolesteve can you help answer the question about query in the portal?

@jackbond. The portal uses the JavaScript SDK to make queries directly to the service via gateway mode. It also has some special configuration that is designed to provide the best experience for browser users and restrictions of that environment, so it may not exactly match the behavior of another SDK.
You are correct the round trip count is calculated on the client from how many times the query iterator in the JS SDK call in the browser. In some cases the underlying code will need to make multiple requests in order to complete a query. Round trips here is not necessarily the same thing as request count.
If you have any more questions about the data explorer, feel free to open an issue in our repo https://github.com/Azure/cosmos-explorer

Closing this since the question has been answered, and there has been no updates. Please feel free to reopen if there is additional questions.

Do you have any documentation or details related to "we added more preemption points in the query iteration logic" ? Does it implies more latency or cost (RU) due to multiple calls done on the background ? Does it have the same behavior on gateway mode and direct mode ? I would like to understand SDK configuration impact. ;)

@YohanSciubukgian can you please open a new issue for your question.


[BUG] Whatsapp service not usable anymore

Describe the bug
Regarding the official documentation of the Rhymen/go-whatsapp API

Warning
This package is not being actively maintained currently and will soon be unusuable as WhatsApp updates to multi-device. Please look at tulir/whatsmeow for a Go WhatsApp Web API that is actively maintained and supports WhatsApp multi-device.

And the issues opened on it (https://github.com/Rhymen/go-whatsapp/issues/644 & https://github.com/Rhymen/go-whatsapp/issues/651), it seems that this API is no more usable.
Is there a plan to integrate the one proposed  (whatsmeow) into Notify in the future?

@matbgn thank you very much for the report! And sorry for the inconvenience. I definitely want to keep the WhatsApp service alive, so I or someone else will take care of it as soon as possible.

I can take a crack at it.

Seems like a DB needs to be hooked up for the new package. A default sqlite implementation is provided. Do we want to go this route or keep lookin?

This is just my personnal opinion, but IF there could be a solution (i.e. with a reasonable amount of research) to avoid an additional SQL DB (even a lite one), I will be more than glad.

@slowmanchan appreciate your efforts and sorry for the late response. This one just kinda got lost in the wild for me.
Just in case that you're still interested in implementing this, I'd prefer the WhatsApp service to have a "bring it yourself" solution for the storage. Meaning, the service should expose a way for the user to set and provide their own storage solution via an interface or object. An additional default and minimalistic in-memory solution would be okay with me, too!
Let me know what you think and if you need any help with this. Sorry again for letting you wait for that long.

Hi there!
Any news @slowmanchan?
Il the mean time it seems that there is a new up-to-date library for WhatsApp written in Go:
https://github.com/tulir/whatsmeow
Any of you want to take a look?

@nikoksr Is this being worked on at the moment? If not, I would love to give this a try!

@thedarthcoder appreciate your interest in helping the project! The issue is indeed still free, so if you want to tackle, we all would greatly appreciate that.
Watch out tho, the WhatsApp service is structured differently than most other services. We'll need interfaces etc to allow for user provided storages etc. Please let me know if you need any help.

@nikoksr Thanks a lot. It would be great if you could assign me this issue. Would surely love to work on it.

Thanks @nikoksr. An update on this, as @slowmanchan mentioned I think this will indeed need an additional database setup like sqlite. But I'm working to find a generic solution to expose a service where users can specify their own storage solution.
I'm also researching on ways to avoid the db integration entirely or at least make it as minimalistic as possible.
More updates will follow soon. Cheers!

@thedarthcoder that would be amazing. We appreciate it so much. Let me know if there's anything I can do, to help you out.
We have discussed in the past to add a in-memory store as a default solution. I don't like the idea that someone can't just play around with the WhatsApp service, but has to write a store implementation first. If that puts too much on your plate, let me also know and I'll implement it as soon as you got a draft out.

@thedarthcoder hope you're doing well. Anything we can do to push this forward? Any help we can offer you?

Friendly reminder @bytesizedwizard but maybe @nikoksr you have read some stuff and maybe have another idea or perspective to address Whatsapp's API?

Hi @nikoksr , after looking at the wrapper for the cloud API, it seems this could be simple implement. Here's a basic example implementation I drafted: https://github.com/ppmdo/notify/blob/dev-ppm/service/whatsapp/whatsapp.go.
Is it going in the right direction?
I'm not super familiar with WhatsApp Business, but from the API Docs it seems there are two types of messages: template message and simple text messages. Shall we support both? Or what would be the idea?


Holding the "drop camera" button makes the camera not drop, having a very narrow field of view.

When changing cameras, if you hold the select button while you're in the "drop camera" view mode, you won't drop the camera, having this odd and rather useless point of view camera mode. I don't know if this is an intentional feature.
Here's some examples:

That's original feature of the camera, not a bug.


MigrateConfig and migrate integration testing base

This PR is a subset of https://github.com/flutter/flutter/pull/95708
This adds MigrateConfig, which handles tracking migration metadata by writing a .migrate_config file in each platform directory.
Each migrate config file tracks the initial create revision, base revision (revision that the app was last successfully migrated with), the platform the file is addressing, and a list of files and directories that should be unmanaged by the migration tool.
This PR also adds the core migrate_project.dart to enable integration testing of the tool. The testing framework downloads copies of fully generated apps off of CIPD.
Resolves https://github.com/flutter/flutter/issues/95360

Other than reusing .metadata, LGTM


Add available

Added the available attribute to TileDBBackendEntrypoint to be compatible with xarray version 0.19.0
Former practice for other backends was to get has_ourpackage at the top and then do: if has_ourpackage: BACKEND_ENTRYPOINT["ourpackage"] = ...
But this appears to have changed to just set an available attribute on the backend entrypoint class that depends on has_ourpackage, and then unequivocally setting BACKEND_ENTRYPOINT["ourpackage"] = ....
And if the available attribute in not added, an error is raised.

Replaced with PR #57


MicrosoftAzureConsumptionInsights.Table Parameters

Could information be provided about the MicrosoftAzureConsumptionInsights.Table and parameters for it, specifically how to specify number of months? There are examples in the doc of how to do that with MicrosoftAzureConsumptionInsights.Contents but this is not the default way that the Consumption Insights connector works any longer.

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

ID: 3e71361e-a9bb-89ee-27ee-7e38a60914a0
Version Independent ID: df5a9b26-4eb1-a396-1c84-9f3ec6232753
Content: Connect to Azure cost and usage from Power BI Desktop - Power BI
Content Source: powerbi-docs/desktop-connect-azure-consumption-insights.md
Service: powerbi
Sub-service: powerbi-desktop
GitHub Login: @davidiseminger
Microsoft Alias: davidi

Hi, @jasonpnnl -- thanks for your question! I've assigned it to the author to help.

We're working with engineering to address this, and will update the article soon. Thanks for reporting it.

We're in the process of updating this article with changes to its functionality, and adding more information. Should be available in the next week or so, so hopefully the updates address your post. Thanks for your post, and your suggestions.


Oops, can't find 'llvm-config'.

I am trying to compile the AFL code on my GNU linux machine.
Following below steps, but facing some issues with make command.

sudo apt update
sudo apt install build-essential clang llvm gcc git make python3
git clone https://github.com/google/AFL.git
cd AFL
make clean
export LLVM_CONFIG="llvm-config-13"
cd llvm_mode
make

Currently my Linux box is having LLVM_CONFIG as 3.4.0 clang 3.4.0 clang++
The error facing is :
[root@Jumpserver bin]# pwd
/usr/bin
[root@Jumpserver bin]# cd
[root@Jumpserver ~]# cd aflnet/
[root@Jumpserver aflnet]# cd llvm_mode/
[root@Jumpserver llvm_mode]# make
[*] Checking for working 'llvm-config'...
[-] Oops, can't find 'llvm-config'. Install clang or set $LLVM_CONFIG or $PATH beforehand.
(Sometimes, the binary will be named llvm-config-3.5 or something like that.)
make: *** [test_deps] Error 1
You can have to update the proper versions for clang, clang++ and LLVM_CONFIG if anything mention wrong
[root@Jumpserver llvm_mode]# llvm-config --version
3.4.2
[root@Jumpserver llvm_mode]# clang --version
clang version 3.4.2 (tags/RELEASE_34/dot2-final)
Target: x86_64-redhat-linux-gnu
Thread model: posix
[root@Jumpserver llvm_mode]#
Do we need LLVM_CONFIG version 13 ?? to compile AFL code ?

If you look at https://github.com/aflnet/aflnet/pull/90 it shows that for Kali 22.04 you need to specificically use clang/llvm version 12.
Ubuntu 22.04 still has clang-12 in its packages which you can apt install. That will also install llvm-config-12.

@samohib1 , please try with this commands
AFL_NO_X86=1 gmake && gmake -C llvm_mode
AFL_NO_X86=1 gmake install


Define the scenario for energy:

what is the navigation mission

navigate from A to B

what is the adaptation trigger?

battery consumption gets higher than a threshold

what is the adaptation?

the metacontrol reconfigures move_base to the low_power config
FDs only involve change in move_base params max_vel and max_accel

[ ] Define constants for the battery
[ ] Define A and B

* Define constants for the battery

https://docs.google.com/spreadsheets/d/12aB35Jj4qmarIq3OWHocATmnDfUa6ftp_j09W5twy1g/edit#gid=0

Define A and B

Possible initial Values:  A =  0, 0 (center of the map)
B =   10.5, 5.5  (Exit point)

The following values are used to control the battery load cont
const_linear_vel = 1.3
const_acceleration = 0.1
const_frequency = 0.04
additional_consumption = 0.0

With these values, the average power load while running the navigation is
safe configuration ~= 0.99
standard configuration ~= 1.45
fast configuration ~= 1.99

The additional_consumption parameter can be used to artificially increase the power load

The battery constants have been added to the battery power load controller  (see https://github.com/rosin-project/metacontrol_sim/pull/9#issue-410812757)


WOOL Editor does not warn about missing "Start" node

WOOL Editor should provide a warning if there is no Node with the title "Start". Maybe it should even enforce the existence of one such node.

The editor now enforces existence of a start node, providing an alert in specific cases where it's missing.


WRP-3075: Updated dependencies for moonstone, moonstone samplers and moonstone storybook

Enact-DCO-1.0-Signed-off-by: Alexandru Morariu<EMAIL_ADDRESS>Checklist

[X] I have read and understand the contribution guide
[ ] A CHANGELOG entry is included
[ ] At least one test case is included for this feature or bug fix
[X] Documentation was added or is not needed
[ ] This is an API breaking change

Issue Resolved / Feature Added
Updated package.json dependencies to fix security vulnerabilities.
Resolution
Additional Considerations
Links
WRP-3075
Comments

Before updating the version of ilib, you must also upload the version of ilib-webos.
(https://github.com/enactjs/moonstone/blob/325317e097cf59535a7045ad9e42c0fc7a24ae00/package.json#L61)
If ilib-webos does not have the same version, please do not update and keep the version of ilib.


InteractiveViewer should support mouse scrolling

Use case
We use @justinmc's InteractiveViewer widget for vertical lists that can have an arbitrary width (the items can have arbitrary widths).
→ you can obviously apply the same to the reverse dimensions :)
This is very nice for allowing this use case. However, what is a bummer that the mouse scrolling characteristic is lost due to this widget.
Users find this to be really unintuitive on web.
Proposal
The InteractiveViewer should have something like a scrollingDirection attribute, which determines the Axis along which a mouse scroll will scroll the InteractiveViewer.
In my example, this would allow to use the mouse scroll wheel (or trackpad scrolling) to scroll vertically while scrolling horizontally still needs a drag.

That sounds reasonable, thanks for opening this issue.  Maybe if scaling is disabled via scaleEnabled we could make scroll events cause panning by default?  Or maybe that's too simplistic and we do need a parameter, because people might not want the behavior to change if they temporarily disable scale, for example.
We should also think about mice that have directional scrolling, like Apple's mice.

@justinmc That sounds very good! 👍🏽
Actually, just yesterday we also discovered the case of directional scrolling. Any trackpad usually allows scrolling in all directions and that would be a great fit :)
An example for this would be Lucidchart (in case you know it). It allows to pan using trackpads by default.
Regarding your point of automatic panning on scroll: I think that this is very reasonable because it seems like it would be the natural choice. If we create an interactive viewer, we probably expect it to be interactive.
In all of the use cases that I had, I only used it for panning actually and disabled scaling because of that.

Ah thanks for the Lucidchart example.  It looks like they do panning with bidirectional scrolling by default, and holding down the option key + scrolling does zoom. Come to think of it, I think this is how photo editors like Gimp and Photoshop work on desktop too.
I think we can do a panByScrolling boolean to enable this behavior, or even a controlScheme enum with these two options.

I just copied the InteractiveViewer class and replaced the _receivedPointerSignal(PointerSignalEvent) function with this
void _receivedPointerSignal(PointerSignalEvent event) {
    if (event is PointerScrollEvent) {
      if (_gestureIsSupported(_GestureType.scale)) {
        final childRenderBox =
        _childKey.currentContext.findRenderObject() as RenderBox;
        final childSize = childRenderBox.size;
        final scaleChange = 1.0 - event.scrollDelta.dy / childSize.height;
        if (scaleChange == 0.0) {
          return;
        }
        final focalPointScene = _transformationController.toScene(
          event.localPosition,
        );
        _transformationController.value = _matrixScale(
          _transformationController.value,
          scaleChange,
        );

        // After scaling, translate such that the event's position is at the
        // same scene point before and after the scale.
        final focalPointSceneScaled = _transformationController.toScene(
          event.localPosition,
        );
        _transformationController.value = _matrixTranslate(
          _transformationController.value,
          focalPointSceneScaled - focalPointScene,
        );
      } else if (_gestureIsSupported(_GestureType.pan)) {
        final childRenderBox =
        _childKey.currentContext.findRenderObject() as RenderBox;
        final childSize = childRenderBox.size;
        final yScroll = -event.scrollDelta.dy;
        final xScroll = -event.scrollDelta.dx;
        _transformationController.value = _matrixTranslate(
          _transformationController.value,
          Offset(xScroll, yScroll),
        );
      }
    }
  }

Scaleing takes precedence, but if that's disabled the widget works like a charm with mousepads or scrollwheels.
Now I am just missing scrollbars, in both directions.

It looks like a rotation feature is in the works (#57698); it'd be great if a rotation touch gesture on macOS and iPadOS could trigger that as well.

It looks like a rotation feature is in the works (#57698); it'd be great if a rotation touch gesture on macOS and iPadOS could trigger that as well.

@justinmc  InteractiveViewer should support scrollbars, in both directions. Thanks!

@zhou67832033 Thanks, that's a great example of 2d mouse scrolling with scroll bars!

@zhou67832033 Thanks, that's a great example of 2d mouse scrolling with scroll bars!

Are there currently plans to support Scrollbar feature?

scrollbars

I just copied the InteractiveViewer class and replaced the _receivedPointerSignal(PointerSignalEvent) function with this
void _receivedPointerSignal(PointerSignalEvent event) {
    if (event is PointerScrollEvent) {
      if (_gestureIsSupported(_GestureType.scale)) {
        final childRenderBox =
        _childKey.currentContext.findRenderObject() as RenderBox;
        final childSize = childRenderBox.size;
        final scaleChange = 1.0 - event.scrollDelta.dy / childSize.height;
        if (scaleChange == 0.0) {
          return;
        }
        final focalPointScene = _transformationController.toScene(
          event.localPosition,
        );
        _transformationController.value = _matrixScale(
          _transformationController.value,
          scaleChange,
        );

        // After scaling, translate such that the event's position is at the
        // same scene point before and after the scale.
        final focalPointSceneScaled = _transformationController.toScene(
          event.localPosition,
        );
        _transformationController.value = _matrixTranslate(
          _transformationController.value,
          focalPointSceneScaled - focalPointScene,
        );
      } else if (_gestureIsSupported(_GestureType.pan)) {
        final childRenderBox =
        _childKey.currentContext.findRenderObject() as RenderBox;
        final childSize = childRenderBox.size;
        final yScroll = -event.scrollDelta.dy;
        final xScroll = -event.scrollDelta.dx;
        _transformationController.value = _matrixTranslate(
          _transformationController.value,
          Offset(xScroll, yScroll),
        );
      }
    }
  }

Scaleing takes precedence, but if that's disabled the widget works like a charm with mousepads or scrollwheels.
Now I am just missing scrollbars, in both directions.

Have you implemented scrollbars, can you share it?

No one is currently working on scrollbars for InteractiveViewer that I'm aware of, but it seems like a good idea.

Have you implemented scrollbars, can you share it?

@zhou67832033 I have not, sorry

vertical scroll should work using the scrollWheel and then the zoom using control + scroll

Yes precisely, this is rather straight-forward to implement. You can see an example I built in this demo.

It would be nice if scrollbar is supported by InteractiveViewer. Currently, I have a some troubles when using nested scrollbars for the same purpose.
See: https://stackoverflow.com/q/67461431/8228301

This works for panning by scrolling: https://github.com/flutter/flutter/compare/master...justinmc:iv-scroll-pan
However, what are all of the use cases that we want to support here?  Some people have mentioned that scrolling should only pan in the vertical direction and shift+scroll should pan horizontally, others seem to want slightly different behavior.  Can we support everyone's use cases using an enum like in that branch?  Or do we need something more powerful?

Related: Another issue calls for pinch-to-zoom with the trackpad https://github.com/flutter/flutter/issues/63084

@justinmc having written support for this in Flutter myself, looking at other Flutter web apps like Rive (+ looking at their sources), and working with many apps supporting this (Miro, Lucidchart, etc.), this is the default behavior I have observed:

Free panning using trackpad should be supported if the trackpad allows for it (example is MacBook).
Locked panning if you only have mouse wheel (or some other kind of scroll lock): regular scrolls vertically, with shift it scrolls horizontally.
Shift should also lock to horizontal panning on trackpad, so no need to do any special handling (it just works perfectly implicitly).
Pinching on trackpad should zoom.
Holding ctrl (command on macOS) & scrolling should zoom instead of pan.
Using control / command and the plus & minus buttons should zoom in & out.

@justinmc tbh, you can probably just go to editor.rive.app and copy their behavior because it is written in Flutter Web and does exactly what all other major apps do.
The behavior is not too complicated to implement perfectly. I can share my code if that helps, but there is one blocker: Rive and I both had to override some default DOM behaviors (see my answers on SO, i.e. this one and this one). Also, you might want to add some "polyfill"-esque code to make sure the behavior is consistent across all browsers. You can check the Rive source for that.
Overall, I think this is the expected behavior everywhere looking at all major apps and it is fairly trivial to get perfectly working with a bit of HTML event handling.

@justinmc Thank you for the InteractiveViewerScrollControls.scrollPans code. I really like the idea.
I was able to easily build the "press CMD/CTRL to zoom" interaction:
class __FlowGraphState extends State<_FlowGraph> {
  bool _isZoomKeyPressed = false;

  @override
  void initState() {
    super.initState();
    RawKeyboard.instance.addListener(_onKeyPressed);
  }

  void _onKeyPressed(RawKeyEvent event) {
    var zoomKeyPressed = event.isControlPressed || event.isMetaPressed;
    if (_isZoomKeyPressed != zoomKeyPressed) {
      setState(() {
        _isZoomKeyPressed = zoomKeyPressed;
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return InteractiveViewer(
      scrollControls: _isZoomKeyPressed
          ? InteractiveViewerScrollControls.scrollScales
          : InteractiveViewerScrollControls.scrollPans,
      maxScale: 1.5,
      minScale: 0.1,
      constrained: false,
      boundaryMargin: EdgeInsets.all(5000),
      child: child,
    );
  }

  @override
  void dispose() {
    RawKeyboard.instance.removeListener(_onKeyPressed);
    super.dispose();
  }
}

The only thing I would change in the scrollPans code is to adapt the panning to feel the same whatever the scale is.
So divide the translation by the currentScale:
var currentScale = _transformationController!.value.getMaxScaleOnAxis();
final Offset translation = Offset(-event.scrollDelta.dx, -event.scrollDelta.dy) / currentScale;

Currently the PointerScrollEvent does not send the implicit "ctrlKey' == true when the gesture is zooming vs panning. You can keep track of the control key separately with the keyboard listener.
 if (event is PointerScrollEvent) {
    // TODO: Scale and Pan at the same time
    if (_controlPressed) {
      double zoomDelta = (-event.scrollDelta.dy / 300);
      final scale = zoomDelta;
      final origin = controller.mousePosition;
      print("scale: ${scale} at origin: ${origin}");
    } else {
      final panDelta = -event.scrollDelta;
      print("pan: ${panDelta}");
    }
  }

You can capture this information correctly with dart:html and the control key is implicitly true when its a zoom gesture on the trackpad:
html.document.body!.addEventListener('wheel', (e) {
      e.preventDefault();
      final event = e as html.WheelEvent;
      final origin = event.offset;
      if (e.ctrlKey == true) {
        double scale = 1;
        if (event.deltaY < 0) {
          scale = 0.1;
        } else {
          scale = -0.1;
        }
        print("scale: ${scale} at origin: ${origin}");
      } else {
        final panDelta = Offset(-event.deltaX.toDouble(), -event.deltaY.toDouble());
        print("pan: ${panDelta}");
      }
    }, false);

Wheel Event:
https://developer.mozilla.org/en-US/docs/Web/API/Element/wheel_event
You can pan and zoom with the same event with this demo:
https://rodydavis.github.io/html-canvas-utilities/

I recently looked into InteractiveViewer and making it a 2D scrollable under the hood, and unfortunately, that is not something we are likely to do. Retro-fitting this for scrolling would likely require a bunch of breaking changes to this widget.
This is because InteractiveViewer is not actually a scrolling widget.
Instead I have been working on a separate 2D scrollable that will be very similar to this. In contrast, it will work with all of the existing scrolling constructs, like scroll notifications, scrollbars, etc.
Regarding this issue though, there are a lot of comments with varying feature requests. I'd like to resolve these. Since there are several, we will likely need to split them out individual issues so we can get them assigned and addressed.
From what I gather above:

support for panning the interactive viewer with pointer scrolling instead of scaling
trackpad pinch to scale

this looks like it may have been resolved by https://github.com/flutter/flutter/pull/89944
or https://github.com/flutter/engine/pull/31593, see https://github.com/flutter/flutter/issues/63060
also https://github.com/flutter/flutter/issues/63084

keyboard modifiers on pointer scrolling
platform specific behaviors
device specific behaviors (trackpad v mouse, etc)

Can anyone confirm some of this for us? With a clear picture of what is needed, we can set about having it done. :) Thanks!

Great! Thank for the feedback. I have updated the list above.

I recently looked into InteractiveViewer and making it a 2D scrollable under the hood, and unfortunately, that is not something we are likely to do. Retro-fitting this for scrolling would likely require a bunch of breaking changes to this widget.

I would like to point out that adding mouse scrolling to InteractiveViewer does not require "Retro-fitting this for scrolling", which also means that it would not require "a bunch of breaking changes to this widget". I do understand that making it a scrollable would require that, but do we need to make it a scrollable?
@Piinks Is the new widget you are planning to build meant to replace InteractiveViewer? Otherwise, I think it might be worth to challenge the requirement of making it integrate with scroll notifications et al.

@creativecreatorormaybenot Mouse scrolling on some platforms (macOS notably) requires scrolling physics, and implementing that requires either the whole scrolling infrastructure or duplicating that whole logic, neither of which is reasonable to retrofit into a widget that wasn't built for it. Our goal is to have widgets be coherent and implement the same APIs so that they are easier to fit together. How exactly this will turn out for InteractiveViewer is yet to be determined. I recommend letting @Piinks work through the design and see what they come up with. In the meantime if you would be satisfied with a variant of InteractiveViewer that implements just part of the problem (e.g. non-physics-aware mouse scrolling) then you are welcome to fork the widget and upload a package to pub.

I did the impossible... I found a way to both support mouse scrolling and showing scrollbars with using InteractiveViewer class. I made this package: flutterx_table
This package was originally created as a more customizable alternative to DataTable but I also introduced a very useful component:
ScrollableViewScrollbar.both(                       controllerX: _controllerX,                       controllerY: _controllerY,                       child: ScrollableView(                               controllerX: _controllerX,                               controllerY: _controllerY,                               child: <whatever>));
It works perfectly with Apple Trackpad and allows to scroll smoothly in every direction

It should also have an option to disable mouse wheel events. In my case I need interactive viewer for mobile devices but don't want to update scale for mouse wheel events. Is there any way to disable it or do we need to write custom code ourselves?

Now that https://github.com/flutter/flutter/pull/112171 and related PRs are merged, scrolling on a mouse or trackpad causes a pan, and pinching on a trackpad causes a scale.  There are several other suggestions in this issue (like the previous comment), but I'm going to consider this issue complete.
For any other related features/bugs, please create a new issue and tag me.
For the option to allow scrolling to scale as before, see https://github.com/flutter/flutter/pull/114280.


[Event Request] Table 60 "Document Sending Profile" - OnBeforeDelete

Hi, would it be possible to get an OnBeforeDelete event in table 60 (Document Sending Profile), like this:
    trigger OnDelete()
    var
        Customer: Record Customer;
        IsHandled : Boolean;
    begin
        // New Event begin
         OnBeforeDelete(Rec,IsHandled);
         if IsHandled then
            exit;
        // New Event end

        if Default then
            Error(CannotDeleteDefaultRuleErr);

        Customer.SetRange("Document Sending Profile", Code);
        if Customer.FindFirst then begin
            if Confirm(UpdateAssCustomerQst, false, Code) then
                Customer.ModifyAll("Document Sending Profile", '')
            else
                Error(CannotDeleteErr);
        end;
    end;

    [IntegrationEvent(false, false)]
    local procedure OnBeforeDelete(DocumentSendingProfile: Record "Document Sending Profile"; var IsHandled : Boolean);
    begin
    end;

Thanks!

Thanks for reporting this. We agree, and we’ll publish a fix asap, either in an update for the current version or in the next major release. Please do not reply to this, as we do not monitor closed issues. If you have follow-up questions or requests, please create a new issue where you reference this one.


[tests-only] [full-ci] Bump master CORE_COMMITID to include core PR 39733

core PR https://github.com/owncloud/core/pull/39733 added more personal spaces test scenarios. Currently we do not run them here, but the line numbers of other scenarios will change.

drone did not start


Win conditions can be duplicated

The list of win conditions is not currently unique, and if there is a condition that occurs more than once, it'll show up more than once:

The list should be made unique by id.

Fixed as of fff5c4b8c0fd90428a7c13ce395113dd22918d9c


make column names plain text with spaces (pending formattable issue)

Easy fix in actuality; you can use plain text column names in double quotes within the formattable function call.


Change the wording for Sign eMOU modal window for MS Azure products

Description:
Now, if User creates MS Azure product, the person who would sign eMOU would see AWS in the text of the Sign eMOU modal.
We need to change the wording for MS Azure products, to the one which will be provided by Public Cloud team later.

Fixed:
Modal

PDF:


Empty-Commit

Making empty commit to retry olm dance

/retest

/lgtm

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

Comparison is base (10374b1) 60.57% compared to head (2c6b55d) 60.57%.

Additional details and impacted files

@@           Coverage Diff           @@
##             main      #61   +/-   ##
=======================================
  Coverage   60.57%   60.57%
=======================================
  Files           2        2
  Lines         104      104
=======================================
  Hits           63       63
  Misses         32       32
  Partials        9        9

/approve


[Request] Crushing/Smashing Upgrade Module

Describe the feature you'd like to have added
Honestly a module that allows for a way to make a cobbleworks that is self-contained within the JustDireThings mod would be awesome! Plus it has the added benefit of being useful while out mining.
On a Shovel, it converts gravel to sand.
On a Pickaxe, it converts any mined stone (which turns to cobble by default) into gravel. (If the smelt is left on or the pickaxe has silk touch, any stone you would normally get is converted into cobblestone, just cuz it'd be funny)
You can add some useful unique features to the module when used on other blocks, maybe compacted blocks drop 9 of the resources that make them up, or dust ores like Redstone and Glowstone have a chance to drop more dust, and maybe even allow dirt to get you sand, for a MUCH easier way to obtain lots of sand.
Additional information
No response

I'll consider this as an option, but its not a big priority right now :).  Thanks for the suggestion though!


Integrate stagger into Python's packaging system

See "Distributing Python Modules":

http://docs.python.org/3.0/distutils/index.html

Original issue reported on code.google.com by Karoly.Lorentey on 13 Jun 2009 at 5:45

Done a couple of years ago.


Move "use strict" inside scope

When bundling Reflect.js with other libraries for deployment purposes, the global "use strict" seems to cause problems because it automatically applies to all later libraries in the bundle. Would it be possible to nest the "use strict" inside all outermost global functions inside Reflect.js?

:+1:

This is great news!! @rbuckton could you also tag a release, so that dependent frameworks could upgrade?

I need to review to see if there are any other changes I want to take, buy I will publish a release shortly.

I realize this has been closed for a while, but I'm still seeing this. After running our bundle through UglifyJS, the 'use strict' block goes from this:
var Reflect;
(function (Reflect) {
    "use strict";
    // Load global or shim versions of Map, Set, and WeakMap
    var functionPrototype = Object.getPrototypeOf(Function);
   ...
   function decorate(decorators, target, targetKey, targetDescriptor) {
   ...

to this:
"use strict";var Reflect;!function(Reflect){function decorate(decorators,target,targetKey,targetDescriptor)
...

This causes problems since that "use strict" is now global.
I'm not entirely sure why this is happening, and not sure if it's the way the Reflect code is structured or if it is actually something odd that UglifyJS is doing (e.g. I'm not sure why it would strip out the IIFE like this).


Write to SelfLog when the internal buffer size limit is hit

I was playing around with dockerized seq, and noticed that it only saved a small part of total logs sent to it, without reporting any issues.
I am not sure if the issue is with seq or with the serilog sink.
Minimal repo with steps to reproduce can be found at the end of this post.
Log.Logger = new LoggerConfiguration()
    .WriteTo.File($"log{DateTime.UtcNow.ToString("yyyy-dd-M--HH-mm-ss")}.txt")
    .WriteTo.Seq("http://localhost:5341")
    .CreateLogger();

Serilog.Debugging.SelfLog.Enable(Console.Error);
int counter = 0;
while (counter < 1_000_000)
{
    Log.Information("count is {c} {g}", counter++, counter / 10_000);
}
Log.CloseAndFlush();

The code above when executed writes logs to file and seq.
Once the app is done running - file contains 1_000_000 rows as expected, while seq only has 12-20% of that.
select count(*) from stream => 185357 (this number varies between runs, but usually is between 120-200k).
No errors are thrown/written to console.
Diagnostics info can be found inside repo, file seq-diagnostics-8d79c5e01ed3e68.txt.
Steps to reproduce:
clone the repo https://github.com/akilin/demo-seq-losing-logs
startup seq in docker: docker-compose up -d
run the app: dotnet run

The 7.x series resolves this by applying backpressure when the channel fills.


Add a check for the sidekiq process pid

There is no error when the Sidekiq process is dead.
I implemented a process monitoring in my app like this:
monitor.add :process do |config|
  config.name = 'sidekiq-process'
  config.add_service(
    name: 'sidekiq',
    file: File.join(Rails.root, 'tmp', 'pids', 'sidekiq.pid')
  )
end

But I think this check could be implemented here in this gem

Hello!
I've made some tests with this issue, but hadn't yet enough time to reach a PR for this... I'm thinking on refactoring that check to expose two types of validations (one for redis connectivity, other for process lookup) into two different classes that are able to append errors to the main check (this is the most difficult part, since the check is very coupled with the error appending logic).
The other option is to provide a new check, something like sidekiq-process (since heartcheck will use a constantize to evaluate it into a class), but, although simpler, I'm not sure if this is a good approach from a usage perspective. Any ideas? WDYT?


BitPacker4x::num_bits_sorted SIGSEGV on empty arrays

When called with an empty array the num_bits_sorted triggers a segfault, this is not specified anywhere that the array must not be empty (or do I missed it?).
fn num_bits_sorted(&self, initial: u32, decompressed: &[u32]) -> u8 {
     unsafe { scalar::UnsafeBitPackerImpl::num_bits_sorted(initial, decompressed) }
}

If you want to easily reproduce the bug just create an empty vec![] and give it to BitPacker4x::num_bits_sorted.

Good point! Let's fix this.

@kerollmops also, if you intend to use bitpacking for meili, make sure to bitpack on blocks with a limit size. (typically 128 ints.)

@fulmicoton, what do you mean by a block with a limit size?

Yes. I'll update doc and add an assert.
Your first block required numbits=10 and the second one numbits=15.
The second block was ignored, so only 10 bits were used. The first delta for which it was insufficient happened to be exactly 2^10=1024 but that was a coincidence.

I have computed and added the num_bits values in fron t of all the numbers blocks.
Thank you! This is fixed now!


introducing styled-elements - DOM primitives with CSS template strings

lol. Was bored and made this, works well with yo-yo and choo. Based on styled-components for React. Made this post on yo-yo repo as well.
npm install --save styled-elements

Usage
import styled from 'styled-elements';

const Header = styled.h2`
  color: #333;
`;

const MyButton = styled.button`
  padding: 10px;
  border-radius: ${0}px;
  background: #F1F1F1;

  &:hover {
    background: #555;
  }
`;

const Wrapper = styled.div`
  width: 500px;
  border: 1px solid #aaa;

  @media (min-width: 400px) {
    width: 100%;
    background: #F1F1F1;
  }
`;

document.body.appendChild(Wrapper()(
  Header()('My header!'),
  MyButton({ onclick: () => console.log('yay!') })(
    'Do Something'
  )
));

See: https://github.com/SilentCicero/styled-elements

Thanks for sharing! :sparkles:


add e2e test for kafka transporter

[ ] If this pull request closes/resolves/fixes an existing issue, replace the issue number. Closes #.
[ ] Update the CHANGES log.

Do we have any approach to set docker-compose file by the environment to reduce copy-codes? @kezhenxu94

Do we have any approach to set docker-compose file by the environment to reduce copy-codes? @kezhenxu94

Not now, I'm also considering to provide this feature


feat: add webhook to apiland after publish

I'm not 100% sure I added it all properly, but I think maybe I did.
The apiland auth token needs to be added to the repos secrets.  It is in the shared password vault as an API token.

 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.

Looks good, but I need to fix CI before we can land this. Working on it in #286.

Tests are failing because there is no apiland endpoint set up for testing. Could you fix this @kitsonk?

Tests are failing because there is no apiland endpoint set up for testing. Could you fix this @kitsonk?

That was something I had a question about, what would be a good way to mock/create this?

@kitsonk You could start a server during the test run and assert it gets the correct result?

@kitsonk You could start a server during the test run and assert it gets the correct result?

🤦 I was having all this machinations in my head of how to figure out how to generate a docker image and terraform things... sigh. Silly me.

Ok @lucacasonato it took a bit, but a oneshot mock server seems to be working.

ping @lucacasonato when you get a moment...


Add Navattic source doc

Proposed changes
Adding documentation for Navattic to be a Segment Partner
Merge timing

ASAP once approved

@joe-ayoub-segment do you happen to know when this source will be available in the Segment app?

@albert-yu thanks for applying all the suggestions! We'll merge the docs in once the Source is ready in the Segment app

@albert-yu I'm closing this PR as I created an editable version for the docs team here: #4693