Element id
Class: MappingSet
Field / Element id: intention
Examples

This value set is intended for use in a clinical data entry setting.

This value set is intended for use in a public health analytics setting.

Value data type
xsd:string
Description
Describes the intended context where the value set is intended to / most likely to be seen or utilized.
Discussion
It's hard to say whether or not this should be simply called intention, because that implies that the MappingSet itself has an intention. However, what we're really interested in is the intention of ValueSets (AKA ConceptSets / CodeSets / Enumerations). Currently, there is no ValueSet equivalent in the SSSOM data model. Until that class is might be added, perhaps the best way to do this is to add two fields:

MappingSet.subject_set_intention
MappingSet.object_set_intention

Indeed, we could re-use this same pattern MappingSet.[subject|object]_set_* to define all fields at the ValueSet level.
Additional information
For inspiration, we could look to FHIR. They call intention "usage context": https://build.fhir.org/valueset-usage-context-type.html
Related issues: #221

Relevant comments copy/pasted from #221 :
joeflack4:

@hlehmann17 @'ing you here if you wanted to share any thoughts regarding expressing intention for ValueSets in regards to mappings. You mentioned wanting to do this in a computational / data model way. I thought I remember seeing more from FHIR in regards to this UsageContext type, but not a lot on that page. If I find more, I'll share.

hlehmann17

Re "intention": Siggie may disagree that anyone reuses concept sets, but if they were to do so, they would use a "intention" description to screen for a relevant concept set. (I.e., they would search on name, but then look at the intention to decide whether to focus on one concept set or the other, and then look in on the concept expression or concept codes and overlap). At least, this is my presumption. But if I am correct that concept sets should be disambiguated by intention, and not just by the concept expression or the extensional list of codes, then attention should be paid to them. I am disheartened that there is little metadata in Atlas concept sets. VSAC has good meta data. so first, some analysis is needed to look through lists of intention texts. If there is some regularity, then a structure could be made for it that would be tucked inside the FHIR valueset, probably in the "purpose" element, or perhaps "scope". With structure, a computer tool could help a user find the right valueset for their question, assuming the question could be posed in a "language" that would cohere with the "intention" language. That's my thought, at any rate. If there is an effort to map between value sets, I am thinking that thinking about intention, in a computational way, is important.

matentzn

@hlehmann17 thank you for the analysis! Could you give a few examples on "intention" that would illustrate the kind of granularity we are talking about?

hlehmann17

Here's another, for Peripheral Vascular Disease: "Create broad and generic general use concept as starting place for research teams and for use in calculating comorbidity indices. Focus is on diseases intrinsic to blood vessels. Follows the intention of the Charlson comorbidity index: Includes conditions due to atherosclerosis, stenosis, occlusion and diabetes; excludes conditions due to embolism or congenital conditions or limited to the skin."

matentzn
Your examples pertain mostly to the intentions of the value sets themselves, am I right? Is it possible, according to your view on value set mappings, that the mapping itself has a specific intention? So, could there be a case for mapping one value set with high granularity to another with low granularity, and would this imply something about the intention of the mapping?
hlehmann17

Certainly we’ve seen intentions of mappings:

Desire for absolute coherence between the codes in the two sets (extensional coherence) (probably could be called a “specific” mapping)
Desire for coherence between the intentions in the two sets (intentional coherence)
Desire for pragmatic coherence (High-to-low granularity) (may also be a “sensitive” mapping)

Again, I am thinking that some empirical work is needed to ensure that this little typology is complete.

graybeal

But then @joeflack4 commented:

… if you wanted to share any thoughts regarding expressing intention for ValueSets in regards to mappings.

And at that point the discussion went in what seemed to me a totally different direction, one mostly about intentions, and one that seems appropriate to me for a different ticket, or even two (one about expressing intentions for mappings in SSSOM, and a broader one about expressing intentions of a semantic asset in a computational way).

joeflack4 •

@graybeal I think you're right. I've heard from various people on their definitions of "value set", "code set", "concept set", and "enumeration". I have seen good ideas, but not a consensus. Not that we can't make progress here, but with the lack of official dictionary or wikipedia definitions, this is a difficult, semantically blurry space.

matentzn

Sorry for breaching the scope of this ticket, I just found the comment from @hlehmann17 quite interesting and wanted to follow up. Indeed, I moved the intention discussion here: https://github.com/mapping-commons/sssom/discussions/223.
Part of the process we have to do as a community is to delineate the scope of sssom clearly. I think @graybeal and @joeflack4 concerns are all valid and mimic my own - I do, as @joeflack4 however think that it is part of our mandate to at least explore how the exact requirements of this space, and then provide a profile or something similar that would allow us to properly service that community. We are certainly not bending SSSOM to squeeze value set mappings in, but if we can extend it to accommodate them, we should at least explore it.


[Docs] Add documentation about label data and label contribution

Is there an existing issue for this?

[X] I have searched existing issues, it hasn't been reported yet

Use case description

We should add more documentation about the label data and label contribution in OpenDigger which will definitely help others to contribute label data to OpenDigger.

Also need to modify the issue template and workflow in OpenDigger repo since now we need platform data and the label structure has changed.

Proposed solution (optional)
No response

For this,

Also need to modify the issue template and workflow in OpenDigger repo since now we need platform data and the label structure has changed.

I'm curious, does this (issue template and workflow in OpenDigger repo) refer to this?

@Neilblaze Sorry for the late reply. Yes, the label data in OpenDigger means like which repos or orgs belongs to which company, project or community. And which company or project belongs to which country.
In the old version template and workflow, it only supports GitHub platform and JSON format. But for now, we support different platforms like Gitee, and also we start to use yml instead of json to make the text for compact.
So both the template and the workflow need to be modified.


How to delete an index

Is there any way to delete an index of a Search service?
Apart from deleting the index directly via REST API, is it possible to delete it through this CLI?

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

ID: b74208fd-b066-412d-ac3f-ffe3c62941d0
Version Independent ID: 7b3c9510-9579-c510-c468-1e9ec872dde3
Content: az search
Content Source: src/azure-cli/azure/cli/command_modules/search/_help.py
GitHub Login: @rloutlaw
Microsoft Alias: routlaw

search.

Just noticed this issue didn't receive a response.  Sorry for the delay.  Azure CLI for Azure Cognitive Search supports operations on the management plane, such as creating a new service, scaling a service up or down, or managing API keys.  Index operations, such as create or delete index, are on the data API plane, which does not currently have any Azure CLI or Powershell support.
We do appreciate the feedback and will consider this for a future release.
Thanks,
Mike Carter
Azure Cognitive Search PM

@0papen0 Closing this issue since an answer was provided. Please re-open if you need clarification.


Clean up scrolling within code blocks

before

after

Sorry to reply so late; didnt see anything happening here :D
@josephfusco thank you for this! wasn't the icon somehow used at the end of each articles? or maybe did I use some font icon? dont remember; please double check.

Yes you are using an iconfont for the post layout. :smiley:
See post.html#L20

