Unable to forwardRef

The proper way of passing ref in React is this ref={ref} but Cleave supports only the older approach htmlRef={r => ref=r}.
But this is not sufficient for forwarding refs (docs)
The workaround I am doing is this: htmlRef={r => ref && (innerRef.current = r)} but that's not right and it's throwing lint error because current should be read-only
The desired state is to be able do this htmlRef={innerRef}

Any comments about this? I'm having the same problem

Any comments about this? I'm having the same problem

Would be great to have a suggested/working solution for this - running into the same issue with forwarding refs and useRef.

I am also having the same problem, a solution would be great!

Hello everyone. I've managed to kind of solve the issue in the following way:
type MaskProps = InputBaseComponentProps & {
   mask?: CleaveOptions;
};

type Ref = {
   focus: HTMLInputElement['focus'];
} | null;

const MaskedInput = React.forwardRef<Ref, MaskProps>(({mask = {}, ...other}, ref) => {
   const inputRef = React.useRef<HTMLInputElement | null>(null);
   React.useImperativeHandle(ref, () => ({
      focus(options) {
         inputRef.current?.focus(options);
      },
   }));
   return <Cleave {...other} htmlRef={(i) => (inputRef.current = i)} options={mask} />;
});

Hope it will help someone.

A solution that worked for me:
// reduced example
export const MyInput = React.forwardRef<HTMLInputElement, MyInputProps>((props, ref) => {
  return (
    <Cleave
      {...props}
      htmlRef={(inputNode: HTMLInputElement) => {
        if (!ref) {
          return
        }
        if (typeof ref === 'function') {
          ref(inputNode)
        } else {
          ref.current = inputNode
        }
      }}
    />
  )
})
MyInput.displayName = 'MyInput'


SquareTransformation

Hello,
I'd like to know if there's already a transformation for cropping rectangle images to a square images? The logic should be simple, just compare height and width and then, crop the bigger side.  The CropTransformation should be a good template for that issue.
I tried to implement it and use the CropTransformation:
https://gist.github.com/chriszirkel/e93c96238806c4fb06758fc37d690288
The CropTransformation has two paramaters cropWidthRatio and cropHeightRatio, but I can't figure out what they are used for.
I calculated the offsetX and offsetY variables as starting point for the cropping, but I would also need  the end point (offsetX + desired width; offsetY + desired height).
Could someone help me to get this work?

Just use CropTransformation with cropWidthRatio=1 and cropHeightRatio =1 and offsets set to 0

What I want to achieve is to "chop" out a square section of the image. For example, if the source image is 600x400px, I would like to chop out a square image of 400x400px, beginning at offsetX=100 and width=400; offsetY=0 and height=400.

It seems like it is not possible with CropTransformation?

Yes,  you should just use a negative xOffset to achieve what you want

I'm not sure if I understand that correctly. A negative xOffset would just crop a part of the image, either the left or the right side? But what should I do if I want to get a square from the middle of the image, so crop 100px from the left and right side?
Maybe you could give me an example?

https://raw.githubusercontent.com/molinch/FFImageLoading/master/samples/Screenshots/Transformations/iOS_CropTransformation.png


DocsArchive-<IP_ADDRESS>Auto archive content

Please don't merge this PR until target archive repo PR https://github.com/OPS-E2E-PPE/docs-archive-test-target/pull/784 is merged into live branch.
Auto archive content to https://github.com/opstest2/docs-archive-test-target.git

Docs Build status updates of commit e483f7f:
:x: Validation status: errors
Please follow instructions here which may help to resolve issue.

File
Status
Preview URL
Details

:x:Error

Details

[Error-GitBranchDeletedOrForcePushed] Cannot sync git repo to specified commit because branch Release_Archive_master_2021-03-15-10-23-01 has been deleted or has been force pushed

For more details, please refer to the build report.
If you see build warnings/errors with permission issues, it might be due to single sign-on (SSO) enabled on Microsoft's GitHub organizations. Please follow instructions here to re-authorize your GitHub account to Docs Build.
Note: Broken links written as relative paths are included in the above build report. For broken links written as absolute paths or external URLs, see the broken link report.
Note: Your PR may contain errors or warnings unrelated to the files you changed. This happens when external dependencies like GitHub alias, Microsoft alias, cross repo links are updated. Please use these instructions to resolve them.
For any questions, please:Try searching the docs.microsoft.com contributor guidesPost your question in the Docs support channel


React to aspnet/Configuration #195,#198

@muratg

Hi @kirthik, I'm your friendly neighborhood .NET Foundation Pull Request Bot (You can call me DNFBOT). Thanks for your contribution!
You've already signed the contribution license agreement. Thanks!
The agreement was validated by .NET Foundation and real humans are currently evaluating your PR.
TTYL, DNFBOT;


Brave Browser?

I thought brave browser is also open-source. Am i missing something?

Also there is no reason to add brave as it don't offer anything else which bromite does

No chromiun based browser could be added to fdroid because of the messy code base. Only custum repositories could have chromium based browsers. Firefox based are on fdroid because firefox is truely free software where people outside mozilla actually contritube, resulting in a better code base

I did not know that. Weird, because Chromium based browsers have most of the market share hence in my mind that would be the opposite of what you have typed.

Also there is no reason to add brave as it don't offer anything else which bromite does

They do differ right, they are not the same browsers. Maybe someone synchronizes their PC with mobile app. I've done it myself.

but it is an alternative for bromite, isn't it? There is no rule saying that alternatives can't be in the list. But i believe it's the contrary.

Yeah it is. I'm going to test is soon again.

Also there is no reason to add brave as it don't offer anything else which bromite does

Brave browser sync feature was almost broken the last time I used Brave. On the other hand Firefox sync works flawlessly.
Though I take it back that Brave doesn't offer different features

Every thing is good with this browser, leaving the fact that it does not support android native autofill


Ability to watch multiple projects

When I first tried using this package I immediately ran into problems with the watch feature. In our solution we split modules between multiple projects where the startup project has almost no code to speak of, only the startup code. After testing it for some time and looking through this repository I came to the conclusion that the current solution is only adding folders from the startup directory too the watch list, which limits it's usability. Now I think this should be addressed some how, and if there is some way that this can be achieved that I clearly missed please let me know.
I decided to try create a proof of concept solution there for I forked and got it working
https://github.com/Mr-Badger/AspNetCore.SassCompiler/tree/target-multiple-projects
This solution is rather naïve and needs more work, there for I didn't create a PR.
Now there's a few things to consider, such as:

Possibly find a better way to determine the root folder of the project
Should only projects that include this nuget package be added to the watch
Add file/folder excludes
How would this work/perform in large projects

@koenvzeijl Any thoughts on supporting this?


Clarify docs - MQTT current direction

Hi,
I'm using home assistant automation to send mqtt messages with current derived from my home's consumption as the Mains Meter current measurements. But I'm not sure sure whether positive values mean that the house is taking from grid (and negative values mean I'm producing electricity into the grid) or vice versa.
I see clarification for battery measurements, but I'm not sure how they apply to the mains meter.
Can you clarify?
Thanks
Adam

Positive value means you are importing current from the grid, negative means you are exporting (delivering) current to the grid.


Update home page banner and remove CTAs

You may want to remove me from this repo
On Tue, Apr 30, 2024 at 9:37 AM coreysn @.***> wrote:

Closed #7821
https://github.com/section-engineering-education/engineering-education/pull/7821
.
—
Reply to this email directly, view it on GitHub
https://github.com/section-engineering-education/engineering-education/pull/7821#event-12660111543,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAQKBKELQ2FUNCJ5SVXOVETY763DXAVCNFSM6AAAAAA2CCBG7SVHI2DSMVQWIX3LMV45UABCJFZXG5LFIV3GK3TUJZXXI2LGNFRWC5DJN5XDWMJSGY3DAMJRGE2TIMY
.
You are receiving this because you are subscribed to this thread.Message
ID:
<section-engineering-education/engineering-education/pull/7821/issue_event/12660111543
@github.com>


Group events by date

Add grouping of events by date. I've implemented the data processing as a new selector.
I've also moved the Event type out into a separate file, which seems a lot cleaner, as we're working with it all over the place and pulling it in from the CMS integration module seems a bit wrong.
I put that module into a data folder, which can be a sort of domain model section for functions that operate on the domain entities and the associated types.
Screenshot

Pre-flight check-list
Before raising a pull request

[x] Documentation
[x] Unit tests

Pre-merge check-list

[ ] Tester approved

@frigus02 Fixed the things you pointed out, also made some changes to the component to make it a bit more readable and added stronger types.

Looks good. Merge it. 😃
(We should find a way to tell codeclimate that the unit tests are fine.)


Caps Lock key indicator

I mapped the Caps Lock key to F19 so that I can use it to change input source. Also I set it to "No Action" in OS X's Preference -> Keyboard -> Keyboard -> Modifier Keys.
It's working great and very convenient, but the Caps Lock indicator (the little green light on the Caps Lock key) is not working anymore. I think it might be good to have this indicator since it can tell me which input source I'm now using.
Is there a way to make the Caps Lock key indicator back to work?
Thanks!

Karabiner does not support to use caps lock LED independently.
(Karabiner synchronize LED and caps lock state.)
You might can do that by maclight + input source observer.
https://github.com/busyloop/maclight
I think that hammerspoon might be input source observer if you want.
http://www.hammerspoon.org/

OK, thanks a lot!


cxxopts in biicode

Hi Jarryd,
I am David from biicode, a small start-up that’s developing a C and C++ dependency manager; just like Maven and Maven Central for Java. The tool consists of two parts: the client installed in the user's machine and the cloud, populated with the most popular and demanded libs and frameworks. Some of our users had been requesting for a while already Cxxopts so I decided to upload it and give it full support, and it works like a charm.
My idea is to make a merge request to your main repository to integrate biicode support. I have also included a file, biicode.conf, which allows your library to work with biicode. The only thing I have changed is the CMakeList.txt, but these lines affect only when you want to use biicode, otherwise they are ignored, so you can use Cxxopts with biicode or without it without any problem. I tried to make the small changes it required as crystal clear as possible but feel free to request further more detail.
Now, let me show you how to use cxxopts with biicode.
Just clone your repository with the biicode.conf file and go into it. then, run the following commands:
$ git clone https://github.com/davidsanfal/cxxopts.git
$ cd cxxopts
$ bii init -L
$ bii build