& _icons.scss#L14-L15s
.icon-twitter, .icon-github, .icon-dribbble, .icon-instagram {
  font-family: 'icomoon';

Cool! thanks! Merging.


Provide a cluster pool

I have rewritten your FixedThreadPool to a FixedClusterPool :sparkles:
When my TypeScript branch (#64) is merged, I will create a new PR to also let poolifier provide a Process/Cluster Pool
If you want, you could give me repo write permissions with the possibility to only create branches but not access or merge into master branch
Then we can work together on this PR together (e.g. write tests)

My current code:
(comments and some variable names need to be changed)

fixed.ts
// Christopher will create a PR in poolifier repo
// Therefore this code is temporarily

import { SendHandle } from 'child_process';
import * as cluster from 'cluster';
import { Worker } from 'cluster';

function empty(): void {
    // empty
}

export type Draft<T> = { -readonly [P in keyof T]?: T[P] };

export type WorkerWithMessageChannel = Worker; // & Draft<MessageChannel>;

export interface FixedClusterPoolOptions {
    /**
     * A function that will listen for error event on each worker thread.
     */
    errorHandler?: (this: Worker, e: Error) => void;
    /**
     * A function that will listen for online event on each worker thread.
     */
    onlineHandler?: (this: Worker) => void;
    /**
     * A function that will listen for exit event on each worker thread.
     */
    exitHandler?: (this: Worker, code: number) => void;
    /**
     * This is just to avoid not useful warnings message, is used to set `maxListeners` on event emitters (workers are event emitters).
     *
     * @default 1000
     */
    maxTasks?: number;
}

/**
 * A thread pool with a static number of threads, is possible to execute tasks in sync or async mode as you prefer.
 *
 * This pool will select the worker thread in a round robin fashion.
 *
 * @author [Alessandro Pio Ardizio](https://github.com/pioardi)
 * @since 0.0.1
 */
export class FixedClusterPool<Data = any, Response = any> {
    public readonly workers: WorkerWithMessageChannel[] = [];
    public nextWorker: number = 0;

    // threadId as key and an integer value
    public readonly tasks: Map<WorkerWithMessageChannel, number> = new Map<WorkerWithMessageChannel, number>();

    protected _id: number = 0;

    /**
     * @param numThreads Num of threads for this worker pool.
     * @param filePath A file path with implementation of `ThreadWorker` class, relative path is fine.
     * @param opts An object with possible options for example `errorHandler`, `onlineHandler`. Default: `{ maxTasks: 1000 }`
     */
    public constructor(
        public readonly numThreads: number,
        public readonly filePath: string,
        public readonly opts: FixedClusterPoolOptions = { maxTasks: 1000 }
    ) {
        if (!cluster.isMaster) throw new Error('Cannot start a cluster pool from a worker!');
        if (!this.filePath) throw new Error('Please specify a file with a worker implementation');

        cluster.setupMaster({
            exec: this.filePath,
        });

        for (let i: number = 1; i <= this.numThreads; i++) {
            this._newWorker();
        }
    }

    public destroy(): void {
        for (const worker of this.workers) {
            worker.kill();
        }
    }

    /**
     * Execute the task specified into the constructor with the data parameter.
     *
     * @param data The input for the task specified.
     * @returns Promise that is resolved when the task is done.
     */
    public async execute(data: Data): Promise<Response> {
        // configure worker to handle message with the specified task
        const worker: WorkerWithMessageChannel = this._chooseWorker();
        // console.log('FixedClusterPool#execute choosen worker:', worker);
        this.tasks.set(worker, this.tasks.get(worker) + 1);
        const id: number = ++this._id;
        const res: Promise<Response> = this._execute(worker, id);
        // console.log('FixedClusterPool#execute send data to worker:', worker);
        worker.send({ data: data || {}, _id: id });
        return res;
    }

    protected _execute(worker: WorkerWithMessageChannel, id: number): Promise<Response> {
        return new Promise((resolve, reject) => {
            const listener: (message: any, handle: SendHandle) => void = (message) => {
                // console.log('FixedClusterPool#_execute listener:', message);
                if (message._id === id) {
                    worker.removeListener('message', listener);
                    this.tasks.set(worker, this.tasks.get(worker) - 1);
                    if (message.error) reject(message.error);
                    else resolve(message.data);
                }
            };
            worker.on('message', listener);
        });
    }

    protected _chooseWorker(): WorkerWithMessageChannel {
        if (this.workers.length - 1 === this.nextWorker) {
            this.nextWorker = 0;
            return this.workers[this.nextWorker];
        } else {
            this.nextWorker++;
            return this.workers[this.nextWorker];
        }
    }

    protected _newWorker(): WorkerWithMessageChannel {
        const worker: WorkerWithMessageChannel = cluster.fork();
        worker.on('error', this.opts.errorHandler || empty);
        worker.on('online', this.opts.onlineHandler || empty);
        // TODO handle properly when a thread exit
        worker.on('exit', this.opts.exitHandler || empty);
        this.workers.push(worker);
        // const { port1, port2 } = new MessageChannel();
        // worker.send({ parent: port1 }, [port1]);
        // worker.port1 = port1;
        // worker.port2 = port2;
        // we will attach a listener for every task,
        // when task is completed the listener will be removed but to avoid warnings we are increasing the max listeners size
        // worker.port2.setMaxListeners(this.opts.maxTasks || 1000);
        worker.setMaxListeners(this.opts.maxTasks || 1000);
        // init tasks map
        this.tasks.set(worker, 0);
        return worker;
    }
}

workers.ts
// Christopher will create a PR in poolifier repo
// Therefore this code is temporarily

import { AsyncResource } from 'async_hooks';
import * as cluster from 'cluster';

export interface ClusterWorkerOptions {
    /**
     * Max time to wait tasks to work on (in ms), after this period the new worker threads will die.
     *
     * @default 60.000 ms
     */
    maxInactiveTime?: number;
    /**
     * `true` if your function contains async pieces, else `false`.
     *
     * @default false
     */
    async?: boolean;
}

type MessageValue<Data> = { readonly data?: Data; readonly _id?: number; readonly kill?: number };

/**
 * An example worker that will be always alive, you just need to **extend** this class if you want a static pool.
 *
 * When this worker is inactive for more than 1 minute, it will send this info to the main thread,
 * if you are using DynamicThreadPool, the workers created after will be killed, the min num of thread will be guaranteed.
 *
 * @author [Alessandro Pio Ardizio](https://github.com/pioardi)
 * @since 0.0.1
 */
export class ClusterWorker<Data = any, Response = any> extends AsyncResource {
    protected readonly maxInactiveTime: number;
    protected readonly async: boolean;
    protected lastTask: number;
    protected readonly interval: NodeJS.Timeout;
    // protected parent: MessagePort;

    public constructor(fn: (data: Data) => Response, public readonly opts: ClusterWorkerOptions = {}) {
        super('worker-cluster-pool:pioardi');

        this.maxInactiveTime = this.opts.maxInactiveTime || 1000 * 60;
        this.async = !!this.opts.async;
        this.lastTask = Date.now();
        if (!fn) throw new Error('Fn parameter is mandatory');
        // keep the worker active
        if (!cluster.isMaster) {
            // console.log('ClusterWorker#constructor', 'is not master');
            this.interval = setInterval(this._checkAlive.bind(this), this.maxInactiveTime / 2);
            this._checkAlive.bind(this)();
        }
        cluster.worker.on('message', (value: MessageValue<Data>) => {
            // console.log("cluster.on('message', value)", value);
            if (value && value.data && value._id) {
                // here you will receive messages
                // console.log('This is the main thread ' + isMainThread)
                if (this.async) {
                    this.runInAsyncScope(this._runAsync.bind(this), this, fn, value);
                } else {
                    this.runInAsyncScope(this._run.bind(this), this, fn, value);
                }
                // } else if (value.parent) {
                //     // save the port to communicate with the main thread
                //     // this will be received once
                //     this.parent = value.parent;
            } else if (value.kill) {
                // here is time to kill this thread, just clearing the interval
                clearInterval(this.interval);
                this.emitDestroy();
            }
        });
    }

    protected _checkAlive(): void {
        if (Date.now() - this.lastTask > this.maxInactiveTime) {
            cluster.worker.send({ kill: 1 });
        }
    }

    protected _run(fn: (data: Data) => Response, value: MessageValue<Data>): void {
        try {
            const res: Response = fn(value.data);
            cluster.worker.send({ data: res, _id: value._id });
            this.lastTask = Date.now();
        } catch (e) {
            cluster.worker.send({ error: e, _id: value._id });
            this.lastTask = Date.now();
        }
    }

    protected _runAsync(fn: (data: Data) => Promise<Response>, value: MessageValue<Data>): void {
        fn(value.data)
            .then((res) => {
                cluster.worker.send({ data: res, _id: value._id });
                this.lastTask = Date.now();
            })
            .catch((e) => {
                cluster.worker.send({ error: e, _id: value._id });
                this.lastTask = Date.now();
            });
    }
}

I need to build DynamicClusterPool later on

You can stack your PRs and create dependency between, that will ease the code review.

I'm not a friend of stacking branches on top of each other, because this makes branch management really hard if there is a conflict or commit in between that suddenly leads into a new direction
I have waited for your response 2+ month :smile: ... so I think I have the time and the calm to just wait a little bit more and make one step after each other :slightly_smiling_face:

I'm not a friend of stacking branches on top of each other, because this makes branch management really hard if there is a conflict or commit in between that suddenly leads into a new direction

You're right. That's why I've always considered the one PR per feature a mistake. The commits level is way more appropriate and in fact used by most of the prominent FOSS project like Linux Kernel, git, etc.

I have waited for your response 2+ month 😄 ... so I think I have the time and the calm to just wait a little bit more and make one step after each other 🙂

Just to be clear: I'm not an official maintainer of poolifier but I'm very interested by your cluster worker pool integration. So I'm making what I think is necessary to speed up the merge of your work ;)
In any case, the final decision stay in @pioardi hands.

Oh wow I was so confused about the name, I just thought (until now) that you just renamed your account :rofl:
But you are a whole different person LOL

The goal of my reviews are just to:

offload some review work from the official maintainer;
make hopefully some useful suggestions that will ease your work acceptance;
shows that your work interests some poolifier users.

Let's hope that it will speeds up your work merge.

I'm not a friend of stacking branches on top of each other, because this makes branch management really hard if there is a conflict or commit in between that suddenly leads into a new direction

But still, could you please publish your work in progress regarding cluster worker pool integration in a branch under your poolifier fork?
I would like to test it.

Thanks both @jerome-benoit  and @Shinigami92 .
My main focus is to listen what the "community" ask about this library to move on in the right direction so thanks to both of you.
As you know my preference is to promote backward compatibility where possible.
Said that I will need in the near future to have repo mainteners that help me with this library and I am considering both of you for that, we could probably need to have a chat or something like that, everything at its time :)

But still, could you please publish your work in progress regarding cluster worker pool integration in a branch under your poolifier fork?
I would like to test it.

Yeah I need to set it up, maybe not today anymore, give me some days or so, because I think I don't have it right now in a branch as you think. That's why I copied it into the comment 2 month ago

[...] mainteners that help me with this library [...]

I'm happy to help and become a (side-/co-)maintainer
I have some other projects and communities, but I think this lib is such small that I also can help and have the time for that :slightly_smiling_face:

Is Worker from cluster module API equivalent to worker_threads?
If yes, code reuse can probably be done easily by using some TS magic regarding typing.

@jerome-benoit I need to refresh my 2-month-old-mind when working on this (I hope so today)
But first I would prefer to make the base project and structure stable so this PR produces as less as  possible conflicts
They more branches I need to maintain in parallel they more I need to manage the state of each of the branches
If I can work step by step, I'm more efficient

NOW the time has come :tada:
@jerome-benoit @pioardi I will tackle this now!
I'm also available via gitter the whole day today, because now it's clear that I have a so called slack-day
A day in each month where I can spend my working time for what ever I want :slightly_smiling_face:

We maybe need to precise that the cluster worker pool will only work with stateless network protocols.
By default cluster do not offer a sticky load balancing anyway, but with a pool, it will be not easy to add a session affinity mechanism (let's say with HTTP first) to one of the worker in the pool.


Content Security Policy blocks Page Translator

Websites using CSP may prevent Page Translator from loading Microsoft Translator or Google Translate JavaScript libraries. This is a silent failure for users, but observable in the developer console with a warning like:
Content Security Policy: The page’s settings blocked the loading of a resource at https://ssl.microsofttranslator.com/ajax/v3/WidgetV3.ashx?siteData=ueOIGRSKkd965FeEGM5JtQ**&ctf=False&ui=true&settings=Auto&from= ("script-src https://www.telia.se 'unsafe-inline' 'unsafe-eval' https://www.googletagmanager.com https://www.google-analytics.com https://dev.visualwebsiteoptimizer.com https://pwe-tsscc.ccs.teliasonera.com https://core.dch.got.telia.se https://*.cloudfront.net https://connect.facebook.net https://www.youtube.com https://s.ytimg.com").

At a minimum, Page Translator should catch this error and inform the user that the page blocked the translation request instead of silently failing.

One potential option is to modify the CSP on page load to allow the translation service scripts. An example of a WebExtension that does this is at https://github.com/PhilGrayson/chrome-csp-disable/blob/master/background.js .
This approach has security implications because it violates the declared intent of the page. The risk seems low if the hostnames for Microsoft's and Google's scripts are added because the likelihood of either being compromised is low.
If this approach is used, the CSP header should only be modified when a block is detected and the user consents to overriding the page's security.

Another potential option is to reimplement the logic of the Microsoft and Google translation widgets in the WebExtension itself so that no external JavaScript libraries are loaded. This would be an enormous undertaking and use of the Microsoft and Google translation APIs might not be free for such a use case.


Proposal: use consumer driven contract testing

Hello @ddelnano & @olivierlambert,
The current tests for xo-sdk-go are based on having a Xen Orchestra instance running. This makes it very hard to test the SDK in isolation as well as under CI. I took some time today to come up with an alternative and more lightweight approach, implemented as a proof of concept (POC) in this PR.
In previous years, I have used Consumer Driven Contract Testing (CDCT) a few times on different professional assignments with positive outcome. This approach decouples a consumer of an API from its provider by testing against the messages sent back and forth over the network.
A lot of people have used a mocking/stubbing approach like Wiremock when testing a consumer of an API where Wiremock acts as the replacement for the real service. But it only goes as far as being a solution for testing the consumer side. It is still decoupled from testing the real implementation.
One of the frameworks which supports a coupled way of testing for both consumer and provider is Pact. Pact supports testing both synchronous (http) and asynchronous APIs (messaging). A good intro article is this intro page:
https://docs.pact.io/
When implementing tests with Pact, we start implementing the expected request and response message in our test method using the Pact libraries. This request/response pair is sent to the Pact mock server. The second part of our tests invokes functionality on the consumer, which as part of the implementation, generates the real request. The SDK is in our case connected to our Pact mock server. If the message which is actually sent matches the expected message, then the configured response is sent back to the SDK where we handle the response as part of our SDK implementation. When the result is OK, our test succeeds, otherwise we fail the test. What is common in how Pact works is that pact files with all these request/response pairs are written to disk when running the consumer tests. These pact files can be "replayed" against a provider of the API to test if the expectations of a consumer hold against the real implementation. The exchange of these pact files usually happens via the Pact Broker.
In this PR, I wrote a single pact based test as an example of how this mechanism works: TestCreateUser. I replaced the real jsonrpc2 client with my own version which talks to the Pact Broker, a process which serves the pact files, and in our cases is a stub for the real Xen Orchestra.
This Pact Broker process is part of the Pact CLI tools, which need to be installed separately. Once these tools can be found in your PATH, you can run the pact test like this (with the output added):
$ go test -v ./... -run TestCreateUser
=== RUN   TestCreateUser
2021/11/20 20:46:48 [INFO] checking pact-mock-service within range >= 3.5.0, < 4.0.0
2021/11/20 20:46:49 [INFO] checking pact-provider-verifier within range >= 1.36.1, < 2.0.0
2021/11/20 20:46:49 [INFO] checking pact-broker within range >= 1.22.3
2021/11/20 20:46:49 [INFO] INFO  WEBrick 1.3.1
2021/11/20 20:46:49 [INFO] INFO  ruby 2.2.2 (2015-04-13) [x86_64-darwin13]
2021/11/20 20:46:49 [INFO] INFO  WEBrick::HTTPServer#start: pid=95238 port=51482
2021/11/20 20:46:50 [INFO] INFO: Writing pact before shutting down
2021/11/20 20:46:50 [INFO]
2021/11/20 20:46:50 [INFO] Writing pact for xenorchestra to /Users/ringods/Projects/xenorchestra/xo-sdk-go/client/pacts/xo-sdk-go-xenorchestra.json
2021/11/20 20:46:50 [INFO] INFO  going to shutdown ...
2021/11/20 20:46:50 [INFO] INFO  WEBrick::HTTPServer#start done.
--- PASS: TestCreateUser (1.72s)
PASS
ok      github.com/vatesfr/xo-sdk-go/client     1.981s

What are your first impressions of this approach?
Note: this is the most straight forward thing I could get working in a day. While working on it I found out that I would better use the message based approach rather then the current synchronous approach using the http based mock server. If this doesn't say much to you at the moment, no problem. I can always explain more later.
Signed-off-by: Ringo De Smet<EMAIL_ADDRESS>

Adding @julien-f to get his feeling on this. My first gut feeling is that any change on the API will need to be reflected in the tests too.

I have been interested in pact and understand it as a concept, but don't have practical experience with it. I appreciate you starting the discussion on improving the testing workflow. It's been something that has been on my mind as well for the terraform provider (in addition to the client testing).
Unfortunately I'm not too optimistic in this approach. I am concerned that there will be too much overhead with keeping pact's view of the world consistent with XO development. While the XO api has proven to be stable from a backwards compatibility perspective, the terraform provider and this client move significantly slower since this work is a part time effort. Also XO development happens in a different time zone and is disjoint from the xo-sdk-go and provider's development.   While I don't believe this disjoint development has caused a problem, I think the more coupling we do between the projects the higher the chance for our part time work to be spent on things that don't push the provider or xo-sdk-go forward.
Therefore I would prefer to invest in lowering the bar on integration testing against a real XO server. This would also help out the terraform provider significantly. I currently run those tests against the Vate's "lab environment", which works great for me but is inaccessible to anyone without internal company access (like those that have contributed to the provider).
What about if we applied for open source Equinix bare metal credit (or something similar) and ran a CI job running against a XO cluster running on it? I know the Vates team has discussed using Equinix bare metal as a platform for XO and so it would also build out a real use case on how to deploy an XO cluster this way (not sure if there has been development here since @olivierlambert and I talked about it months ago).

@ddelnano we successfully integrated Equinix Metal Open Source program. We are planning to use it for our own XCP-ng CI, but we are willing to see how we can integrate other testing within the project (we have to take a look on how we can do that properly in Equinix console).
Adding @stormi in the loop too (but I would also love the @julien-f point of view)

Hello all,
All that I can say is that xo-server's API has been developed for internal use and even though we try not to break things for external users, its stability is not guarantee. The XO team does not have the resources to monitor and maintain the tests of this repo but we'll do what we can to fix things on our side if you have issues :slightly_smiling_face:
We have a (badly maintained TBH) test client for the API, that you may want to take a look at: https://github.com/vatesfr/xen-orchestra/tree/master/packages/xo-server-test
We have recently discussed about the possibility to create a better-designed public API in the future, that would be:

based on simple HTTP requests (maybe REST) instead of WebSocket for easier fire and forget use
built incrementally based on the community needs.

But it's very hypothetical for now and will depend on the community interest.

I find it a bit disappointing that we come to this conclusion about the API only at this point. When I initially discussed this on the forum, the answer I got from @olivierlambert was this:

To be fair, I would prefer a Xen Orchestra provider, to provide a better abstraction, as XO is becoming a real middleware for various things nowadays (and overcome some XAPI limitations).

But now, the message from you, @julien-f, is that the XO API isn't intended as a public API. Not the answer I was hoping for.
I hope Vates can come to a decision soon, but I hope you can understand that I will pause any further contributions for now.

I think there's a misunderstanding. What I said on the forum is the target we want to achieve. But @julien-f was telling you about the current state of things. The API wasn't meant for that originally, but it's becoming more and more used anyway. And we are aware of it, that's why we almost never broke it.
In the end, it doesn't mean you shouldn't use it. It means we couldn't maintain both the API and the tests made by a 3rd party tool. That's the point we had initially: it's better to rely on tests based on a real XO that on a mock up API that will be hard to maintain anyway.
It's just a matter of being realistic at this point, and using CI with a real XO seems far more relevant now.
This will be also a very interesting in terms of feedback and what could be done on a future/completely independent public API.


Category chip

Description
Implements the CategoryChip component to render categories / category hierarchies. This also installs the sci-components package so that we can leverage the science design system and also evaluate it at the same time.
Demo
https://cat-chip-frontend.dev.imaging.cziscience.com/chip-test

This is linked to the wrong Shortcut ticket, I'll need to rename the branch and reopen the PR 😢


table header taking full height when you explore the table.

when i click on SQL Editor and run the query it shows table perfectly but when i click on "Explore", it shows a table with header of full height and not able to view the data.
When i inspect there is CSS applying to it which show  "height :100% !important" which is dynamic styling due to that not able to override or fix the height of the table header.

@gaurav-infostretch
Can you tell me the superset version?

@gaurav-infostretch
Can you tell me the superset version?

0.28


Typo: minIcon Typescript type is not accepted by Carousel Component

Describe the bug
minIcon is the actual prop that Carousel component accepts as per the api(https://github.com/yifaneye/react-gallery-carousel#props) but @types/react-gallery-carousel has typo  miniIcon
Please check the screenshots below
Issue:
I am using this in a nextjs project everything works but nextjs is not building the project because of the type error.
**Screens

Check last but one prop in the above image
next js build issue due to the typo.

Hi @mohanzeal ! Thank you for raising this issue up. Hi @guilhermefront ! Would you like to fix it? Please let me know if you don't have time.

Yes, did a PR for fixing this and adding types for other props like thumbnails
https://github.com/DefinitelyTyped/DefinitelyTyped/pull/58748
@mohanzeal sorry for the late fix, I hadn't received a notification until @yifaneye mentioned me

no issues @guilhermefront, and thanks to everyone who build this great carousel component.. It helped me a lot.

A new version with the fix was published (0.2.2), updating should solve this problem
npm update @types/react-gallery-carousel

Hey @guilhermefront, thanks for the fix.
I can confirm the issue is resolved.


drop lib's self dep and pass data to each function

Making lib dependent on devos, was not the greatest idea since it prevents others from using the devos lib. And theres quite a few nice lib functions that people might like that they can't use right now: mkPkgs, mkPackages, mkHomeConfigurations.
This gives the specific data to each lib function that that function needs.

I think we should rather go the contrary route and only pass deps that are strictly necesary down to second and third order functions.
If a humongous, all-encompassing self needs to be passed through more than one hop, we should rather ask ourselves if it's time for refactoring and untangling the code, before loading it with more functionality.
I think revising/refactoring is in first order, before we can / should implement this feature. Otherwise, we risk in getting this wrong and I don't know the costs of cleanup vs the benefits of the feature.

all this PR is doing is reverting an old change. So with or without this, cleanup is necessary. But with this, we can get #218 merged, which makes lib a lot easier to work with, for me at least. And will allow out of tree mkflake usage.
I think the benefits far outweigh the slight harms.

Converted to draft, so we only merge once 0.9 is in

I think it might be good to include this in 0.9(contrary to what I said before), but its not necessary.

bors try

Superseded by #251


ENH: Update to Python 3.9 in build-test-cxx workflow

For consistency with ITK C++ continuous integration workflow.
See https://github.com/InsightSoftwareConsortium/ITK/blob/master/Testing/ContinuousIntegration/AzurePipelinesLinux.yml#L29
Closes #4

Testing in https://github.com/tbirdso/ITKSplitComponents/actions/runs/3823307001/jobs/6504336212


Password recovery through challenge questions: provide details on getting locale support through dashboard

In [1] when configuring the challenge questions through the console, there is no indication of locale support which is available through management console. Please provide the information
[1] https://docs.wso2.com/display/IS540/Password+Recovery

Thank you for your contribution!
We are closing this issue since it has not been prioritized for a long time. Chances are that it has already been solved in more recent versions. If not, we will be re-evaluating this when it becomes a priority.


DatePicker control, default formatting

Not sure if I am doing something wrong here but when I use the DatePicker control with SukiUI the dropdown is not very readable, looks like the last character is getting chopped off.  I am using version 4.5.3 on Linux and Windows.
The DatePicker:

When I click the control, the dropdown opens (and works) but it is not easy to read. In order to select the date you have to scroll up or down, click on the checkbox does not select/unselect.

Hi !
Well, I didn't know there was a DatePicker control, which is cool in a way, I will style it later in the library look 👀
About the chopped character it must be because of the listbox style with checkbox of SukiUi by default. Not a big problem, I will make the listbox style optional so the checkbox will not be here on the DatePicker.
I will probably do it tomorrow and upload a Nuget package 👍

Thank you very much!

I styled it like this :

I will upload a 4.5.4 nuget package later today


fix crash when onSaveInstanceState called

@Ferfalk may we bring this to the newest version?

Thanks @Ferfalk for merging and thanks @F-19-F for fixing it! Worked as a charm! Spend the whole day to find out what was the Problem 👍


some pages not working on local host

I did the installation on a wamp local host. when i click on some of the links in the main page (Like for example login or reservation) i get this screen.

do i need to change some settings

i am facing same issue, admin console is working fine.

https://forum.tastyigniter.com/thread-552-post-1996.html#pid1996

i changed same but not working, same issue. i also reinstalled app but no luck
in root folder
[
1.To use URL Alias you need to be running apache with mod_rewrite enabled.
Options +FollowSymlinks
Prevent Directoy listing
Options -Indexes

	# Turn on URL rewriting
	RewriteEngine On
# !IMPORTANT! Set your RewriteBase here and don't forget trailing and leading slashes.
# If your page resides at http://www.example.com/mypage then use
# RewriteBase /mypage

RewriteBase /
RewriteRule ^assets/downloads/(.*) not_found [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]

]
in system folder
[
1.To use URL Alias you need to be running apache with mod_rewrite enabled.
Options +FollowSymlinks
Prevent Directoy listing
Options -Indexes

	# Turn on URL rewriting
	RewriteEngine On
# !IMPORTANT! Set your RewriteBase here and don't forget trailing and leading slashes.
# If your page resides at http://www.example.com/mypage/admin then use
# RewriteBase /mypage/admin

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]

]
in admin folder
[
# 1.To use URL Alias you need to be running apache with mod_rewrite enabled.
Options +FollowSymlinks
Prevent Directoy listing
Options -Indexes

	# Turn on URL rewriting
	RewriteEngine On
# !IMPORTANT! Set your RewriteBase here and don't forget trailing and leading slashes.
# If your page resides at http://www.example.com/mypage/admin then use
# RewriteBase /mypage/admin

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]

]
in setup folder
[
# 1.To use URL Alias you need to be running apache with mod_rewrite enabled.
Options +FollowSymlinks
Prevent Directoy listing
Options -Indexes

    RewriteEngine On
# !IMPORTANT! Set your RewriteBase here and don't forget trailing and leading slashes.
# If your page resides at http://www.example.com/mypage/setup then use
# RewriteBase /mypage/setup

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]

]


Update performance-tips.md

Small, single, typo

@ndrix : Thanks for your contribution to the Azure documentation! The author, @mimig1, has been notified to review your proposed change.

#sign-off Thank you for the fix @ndrix!


load.ivy() doesn't work

I am using 0.8.2 ammonite version. I have imported ammonite.ops._
 load.ivy("com.lihaoyi"` %% "scalatags" % "0.6.2")
cmd8.sc:1: not found: value load
val res8 = load.ivy("com.lihaoyi" %% "scalatags" % "0.6.2")
           ^
Compilation Failed

I have also tried
interp.load.ivy("com.lihaoyi" %% "scalatags" % "0.6.2")

same issue for me

+1, using Scala 2.11 version.

You need interp.load.ivy since 0.7.0 I believe; though this has largely been superseded by the import $ivy syntax as described in https://www.lihaoyi.com/Ammonite/#0.7.0

I just downloaded ammonite 0.85 and tried $interp.load.ivy("com.lihaoyi" %% "scalatags" % "0.6.2") and it worked! Thanks

@ganeshchand I guess @lihaoyi is suggesting to run:
import $ivy.`com.lihaoyi:scalatags:0.6.2`


Custom alias do not call authorize

Hi all,
I've noticed custom alias handler is not calling the authorize method. First I thought of using onBeforeCall; however, it's not called as well. My temporary solution is to create a custom handler that sets an 'auth' property and creates the Context to invoke the authorize, such as follow:
'POST /files/upload': {
  auth: 'required',
  handler: async function(req, res) {
    const { broker } = req.$service;
    const ctx = Context.create(broker, '', broker.nodeID, req.$params, req.$route.callOptions || {});
    try {
      if (await this.authorize(ctx, req.$route, req)) {
        this.uploadFile(req, res);
      }
    } catch (err) {
      this.sendError(req, res, err);
    }
  },
},

Then, in the authorize method I added the following logic:
// Check if route requires auth
if ((req.$endpoint && req.$endpoint.action.auth === 'required') || (req.$alias && req.$alias.auth === 'required')) {

I guess custom alias/actions should be part of the action lifecycle somehow.
Thanks

Good solution. The current call flow doesn't enable to implement is, only in a new breaking version.

@icebob , don't you think would be valid to add the authorization options to the aliases?
Smth like:
aliases: {
    'REST user auth': 'users'
}

or
aliases: {
  'GET user': {
    auth: 'required', // could have optional as well
    action: 'users.get'
    // or
    action: handler(req, res) {
      // Custom logic
    },
  },
}

It would make it easier to create custom functions to retrieve data from multiple services with a single round-trip.
Let me know if I can help with that

What's the use case? In the route authorization: false but you can overwrite it in aliases?

Actually, in my understanding authorization is just Gateway API related. Supposing you're using moleculer-db to create your default CRUD actions and have 3 services ( A, B and C ) running on the same basis. You want your Gateway API to retrieve data from all of them ( ie: they have an id relationship ) and return to the user. First of all, the way it works I would have to extend the CRUD actions in the services to add the authorization property. For example, supposing I want the default behaviour:
{
  create: {
    auth: 'required'
  },
  update: {
    auth: 'required'
  },
  delete: {
    auth: 'required'
  },
  [...others]
}

An then I found I want service A list action to filter just property1. I would have to rewrite my list action  in service A jut because of the Gateway API when actually I want my services to be able to query the service using all properties. It would be easier If I could just create a custom action in the Gateway API where I could use the default ctx.call('A.list', { query: { property1: value1 } }) and then go over the list and do smth with service B and C. I would them just add an authorization to the alias and create my custom action. It would also be more readable if I could write authorization for the route and just disable in the aliases where I don' t want it ( or the opposite ). It comes to:
routes: [{
  authorization: 'required',
  aliases: {
    'GET myAction': {
      action: function handler(req, res) {
        const docs = ctx.call('A.list', { query: { property1: value1 } });
        // do smth with services B and C
        return smthElse;
      },
    },
    'GET user': {
      required: false, // override default behaviour
      action: 'users.get',
    }
  },
}]

I'll have to fork the project anyways and make some changes, but I would like to contribute to the project. I wanna make sure I can write a code that can be used for everyone.

OK. If you have some working solution, please open a PR, and we can continue the discussion about it.

@icebob ... Just to let you know, I'm trying to break it into parts. The first PR I will do is to add the custom aliases in the current call flow.

ok, in this case, I will create a new branch

Hey @icebob . I need your help here. I have it already working on my repo but I had to chop off the middleware from aliases. Actually, I can't think of a use case for it if you have the custom function that receives the context and the route. Here is the link to the custom test:
https://github.com/felipegcampos/moleculer-web/blob/939d34ddf8f735846dfa22594e627aca9ffdc47a/test/integration/index.spec.js#L842
I am trying to think whether I should add the middlewares again somehow or just ignore it and let the implementation through the custom function since it's in the call flow now.
It' s important to notice the custom handler now returns a value that later will be processed by the sendResponse function.
I can' t think of a nice way to add the pipeline to the flow. Can you share your expectations?
Regards

Hi @felipegcampos. First of all, please don't remove any existing feature from the source. Just extend the functionality. Thanks.
I think the main problem is that you can't create Context without a valid Action. But if you have a custom alias, there is no action for Context.
If I were you, I'd create actions in the GW service which makes what you want (move custom alias logic to an action. E.g.:
routes: [{
  authorization: 'required',
  aliases: {
    'GET myAction': 'api-gw.myAction'
  },
//....
actions: {
  myAction(ctx) {
        const docs = ctx.call('A.list', { query: { property1: value1 } });
        // do smth with services B and C
        return smthElse;
  }
}

So in this case the GW runs the normal flow, so it will call authorization too.
Can it solve your problem?

Hey @icebob . I appreciate your answer. I am not removing or adding anything without asking you first. Don't worry about it. It seems like creating an action could solve the first issue.

Currently the GW creates a "wrapper" context with a fake action. But in the next Moleculer version the context action will be more strictly, so I will have to change this part in the future. And I would like to create a regular action in GW service, and move the all "context" code part into this action. After that, maybe we can create an other api.custom action which can handle the custom aliases.   Once it will be a regular action, we will have Context and we can create authorization, onBeforeCall...etc functions. What do you think?

Do you mean to split concerns? In this case, we would have different setups for "regular actions" and custom actions?

We split only what is different. The "normal" action will call ctx.call after hooks & middlewares, the "custom" action will call the custom alias function after hooks & middlewares. I think....

It sounds like what I've done in my solution. Did you have the chance to check it out?

Yes, I will check.

@icebob , I decided to move our GW to work with HapiJS and use plugins to initialize the broker. I'm more experienced with it and it has everything we need for this first sprint. Anyways, I'm available to help with anything you need. I know sometimes it's hard to handle both a full-time job and open source projects. You're doing a nice job with moleculer.

Thanks @felipegcampos! Yes, it's not easy :) Maybe if you can share some code parts, how you use HapiJS with Moleculer, it would be awesome! (I have no experience with HapiJS).

Yes, it's really easy.
Using Hapi17, you basically create one plugin and then register it. The plugin would be smth like:
export const plugin = {
  name: 'hapi-moleculer',
  version: '1.0.0',
  register: async function register(server) {
    const broker = new ServiceBroker({});

    server.decorate('server', 'broker', broker);
    server.decorate('request', 'broker', broker);

    await broker.start();
  },
};

Of course there are many things one can do. It's possible to handle the moleculer errors in the onPreResponse lifecycle and even create the routes for your REST actions within moleculer.
A really simple example:
    const aliases = [{ method: 'REST', path: '/user', action: 'users' }];
    let routes = [];
    aliases.forEach((alias) => {
      if (alias.method === 'REST') {
        routes.push({ method: 'GET', path: `${alias.path}/{id}`, action: `${alias.action}.get` });
        routes.push({ method: 'GET', path: alias.path, action: `${alias.action}.list` });
        routes.push({ method: 'POST', path: alias.path, action: `${alias.action}.create` });
        routes.push({ method: 'PUT', path: `${alias.path}/{id}`, action: `${alias.action}.update` });
        routes.push({ method: 'DELETE', path: `${alias.path}/{id}`, action: `${alias.action}.remove` });
      } else {
        routes.push(alias);
      }
    });
    routes = routes.map(route => ({
      path: route.path,
      method: route.method,
      options: {
        tags: ['api', 'user'],
      },
      handler: async function action(request) {
        const params = _.extend(request.params, request.query, request.payload);
        const ret = await request.broker.call(route.action, params);
        return ret;
      },
    }));

I'll see if I can create a hapi-moleculer plugin to publish.

Wow, it would be amazing!

Hey @icebob . I've finished the first version of the plugin.
https://github.com/felipegcampos/hapi-moleculer
Could you please add to the 'Other modules' section?
I did my best to document and test.

Nice repo @felipegcampos, thanks! :tada:
I'm adding it to the site.

Issue is fixed & released in 0.8.0


Create responsive design for S5b | ApiDelegationReceiptPage

This task consists of making component ConfirmationPage for receipt responsive. An example on how it can be made responsive for smartphones can be seen in picture below, but don't follow that example blindly as there most likely will be some errors in the sketch that I haven't spotted yet.
Additional info:
We follow the design system's px-definitions on screen sizes:

phone view: 280-768 px.
pc view: 769 px and up

AC:

Page: am.ui.at23.altinn.cloud/accessmanagement/ui/offered-api-delegations/receipt  looks nice on all screen sizes.

Figma link here: https://www.figma.com/file/ESobgAq072y7eQa4gP1JCKER/Profil?node-id=6550%3A84073&t=eAUiGxV6m3Jd5u5b-0

sjekket ulike views, ser ok ut. Satt til test

Satte denne tilbake. Samme som #44 Forslag her:

Sjekket, ok. Satt til test


Investigate possibility of per-listener configuration

It might be handy to be able to configure the produce / fetch quotas per listener. For example users might be interested in having different quotas for internal and external listeners. It would also allow us to isolate internal clients (such as TO) from being impacted by the quotas.

Where would the listener info come from?
Info the quotaLimit method ...

This is currently no planned.


After update: Provider state parameters not rendered into contract JSON for request path parameters

Software versions

OS: Mac OSX 12.5
Pact Node version<EMAIL_ADDRESS>Node Version: v16.15.1
Other Versions: Pulled as dependency of<EMAIL_ADDRESS>
Issue Checklist
Please confirm the following:

[x] I have upgraded to the latest
[x] I have the read the FAQs in the Readme
[x] I have triple checked, that there are no unhandled promises in my code
[ ] I have set my log level to debug and attached a log file showing the complete request/response cycle
[ ] For bonus points and virtual high fives, I have created a reproduceable git repository (see below) to illustrate the problem

Expected behaviour
When writing a consumer test, where the setup uses a fromProviderState() matcher on a request path parameter, the resulting Pact JSON file should contain a generator and matchingRule for this provider state parameter.
Actual behaviour
After updating from<EMAIL_ADDRESS>to<EMAIL_ADDRESS>the Pact JSON file does not contain a corresponding generator/matchingRule.
This is only true for path parameters - for provider state parameters from query parameters or body parameters, this still works as expected.
Steps to reproduce
E.g. with the provider-state-injected example (https://github.com/pact-foundation/pact-js/tree/master/examples/v3/provider-state-injected):

Run the consumer contract test & save the resulting pact JSON file
Upgrade the pact dependency in the package.json from 10.0.2 to 10.1.1
Run the consumer contract test again & compare the resulting JSON files

This is what I get:
diff TransactionService-AccountService-v10.0.2.json TransactionService-AccountService-v10.1.1.json
329,344c329,330
<         "generators": {
<           "path": {
<             "expression": "/data/${uuid}",
<             "type": "ProviderState"
<           }
<         },
<         "matchingRules": {
<           "path": {
<             "combine": "AND",
<             "matchers": [
<               {
<                 "match": "type"
<               }
<             ]
<           }
<         },
---
>         "generators": {},
>         "matchingRules": {},
381c367
<       "version": "10.0.2"
---
>       "version": "10.1.1"
384,385c370,371
<       "ffi": "0.2.4",
<       "models": "0.3.1"
---
>       "ffi": "0.3.5",
>       "models": "0.4.1"

Relevant log files
None
I hope this is the right repo to open this issue - if it should go to pact-js instead, let me know and I can open it there instead 🙇

Thanks for raising this - and this is fine. We can always move issues about.
cc: @uglyog, I think this issue relates to a recent upgrade of the FFI (from 0.2.4 -> 0.3.5). Anything jump out that might be the proximate cause?

Hi @mefellows @uglyog, any updates on this? 😇

I will be looking into this today.

Pact FFI lib 0.3.9 released with a fix for this

Thanks Ron, will push out an update shortly.

13.7.9 is now out.

Can also confirm from our side that it works again 👍 Thanks for the quick fix!

Excellent - thanks for letting us know!


Add bootstrap version number in bootstrap.min.js

Something like:
/* bootstrap v2.0.0 */
This to track version used better.

:+1:

Nice change.

IMHO there's no need for a public viewable app and version string. You can name your folder "bootstrap-f68f787" or something like that, to track your version.

We have the version in our compiled CSS, we should have it in our compiled JS as well.

true :)

true :-)

this is being added now! as of 2.0.2


Auto-generation

Originally reported in #5537 by @duncandewhurst:

Adapt the automated process under development for the OC4IDS 0.9.2 mapping template (CRM-4378), so that it can be used to automate generation of the OCDS 1.1.5, 1.2 and OCDS for PPPs (CRM-5230) mapping templates.

https://github.com/OpenDataServices/oc4ids-mapping-template
Notable changes:

A new, pure Python, command-line tool for generating the template, replacing the old Python/Google Apps Script approach, which involved many manual steps.
Updated user and developer documentation. This is all in the GitHub repo, but we could consider moving the user documentation to either the OC4IDS documentation site or the resources section of the OCP website, and the developer documentation to the handbook, if appropriate.
Aligned language with OCP's use of 'data source' and 'data element' in mapping documentation.
Improved documentation within the template, including a note on each column header containing a description of the column's semantics.
Re-implemented 'mapped to' column in the (Source) Data elements sheet, which was previously disabled, with more performant and cross-compatible formulae
An optional 'CoST IDS Elements' sheet to allow users to select which (core and sustainability) CoST IDS Elements they want to map. The mapping sheets then show the selected elements alongside each OC4IDS field to which they are related.
Fully compatible with Google Sheets and Excel desktop and online versions.
Various other formatting and usability improvements.

@jpmckinney Could we archive this repo so that I can clone https://github.com/OpenDataServices/oc4ids-mapping-template and start from there?

Why archive this one? It's still useful for tracking the open issues even if you are working in a fork of that one.

For reference, this was the notebook used for the OCDS mapping template (which uses this repo) https://colab.research.google.com/drive/1VPOFnRbM7DFY7y0DOaiBhu24W3Ud6iUM (original)


Fix topNs with extractionFns but no aggregators.

The result sets were empty because of an aggs.length > 0 check. I'm not
sure if it was there for any good reason, but there didn't seem to be one.

👍

LGTM! Travis failure seems not related to this patch.

@jon-wei @fjy FYI you can trigger Travis rebuild without closing/reopening a PR: https://groups.google.com/d/msg/druid-development/k64pqBjHCMg/P1g8a5Q0AgAJ
It generates less spam for those who use e-mail notifications from Github.

@leventov cool, good to know!

:+1:


[in_app_purchase_android] Migrate to Google Play Billing Library 4.0.0

This PR migrates billing API version from 3.0.2 to 4.0.0
Fixes https://github.com/flutter/flutter/issues/88664
Pre-launch Checklist

[x] I read the Contributor Guide and followed the process outlined there for submitting PRs.
[x] I read the Tree Hygiene wiki page, which explains my responsibilities.
[x] I read and followed the relevant style guides and ran the auto-formatter. (Unlike the flutter/flutter repo, the flutter/plugins repo does use dart format.)
[x] I signed the CLA.
[x] The title of the PR starts with the name of the plugin surrounded by square brackets, e.g. [shared_preferences]
[x] I listed at least one issue that this PR fixes in the description above.
[x] I updated pubspec.yaml with an appropriate new version according to the pub versioning philosophy, or this PR is exempt from version changes.
[x] I updated CHANGELOG.md to add a description of the change, following repository CHANGELOG style.
[ ] I updated/added relevant documentation (doc comments with ///).
[ ] I added new tests to check the change I am making, or this PR is test-exempt.
[ ] All existing and new tests are passing.

If you need help, consider asking for advice on the #hackers-new channel on Discord.

Thanks for the contribution. There’s a PR in progress for this https://github.com/flutter/plugins/pull/5405 cc @GaryQian


camel-webcam should install v4l-utils if it's not already installed

Raspbian now has it installed but we should cater for others too.

It will be nice to have a OSutil class which can detect what os you are
running. So components could perform different actions for different
operating systems.
On Fri, Oct 30, 2015, 07:02 Taariq Levack<EMAIL_ADDRESS>wrote:

Raspbian now has it installed but we should cater for others too.
—
Reply to this email directly or view it on GitHub
https://github.com/rhiot/rhiot/issues/261.

--
Henryk Konsek
http://about.me/hekonsek

The installer's pretty much done, I'll wrap it up in the coming days.
Please let me know if you have any ideas or curveballs, or if there are any
problems installing/starting webcam or gpsd.
Cheers
On 31 Oct 2015, at 15:33, Henryk Konsek<EMAIL_ADDRESS>wrote:
It will be nice to have a OSutil class which can detect what os you are
running. So components could perform different actions for different
operating systems.
On Fri, Oct 30, 2015, 07:02 Taariq Levack<EMAIL_ADDRESS>wrote:

Raspbian now has it installed but we should cater for others too.
—
Reply to this email directly or view it on GitHub
https://github.com/rhiot/rhiot/issues/261.

--
Henryk Konsek
http://about.me/hekonsek
—
Reply to this email directly or view it on GitHub
https://github.com/rhiot/rhiot/issues/261#issuecomment-152736238.

Now everything works like a charm :) .

Sweet, closed.


If you don't allow Camera access (NFC doesn't scan)

If you don't allow Camera access (in app permissions) NFC doesn't scan. (Android)

Some devices has the NFC reader chip in the camera. So they need camera access for NFC to work.

Closing this


feat: add json output option to save raw results

Addresses https://github.com/LironEr/bundlemon/issues/55
User story
As an user I would like to save results as json file so that results can be further processed for example by CI scripts.
Use cases
json output format can be provided in reportOutput
"reportOutput": ["json"]

Which will save results by default as bundlemon-results.json. Default file name can be overridden with fileName option.
"reportOutput": [
  [
    "json",
    {
      "fileName": "fantastic-file-name.json"
    }
  ]
]

Example output:

Additional info
I also fixed little issue with typescript error when trying to build the project (commit 2dc14f6)

bundlemon: yarn run v1.22.17
bundlemon: $ rimraf lib/ && tsc -p tsconfig.release.json
bundlemon: src/main/utils/configUtils.ts(39,11): error TS2769: No overload matches this call.
bundlemon:   Overload 1 of 4, '(name: string, message: TestOptionsMessage<{}, any>, test: TestFunction<string | null | undefined, object>): StringSchema<string | undefined, object>', gave the following error.
bundlemon:     Argument of type '(value: string | undefined) => boolean' is not assignable to parameter of type 'TestFunction<string | null | undefined, object>'.
bundlemon:       Types of parameters 'value' and 'value' are incompatible.
bundlemon:         Type 'string | null | undefined' is not assignable to type 'string | undefined'.
bundlemon:           Type 'null' is not assignable to type 'string | undefined'.
bundlemon:   Overload 2 of 4, '(name: string, message: TestOptionsMessage<{}, any>, test: AssertingTestFunction<any, object>): StringSchema<any, object>', gave the following error.
bundlemon:     Argument of type '(value: string | undefined) => boolean' is not assignable to parameter of type 'AssertingTestFunction<any, object>'.
bundlemon:       Signature '(value: string | undefined): boolean' must be a type predicate.

Codecov Report

Merging #61 (a008e70) into master (228ca1d) will decrease coverage by 0.23%.
The diff coverage is 38.46%.

@@            Coverage Diff             @@
##           master      #61      +/-   ##
==========================================
- Coverage   53.45%   53.21%   -0.24%
==========================================
  Files          46       47       +1
  Lines        1173     1197      +24
  Branches      243      244       +1
==========================================
+ Hits          627      637      +10
- Misses        546      560      +14

Impacted Files
Coverage Δ

packages/bundlemon/src/main/utils/configUtils.ts
30.30% <0.00%> (ø)

...ackages/bundlemon/src/main/outputs/outputs/json.ts
41.66% <41.66%> (ø)

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 228ca1d...a008e70. Read the comment docs.


Update Spectrum to 1.6.2 to get rid of annoying Chrome warning

Upgrading Spectrum to 1.6.2 (which appears to be a non-breaking change) will squash the warning that many users are now seeing in Chrome (The specified value '!' does not conform to the required format.  The format is '#rrggbb' where rr, gg, bb are two-digit hexadecimal numbers.)
See https://github.com/bgrins/spectrum/pull/296 and https://github.com/bgrins/spectrum/pull/292 for more info.

cool! Would you like to provide a PR with this change?

@joscha Done :)


[Postgresql] request cancellation does not work

Hello.
DBEaver 5.2.2, Windows 7 x64, Java 1.8.0_172 x64, Postgresql 9.5
The cancel request button does not work. When you click on the button, the application waits for the end of the query.

Query cancel is broken in 5.2.2 (for all JDBC drivers).
Duplicate of #3094


suppressApplicationTitle hides the "Administrator" identifier on the tab

Environment
Windows build number: [10.0.18362.476]
Windows Terminal version: [0.7.3291.0]

Any other software? No

Steps to reproduce

Define a cmd profile with "suppressApplicationTitle": true
Define the same profile with a tabTitle, such as "tabTitle": "cmd"
Start Windows Terminal as an Administrator (Run as Administrator).

Expected behavior

The tab appends the Administrator identifier to the tab:

This issue may be related to #3743 but it is not clear that this is exactly the same issue.
Actual behavior

The Administrator identifier is omitted from the tab:

If there were another way to identify a Windows Terminal session that is running as an administrator, I would probably prefer this behavior.  It would be better than repeating Administrator on each tab, using valuable space.

So, there's a couple things here. suppressApplicationTitle is working as-intended, because Administrator: is part of CMD's app-specified title. You're probably looking for /dup #1939, though, at the end of the day.
fwiw: if you do not want the application's title to be suppressed -- and this applies to all application titles, including those emitted by shells in WSL that include your username (like root) -- you may want to investigate setting good titles from your shell and not suppressing them :smile:


MudDatePicker: Label Value Functions as Placeholder

Bug type
Component
Component name
MudDatePicker
What happened?
<MudDatePicker Label="Booking Date" DisableToolbar="true" Required="true" />
When you specify a label value, it functions as a placeholder; not a label.

Expected behavior
Label should function as label, not as placeholdder.
Reproduction link
https://try.mudblazor.com/snippet/QkmxafvGBVkqHIrb
Reproduction steps

Place a MudDatePicker with a Label attribute specified on a page.
Observe that the Label value is respected as a Placeholder.

Relevant log output
No response
Version (bug)
6.2.3.
Version (working)
No response
What browsers are you seeing the problem on?
Chrome
On what operating system are you experiencing the issue?
Windows
Pull Request

[ ] I would like to do a Pull Request

Code of Conduct

[X] I agree to follow this project's Code of Conduct

Hi @JimGorman43, this is the intended behavior of our Labels when there is no value and no start adornment.


istio sidecar has many FIN-WAIT-2 connections

Bug Description
Our golang program send HTTPS requests to external service. It will active close connections after finishing requests.
WIthout istio sidecar, the connections can be closed normally. Connection state from ESTAB to TIME-WAIT.
With istio sidecar, connections between envoy and external service will always keep FIN-WAIT-2，connections between go program and envoy will be CLOSE-WAIT.
There are also some confusing point:

Not all external services trigger this problem.
I can reproduce this problem with <IP_ADDRESS>.443(domain is sms.tencentcloudapi.com) in my environment.
Envoy got the last FIN package but do nothing.

tcpdump info:
Without istio sidecar
18:34:08.484290 IP <IP_ADDRESS>.57592 > <IP_ADDRESS>.443: Flags [S], seq<PHONE_NUMBER>, win 65535, options [mss 1460,sackOK,TS val<PHONE_NUMBER> ecr 0,nop,wscale 9], length 0
18:34:08.493157 IP <IP_ADDRESS>.443 > <IP_ADDRESS>.57592: Flags [S.], seq<PHONE_NUMBER>, ack<PHONE_NUMBER>, win 14600, options [mss 1440,nop,nop,sackOK,nop,wscale 7], length 0
18:34:08.493181 IP <IP_ADDRESS>.57592 > <IP_ADDRESS>.443: Flags [.], ack 1, win 128, length 0
18:34:08.493460 IP <IP_ADDRESS>.57592 > <IP_ADDRESS>.443: Flags [P.], seq 1:294, ack 1, win 128, length 293
18:34:08.501957 IP <IP_ADDRESS>.443 > <IP_ADDRESS>.57592: Flags [.], ack 294, win 123, length 0
18:34:08.503822 IP <IP_ADDRESS>.443 > <IP_ADDRESS>.57592: Flags [.], seq 1:1441, ack 294, win 123, length 1440
18:34:08.503832 IP <IP_ADDRESS>.57592 > <IP_ADDRESS>.443: Flags [.], ack 1441, win 134, length 0
18:34:08.503861 IP <IP_ADDRESS>.443 > <IP_ADDRESS>.57592: Flags [.], seq 1441:2881, ack 294, win 123, length 1440
18:34:08.503867 IP <IP_ADDRESS>.443 > <IP_ADDRESS>.57592: Flags [.], seq 2881:5761, ack 294, win 123, length 2880
18:34:08.503870 IP <IP_ADDRESS>.443 > <IP_ADDRESS>.57592: Flags [P.], seq 5761:6481, ack 294, win 123, length 720
18:34:08.503879 IP <IP_ADDRESS>.57592 > <IP_ADDRESS>.443: Flags [.], ack 2881, win 140, length 0
18:34:08.503896 IP <IP_ADDRESS>.57592 > <IP_ADDRESS>.443: Flags [.], ack 5761, win 151, length 0
18:34:08.503903 IP <IP_ADDRESS>.57592 > <IP_ADDRESS>.443: Flags [.], ack 6481, win 157, length 0
18:34:08.504970 IP <IP_ADDRESS>.57592 > <IP_ADDRESS>.443: Flags [P.], seq 294:420, ack 6481, win 157, length 126
18:34:08.514349 IP <IP_ADDRESS>.443 > <IP_ADDRESS>.57592: Flags [P.], seq 6481:6532, ack 420, win 123, length 51
18:34:08.514556 IP <IP_ADDRESS>.57592 > <IP_ADDRESS>.443: Flags [P.], seq 420:553, ack 6532, win 157, length 133
18:34:08.523471 IP <IP_ADDRESS>.443 > <IP_ADDRESS>.57592: Flags [P.], seq 6532:6876, ack 553, win 131, length 344
18:34:08.563931 IP <IP_ADDRESS>.57592 > <IP_ADDRESS>.443: Flags [.], ack 6876, win 162, length 0
18:34:13.528029 IP <IP_ADDRESS>.57592 > <IP_ADDRESS>.443: Flags [P.], seq 553:584, ack 6876, win 162, length 31
18:34:13.528071 IP <IP_ADDRESS>.57592 > <IP_ADDRESS>.443: Flags [F.], seq 584, ack 6876, win 162, length 0
18:34:13.538107 IP <IP_ADDRESS>.443 > <IP_ADDRESS>.57592: Flags [F.], seq 6876, ack 585, win 131, length 0
18:34:13.538119 IP <IP_ADDRESS>.57592 > <IP_ADDRESS>.443: Flags [.], ack 6877, win 162, length 0

With istio sidecar
18:47:45.877689 IP <IP_ADDRESS>.36332 > <IP_ADDRESS>.15001: Flags [S], seq<PHONE_NUMBER>, win 65535, options [mss 1460,sackOK,TS val<PHONE_NUMBER> ecr 0,nop,wscale 9], length 0
18:47:45.877701 IP <IP_ADDRESS>.443 > <IP_ADDRESS>.36332: Flags [S.], seq<PHONE_NUMBER>, ack<PHONE_NUMBER>, win 65535, options [mss 65495,sackOK,TS val 57162210 ecr<PHONE_NUMBER>,nop,wscale 9], length 0
18:47:45.877711 IP <IP_ADDRESS>.36332 > <IP_ADDRESS>.15001: Flags [.], ack<PHONE_NUMBER>, win 128, options [nop,nop,TS val<PHONE_NUMBER> ecr 57162210], length 0
18:47:45.877939 IP <IP_ADDRESS>.36332 > <IP_ADDRESS>.15001: Flags [P.], seq 0:293, ack 1, win 128, options [nop,nop,TS val<PHONE_NUMBER> ecr 57162210], length 293
18:47:45.877946 IP <IP_ADDRESS>.443 > <IP_ADDRESS>.36332: Flags [.], ack 294, win 131, options [nop,nop,TS val 57162211 ecr<PHONE_NUMBER>], length 0
18:47:45.877994 IP <IP_ADDRESS>.36334 > <IP_ADDRESS>.443: Flags [S], seq<PHONE_NUMBER>, win 65535, options [mss 1460,sackOK,TS val<PHONE_NUMBER> ecr 0,nop,wscale 9], length 0
18:47:45.887748 IP <IP_ADDRESS>.443 > <IP_ADDRESS>.36334: Flags [S.], seq 90194126, ack<PHONE_NUMBER>, win 14600, options [mss 1440,nop,nop,sackOK,nop,wscale 7], length 0
18:47:45.887765 IP <IP_ADDRESS>.36334 > <IP_ADDRESS>.443: Flags [.], ack 1, win 128, length 0
18:47:45.887838 IP <IP_ADDRESS>.36334 > <IP_ADDRESS>.443: Flags [P.], seq 1:294, ack 1, win 128, length 293
18:47:45.897433 IP <IP_ADDRESS>.443 > <IP_ADDRESS>.36334: Flags [.], ack 294, win 123, length 0
18:47:45.899349 IP <IP_ADDRESS>.443 > <IP_ADDRESS>.36334: Flags [.], seq 1:1441, ack 294, win 123, length 1440
18:47:45.899361 IP <IP_ADDRESS>.36334 > <IP_ADDRESS>.443: Flags [.], ack 1441, win 134, length 0
18:47:45.899385 IP <IP_ADDRESS>.443 > <IP_ADDRESS>.36334: Flags [.], seq 1441:2881, ack 294, win 123, length 1440
18:47:45.899400 IP <IP_ADDRESS>.36334 > <IP_ADDRESS>.443: Flags [.], ack 2881, win 140, length 0
18:47:45.899392 IP <IP_ADDRESS>.443 > <IP_ADDRESS>.36334: Flags [.], seq 2881:5761, ack 294, win 123, length 2880
18:47:45.899406 IP <IP_ADDRESS>.36334 > <IP_ADDRESS>.443: Flags [.], ack 5761, win 151, length 0
18:47:45.899395 IP <IP_ADDRESS>.443 > <IP_ADDRESS>.36334: Flags [P.], seq 5761:6481, ack 294, win 123, length 720
18:47:45.899418 IP <IP_ADDRESS>.36334 > <IP_ADDRESS>.443: Flags [.], ack 6481, win 157, length 0
18:47:45.899452 IP <IP_ADDRESS>.443 > <IP_ADDRESS>.36332: Flags [P.], seq 1:6481, ack 294, win 131, options [nop,nop,TS val 57162232 ecr<PHONE_NUMBER>], length 6480
18:47:45.899467 IP <IP_ADDRESS>.36332 > <IP_ADDRESS>.15001: Flags [.], ack 6481, win 154, options [nop,nop,TS val<PHONE_NUMBER> ecr 57162232], length 0
18:47:45.900331 IP <IP_ADDRESS>.36332 > <IP_ADDRESS>.15001: Flags [P.], seq 293:419, ack 6481, win 154, options [nop,nop,TS val<PHONE_NUMBER> ecr 57162232], length 126
18:47:45.900364 IP <IP_ADDRESS>.36334 > <IP_ADDRESS>.443: Flags [P.], seq 294:420, ack 6481, win 157, length 126
18:47:45.909888 IP <IP_ADDRESS>.443 > <IP_ADDRESS>.36334: Flags [P.], seq 6481:6532, ack 420, win 123, length 51
18:47:45.909957 IP <IP_ADDRESS>.443 > <IP_ADDRESS>.36332: Flags [P.], seq 6481:6532, ack 420, win 131, options [nop,nop,TS val 57162243 ecr<PHONE_NUMBER>], length 51
18:47:45.910107 IP <IP_ADDRESS>.36332 > <IP_ADDRESS>.15001: Flags [P.], seq 419:552, ack 6532, win 154, options [nop,nop,TS val<PHONE_NUMBER> ecr 57162243], length 133
18:47:45.910139 IP <IP_ADDRESS>.36334 > <IP_ADDRESS>.443: Flags [P.], seq 420:553, ack 6532, win 157, length 133
18:47:45.919760 IP <IP_ADDRESS>.443 > <IP_ADDRESS>.36334: Flags [P.], seq 6532:6876, ack 553, win 131, length 344
18:47:45.919823 IP <IP_ADDRESS>.443 > <IP_ADDRESS>.36332: Flags [P.], seq 6532:6876, ack 553, win 133, options [nop,nop,TS val 57162253 ecr<PHONE_NUMBER>], length 344
18:47:45.960567 IP <IP_ADDRESS>.36332 > <IP_ADDRESS>.15001: Flags [.], ack 6876, win 159, options [nop,nop,TS val<PHONE_NUMBER> ecr 57162253], length 0
18:47:45.961560 IP <IP_ADDRESS>.36334 > <IP_ADDRESS>.443: Flags [.], ack 6876, win 162, length 0
18:47:50.920931 IP <IP_ADDRESS>.36332 > <IP_ADDRESS>.15001: Flags [P.], seq 552:583, ack 6876, win 159, options [nop,nop,TS val<PHONE_NUMBER> ecr 57162253], length 31
18:47:50.920977 IP <IP_ADDRESS>.36332 > <IP_ADDRESS>.15001: Flags [F.], seq 583, ack 6876, win 159, options [nop,nop,TS val<PHONE_NUMBER> ecr 57162253], length 0
18:47:50.921015 IP <IP_ADDRESS>.36334 > <IP_ADDRESS>.443: Flags [P.], seq 553:584, ack 6876, win 162, length 31
18:47:50.921041 IP <IP_ADDRESS>.36334 > <IP_ADDRESS>.443: Flags [F.], seq 584, ack 6876, win 162, length 0
18:47:50.928573 IP <IP_ADDRESS>.36332 > <IP_ADDRESS>.15001: Flags [F.], seq 583, ack 6876, win 159, options [nop,nop,TS val<PHONE_NUMBER> ecr 57162253], length 0
18:47:50.928586 IP <IP_ADDRESS>.443 > <IP_ADDRESS>.36332: Flags [.], ack 585, win 133, options [nop,nop,TS val 57167261 ecr<PHONE_NUMBER>,nop,nop,sack 1 {584:585}], length 0
18:47:50.930541 IP <IP_ADDRESS>.443 > <IP_ADDRESS>.36334: Flags [.], ack 585, win 131, length 0
18:47:50.930546 IP <IP_ADDRESS>.443 > <IP_ADDRESS>.36334: Flags [F.], seq 6876, ack 584, win 131, length 0
18:47:50.930575 IP <IP_ADDRESS>.36334 > <IP_ADDRESS>.443: Flags [.], ack 6876, win 162, length 0

connection state
FIN-WAIT-2 0      0      <IP_ADDRESS>:36334              <IP_ADDRESS>:443                 users:(("envoy",pid=2963419,fd=84))

Envoy got the last FIN package:
18:47:50.930546 IP <IP_ADDRESS>.443 > <IP_ADDRESS>.36334: Flags [F.], seq 6876, ack 584, win 131, length 0
But don't close downstream and upstream connection.
Version
Istio
client version: 1.12.6
control plane version: 1.12.6
data plane version: 1.12.6

Additional Information
No response

I have exactly same problem in Istio 1.4.10.
I assumed it cause connection timeout(not connection reset) 0.005% of connection.

It's really a big problem for us.

I assumed it cause connection timeout(not connection reset) 0.005% of connection(POD --> outside).

@bluemir Yes, same problem.
@howardjohn Can you give me some hint how to debug more about this issue?


new graphing function

we want a line at mean and 1 sd  of unharmonized , and all on same y axis b/v all on same graph
based on function har.compare_harm_multi_site_violins

Graphing demands changed. New demands completed with functions in harmony module (show_diff_on_var5, show_diff_on_var3)


[FEAT]: AWS SDK Credential Provider Chain Not Following Standard Order in Bedrock Integration

What would you like to see?
The recent implementation of temporary credentials support in PR #2554 (fixing #2299) doesn't fully align with AWS SDK's standard credential provider chain behavior.
Current Behavior
The implementation appears to prioritize explicit credentials (access key, secret key, session token) over the standard AWS credential provider chain.
Expected Behavior
The AWS SDK should follow the standard credential provider chain where:

The SDK first attempts to use credentials from the container/instance profile (ECS task role, EC2 instance profile)
Only if that fails, it should fall back to other credential sources in the defined order:

Environment variables
Shared credentials file
Explicitly provided credentials

This is particularly important for containerized environments (like ECS) where best practice is to use task role credentials rather than long-term or even temporary explicit credentials.
Benefits of Following Standard Chain

Better security by defaulting to short-lived credentials from container/instance roles
Automatic credential rotation
Follows AWS security best practices
Consistent with how other AWS SDKs behave
No need to manually manage credentials in most AWS deployment scenarios

Proposed Solution
Update the Bedrock client initialization to:

First create the client without explicit credentials
Only fall back to explicit credentials if the automatic credential resolution fails
Maintain backward compatibility for cases where explicit credentials are needed

The SDK first attempts to use credentials from the container/instance profile (ECS task role, EC2 instance profile)
Excerpt from @langchain/aws/dist/chat_models.d.ts#L39-L42

/**
     * AWS Credentials. If no credentials are provided, the default credentials from
     * `@aws-sdk/credential-provider-node` will be used.
     */
    credentials?: CredentialType;

Fallback to this is dependency behavior leads to @aws-sdk/credential-provider-node invocation
This module provides a factory function, defaultProvider, that will attempt to source AWS credentials from a Node.JS environment. It will attempt to find credentials from the following sources (listed in order of precedence):

- Environment variables exposed via process.env
- SSO credentials from token cache
- Web identity token credentials
- Shared credentials and config ini files
- The EC2/ECS Instance Metadata Service

The default credential provider will invoke one provider at a time and only continue to the next if no credentials have been located. For example, if the process finds values defined via the AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY environment variables, the files at ~/.aws/credentials and ~/.aws/config will not be read, nor will any messages be sent to the Instance Metadata Service.

However, our implementation of ChatBedrock always provides credentials
https://github.com/Mintplex-Labs/anything-llm/blob/a2eced0b43c520697e70c54c31f6f5b38eafd776/server/utils/AiProviders/bedrock/index.js#L73-L79
And since the only way to invoke that client loader function is preceded by these statements
https://github.com/Mintplex-Labs/anything-llm/blob/a2eced0b43c520697e70c54c31f6f5b38eafd776/server/utils/AiProviders/bedrock/index.js#L25-L41
This would enable the client on the invocation to always be passed credentials explicitly and the langchain dependency fallback behavior would not be invoked. This same principle/guard is implemented in @agent as well to prevent inadvertent loading of config or credentials that may be adjacent to the environment.
That being said, I do think it is worth addressing more explicitly in the code, but accidental credential loading should be mitigated. If this however is not the case in reality then it requires addressing as a bug

Thanks for the feedback, I have implemented your suggestion and kept credentials as the default if they are supplied by the user as an env var. Now I've updated the slider to include the iam role in favor of the session token since that essentially replaces that session token feature. The PR can be found over here: https://github.com/Mintplex-Labs/anything-llm/pull/2632


Add mock-chain package

Codecov Report

Merging #14 (13ce464) into master (452f97d) will not change coverage.
The diff coverage is 100.00%.

@@            Coverage Diff             @@
##            master       #14    +/-   ##
==========================================
  Coverage   100.00%   100.00%
==========================================
  Files           62        69     +7
  Lines         4016      4776   +760
  Branches       870      1002   +132
==========================================
+ Hits          4016      4776   +760

Impacted Files
Coverage Δ

packages/common/src/models/collection.ts
100.00% <100.00%> (ø)

packages/common/src/utils/boxUtils.ts
100.00% <100.00%> (ø)

packages/core/src/builder/pluginContext.ts
100.00% <100.00%> (ø)

packages/core/src/builder/transactionBuilder.ts
100.00% <100.00%> (ø)

...es/core/src/models/collections/inputsCollection.ts
100.00% <100.00%> (ø)

...s/core/src/models/collections/outputsCollection.ts
100.00% <100.00%> (ø)

...es/core/src/models/collections/tokensCollection.ts
100.00% <100.00%> (ø)

packages/core/src/serializer/sigma/index.ts
100.00% <100.00%> (ø)

packages/mock-chain/src/balancePrinting.ts
100.00% <100.00%> (ø)

packages/mock-chain/src/executor.ts
100.00% <100.00%> (ø)

... and 4 more

... and 1 file with indirect coverage changes


hi! The release version does not work

The debug version can work normally, but after the release version is packaged, it is found not to work. What is the problem?

Are you sure this is about the event bus? Maybe it's something else that doesn't work. If you still think it's the event bus you should provide more details and (minimal) code so that someone could reproduce the problem.

same issue, app frizzes on star when using release

@momtboy or @artem-bakuta Can you provide a minimal code example? I just installed the latest version and it runs without issues.


Download option only shows 360p (Standard Definition)

Hi there.
Since a few days ago I'm only able to download videos at 360p (Standard Definition). I've tried switching DASH playback on and off, and changing the player type back and forth from Flash to HTML5, both to no avail. I usually set the download button to get videos at 720p, but now all options are gone except for 360p.
I'm not sure if this really classifies as an "issue" or if it's a problem on my end. I'm not very familiar with the technicalities of video files, but I thought only 480p and 1080p split the videos between two files, one for video and the other for audio.
I've been using Firefox v35 up until now, but today I updated to v37 and also updated all my extensions and scripts, and still the problem persists.
Hope this can be fixed, thanks for reading.

Firefox v35 and v37
YouTube Center v2.1.1

This is a known issue/limitation caused by fundamental changes in YouTube works. Since YTC's download functionality simply requests the video file from YouTube's servers and passes it to your browser's Save window, it is only able to download videos that are not in DASH format. DASH videos actually store the audio and video streams separately, then multiplex them in the player itself. In short: downloads for resolutions 480 and higher are not available because those resolution are served with DASH.
 There was discussion in the past of including FFmpeg with this addon and adding code to employ a similar method of downloading the individual streams and multiplexing to a single MP4 file, but I don't know if @YePpHa is still considering or working on that.
See the following Issues for more information: #98 #174 #716 #1133

What resolutions are available for download should only be restricted by which video formats YouTube offers. Your YTC settings, browser etc. should not make a difference here.
I can not confirm this being an issue.
Are you sure, that you're issue is present for all (or most) videos on YouTube? The video formats that are available can differ depending on whether the video is by Vevo, it has been uploaded recently, it has been uploaded a long time ago, it is watched by very few people or hasn't been watched for a very long time and last but least YouTube's general mood (both company and platform).

Besides all that has been said, please update your YTC version. 2.1.1 is ancient.

Thanks for answering, Zarggg. What puzzles me is that I've been able to download 720p videos for years using YTC without problems, and it's up until a few days ago that all higher resolution options suddenly disappeared. I also use an extension called Video DownloadHelper (VDH), but it also stopped working (I believe it happened the very same day as YTC), so I had to do both, update Firefox to v37 and update VDH. With it, now I can download both files (video and audio) of a video and it converts them into a single video file. What I didn't like is that only 1080p and higher resolutions are available (no 720p), and the converting process takes a lot of time (about 25 minutes to convert a 500Mb file).
Also, thanks for the links. I'll be sure to read them entirely. I searched first but couldn't find any issue report related to this matter, so that's why I opened this thread.
Thanks to Inyokus and ErdeFB for their replies too. By the way, in Firefox's Add-ons panel, it says YTC is v2.1.7, but if I open the options, it says it's v2.1.1. I've tried using FF's automatic updater and installing the XPI file for the latest release manually, but it stays the same (unless I'm looking in the wrong place).
Thanks for replying.

Regarding YTC version: 2.1.7 is the last version that was posted to addons.mozilla.org, which is why Firefox can't update it automatically. Until 2.1.8 is released, you will need to get updates from Github.

Thanks for the link, Zarggg.

Closing, since looks like you guys fixed the issue yourselves.

I wouldn't say the issue was fixed, as higher definition formats are still not available to download with YTC, and there's also no workaround or converting option using this extension/script.
I just leave it for anyone's consideration if they want to re-open this thread again.

@LaVey-Charkus-Veros Uh, screenshot of the issue?

@LaVey-Charkus-Veros Alright, I tried to reproduce the issue, but I can't. It gives me all possible download formats, including 720p & higher.

Sure, here you go. :)

@LaVey-Charkus-Veros Hmm, that's really weird. Best to wait for @YePpHa. He will probably know how to fix your issue.

Alright. Thanks for your concern. I hope this can be fixed soon.

@KamranMackey 720p and higher? I'm kinda confused, since as far as I know, YouTube stopped offering videos in non-DASH for resolutions higher than 720p.

@Inyokus Uh, I never turned DASH playback off. I still have it enabled, and I don't plan on turning it off. I used to disable it, until I found out that you can only go to 720p with DASH playback off.

@KamranMackey I'm not sure if we're talking about the same thing. At least I am referring to the resolutions that YTC offers to download at the download button under the video, not to the resolutions the player offers for playback at the gear button. Only the range of the latter is affected by enabling/disabling DASH playback.
For technical reasons, YTC can only offer resolutions that are available in non-DASH for downloading. And as far as I know, there are only 720p, 480p and possibly lower resolutions available in non-DASH by YouTube. That's why I was confused by you saying that you could download resolutions higher than 720p.

You can download any video resolution as long as the video itself offers them. What you can't do is download muxed streams that aren't in 360p, 480p or 720p quality (aka non-DASH streams), all of the other qualities (and equivalent) exist individually; this means that they can only be downloaded with audio and video in seperated files.
Currently (and I hope I am not wrong about this) YTC only offers download for the muxed files and an audio file (in case people just want a podcast or song), all of the other higher qualities are better off being downloaded via 3rd party software which can join both files into one on the server side, such as http://www.clipconverter.cc/

@Yonezp Thanks for replying. Unfortunately the problem persists on my end. I've tried all of these methods:

I reset all of YTC settings to their defaults.
I removed YTC completely and also uninstalled Greasemonkey. Then restarted my PC and installed them again.
I restored my system to the oldest date available on my PC (Mar. 23, 2015), which is before I started to have this issue.
I made a backup of my Firefox profile files and completely uninstalled it; then installed it again and restarted my PC.

The only other method I can think of trying next, is to remove and reinstall Firefox again and keep it vanilla (without using my backup profile files), which is quite drastic, as some of the extensions I have are no longer available.
By the way, another issue I've been experiencing, is that the "Scroll to Player" button has disappeared, even if it's properly configured in YTC settings (issue #1615), and it seems this started to happen the same day I got only the 360p download option.
Maybe it's worth to mention that recently I had a strange problem with Firefox. One day, all of YouTube was filled with ads and opened a lot of advertisement tabs (even if using AdBlock and have my antivirus working properly). I found out that an unidentified extension had installed by itself without my permission. I removed it and the ads were gone. I suspect the 360p and scroll button gone issues may have started by that time too, although I can't be sure.
Anyway, thanks for your concern and I hope someone can find a solution.
Bye.

EUREKA, I finally got it to work!
As I mentioned before, this issue started sometime soon after I got those ads on my browser. Below one of those ads, it had a message saying "Ads by Key". So I searched that on Google and it happened to be a malware virus, so I went to some great extents trying to remove it:

Opened msconfig.exe and checked safe boot.
Restarted the PC and, now in safe mode, restored it to the oldest date available.
Still in safe mode, uninstalled Firefox completely using Revo Uninstaller Pro, deleted all leftovers and also deleted the [USER]/AppData/Roaming/Mozilla files manually.
Restarted my PC in normal mode and ran three malware removing programs, following the steps provided in this link: http://malwaretips.com/blogs/ads-by-key-coupons-removal/
Restarted my PC again and installed a fresh version of Firefox and the most recent versions of both Greasemonkey and YouTube Center. Then checked YouTube and the option to download 720p was there!
Now I'm currently going through the hassle of installing and configuring all of my extensions, scripts and themes one by one, and also configuring Firefox the way I like it to work. Fortunately, I made lots of backups and took many screenshots to help me out.

Now I finally get the option to download in 720p or higher, and I can also watch videos in 720p with DASH turned off!
What puzzles me is that all three malware removing programs found quite a lot of malware in my PC, as I'm VERY CAREFUL about which software I install and always take good care of doing customized installations and opt out of any additional suggested installs.
It seems that something got screwed inside my profile folder, as in one of my testings, after I already had the 720p option back, I restored my original profile folder and got the 360p issue again. So, to sum it up, it seems all I had to do was to get rid of the old profile folder and let Firefox create a new one. And, in retrospective, I can say that YouTube Center had nothing to do with the problem, other than being affected by it.
The "Scroll to Player" button is still missing, though (issue #1615), and I hope it can be fixed sometime soon.
Thanks for all of your help, and I hope that if anyone else finds him or herself in a similar situation, they can find a solution here.
Bye! :)


Feature request: keeping comments in tact

I am parsing HCL files that contain comments to be able to update some blocks/attributes, but I would like to keep comments in tact after parsing -> serializing back to text.
Maybe I have missed it, if so please feel free to link me to the documentation.
Thank you!

Hi! This is currently not supported and would require some bigger changes to the grammar and AST. Right now, it's using pest's magic COMMENT rule to match and discard them.
Maybe some lower level API for getting the full AST of an HCL document could make sense at one point. Your use case is certainly worth supporting, but it will require some work.

Thanks for the response @martinohmann.

I was just checking how other projects are doing this. For example, toml-rs split this into a general toml parser with serde support and the toml_edit crate (which comes with its own parser) which has exactly the feature your looking for (just for TOML of course 😉 ): https://github.com/toml-rs/toml
The split might make sense for hcl-rs as well since editing capabilities would require a different grammar which emits tokens for every single whitespace and comment. This would probably slow down the common use case of just parsing the data and throwing away the comments and whitespace quite a bit, so it's better to keep this separate. It might be possible to reuse some code between the two of course.
I'll look a bit deeper into how toml_edit designed this when I have time.

I'm sorry, things have been hectic at work and I haven't been able to come back to this yet. Thank you for the update and I will hopefully get some cycles to play with it in the near future!


Scan failed error in some devices

I am continuously getting error in my Motorola G7 phones. G7 running Android 9 version.
Scan failed because application registration failed (code 6)
I am using below version in my Android App
implementation "com.polidea.rxandroidble2:rxandroidble:1.11.0"

Why do you think it is a library bug?

Closing due to lack of information and inactivity of the original poster.
When more data will be available—feel free to add that information and reopen this issue.
Best Regards


[MM-47842] Make "save as" in context menu show the save dialog

Summary
The save as dialog does not open and the file would be downloaded right away in the default download location.
The fix is to detect if the download was initiated by user gesture or not.
This happens because we use electron-context-menu to show the right click menu, which when you click "Save as" uses electron-dl to trigger the download.
I would recommend we remove the electron-context-menu and use electron's Menu on the renderer process instead, which will give us the option to use our downloadManager when clicking "Save as" instead of the hard-coded electron-dl
Ticket Link
https://mattermost.atlassian.net/browse/MM-47842
Release Note
NONE

Building app in separate branch.

Successfully building:
https://circleci.com/gh/mattermost/desktop/23970
https://circleci.com/gh/mattermost/desktop/23969
https://circleci.com/gh/mattermost/desktop/23968

Artifact links:
https://output.circle-artifacts.com/output/job/81460d09-b453-40b2-805e-079cb3c0d96c/artifacts/0/tmp/artifacts/mattermost-desktop-5.2.0-develop.1-win-ia32.zip
https://output.circle-artifacts.com/output/job/81460d09-b453-40b2-805e-079cb3c0d96c/artifacts/0/tmp/artifacts/mattermost-desktop-5.2.0-develop.1-win-x64.zip
https://output.circle-artifacts.com/output/job/6290c10f-e1d5-4d4a-854c-571184f6c081/artifacts/0/tmp/artifacts/mattermost-desktop-5.2.0-develop.1-mac-m1.dmg
https://output.circle-artifacts.com/output/job/6290c10f-e1d5-4d4a-854c-571184f6c081/artifacts/0/tmp/artifacts/mattermost-desktop-5.2.0-develop.1-mac-x64.dmg
https://output.circle-artifacts.com/output/job/2ebbaa9f-9b83-4123-aa68-f836c196f0f6/artifacts/0/tmp/artifacts/mattermost-desktop-5.2.0-develop.1-linux-x64.tar.gz

Cherry pick is scheduled.


Magnetism

requested change on the magnetism code

Just FYI you dont need to open a new PR.
Simply pushing to your own fork will push to the old one and update it.
Keep it in mind for future PRs and changes as it makes tracking everything alot easier 👍

ok ty for the info wont happen again XD

I did a comit and a push idk if it updated the pull request tho


validateOn "input" doesn't trigger

Version
@nuxthq/ui: v2.7.0
nuxt: v3.7.0
What is Expected?
trigger "input" event on form elements while typing.
What is actually happening?
on UForm all events being triggered but not the "input", so you can't validate field while typing.

The validate-on prop was only available on the Edge version but it has been released in 2.8.0.


⚠ Bofrost.es has degraded performance

In 396fdff, Bofrost.es (https://www.bofrost.es) experienced degraded performance:

HTTP code: 200
Response time: 1439 ms

Resolved: Bofrost.es performance has improved in 72d7580 after 13 minutes.