That's all, biicode will have compiled your code into the bin folder. To run it just execute:
$ cd bin
$ ./*_cxxopts_src_example -abc 3
Saw option ‘a’
Saw option ‘b’
Positional = 3
Output = a.out
Arguments remain = 1

I have published this library on biicode, in david/cxxopts.
We would love you to sign up in biicode so that you could maintain and keep your library up-to-date in biicode yourself. Our users would like to have their code dependent on the latest stable version of your code and there's no one better than you to keep it alike, beside that would allow any of our users to reuse your lib in any kind of project with just one #include.
Plus we have a smooth workflow with GitHub and Travis CI.
Looking forward to your reply.
Best regards.

This seems reasonable. Would it be easier if you continue to use the latest code from github, rather than keeping two copies synchronised?

Hi. In fact, if you accept this merge request you can use your own repo, in this example I use my repository because I understand that you prefer to try it before you accept.
Also you can automate the publication to biicode using a CI like travis.


Why are there differences on ROI values for same media variable?

Based on email with a user

Question: how we calculate initResponseUnit in budget allocator and why initRoiUnit from budget allocator is so different from "Share of Spend VS Share of Effect with total ROI" plot
Answer: ROI(channel) depends on spend, so for each spend amount you'll have a different ROI value. On the "Share of Spend VS Share of Effect with total ROI" plot we calculate ROI with total spend and total response and that gives us a single point in the curve with its unique ROI. When we use the budget allocator we use the suggested spend and response for that specific spend for that specific channel.
Here's an example (ROI.xlsx) you can play with to check how ROI changes depending on the spend and response. Notice that ROI along the curve can go from <1 to 1 and from 1 to >1, depending on which part of the S-curve you're stepping on.

Screenshot taken from the dummy file


feat: Adding U-Meta Stadium

Hopefully adding the right location this time. Requested on Discord.

Pull Request Test Coverage Report for Build<PHONE_NUMBER>

0 of 0   changed or added relevant lines in 0 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage remained the same at 46.294%

Totals

Change from base Build<PHONE_NUMBER>:
0.0%

Covered Lines:
293

Relevant Lines:
451

💛  - Coveralls


Pulsar Go Client Producer 2.4.1, 2.4.2 does not round robin messages by default when sending messages to multi partitioned topics

Describe the bug
The Pulsar Go Client does not properly round robin requests when sending data to a multi partitioned topic.  This is observed consistently even when explicitly configuring round robin mode in pulsar go producer configuration settings.
To Reproduce
Steps to reproduce the behavior:

Start pulsar docker container
Create go client and publish messages to a multi-partitioned pulsar topic

./pulsar-admin non-persistent create-partitioned-topic
non-persistent://gkiv/sample-topic/sample-topic-1min
--partitions 6
Output when publishing:  Consistently shows a single producer Id.
{
"msgRateIn" : 3512.4684755313106,
"msgThroughputIn" :<PHONE_NUMBER>635517,
"msgRateOut" : 0.0,
"msgThroughputOut" : 0.0,
"averageMsgSize" :<PHONE_NUMBER>1068498,
"storageSize" : 0,
"publishers" : [ {
"msgRateIn" : 3512.4684755313106,
"msgThroughputIn" :<PHONE_NUMBER>635517,
"averageMsgSize" :<PHONE_NUMBER>3333333,
"producerId" : 0
} ],
"subscriptions" : { },
"replication" : { },
"metadata" : {
"partitions" : 6
},
"partitions" : { }
}
Expected behavior
Client should open a separate producer for each partition for the given topic it is publishing to, similar to the java client.   This is resulting in extremely poor performance for producing messages to pulsar using the go client.
Screenshots
If applicable, add screenshots to help explain your problem.
Desktop (please complete the following information):

Linux/Docker

Additional context
Add any other context about the problem here.

@afire007 do you have any code sample of producing messages to the partitioned topic? I am wondering if you set any message keys when producing them.

@sijie We are not sending any message keys when producing to the partitioned topic.  Below is the configuration we are using when sending data to the broker.  This applies to both non-persistent and persistent topics
client, err := pulsar.NewClient(pulsar.ClientOptions{
URL: pulsarBroker,
Authentication: tls_auth,
TLSTrustCertsFilePath: pulsarSslCACertFile,
TLSAllowInsecureConnection: TLSAllowInsecureConnection,
TLSValidateHostname : TLSValidateHostname,
MessageListenerThreads: 1,
IOThreads: 1,
})
producer, err := client.CreateProducer(pulsar.ProducerOptions{
	Topic: pulsarTopic,
	CompressionType: pulsar.LZ4,
	BatchingMaxMessages: uint(10000),
	Batching: true,
	MaxPendingMessages: 10000,
	MessageRoutingMode: pulsar.RoundRobinDistribution,
	BlockIfQueueFull: true,
	BatchingMaxPublishDelay: time.Duration(1)*time.Millisecond,
})

//Send Message Sync to Broker
msg := pulsar.ProducerMessage{
Payload: metric, //Metric is a byte[]
}
err := producer.Send(context.Background(), msg)

Looks related to go client @wolfstudy could you please help take a look at this issue?

@sijie We are not sending any message keys when producing to the partitioned topic. Below is the configuration we are using when sending data to the broker. This applies to both non-persistent and persistent topics
client, err := pulsar.NewClient(pulsar.ClientOptions{
    		URL: pulsarBroker,
		Authentication: tls_auth,
		TLSTrustCertsFilePath: pulsarSslCACertFile,
		TLSAllowInsecureConnection: TLSAllowInsecureConnection,
		TLSValidateHostname : true,
		MessageListenerThreads: 1,
		IOThreads: 1,
	})

	producer, err := client.CreateProducer(pulsar.ProducerOptions{
		Topic: pulsarTopic,
		CompressionType: pulsar.LZ4,
		BatchingMaxMessages: uint(10000),
		Batching: true,
		MaxPendingMessages: 10000,
		MessageRoutingMode: pulsar.RoundRobinDistribution,
		BlockIfQueueFull: true,
		BatchingMaxPublishDelay: time.Duration(1)*time.Millisecond,
	})

//Send Message Sync to Broker
msg := pulsar.ProducerMessage{
			    Payload: metric, //Metric is a byte[]
			}
err := producer.Send(context.Background(), msg)

hello @afire007  what is the pulsarTopic value?
Unfortunately, i don't reproduce the issue in my local. Step as follows:

run pulsar 2.5.0

./bin/pulsar localrun -a <IP_ADDRESS>

create topic

./bin/pulsar-admin non-persistent create-partitioned-topic non-persistent://public/default/sample-topic-1min --partitions 6

receive messages from non-persistent://public/default/sample-topic-1min

import (
	"context"
	"fmt"
	log "github.com/apache/pulsar/pulsar-client-go/logutil"
	"github.com/apache/pulsar/pulsar-client-go/pulsar"
)

func main() {
	client, err := pulsar.NewClient(pulsar.ClientOptions{URL: "pulsar://localhost:6650"})
	if err != nil {
		log.Fatal(err)
	}

	defer client.Close()

	consumer, err := client.Subscribe(pulsar.ConsumerOptions{
		Topic:            "non-persistent://public/default/sample-topic-1min",
		SubscriptionName: "my-subscription",
		Type:             pulsar.Shared,
	})
	if err != nil {
		log.Fatal(err)
	}

	defer consumer.Close()

	for {
		msg, err := consumer.Receive(context.Background())
		if err != nil {
			log.Fatal(err)
		}

		fmt.Printf("Received message  msgId: %s -- content: '%s'\n",
			msg.ID(), string(msg.Payload()))

		consumer.Ack(msg)
	}
}

publish message to non-persistent://public/default/sample-topic-1min

import (
	"context"
	"fmt"

	log "github.com/apache/pulsar/pulsar-client-go/logutil"
	"github.com/apache/pulsar/pulsar-client-go/pulsar"
)

func main() {
	client, err := pulsar.NewClient(pulsar.ClientOptions{
		URL:       "pulsar://localhost:6650",
		IOThreads: 5,
	})

	if err != nil {
		log.Fatal(err)
	}

	defer client.Close()

	producer, err := client.CreateProducer(pulsar.ProducerOptions{
		Topic: "non-persistent://public/default/sample-topic-1min",
	})
	if err != nil {
		log.Fatal(err)
	}

	defer producer.Close()

	ctx := context.Background()

	for i := 0; i < 10; i++ {
		if err := producer.Send(ctx, pulsar.ProducerMessage{
			Payload: []byte(fmt.Sprintf("hello-%d", i)),
		}); err != nil {
			log.Fatal(err)
		}
	}
}

In receive window, the output as follows:
Received message  msgId: (0,0,0,-1) -- content: 'hello-0'
Received message  msgId: (0,0,1,-1) -- content: 'hello-1'
Received message  msgId: (0,0,2,-1) -- content: 'hello-2'
Received message  msgId: (0,0,3,-1) -- content: 'hello-3'
Received message  msgId: (0,0,4,-1) -- content: 'hello-4'
Received message  msgId: (0,0,5,-1) -- content: 'hello-5'
Received message  msgId: (0,0,0,-1) -- content: 'hello-6'
Received message  msgId: (0,0,1,-1) -- content: 'hello-7'
Received message  msgId: (0,0,2,-1) -- content: 'hello-8'
Received message  msgId: (0,0,3,-1) -- content: 'hello-9'

Then run ./bin/pulsar-admin topics list public/default, output as follows:
"non-persistent://public/default/sample-topic-1min-partition-0"
"non-persistent://public/default/sample-topic-1min-partition-1"
"non-persistent://public/default/sample-topic-1min-partition-2"
"non-persistent://public/default/sample-topic-1min-partition-3"
"non-persistent://public/default/sample-topic-1min-partition-4"
"non-persistent://public/default/sample-topic-1min-partition-5"
"non-persistent://public/default/sample-topic-1min"

@wolfstudy
Hi,
My pulsarTopic was set to "non-persistent://gkiv/sample-topic/sample-topic-1min"
Im wondering if your IOTHREADS config is whats resolving the issue as I see its set to 5 whereas my configuration has it set to 1.  Would this block the ability for the client to produce to multiple partitions?

Closed as stale.
The development of the Go client has been permanently moved to https://github.com/apache/pulsar-client-go. If it's still relevant, please open an issue there.


code health threadstest

[x] tests are added or updated

Update threadstest to use the test framework

Merging now

Merged.  ee25dd45cb1dd7efa1af2574566ae04537907461


Fix unhandled errors

[Nest] 1  - 03/06/2023, 6:39:50 AM   ERROR [ExceptionsHandler] Cannot read properties of undefined (reading 'split')
TypeError: Cannot read properties of undefined (reading 'split')
at BarchartService.fetchFinancial (/app/dist/models/barchart/barchart.service.js:49:64)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async AppService.getBarchartFinancial (/app/dist/app.service.js:45:25)
at async AppController.getBarchartFinancial (/app/dist/app.controller.js:31:22)
at async /app/node_modules/@nestjs/core/router/router-execution-context.js:46:28
at async /app/node_modules/@nestjs/core/router/router-proxy.js:9:17

and for tightshorts module
[Nest] 1  - 03/06/2023, 9:49:22 AM   ERROR [ExceptionsHandler] Request failed with status code 400
AxiosError: Request failed with status code 400
at settle (/app/node_modules/axios/dist/node/axios.cjs:1859:12)
at IncomingMessage.handleStreamEnd (/app/node_modules/axios/dist/node/axios.cjs:2723:11)
at IncomingMessage.emit (node:events:525:35)
at endReadableNT (node:internal/streams/readable:1359:12)
at process.processTicksAndRejections (node:internal/process/task_queues:82:21)

Closed in #276


Have /help/ display the /faq/ page [#OSF-4039]

Purpose

As of now, the osf.io/help/ page has not been made, and is a dead end

Displays the /faq/ page on attempting to reach the /help/ page

Changes

Added to a Rule in routes.py, where going to /help/ will display the /faq/ mako template.

Added a test case that tests to make sure the page is reached in test_views.py

Ticket
https://openscience.atlassian.net/browse/OSF-4039

I am not sure if the test case is comprehensive.  I compared the HTTP status code with 200, which may not be enough.  Please let me know if I should add other assert statements/change the status code check.

This is good. 🎉 🐧 🎉

I'm thinking we should redirect /help/ to /faq/, rather than having /help/ return a 200. Having multiple URLs point to the same resource is an antipattern.
Also, /help/ should be removed from the old Rule (https://github.com/CenterForOpenScience/osf.io/blob/35514cbb6112e64ecf676213db21f6423c70ccd5/website/routes.py#L255).

Pass finished.


SlidingUp improvements

Hi!
I have an idea to improve the slidingUp.
When you slide the panel must appears on the top an image with parallax effect, in this way on the finish of slide we have a FlexibleSpaceWithImage, and if you continue the scroll the image disappears like your example! What do you think?

These updates are released to the Play store, so I'll close this issue.
Please open a new issue if you have any questions or problems.

These updates are released to the Play store, so I'll close this issue.
Please open a new issue if you have any questions or problems.

@ksoichiro  Thanks for this awesome open source can we implement "Sliding up effect with ScrollView" using viewpager, each item in ViewPager has a scrollView.


Emulator auth when using both PubSub and FirebaseAdmin

Hey @loicmathieu,
I think I've run into an issue when using both pubsub and the FirebaseAdmin module when using the emulator.
As per https://cloud.google.com/pubsub/docs/emulator#pubsub-emulator-java for PubSub we need to use the "NoCredentials" class when connecting to the emulator
As per https://stackoverflow.com/questions/63781560/connecting-to-firestore-emulator-from-java-admin-sdk you need to use the EmulatorCredentials when connecting to the emulator.
As per https://docs.quarkiverse.io/quarkus-google-cloud-services/main/#emulators we can configure both Credentials as a CDI bean and a CredentialsProvider as CDI bean.
You can configure the "Credentials" to be the EmulatorCredentials and the CredentialsProvider to be the NoCredentialsProvider, and then it seems to work, but this is hardly intuitive for a user of the library (and is not documented).
I'd propose we add config options like we did for the Firestore situation to have the library automatically configure the right credentials for the emulator to use and avoid the hassle of needing to create that mock bean.
We can easily achieve this by using Instance to retrieve it at runtime if the emulator is switched off I'd say?
Lemme know what you think, can create the PR of course.

Well, this is annoying I agree, and the blame is upsteam ;)
But yes, if you can provide something that ease these cases, I'll be happy to review it

Initial version !705

Need to look into the Firebase Admin version still btw

This should be fixed with merging of #707 and #705


[Suggestion] DISCOVERY: Convert Sage components to web components

Description
Determine scope of converting components to web components.

[ ] - What is the process to convert a component?

[ ] - How long will it take?

[ ] - Do we need to write custom JS for all functionality?

Will they truly work in Rails without headache?

Will React lifecycles have expected impact on them?

What is the development experience like for our team?

What do we make about backwards compatibility if IE 11 does not support them?

What about exiting Rails-oriented aspects such as simple form, etc

I love this idea!

Moved to Jira https://kajabi.atlassian.net/browse/UXD-34


Disable caching classpath inspector

Disabled caching for the inspectClasspath task, as it's not worth caching

Opened a real PR: https://github.com/micronaut-projects/micronaut-gradle-plugin/pull/930


Generate our own team compass

Summary

Creat our team compass similar to the ones for 2i2c or JupyterHub
This can be used to:

document work done and lessons learned
public roadmap
publish progress reports
direction and action plans
keep track of any outreach or media work related to the project

Acceptance Criteria

the site is up

Items to discuss

What should we use - @trallard  thinks we should use the executable book project
There is no logo for Jupyter a11y right? there was a discussion somewhere but do not think that went anywhere
where will we publish this? CloudFare, Read the docs, other

@Quansight-Labs/czi-a11y-grant  the compass can be found at https://quansight-labs.github.io/jupyter-a11y-mgmt/readme.html

From this issue: https://github.com/jupyter/accessibility/issues/54 there are discussions re the logo for Jupyter a11y related work
I am not sure if Matthias is still the the trademark council, I will reach out to him, and see if we can get around with doing something similar to what is done in https://discourse.jupyter.org/. or if we need further aproval

This is live now - so will go ahead and close the issue


Use HTTPS source for aspell

Merge Checklist

All boxes should be checked before merging the PR (just tick any boxes which don't apply to this PR)

[ ] The toolchain has been rebuilt successfully (or no changes were made to it)
[ ] The toolchain/worker package manifests are up-to-date
[ ] Any updated packages successfully build (or no packages were changed)
[ ] Packages depending on static components modified in this PR (Golang, *-static subpackages, etc.) have had their Release tag incremented.
[ ] Package tests (%check section) have been verified with RUN_CHECK=y for existing SPEC files, or added to new SPEC files
[ ] All package sources are available
[ ] cgmanifest files are up-to-date and sorted (./cgmanifest.json, ./toolkit/tools/cgmanifest.json, ./toolkit/scripts/toolchain/cgmanifest.json, .github/workflows/cgmanifest.json)
[ ] LICENSE-MAP files are up-to-date (./SPECS/LICENSES-AND-NOTICES/data/licenses.json, ./SPECS/LICENSES-AND-NOTICES/LICENSES-MAP.md, ./SPECS/LICENSES-AND-NOTICES/LICENSE-EXCEPTIONS.PHOTON)
[ ] All source files have up-to-date hashes in the *.signatures.json files
[ ] sudo make go-tidy-all and sudo make go-test-coverage pass
[ ] Documentation has been updated to match any changes to the build system
[ ] Ready to merge

Summary

See #3161
Change Log

Replace aspell FTP source with HTTPS source

Does this affect the toolchain?

NO
Associated issues

#3161

Links to CVEs

https://nvd.nist.gov/vuln/detail/CVE-YYYY-XXXX

Test Methodology

Pipeline build id: xxxx

@Camelron I switched back from the GitHub mirror to https://ftp.gnu.org.


Improve charts

Description
Fixes DG-288

Codecov Report

Merging #203 into develop will decrease coverage by 0.06%.
The diff coverage is 93.54%.

@@             Coverage Diff             @@
##           develop     #203      +/-   ##
===========================================
- Coverage    91.52%   91.45%   -0.07%
===========================================
  Files          134      134
  Lines         2147     2154       +7
===========================================
+ Hits          1965     1970       +5
- Misses         182      184       +2

Impacted Files
Coverage Δ

src/scripts/dashboard/chart/pie.js
100% <100%> (ø)
:arrow_up:

src/scripts/dashboard/chart/line.js
100% <100%> (ø)
:arrow_up:

src/scripts/dashboard/chart/bar.js
100% <100%> (ø)
:arrow_up:

src/App/components/Chart/index.js
100% <100%> (ø)
:arrow_up:

src/App/Documentation/dashboard/Charts/index.js
91.66% <100%> (+1.66%)
:arrow_up:

src/scripts/dashboard/chart/index.js
93.1% <81.81%> (-6.9%)
:arrow_down:

Continue to review full report at Codecov.

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


Unable to resolve module crypto

I just cloned your project. Ran npm install, react-native run-ios. I am getting this error. How to fix this. I haven't updated any module.

I had to run react-native start --reset-cache  now it is working fine closing this issue. Thanks


Build error using cache task example

When added to a pipeline and run I get this error:
2023-10-30T18:10:38.7068066Z ##[section]Starting: NuGet Cache
2023-10-30T18:10:38.7210499Z ==============================================================================
2023-10-30T18:10:38.7210902Z Task         : Cache
2023-10-30T18:10:38.7211034Z Description  : Cache files between runs
2023-10-30T18:10:38.7211269Z Version      : 2.198.0
2023-10-30T18:10:38.7211412Z Author       : Microsoft Corporation
2023-10-30T18:10:38.7211625Z Help         : https://aka.ms/pipeline-caching-docs
2023-10-30T18:10:38.7211912Z ==============================================================================
2023-10-30T18:10:39.1559570Z Resolving key:
2023-10-30T18:10:39.1771434Z  - nuget                                       [string]
2023-10-30T18:10:39.1776896Z  - "Windows_NT"                                [string]
2023-10-30T18:10:39.2982850Z  - **/packages.lock.json,!**/bin/**,!**/obj/** [file pattern; matches: 0]
2023-10-30T18:10:39.3161650Z ##[error]One or several exceptions have been occurred.
2023-10-30T18:10:39.3182795Z ##[error]System.IO.FileNotFoundException: No matching files found for pattern: **/packages.lock.json,!**/bin/**,!**/obj/**
2023-10-30T18:10:39.3214721Z ##[section]Finishing: NuGet Cache

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

ID: 94a47e28-d827-dd09-61f4-7198941d2cb5
Version Independent ID: 94a47e28-d827-dd09-61f4-7198941d2cb5
Content: Cache NuGet packages to reduce build time - Azure Pipelines
Content Source: docs/pipelines/artifacts/caching-nuget.md
Service: azure-devops-pipelines
Sub-service: azure-devops-pipelines-artifacts
GitHub Login: @ramiMSFT
Microsoft Alias: rabououn

@pilcherd -- thank you again.  Please see the links in https://github.com/MicrosoftDocs/azure-devops-docs/issues/13681#issuecomment-1749823681.


feat(onyx-1225): add Shows for You home view section

This PR resolves ONYX-1225
Description
This PR adds Shows for You rail to the new schema. We agreed to not add full Metaphysics support for this section (basically skip adding showsConnection). In this particular case it was very convenient to reuse existing component.

PR Checklist

[x] I have tested my changes on iOS and Android.
[x] I hid my changes behind a feature flag, or they don't need one.
[x] I have included screenshots or videos, or I have not changed the UI.
[x] I have added tests, or my changes don't require any.
[x] I added an app state migration, or my changes do not require one.
[x] I have documented any follow-up work that this PR will require, or it does not require any.
[x] I have added a changelog entry below, or my changes do not require one.

To the reviewers 👀

[ ] I would like at least one of the reviewers to run this PR on the simulator or device.

Changelog updates
Changelog updates

Cross-platform user-facing changes

iOS user-facing changes

Android user-facing changes

Dev changes

Need help with something? Have a look at our docs, or get in touch with us.

Warnings

:warning:

❌ An error occurred while validating your changelog, please make sure you provided a valid changelog.

  Generated by :no_entry_sign: dangerJS against f372cfca45fcb0421e02d50484abbfa01586513d


About the gallery page sometimes does not load the avatars of contributors

http://www.nuget.org/policies/About
sometimes it loads, sometimes it doesn't.

Fixed with #2259


Visual Studio 15.8 Preview 1.1 hangs on provisioning Raspberry PI 3 running IoT Core build 10.0.17134.48

I can connect properly using kd
PS C:\Program Files (x86)\Windows Kits\10\Debuggers\x86> .\kd -k com:port=5,baud=921600

Microsoft (R) Windows Debugger Version 10.0.17134.1 X86
Copyright (c) Microsoft Corporation. All rights reserved.

Opened \\.\com5
Kernel Debug Target Status: [no_debuggee]; Retries: [0] times in last [7] seconds.
Waiting to reconnect...
Connected to Windows 10 17134 ARM (NT) Thumb-2 target at (Mon May 21 22:27:55.792 2018 (UTC + 2:00)), ptr64 FALSE
Kernel Debugger connection established.
Symbol search path is: srv*
Executable search path is:
Windows 10 Kernel Version 17134 MP (4 procs) Free ARM (NT) Thumb-2
Product: WinNt, suite: TerminalServer SingleUserTS
Built by: 17134.48.armfre.rs4_release_svc_prod1.180427-1806
Machine Name:
Kernel base = 0x80e85000 PsLoadedModuleList = 0x81095d18
Debug session time: Mon May 21 21:45:13.740 2018 (UTC + 2:00)
System Uptime: 0 days 0:17:00.671

However, Visual Studio hangs when I try to provision the Raspberry PI for driver debugging.
First I select the Raspberry PI as a mobile device:

After giving the settings:

it hangs:

I am using Visual Studio 15.8 Preview 1.1.
My target device is a Raspberry PI 3 running Windows IoT Core build 10.0.17134.48.

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

ID: 5302a6a5-9017-4475-25ee-167a9b816d31
Version Independent ID: f0bff1be-a4fe-3de0-1ea9-7ec77def3b0c
Content: Driver Deployment - Windows IoT
Content Source: windows-iotcore/learn-about-hardware/DriverDeployment.md
Service: unspecified
Product: windows-iot
GitHub Login: @parameshbabu
Microsoft Alias: pabab

Hi @wind-rider - we are looking into this.

Are KD and VS trying to attach at the same time?
Not sure if this is what you are seeing, but RPi has had an issue with KD being enabled and VS trying to attach in the past.
We used to build this into our development boards to combat that problem: reg add "HKLM\software\Microsoft\VisualStudio\Debugger" /v EmulateExclusiveBreakpoints /t REG_DWORD /d 0 /f

I believe that I shut down KD before trying to set up the Visual Studio driver debugger connection.
I tried it multiple times and every time Visual Studio hangs on copying the files for the kernel debugging.

From: Brian Fjeldstad<EMAIL_ADDRESS>Sent: Tuesday, May 22, 2018 7:07:11 PM
To: MicrosoftDocs/windows-iotcore-docs
Cc: wind-rider; Mention
Subject: Re: [MicrosoftDocs/windows-iotcore-docs] Visual Studio 15.8 Preview 1.1 hangs on provisioning Raspberry PI 3 running IoT Core build 10.0.17134.48 (#376)
Are KD and VS trying to attach at the same time?
Not sure if this is what you are seeing, but RPi has had an issue with KD being enabled and VS trying to attach in the past.
We used to build this into our development boards to combat that problem: reg add "HKLM\software\Microsoft\VisualStudio\Debugger" /v EmulateExclusiveBreakpoints /t REG_DWORD /d 0 /f
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHubhttps://github.com/MicrosoftDocs/windows-iotcore-docs/issues/376#issuecomment-391067813, or mute the threadhttps://github.com/notifications/unsubscribe-auth/ADTZSC1VW8GRJG6qPMwjGOhEZPkROYAZks5t1EW_gaJpZM4UHlmO.

@wind-rider Could you file this as a bug following the instructions to Feedback Hub? Thank you!
https://social.msdn.microsoft.com/Forums/en-US/fad1c6a0-e578-44a7-8e8d-95cc28c06ccd/need-logs-if-your-device-hasnt-updated-to-the-latest-iotcore-version?forum=WindowsIoT


Changes made for issue#81

Changes for New Posts Notification
https://github.com/sivaprasadreddy/techbuzz/issues/81

@sivaprasadreddy Fixed the review comments. I was not able to test SendGrid since I don't have api key for that


More detailed error messages for KNN model training

When training a KNN model using the /_plugins/_knn/models/{model_name}/_train POST endpoint, often the error message returned by GET /_plugins/_knn/models/{model_name} just says

Failed to execute training. May be caused by an invalid method definition or not enough memory to perform training.

It took me a while to figure out what exactly the problem was. I found a more detailed error message in the output of the opensearch process running in my docker container:

opensearch  | [2023-11-28T10:58:37,331][ERROR][o.o.k.t.TrainingJob      ] [7747b1d9c94f] Failed to run training job for model "my_model_name": Error in void faiss::Clustering::train_encoded(faiss::idx_t, const uint8_t*, const faiss::Index*, faiss::Index&, const float*) at /tmp/tmp61nvdqz7/k-NN/jni/external/faiss/faiss/Clustering.cpp:281: Error: 'nx >= k' failed: Number of training points (100) should be at least as large as number of clusters (256)

With this error message I was able to fix the issue very easily. But often I don't have direct access to the opensearch process. For that reason it would be very helpful to have get GET endpoint return error messages that contain all the available information about why the training failed.
Documentation
Currently the documentation doesn't mention a minimum requirement of datapoints for training. It would be great to clarify this in the docs in addition to having better error messages.

@simonhessner thanks for creating the issue. But rather than sending out the full message I think the problem which you encountered can be easily solved upfront adding a validation before starting the training around number of documents in the training index > 0.
Please let me know if you think otherwise. Exposing internal details in the API response is not a best practice, but I too agree the error message can be improved.

@simonhessner thanks for the details. We will prioritize this issue. Will keep posted on the timeline


Clarify behavior of autocommit

Expand on the risk of using AutoCommit instead of explicitly committing.

@dudk - can you have a look at this and see if it reflects the autocommit issue you had.
Who should look at this from Data Storage/Runtime?


libinjection: 3.10.0 -> unstable-2021-04-09

Description of changes
3.10.0 was released in 2017. Upstream looks to have stagnated and this bump is being performed for #148779 as Python 3 is now supported (for building).

Things done

Built on platform(s)

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

[ ] For non-Linux: Is sandbox = true set in nix.conf? (See Nix manual)
[ ] Tested, as applicable:

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

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

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module
[ ] (Release notes changes) Ran nixos/doc/manual/md-to-db.sh to update generated release notes

[ ] Fits CONTRIBUTING.md.

Closing in favor of #169601. Apologies for the pings.


Inconsistency in interpreting type Query and extend type Query between graphql-codegen and graphql-modules

Is your feature request related to a problem? Please describe.
We have been using graphql-codegen and graphql-modules together now for 2 years with great success. However, the adoption of graphql-modules 1.0 has now been blocked due to the differences in schema merging. This particularly blocks modularising Queries (and likely Mutations and Subscriptions), as the interpretation of schemas differs between the two. graphql-modules expects these root level types to be extended, e.g. extend type Query whereas graphql-modules fails with that and expects type Query.
Until now I have not found any other workaround than squashing all the queries together into a single module, which clearly violates good practices for modularisation.
@kamilkisiela already expressed that grapql-modules will follow the standards compliant way, e.g. extend type Query, https://github.com/Urigo/graphql-modules/issues/1300
Describe the solution you'd like
While I do not know how how graphql-codegen merges the schemas together, I would like it to accept the extend type Query type format. This might affect the internals (I assume the schema merging is done differently), but perhaps it could be given as a CLI parameter to maintain forward/backward compatibility.
Describe alternatives you've considered
An alternative would be to solve the problem in-house, e.g. squash the query/mutation/subscription related schemas together, but I think it defeats the whole purpose of modularisation. The other ways would be to do the compatibility to graphql-modules side.

I don't understand (based on description) how GraphQL Modules are related to GraphQL Code Generator. What level we're talking here, loading GraphQL schema or generating types?
Codegen can understand both extend type Query and type Query.

@kamilkisiela We are talking about using them together. Now that the interpretation of GraphQL schemas is different on the two, they cannot be used together.
In our stack, we generate GraphQL typings with graphql-codegen and use the generated types together with GraphQL Modules. Correspondingly, the same schemas we generate the types from are needed runtime by graphql-modules, creating the problem.


Search url has changed

The live search url has changed from
public/alfresco/versions/1/queries/live-search-nodes
to
public/alfresco/versions/1/queries/nodes
You may also like to try out the new full search api:
public/search/versions/1/search

Hi,
thanks for the comment, we are already tracking this issue on the main components repository, you can follow the progress from there:
https://github.com/Alfresco/alfresco-ng2-components/issues/555
Thank you

Upstream issue has been closed and this app has now been upgraded to use the latest component, closing.


Missing tracking options

Hi Mark!
I noticed that this library is missing the TrackLinks and TrackOpens options in the Email data type. Would you be interested in a pull request if I added them?
Thanks!

Hi @karls,
Adding support for tracking options would be terrific! Looking forward to your PR and please be in touch if there is anything we can do to assist ...
Thanks.
cc/ @markhibberd

This is in v0.2.2.


refactor(superMediaPlayer): getPlayingPosition return ms

Codecov Report

Merging #429 into develop will increase coverage by 0.33%.
The diff coverage is 100.00%.

@@             Coverage Diff             @@
##           develop     #429      +/-   ##
===========================================
+ Coverage    68.56%   68.89%   +0.33%
===========================================
  Files          216      216
  Lines        11772    11772
===========================================
+ Hits          8071     8110      +39
+ Misses        3701     3662      -39

Impacted Files
Coverage Δ

mediaPlayer/SuperMediaPlayer.h
93.16% <100.00%> (ø)

mediaPlayer/player_notifier.cpp
83.42% <0.00%> (-2.68%)
:arrow_down:

mediaPlayer/analytics/AnalyticsCollectorImpl.cpp
31.93% <0.00%> (-2.53%)
:arrow_down:

mediaPlayer/MediaPlayer.cpp
71.48% <0.00%> (-0.63%)
:arrow_down:

framework/codec/ActiveDecoder.cpp
87.08% <0.00%> (-0.48%)
:arrow_down:

mediaPlayer/SuperMediaPlayer.cpp
73.91% <0.00%> (+0.40%)
:arrow_up:

framework/data_source/curl/curl_data_source.cpp
86.47% <0.00%> (+0.40%)
:arrow_up:

framework/render/audio/filterAudioRender.cpp
86.66% <0.00%> (+0.60%)
:arrow_up:

framework/demuxer/avFormatDemuxer.cpp
80.85% <0.00%> (+1.42%)
:arrow_up:

framework/demuxer/AVBSF.cpp
68.13% <0.00%> (+2.19%)
:arrow_up:

... and 4 more

Continue to review full report at Codecov.

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


Integration tests to proof existing implementation

This PR introduces integration test to use existing code against a live instance of AppSearch.
The tests setup de spin check of the AppSearch availability, on the SNAPSHOT edge this could experience some transitory bugs due to some feature introduced in AppSearch or Elasticsearch that aren't compatibles.

Thanks @yaauie for the really nice review, I've integrated all your suggestions!


fix(docs): update azure deployment documententation

Update Azure documentation to deploy pachyderm with --dynamic-etcd-nodes. As AKS k8s deployments includes StorageClasses by default, this works right out of the box.
For users that continue to wish to use the --static-etcd-nodes they can use the az disk create CLI command (https://docs.microsoft.com/en-us/cli/azure/disk?view=azure-cli-latest#az_disk_create) to create a block volume.
Fixes: https://github.com/pachyderm/pachyderm/issues/2254 and https://github.com/pachyderm/pachyderm/issues/2136

@dwhitena @jdoliner are those test failures my doing?

@jpoon Nope those aren't you. Our CI just needs internal creds so it'll fail for external contributors. @dwhitena Docs are your domain, can you review and merge?

Ah this is a great simplification! Love it. I will open a corresponding PR to run CI @JoeyZwicker.


Rest assured do not work with java 11

Hello, I've tried using rest assured with v4.0.0. with java v11 & jupiter-api v4.5.2 & jupiter-engine v4.5.2
but the tests are not working and giving the following error ->

Caused by: java.lang.ClassNotFoundException: io.restassured.path.json.mapper.factory.JohnzonObjectMapperFactory 	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583) 	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) 	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)

And I've found a workaround to make it work, which is , downgrading restassured to v3.3.0.
also using the default junit provided by intellij's maven.

I had the problem too, but with java-8
Downgrade to 3.3.0 helped.

@emre-yildirim When did you get this? Do you have Johnzon in the classpath?

I have a similar problem. I've tried lots of things to bypass. However, this is my first attempt to use this framework, but I've tried many things. Also on Java 11 using IntelliJ. GSON is already there 2.8.x is already part of the project and I've tried removing that dependency and letting it use whatever RA pulls in, but same result.
	at io.restassured.config.ObjectMapperConfig.<init>(ObjectMapperConfig.java:49) ~[rest-assured-4.0.0.jar:na]
	at io.restassured.config.RestAssuredConfig.<init>(RestAssuredConfig.java:41) ~[rest-assured-4.0.0.jar:na]
	at io.restassured.RestAssured.<clinit>(RestAssured.java:420) ~[rest-assured-4.0.0.jar:na]

Are you using maven or gradle or something else?

Maven:
<!-- https://mvnrepository.com/artifact/io.rest-assured/rest-assured -->
<dependency>
    <groupId>io.rest-assured</groupId>
    <artifactId>rest-assured</artifactId>
    <version>4.0.0</version>
</dependency>

Same here, java8 with spring boot, simple helloworld rest api...tried to test it with restAssured for the first time just to see how it works.
		<dependency>
			<groupId>io.rest-assured</groupId>
			<artifactId>rest-assured</artifactId>
			<version>4.0.0</version>
			<scope>test</scope>
		</dependency>

java.lang.NoClassDefFoundError: io/restassured/path/json/mapper/factory/JohnzonObjectMapperFactory

	at io.restassured.config.RestAssuredConfig.<init>(RestAssuredConfig.java:41)
	at io.restassured.RestAssured.<clinit>(RestAssured.java:420)

It is not detecting Jackson even though it is on the class path as stated in the restAssured documentation.

I use with Java 12.01 and Spring Boot 2.1.5 this dependency without issues:
	<dependency>
		<groupId>io.rest-assured</groupId>
		<artifactId>rest-assured-all</artifactId>
		<version>4.0.0</version>
		<scope>test</scope>
	</dependency>

Also, the documentation mentions something about that here https://github.com/rest-assured/rest-assured/wiki/GettingStarted#java-9

I had this problem and I did exactly @earth001 mentioned: add the rest-assured-all dependency.
It worked for me.

tried it with rest-assured-all:4.0.0 and rest-assured:4.0.0 and spring boot 2.1.4 and got
groovy.lang.GroovyRuntimeException: Could not find matching constructor for: io.restassured.internal.path.json.mapping.JsonPathJackson2ObjectDeserializer(io.restassured.path.json.mapper.factory.DefaultJackson2ObjectMapperFactory)

testCompile "io.rest-assured:json-path:$restAssuredVersion"
testCompile "io.rest-assured:xml-path:$restAssuredVersion"

I finally encountered what may be a similar issue in a project. The problem
was due to Maven dependency resolution and that the "json-path" and
"xml-path" version where not explicitly defined and thus picked up by
spring boot dependency declaration. Adding json-path and xml-path to
explicitly point to 4.0.0 worked for me. I doubt that there's anything we
can do from the rest-assured side.
On Fri, Jun 21, 2019 at 11:38 PM hugoguerra<EMAIL_ADDRESS>wrote:

testCompile "io.rest-assured:json-path:$restAssuredVersion"
testCompile "io.rest-assured:xml-path:$restAssuredVersion"
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/rest-assured/rest-assured/issues/1175?email_source=notifications&email_token=AABNVFKK5HFR3DP2XQELKWLP3VC6LA5CNFSM4HQBJM5KYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGODYJUXOQ#issuecomment-504581050,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AABNVFPBF4B27XKTIRSAC4LP3VC6LANCNFSM4HQBJM5A
.

I had a similar problem using gradle, make sure it is not this particular issue which made it work without having to add every dependency explicitly:
https://github.com/rest-assured/rest-assured/issues/1168

tried it with rest-assured-all:4.0.0 and rest-assured:4.0.0 and spring boot 2.1.4 and got
groovy.lang.GroovyRuntimeException: Could not find matching constructor for: io.restassured.internal.path.json.mapping.JsonPathJackson2ObjectDeserializer(io.restassured.path.json.mapper.factory.DefaultJackson2ObjectMapperFactory)

This configuration works fine with java 11:
in pom.xml:
`<rest-assured-parent.version>4.1.0</rest-assured-parent.version>
....

io.rest-assured
rest-assured
${rest-assured-parent.version}
test

io.rest-assured
json-path

io.rest-assured
rest-assured-all
${rest-assured-parent.version}
test

org.codehaus.groovy
groovy-all
2.5.8
test

....
`
hope this helps.
Luke

It should work with version 4.1.1 (works on all projects I've tried that uses Java 11). Please upgrade!

rest-assured:4.3.0 and rest-assured-all:4.3.0 is not working with graalvm ce 20.0.0 (build 11.0.6+9-jvmci-20.0-b02) and spring boot 2.3.0. rest-assured:4.2.0 works perfectly fine.

Java 8, springboot2.2.6, the same with @zyzbroker, 4.3.0 still have problem, changed to 4.2.0 it worked.
exclusion:
`
org.springframework.boot
spring-boot-starter-test
test

`
add dependency:
		<!-- https://mvnrepository.com/artifact/io.rest-assured/rest-assured --> 		<dependency> 			<groupId>io.rest-assured</groupId> 			<artifactId>rest-assured</artifactId> 			<version>${rest.assured.version}</version> 		</dependency> 		<dependency> 			<groupId>io.rest-assured</groupId> 			<artifactId>json-path</artifactId> 			<version>${rest.assured.version}</version> 		</dependency> 		<dependency> 			<groupId>io.rest-assured</groupId> 			<artifactId>xml-path</artifactId> 			<version>${rest.assured.version}</version> 		</dependency>

Downgrade from 4.3.0 -> 4.2.0 worked for me running Java 13.

Thanks @netent-perty : that solved the problem for me too.

Java 11, rest-assured is only working on 3.3.0, broken on 5.0.0.
Can't believe it's still broken after 2 years.

I added test scope to all rest assured jars for Java 17, it worked.
		<dependency>
			<groupId>io.rest-assured</groupId>
			<artifactId>rest-assured-common</artifactId>
			<version>5.4.0</version>
			<scope>test</scope>
		</dependency>


[FEATURE] FastAPI-native class-based middleware

There are two ways to define middleware:

Decorator-based via @app.middleware()
Starlette's class-based via constructor or app.add_middleware()

While decorator-based middleware get FastAPI's Request object:
@app.middleware("http")
async def my_middleware(request: Request, call_next):
    ...
    response = await call_next(request)
    ...
    return response

Starlette's lower-level implementation feels a bit less lean:
class MyMiddleware:
    def __init__(self, app: ASGIApp) -> None:
        self.app = app

    async def __call__(self, scope: Scope, receive: Receive, send: Send) -> None:
        if scope["type"] == "http":
            ...
            await self.app(scope, receive, send)
            ...
        else:
            await self.app(scope, receive, send)

(Something like that, I'm new to Starlette/FastAPI so not sure of exact details.)
How about supporting "FastAPI-native" middleware, where the signature would be similar to that of decorator's:
    async def __call__(self, request: Request, call_next):
        ...
        response = await call_next(request)
        ...
        return response

You could do that today if you need class semantics. Here's a minimal example:
import uvicorn
from fastapi import FastAPI
from starlette.requests import Request

app = FastAPI()

@app.post('/')
async def test():
    pass

class MyMiddleware:
    async def __call__(self, request: Request, call_next):
        response = await call_next(request)
        print("I've been called!")
        return response

my_middleware = MyMiddleware()  # Do whatever you need the class for here
app.middleware("http")(my_middleware)

if __name__ == '__main__':
    uvicorn.run(app)

Note that by adding __call__ to a class, instances of that class effectively become functions with a bunch of other stuff on them. So you can register them with app.middleware just like any other function.

True, didn't remember @ is just syntactic sugar.
It looks a bit ugly though? Although I guess some would say it looks "pythonic" instead. Native support would be better, or at least this should/could be mentioned in the docs.
I guess the details could be hidden like:
class MyMiddleware:
    def __init__(self, app: ASGIApp):
        app.middleware("http")(self)

    async def __call__(self, request: Request, call_next):
        response = await call_next(request)
        print("I've been called!")
        return response

MyMiddleware(app)

Looks funny, still.
It actually seems like this "simpler" method signature is applicable for http traffic only - websocket etc. need Starlette's signature. However, maybe a convenience base class or similar could be provided?

The "Starlette way" as you put it is just a raw ASGI callable middleware. Most Starlette-specific middleware instead do it pretty much as you and @dbanty suggested, using the BaseHTTPMiddleware class:
class CustomHeaderMiddleware(BaseHTTPMiddleware):
    async def dispatch(self, request, call_next):
        response = await call_next(request)
        response.headers['Custom'] = 'Example'
        return response

middleware = [
    Middleware(CustomHeaderMiddleware)
]

app = Starlette(routes=routes, middleware=middleware)

Ok so just extend BaseHTTPMiddleware, I see. Thanks for the pointers!
So unless I'm mistaken there are at least 3 ways to specify
async def request_id(request: Request, call_next):
    ...
    return response

class RequestIdMiddleware(BaseHTTPMiddleware):
    def __init__(self, param=1, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.param = param

    async def dispatch(request: Request, call_next):
        ...
        return response

class RequestIdCallable:
    def __init__(self, param=1):
        self.param = param

    async def __call__(self, request: Request, call_next):
        ...
        return response

app = FastAPI()
app.middleware("http")(tx_id)
app.add_middleware(RequestIdMiddleware, param=3)
app.middleware("http")(RequestIdCallable(param=3))

(Plus "FastAPI decorator style" that @sm-Fifteen showed above, but let's leave that out.)
Obviously the first one is quickest to write and use, but it cannot be parameterized, which is something you often want went "generalizing" code (into a separate lib perhaps).
For re-usable and parameterizable middleware, I kinda like the last one (RequestIdCallable) more, because a) there's less to write than with RequestIdMiddleware and IDE auto-complete/analysis works with it, too.
For non-http middleware, ASGI middleware via add_middleware() seems to be the only option.
Would it make sense to add such a quick comparison or recommendation regarding these - when to use which?

For non-http middleware, ASGI middleware via add_middleware() seems to be the only option.

It's not just non-http mddleware, it's for middleware that that tries to be compatible with ASGI in general (instead of only targeting Starlette/FastAPI) in order to work seamlessly with Quart, Django Channels, ASGI Sanic and any other ASGI framework out there.
The 3 variants I'm personally seeing here are:
Stateless HTTP middleware
# @app.middleware("http")
async def request_id(request: Request, call_next):
    ...
    return response

app.add_middleware(BaseHTTPMiddleware, dispatch=request_id)

Note that the decorator merely calls app.add_middleware with BaseHTTPMiddleware, as above:
https://github.com/encode/starlette/blob/519f5750b5e797bb3d4805fd29657674304ce397/starlette/applications.py#L191-L200
Instantiated/Parametrized HTTP middleware
class RequestIdMiddleware(BaseHTTPMiddleware):
    def __init__(self, param=1, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.param = param

    async def dispatch(request: Request, call_next):
        ...
        return response

# Starlette middleware stack pushing
app.add_middleware(RequestIdMiddleware, param=3)

Generic ASGI middleware
class RequestIdASGIMiddleware:
    def __init__(self, app, param=1):
        self.app = app
        self.param = param

    async def __call__(self, scope, receive, send):
        if scope["type"] == "http":
            ...
            await self.app(scope, receive, send)
            ...
        else:
            await self.app(scope, receive, send)

# ASGI application wrapping
asgi_app = Starlette()
asgi_app = RequestIdASGIMiddleware(asgi_app, param=3)

I'm really not convinced your self-registering style is a good idea, putting side-effects in a class constructors sounds like it's going to cause all sorts of invisible problems at some point.

putting side-effects in a class constructors sounds like it's going to cause all sorts of invisible problems at some point.

Could you elaborate what "side-effects" we are discussing here? Is the problem with constructor, in specific (there could be separate init() method or whatever, but I don't think is needed). I think I've seen similar pattern used for Flask middleware but maybe it's just me (no problems with Flask using that style, though).

Could you elaborate what "side-effects" we are discussing here? Is the problem with constructor, in specific (there could be separate init() method or whatever, but I don't think is needed). I think I've seen similar pattern used for Flask middleware but maybe it's just me (no problems so far with using that style for Flask).

I mean having __init__() alter the application object you passed in, which is generally considered bad form by making explicit registration implicit. You're mutating something in a function whose purpose is to create an object, that's called a "side-effect"; it means running the same function multiple times with the same parameters will produce different results because something has been modified behind the curtains. For a constructor/object initialization method, I'm tempted to say that's almost never the right thing to do.

I agree, it's not the perfect model (but it can be sufficient). Note it is suggested in Flask docs, see https://flask.palletsprojects.com/en/1.1.x/extensiondev/#the-extension-code:
class SQLite3:
    def __init__(self, app=None):
        self.app = app
        if app is not None:
            self.init_app(app)

    def init_app(self, app):
        ...

This allows middleware to be declared outside application factory, then initialized inside app factory. But it also allows directly constructing and initializing the middleware directly. If no one should do that, why is it made possible... (I guess because it works, and saves one method call. That's why I've been following that model, too.)


Discussion: NFT Royalties

This issue is to discuss requirements and possible specification for an enforceable Royalty system for Algorand NFTs.
Please comment with any relevant information or ideas.
If you're already doing this please describe the method you're using.

There are several considerations here so far that I see. 1) We need to know the royalty percent, I'm thinking to at least 2 decimals of precision. 2) There should be a way to identify not just the asset creator but a group of creators or collaborators who are also credited. 3) In the case of multiple creators we might want to also to enable weighted distribution of the royalty.
Obviously this would all be optional, and need some information gathering at the time of asset creation, as well as some smart contracts capable of consuming this data.
Im envisioning implementing metadata about people/groups for accreditation thusly:
Person/Organization Schema
{
    "title": "Person, Group or Organization",
    "type": "object",
    "properties": {
        "name": {
            "type": "string",
            "description": "The name of the entity"
        },
        "description": {
            "type": "string",
            "description": "A simple description of the entity"
        },
        "address": {
            "type": "string",
            "description": "Optional blockchain wallet address for the entity"
        }
    }
}

And then somewhere in the Metadata:
...
        "creator": {
            "title": "Person, Group or Organization",
            "description": "The entity"
        },
        "royalty": {
            "type": "number",
            "description": "This value indicates the percentage of sales of this asset which are required by the creator. Value should be set with up to two decimals in precision."
        },
        "contributors": {
            "type": "array",
            "items": {
                "title": "Person, Group, or Organization"
            },
            "description": "List of all credited creators who are to be awarded credit for this work."
        },
...

Good input, reformatting and commenting here
1) We need to know the royalty percent, I'm thinking to at least 2 decimals of precision.

Seems reasonable, and that is assumed to be for final sale price right? Preventing asset xfer unless the royalty txn that meets the requirement is attached atomically?
2) There should be a way to identify not just the asset creator but a group of creators or collaborators who are also credited. With the option for weighted distribution of the royalty.

This makes sense. Right now transactions are limited to 16 grouped atomically, so in the case that there are more collaborators than that it will need to go to some multisig or other account.
Also where would you expect the royalty info would be stored? The values will need to be encoded in whatever sc is validating the xfer to ensure the royalty is actually paid.

Also where would you expect the royalty info would be stored? The values will need to be encoded in whatever sc is validating the xfer to ensure the royalty is actually paid.

At the moment I think therefore an option is to create a stateful smart contract which wraps the asset and where each transaction must be also signed by the asset creator, if the asset should be manageable by him. ( else no multisig needed )
The wrapper contract should be the ManagerAddress to be able to prevent deletion of the asset or some other things the creator whouldnt want event after selling the asset.
In the main them the rightful owner of the Asset should be able to freeze the asset and clawback the asset so he can freeze it and be the only one who can determine where it gets transferred (because he owns it).
The only way to enforce royaltie i can think about at the moment is using a multisignature contract when using a contract that should issue a royaltie payment for an asset with signatures required by at least the app and the wrapped contract containing the royaltie percentage

AlgoRealm game has been built exactly with the purpose of showing how you can embed decentralised royalty policies into a NFT, directly on Layer-1.
This being said, that solution was released before the ARC-4 proposal on ABI, so I think that if I were to propose a solution today that takes this into account, I would done it differently.
I think we should collectively start thinking about a general approaches about "ASA Transfer Control ABIs", whatever this "transfer control" means: it could be a royalty over an NFT, it could be a regulation policy in a given jurisdiction, it could be a decentralised KYC/whitelisting, it could be a policy on maximum transferable amounts, etc. Standardising this approach with ABIs would make also much more simple, in future, to interact with those ASAs directly form wallets.
So, in this case, royalty over NFTs would be just one particular class of ASA Transfer Control ABIs.
I think the for the ASA Royalty ABI:

The ASA subject to the royalty MUST be created as Default Frozen, with no Freeze Address.
The Clawback Address of the ASA subject to the royalty MUST be assigned to an App (this is possible starting from TEAL 5).
The ASA subject to the royalty MUST be only transferred with Clawback.
The Manager Address of the ASA subject to the royalty SHOULD be delated (to avoid unforeseen modification of the royalty ex-post).
The ABI MUST allow the definition of royalty collectors (and maybe SHOULD allow to update them over time)
Given the royalty policy, known in advance, the ABI MUST calculate the royalty amounts on every transaction.
The ABI MUST not allow the modification of the royalty policy
The ABI could include a whitelisting

"ASA Transfer Control ABIs"
Love it

The ASA subject to the royalty MUST be only transferred with Clawback.
Very interesting, hadn't thought about this. How could this be enforced? Would the ASA have to reside in a contract account?

maybe SHOULD
MIGHT?

It looks like you've thought a lot about this, would you be willing/have time to submit a draft proposal?

Very interesting, hadn't thought about this. How could this be enforced? Would the ASA have to reside in a contract account?

Previous to TEAL 4 the Clawback Address would be assigned to a Contract Account. Form TEAL 5 you can also assign the Clawback Address to the Application Account. Since the ASA is issued as Default Frozen the only way to move it is asking to the Application to transfer the ASA on your behalf with an ABI call, so that you are implicitly enforcing all the Application logic over the ASA transferability.

MIGHT?

Yes, would be better using MAY to comply with RFC-2119.

Thanks for sharing your insights @cusma , this seems like a powerful strategy and I like how it keeps using ASAs

Previous to TEAL 5 the Clawback Address would be assigned to a Contract Account (AlgoRealm solution explains exactly this approach step by step). Form TEAL 5 you can also assign the Clawback Address to the Application Account. Since the ASA is issued as Default Frozen the only way to move it is asking to the Application to transfer the ASA on your behalf with an ABI call, so that you are implicitly enforcing all the Application logic over the ASA transferability.

@cusma  Wow, very interesting and creative concept!

@cusma is there a timeline on ARC-4 / https://github.com/jannotti/ARCs/blob/6a9f91aed8068bbace872483a64cbf22d0e1c975/ARCs/arc-0004.md ?

AlgoRealm game has been built exactly with the purpose of showing how you can embed decentralised royalty policies into a NFT, directly on Layer-1.
This being said, that solution was released before the ARC-4 proposal on ABI, so I think that if I were to propose a solution today, that takes this into account, I would done it differently.
I think we should collectively start thinking about general approaches about "ASA Transfer Control ABIs", whatever this "transfer control" means: it could be a royalty over an NFT, it could be a regulation policy in a given jurisdiction, it could be a decentralised KYC/whitelisting, it could be a policy on maximum transferable amounts, etc. Standardising this approach with ABIs would make also much more simple, in future, to interact with those ASAs directly form wallets.
So, in this case, royalty over NFTs would be just one particular class of ASA Transfer Control ABIs.
I think that for the ASA Royalty ABI:
1. The ASA subject to the royalty **MUST** be created as Default Frozen, with no Freeze Address.

2. The Clawback Address of the ASA subject to the royalty **MUST** be assigned to an App (this is possible starting from TEAL 5).

3. The ASA subject to the royalty **MUST** be only transferred with Clawback.

4. The Manager Address of the ASA subject to the royalty **SHOULD** be delated (to avoid unforeseen modification of the royalty ex-post).

5. The ABI **MUST** allow the definition of royalty collectors (and maybe **SHOULD** allow to update them over time)

6. Given the royalty policy, known in advance, the ABI **MUST** calculate the royalty amounts on every transaction.

7. The ABI **MUST NOT** allow the modification of the royalty policy

8. The ABI **MAY** include a whitelisting

Whould it make sense to include: creating the asset from the application to enforce DefaultFrozen and no FreezeAddress via an application call on which the AssetConfigTxn gets issued via an InnerTxn on adequate ApplicationCall?

@JuWeber99 I think it would, as long as the App became aware of the newly generated ASA ID: this makes operations over the ASA restricted to a specific ASA ID and so more secure.
Please mind that my proposal was just a draft of me brainstorming with myself, but in principle the ASA Royalty ABI could expose, among the others, a proper mint method with which you can define all the properties and configurations of the ASA subject to the royalty directly within the App.
I'm still thinking about whether the best approach would be having a complete ASA Royalty ABI with its own methods (maybe something like mint, transferRoyalty and optionals like burn, revoke,  freezeAccount, freezeAsa and so on) or if would be better to modularise those single methods and combining them in a more composable and generic ASA Transfer ABI within which you may want to include the transferRoyalty but not the revoke one.
There are trade off between the two approaches, my gut feeling is that the second one could be over-engineered (while more modular).
In both cases the practical steps would be:

Defining a comprehensive list of all the desirable ABI methods
Defining specs for each one of those desirable ABI methods

@cusma When discussing royalties, we have also come across the idea of "split gain" – it might make it more interesting to trade NFTs and thus increase the fluidity of the market.
Artist "Win Share"
An NFT that enforces a custom transaction when reselling it, the artist "win share" will
calculate the amount of additional value generated (as the delta between the last and the current sale)
and redirect a part of the additional value to the initial owner (aka artist).
The artist will only receive something if an NFT is sold for a higher price than the last recorded price.
When the price is higher, she will get e.g. 20% of the additional value:

an NFT is sold for an initial $10 from A to B, A receives $10
the NFT is sold for $8 from B to C, A receives 0, B receives $8
the NFT is sold for $20 from C to D, A receives 20% of $12

Perhaps, an architecture that has several ASA  ABIs the creator of an NFT can choose from would be more open...

Hi, I have recently started to delve into this problem, and  I agree with @cusma that it just makes much more sense to have a sort of ASA Transfer Control ABI. However, it is also hard to come up with a proposal that works for any scenario. Perhaps it would be better to create a new discussion? @barnjamin
Nonetheless, I am new to the community to Algorand and  I would like to contribute somehow  to the project.
My proposal is to create an object that is a JSON description of the list of transactions that are required to successfully transfer an ASA. This could help not only with the royalty fees, but also many other things.

The ASA MUST be created as Default Frozen.
The Clawback address of the ASA MUST be assigned to an App or a Smart Signature.
The ASA MUST be only transferred with Clawback.
The ABI description MUST define an ordered group of transactions required to successfully transfer the ASA.
The last transaction of this ordered group MUST be an AXFER transaction, where the sender address is the Clawback address (we need to include this transaction in the group in order to understand who is receiving the asset. Maybe the receiver is in a whitelist/blacklist).
There MAY be more than 1 way to approve the transaction. This means that there MAY be more than one correct group of transactions.
The buyer MAY buy the ASA using another ASA. However, to avoid loops the buyer MUST not use an ASA with a clawback address set, or a frozen ASA.

In general, I believe each transaction SHALL only describe the necessary parameters for that transaction.
If some transaction parameters are variable (e.g. a % royalty fee, and not a pre-defined fixed amount), an App will be called to compute the necessary parameters.
The JSON description would be
interface ASATransferControl {
  assetId: number,                                    // Perhaps redundant
  listTransactionsGroup: Array<TransactionsGroup>     // List of ordered transactions groups
}

where
interface TransactionsGroup {
  buyerAsset: Array<number>,                           // Assets that may be used by the buyer to buy the original ASA
  transactionsGroup: Array<Transaction>                // Ordered group of transactions that defines how to buy the ASA
}

interface Transaction {
  type: string,                                                                 // "appl", "axfer", etc...
  args: { field: string, value: string | number | ... | AppCall | AppRead }     // Any argument that needs to be specified.
}

interface AppCall {                   // This is used to call an App method
  appId: number,
  method: Method,                     // See ARC-0004
  appArgs: Array<string | number>     // List of parameters
}

interface AppRead {                   // Read a global variable
  appId: number,
  variable: string,
  type: string | number
}

There may be different ways to accept the transfer. That's why listTransactionsGroup is an array.
Interface TransactionsGroup  includes buyerAsset. This is a list of ASA IDs that the buyer can use with that specific transactionsGroup.
In the Transaction interface the value of field may be AppCall, which means that the value  should be computed by calling the method defined in AppCall.
Instead AppRead is a simple read of a specific global variable in the App.

Example
For example, imagine the following 2 scenarios:

We want to impose royalty fees on secondary sales of a specific ASA. Let's say this is 3% of the payment amount in ALGO.
Alternatively, we also accept that the ASA is swapped with other different assets. In this case the royalty fee is set to a fixed amount of 1000 algo.

We  first create an ASA (id 10) and assign the Clawback address to a specific App (id 123)
Scenario 1 (Pay ASA with ALGO)
To buy the ASA the buyer must perform the following 3 transactions

Make a payment to the App (royalty fee 3%)
Make a payment to the Seller
Make an axfer transaction.

We suppose the Clawback  is also the App for simplicity, so I don't include a NoOp transaction.
Scenario 2 (Pay ASA with another ASA)
To buy the ASA the buyer must perform the following 3 transactions

Make a payment to the App (royalty fee of 1 algo)
axfer transaction of the buyer's ASA
Make an axfer transaction of the seller's ASA

We assume the buyer's ASA id can be 11 or 12.
JSON Description
In the JSON description I make use of some variables that can be easily retrieved

"$AMOUNT" (the payment amount)
"$SELLER" (who is the current ASA seller)
"$BUYER"  (who is the buyer)
"$CLAWBACK_ADDRESS" (clawback of the ASA)

The resulting JSON is as follows.
{
  "assetId": 10,
  "listTransactionsGroup": [
    {                                                   # SCENARIO 1
      "buyerAsset": [0]                                 # AssetID = 0 is ALGO
      "transactionsGroup": [                            # List of transactions
        {
          "type": "pay",                                # Royalty fee payment
          "args": {
            "rcv": "$CLAWBACK_ADDRESS",                 # The receiver of the fee is the Clawback address
            "amount": {                                 # Here we call the APP to compute the royalty fee
              "appId": 123,
              "method": {
                "name": "computeFee",
                "args": ["number"],
                "returns": {"type": "number"}
                },
              "args": ["$AMOUNT"]                       # We call the "computeFee" method and pass the $AMOUNT parameter
              }
            }
        },
        {
          "type": "pay",                                # Payment transaction, the receiver is the seller
          "args":
            {"rcv": "$SELLER", "amount": "$AMOUNT"}     # No constant args
        },
        {
          "type": "axfer",                              # Transaction to transfer the asset
          "args":
            {"asnd": "$SELLER",
             "snd": "$CLAWBACK_ADDRESS"
             "xaid": 10,
             "aamt": 1
            },
        }
      ]
    },
    {                                                   # SCENARIO 2
      "buyerAsset": [11, 12],                           # buy the ASA using either ASA 11 or 12
      "transactionsGroup": [                            # List of transactions
        {
          "type": "pay",                                # Royalty fee payment of 1 algo
          "args":
            {"rcv": "$CLAWBACK_ADDRESS", "amount": 100000}
        },
        {
          "type": "xfer",                               # Transfer to the seller 1 ASA id 11 or 12
          "args":
            {"snd": "$BUYER", "aamt": 1}                # here the field "xaid" can only be 11 or 12 implicitly (the clawback should check this)
        },
        {
          "type": "axfer",                              # Transaction to transfer the asset
          "args":
            {"asnd": "$SELLER",
             "snd": "$CLAWBACK_ADDRESS"
             "xaid": 10,
             "aamt": 1
            },
        }
      ]
    }
}

Comments:

We may not require to specify assetId in the ASATransferControl interface (it feels redundant)
IMO the description of the JSON should be allowed to change
While writing this proposal I had to define an interface for a transaction, but maybe there exists already something?

I'd have to agree with the approach suggested by @whereisrysmind here. It's similar to how Solana approaches this issue, and their NFT standards & markets are mature. Royalty information is embedded into the asset; that may not be possible - but we can put it into the metadata.
"sellerFeeBasisPoints": 500,
"creators": [
    {"address": "", "share": 0},
    {"address": "", "share": 100}
]

sellerFeeBasisPoints is the secondary sale fee in basis points to pay out to the creators. In this case 5%
creators is the list of creators & their respective cut.
address is a creator wallet.
share is the percent the of the seller fee each creator gets. The total share value must be equal to 100.
Markets would be expected to honor this. Their web2 can make a grouped transaction that can easily accommodate this. Additionally, this can work for assets that currently exist if the metadata can be updated.

You can put some of it in the Reserve Address. I also want to use the Reserve Address for some trait data. Maybe we can share. But the reason I suggest this is because stateful contracts are now Turing complete and very shortly get the ability to call one another so it seems very obvious to anticipate exponential growth in on chain capabilities and expectations.  Maybe I am crazy but people are going to want to access some of that data. And remember algod does not do anything with Reserve Address. They should just call it Reserved Data for your Algorand App.

You can put some of it in the Reserve Address. I also want to use the Reserve Address for some trait data. Maybe we can share. But the reason I suggest this is because stateful contracts are now Turing complete and very shortly get the ability to call one another so it seems very obvious to anticipate exponential growth in on chain capabilities and expectations.  Maybe I am crazy but people are going to want to access some of that data. And remember algod does not do anything with Reserve Address. They should just call it Reserved Data for your Algorand App.

Please review and comment here: https://github.com/algorandfoundation/ARCs/pull/70

@rssalessio It looks like you put a lot of thought into the above comment, please take a look at #70 if you have time.

Closing this, the discussion is now here ARC-18 Royalty Enforcement


[JobRouter] Fix reclassify

Contributing to the Azure SDK
Please see our CONTRIBUTING.md if you are not familiar with contributing to this repository or have questions.
For specific information about pull request etiquette and best practices, see this section.

API change check
API changes are not detected in this pull request.


Alter generate schemas script

Alter generate schemas script to include hours options.  Joint commit with @carolinegreen and @pcraig3

:+1:


Update README Screen Shot

Also compressing things a bit in ImageOptim!
The code in the playground was a bit old, and we now load our public eps, so this is a nice lil update!
The main screen shot is still using mock data, but that's maybe fine. What did you use to generate it?


Various fixes for OpenXR action map meta data and editing

This PR makes a number of changes around the OpenXR action map
Earlier creation of the default action map (done)
If a VR project did not yet have an action map we didn't create it until the project was first run. This causes issues in visibility and may result in a missing action map when deployed on mobile devices.
The action map is now created by the initialization of the action map editor, as this only runs if OpenXR is enabled for a project, it seemed like a good place.
Marking the resource as edited (done)
The editor has been enhanced so all actions create undo/redo entries and mark the resources as edited.
Should solve #68041
Make Action map meta data extendable (done)
The class OpenXRDefs contains meta data that details out all possible paths we can use for building our action map. OpenXR does not have a mechanism for enumerating this data.
As extensions are now being added that introduce additional paths, having this data be static is no longer enough.
To better define what this class does, I've renamed it to OpenXRInteractionProfileMetaData, turned it into a singleton and made it possible to register new paths. It is also registered with ClassDB so it can be accessed for GDExternals.
Use action map meta data for filtering (done)
Action maps need to be as complete as possible to allow games to be deployed to multiple devices, but not all devices will support the extensions required for certain entries in the action map. For this we introduced OpenXRExtensionWrapper::is_path_supported.
By completing the action map meta data and added extension information to this we can use that data to filter out unsupported entries. This will also allow us to generate warnings/errors when there are misspelled entries in the action map.
Currently OpenXR runtimes have a tendency to crash when unsupported paths are supplied.
Move registering of extension paths into extensions (future)
Note that currently extensions are only registered when OpenXRAPI is instantiated, and this class is not guaranteed to be in the editor.  We need #68259 to be merged, but there is a mutual dependency here.
This PR should be merged first, then 68259, and then we can do an additional PR to clean this up.
Add ability for extensions to add entries to the default action map (future)
Again this will be dependent on the changes in 68259 to be merged so this will be in a followup PR, however currently we add default entries to our default action map including entries related to extensions.
It would be nicer if extensions can add their default entries but we need the extensions registered regardless of whether OpenXRAPI is instantiated.
This will be important for instance in our PICO extension so default PICO controllers can be setup, see #68023

One question I have is whether OpenXRActionMapMetaData is the right name, it is meta data to construct our action map with, but it really is meta data describing our interaction profiles. This info says nothing about the actions a user may or may not add to their action map. I'm contemplating renaming it OpenXRIPMetaData

@akien-mga @Calinou do you guys have any idea about how to solve the resource marked as edit issue? I can't find anything good about how we track this.

I'm still looking for a solution to the save thing but the other bits are all done.

Currently working on implementing undo/redo logic for the action map editor together with properly flagging resources are edited. After that this PR can be reviewed.

Took way more time than I would have liked and I'm not 100% sure whether the approach I took was entirely right, it felt a bit round peg square hole implementing undo/redo and I might come back to this at some point as I get more experience with this system.
That said, I think this works good enough. Could defo use some feedback from the editor team.

Thanks!

Not sure if the emit_changed() is the right way to update things, or if it should be notify_property_list_changed() or be expected to be picked up automatically.

emit_changed() should be emitted whenever a Resource changes. Right now it's not done everywhere to avoid bloat, but nothing is preventing it. However, I think it should only emit when the value actually changes, not always when calling setter.
This signal is supposed to notify other resources or editors, so they can react and update. Only the inspector updates automatically.


allow resetting server stats; reset individual server stats when newly enabled

This is a feature to allow

an API call to reset adaptive routing stats for 1 instance or all instances
add a config to automatically reset server stats for a new instance

This is a response to an issue we had a few months ago where adaptive routing was sending an outsized number of queries to 2 replicas out of 3 we had configured. Restarting the brokers fixed the issue.
Adding the API feels non-controversial, and we've added this to our incident playbooks as a potential remediation when we see skewed routing.
While we've tested the configuration to automatically reset server stats, we have not enabled it by default. It's not immediately clear if this is more valuable than just relying on autodecay, but as far as I can tell, if a server is removed and re-added, there's really no reason to keep the previous stats around as they will be invalid.
Unfortunately, it has been impossible to replicate the original incident, so we've mostly observed metrics in steady state or under synthetic load.

cc @vvivekiyer, curious if you have opinions since you've recently been looking at similar issues

Codecov Report
Attention: Patch coverage is 28.00000% with 18 lines in your changes are missing coverage. Please review.

Project coverage is 62.09%. Comparing base (59551e4) to head (4ff58fc).
Report is 472 commits behind head on master.

Files
Patch %
Lines

...erver/routing/stats/ServerRoutingStatsManager.java
43.75%
5 Missing and 4 partials :warning:

...pinot/broker/api/resources/PinotBrokerRouting.java
0.00%
5 Missing :warning:

...che/pinot/broker/routing/BrokerRoutingManager.java
0.00%
3 Missing and 1 partial :warning:

Additional details and impacted files
@@             Coverage Diff              @@
##             master   #13196      +/-   ##
============================================
+ Coverage     61.75%   62.09%   +0.34%
+ Complexity      207      198       -9
============================================
  Files          2436     2529      +93
  Lines        133233   138293    +5060
  Branches      20636    21402     +766
============================================
+ Hits          82274    85876    +3602
- Misses        44911    45987    +1076
- Partials       6048     6430     +382

Flag
Coverage Δ

custom-integration1
<0.01% <0.00%> (-0.01%)
:arrow_down:

integration
<0.01% <0.00%> (-0.01%)
:arrow_down:

integration1
?

integration2
0.00% <0.00%> (ø)

java-11
<0.01% <0.00%> (-61.71%)
:arrow_down:

java-21
62.09% <28.00%> (+0.46%)
:arrow_up:

skip-bytebuffers-false
27.89% <0.00%> (-33.86%)
:arrow_down:

skip-bytebuffers-true
62.08% <28.00%> (+34.36%)
:arrow_up:

temurin
62.09% <28.00%> (+0.34%)
:arrow_up:

unittests
62.09% <28.00%> (+0.34%)
:arrow_up:

unittests1
46.55% <43.75%> (-0.34%)
:arrow_down:

unittests2
27.90% <0.00%> (+0.17%)
:arrow_up:

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

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