[feature] export GitHub importable CSV file

🧩 Feature
Description
 A clear and concise description of the feature

There seems to be no direct import functionality in Github. There are several npm packages allowing to communicate with the Github API and import issues. The used import format is quite different.
For now I think a note with links to this npm package should be okay in the README

Probably use this: https://github.com/gavinr/github-csv-tools


Build holopy with windows support

Checklist

[x] Used a fork of the feedstock to propose changes
[x] Bumped the build number (if the version is unchanged)
[x] Reset the build number to 0 (if the version changed)
[x] Re-rendered with the latest conda-smithy
[x] Ensured the license file is being packaged.

@barkls
This is so we can build holopy with conda-forge. I was able to get the build to pass on my Azure-Dev Ops account using this feedstock. Here's the log of the build pipeline.
We can change this feedstock to download from manoharan-lab/holopy once manoharan-lab/holopy#304 is merged. Right now, this builds from ralex0/holopy/master which should be up to date with manoharan-lab/holopy/3.3.

Hi! This is the friendly automated conda-forge-linting service.
I wanted to let you know that I linted all conda-recipes in your PR (recipe) and found some lint.
Here's what I've got...
For recipe:

Selectors are suggested to take a <two spaces>#<one space>[<expression>] form. See lines [22, 28]

For recipe:

Whenever possible python packages should use pip. See https://conda-forge.org/docs/maintainer/adding_pkgs.html#use-pip

Hi! This is the friendly automated conda-forge-linting service.
I just wanted to let you know that I linted all conda-recipes in your PR (recipe) and found it was in an excellent condition.

Thanks for doing this - it's great you were able to get this to work! I have a couple points to address:

The commit history is quite a mess and it's hard to tell what steps are actually necessary to make everything work. It would be great if you can fork my fix branch  instead of my rebuild branch and just make the changes that turned out to be necessary in the end.

I think we should try to build off the official manoharanlab HoloPy fork if at all possible. I think we are really close to having 3.3 ready to release (maybe even by the end of the week!) so let's hold off on finalizing the new build until that's ready. Of course if we run into an unexpected setback we can reconsider.

Your most recent commit uses the --no-deps flag on the pip install, as recommended in the docs. Is that right? Our build does depend on having compilers and numpy present. I trust if you confirm this is right, just want to make sure it's deliberate.

@barkls
1.Let me see if I can figure out a way to release the changes.
2. We can just update the build recipe whenever so that's fine.
3. Let me play with this for a sec since it look like changing this install line to match the docs broke the windows build (lol)

See Followup in #21


chore: fix readme and add license

Adding language indicators to code blocks in Markdown helps readability.
Also added a license file — package.json says MIT, so that's what I went with. if that's not what you want to use, feel free to ask for changes here.

Thanks for approving! I don't have committer rights, so if you want to merge, please feel free.


Error: 'is missing in props validation' after update of ESLint to v5.4.0

By now we validated our props like this:
class HelloEs6 extends React.Component {
  render() {
    return
Hello {this.props.name}
;
  }
}
HelloEs6.propTypes = {
  name: PropTypes.string.isRequired,
};

But after an update of ESLint from v4.19.1 to v5.4.0 we always get the 'is missing in props validation' error.
If we put the validation inside of the class it works perfectly like this:
class HelloEs6 extends React.Component {
  render() {
    return
Hello {this.props.name}
;
  }

  propTypes = {
    name: PropTypes.string.isRequired,
  };
}

Why is that the case? We couldn't find anything in the changelog according to this.

React doesn't have a v16.3.14, btw, it only goes up to v16.3.2 before v16.4. However this, just like static get propTypes, is a red herring.
This should definitely work. cc @alexzherdev any ideas?

Ok, I'm a little bit confused - is this issue only about the fact that propTypes works as a non-static class field? That should be easy to fix.
There also appears to be an issue with HelloEs6.propTypes = {} form not being handle correctly. If that's the case, I'd ask for the actual component's code that doesn't work (because the example from the docs does work at least according to the tests).

Yes, it was the latter. But wie fixed it by ourselves. The problem was that we exported the class like
export const PersoenlicheDatenWithoutStore = PersoenlicheDaten;

After we changed this to
export {PersoenlicheDaten as PersoenlicheDatenWithoutStore};

It works like a charm.
I don't understand why the first version causes 'is missing in props validation' errors. But we wanted to update to the other syntax anyway.
Thank you for your help! If you have any idea why this error was caused I would be eager to lern something. :-)


Foundation Models Integration - Atlas visualization for datasets

Google has been leveraging Atlas visualizer for embeddings:
https://atlas.nomic.ai/
Look at the possibility of embedding visualization for distributed data sets as a way to explore / search for data. This can be a complement to an Elastic Search type of discovery.

I tried the code below and it generated the visualizer for me. Please see the published map below
https://atlas.nomic.ai/map/18914772-6404-418f-9f0a-697b224ba453/7cd05207-68ec-45ab-b05b-a1d600f0f963
import nomic
from nomic import atlas
import numpy as np

num_embeddings = 1000
embeddings = np.random.rand(num_embeddings, 256)

project = atlas.map_embeddings(
    embeddings=embeddings
)


Extend Deployment wizard with configuration options

When deploying an API through #248 I would like to be able to specify a number of root-level extensions:

if mocking should be enabled; checkbox (would remove the requirement to select an upstream service)
if validation should be enabled: checkbox - requires upstream service
path prefix: optional string
qos properties; retries, request_timeout, idle_timeout - corresponding number input fields (optional)
if cors should be enabled; checkbox with corresponding configuration properties (origins, methods, headers,etc)

see https://kubeshop.github.io/kusk-gateway/extension/
If the provided OpenAPI definition already contains any of these properties then the form should be prefilled with those values

PR - https://github.com/kubeshop/kusk-gateway-dashboard/pull/38


Add and remove

Changes introduced in this pull request 👇

user-generated todo tasks 👨 📝
create task-editing functionality when the task is clicked ✏
display a delete button when a given task is being edited so the user may click and remove that task 🧺
create delete task functionality to enable users to delete todo tasks ❌
create functionality to delete all tasks marked as completed ❌

Dear code reviewer, there was an issue where my code was working perfectly on my system and not my reviewers. I got my peers to test it and some of them reported the same issue while others reported no issue. I then ran npm run build and changed the listener on the input from keypress to keydown and this solved the issue for everyone.


Notification: allow to disable latest and/or non-stable warning

The current pretty simple logic we have is good and it may work for most of the cases. However, it's a little verbose since it will show a notification in all the versions that are not stable --which could be a lot.
There are users that won't like this pattern and may not want to follow "our proposal to use the platform" here (most users should always read the stable version of the project's documentation) or may require an un-supported way to decide "stable" version.
These users should be able to decide whether or not show a warning notification on latest and/or on non-stable versions independently:

Enable the addons (disable it completely)
Show a notification on non-stable versions
Show a notification on latest version

Related

#125
https://github.com/readthedocs/ext-theme/issues/212
https://github.com/readthedocs/ext-theme/issues/211
https://github.com/cilium/cilium/issues/29969
https://github.com/readthedocs/addons/issues/201

Is it about this warning?

I started noticing it only a few weeks ago, and I don't know how to get rid of it, since most users of my project use its latest version.

Hi @Zylann. This is new to Read the Docs as well. We have been migrating a lot of features we used to perform in the backend build process to a front-end application.
You can read more about this in our blog:

https://blog.readthedocs.com/addons-flyout-menu-beta/
https://about.readthedocs.com/blog/2024/04/enable-beta-addons/

Note that you can disable this notification from your project's setting using the beta dashboard (more info about this in the second blog post). Let me know if that helps.

Also even if it were desired, it covers the top of every page, requiring action to dismiss it each time.

Yes, this is pretty annoying, especially for contributors who use latest regularly (see also this thread in CNCF Slack for Argo Workflows contributors).
If it were less obtrusive or had a cookie or checkbox to remember that I hid it, that would be much nicer. For instance:

default to hide it for a week
allow users to optionally hide it -- some are well aware they are on a different version than stable
make it smaller at the top of the page, like a banner. as an example, here is mkdocs-material's version warning that is just above the header and so can just be scrolled past.

Otherwise, given how obtrusive it currently is, we will probably disable it entirely. I found this issue searching for how to disable it.

Thanks for your feedback @agilgur5 👍

If it were less obtrusive or had a cookie or checkbox to remember that I hid it, that would be much nicer

This is already implemented and will be deployed next week.

I just deployed a new version of the addons that includes the ability to dismiss a notification and not show it again on the same project/language/version. Feel free to open a new issue with any feedback you may have. Thanks 🙏🏼 cc @agilgur5

includes the ability to dismiss a notification and not show it again on the same project/language/version

Looks like it happens automatically? I didn't see an option, but I do see it remembers the dismissal and stores a timestamp in localStorage.
Looks like per #283 it's just permanent for now?
And I see this issue is roughly a duplicate of #46

@agilgur5 yes, it's permanent for now. We released this simplified version as a first step, but we plan to improve it with the feedback we receive.


Git errors during npm install

I'm unable to install the package due to git errors relating to this dev dependency in the package.json:
"react-simpletabs": "matthewgertner/react-simpletabs"
Is there a reason the dependency points to a github repo and not to the package on npm e.g.
"react-simpletabs": "^0.7.0"
This article (https://circleci.com/docs/git-npm-install/) suggests that if a dependency points to a github repo it should use the full https:// address.

I get the error while installing via ohmyzsh but it works via windows terminal. Possibly bash requires SSL dependencies.


[KOGITO-3914] Incorporate Serverless Workflow Java SDK

Signed-off-by: Ricardo Zanini<EMAIL_ADDRESS>See: https://issues.redhat.com/browse/KOGITO-3914
In this PR we introduce the SW Java SDK to Kogito Core. This will make things farly easier for us to stay up to date with the specification. Since we don't have the type attribute for functions anymore, we are using metadata.type. This should vanish after KOGITO-3915 implementation, where we are going to support only the REST Calls implementation through OpenAPI definitions.
I also removed Camel, Decisions and Rules functions since that won't make sense anymore. All these services should be accessed via REST. The examples parsing test also was removed since this test is now being handled by the SDK itself.
script, service, sysout should also vanish in the near future (TODO: open a JIRA to follow this up).
I'll update the examples and test each of them before asking for review.
Many thanks for submitting your Pull Request :heart:!
Please make sure that your PR meets the following requirements:

[x] You have read the contributors guide
[x] Pull Request title is properly formatted: KOGITO-XYZ Subject
[x] Pull Request title contains the target branch if not targeting master: [0.9.x] KOGITO-XYZ Subject
[x] Pull Request contains link to the JIRA issue
[x] Pull Request contains link to any dependent or related Pull Request
[x] Pull Request contains description of the issue
[x] Pull Request does not include fixes for issues other than the main ticket

Depends on: https://github.com/serverlessworkflow/sdk-java/pull/38

Depends on: https://github.com/serverlessworkflow/sdk-java/pull/38

Waiting for SW SDK 1.0.3 to be released.

Waiting for SW SDK 1.0.3 to be released.

Waiting for SW SDK 1.0.3 to be released.

It is released :) https://search.maven.org/search?q=io.serverlessworkflow

Waiting for SW SDK 1.0.3 to be released.

It is released :) https://search.maven.org/search?q=io.serverlessworkflow

I'm working on the updates! \o/

I'm working on the updates! \o/

@tsurdilo ca you please take a look?

@tsurdilo ca you please take a look?

@ricardozanini looks good +1

@ricardozanini looks good +1

Errors come from the OptaPlanner examples.
Jenkins retest this please

Errors come from the OptaPlanner examples.
Jenkins retest this please

CI:
ERROR: Error accessing files to attach: /home/jenkins/workspace/KIE/kogito/ghprb-webhooks/kogito-runtimes does not exist.
Sending email to<EMAIL_ADDRESS>
Trying again...
Jenkins retest this please

CI:
ERROR: Error accessing files to attach: /home/jenkins/workspace/KIE/kogito/ghprb-webhooks/kogito-runtimes does not exist.
Sending email to<EMAIL_ADDRESS>
Trying again...
Jenkins retest this please

Jenkins retest this please

Jenkins retest this please

@evacchi can be merged with https://github.com/kiegroup/kogito-examples/pull/518
CI is green! :hand_over_mouth:

@evacchi can be merged with https://github.com/kiegroup/kogito-examples/pull/518
CI is green! :hand_over_mouth:


Add support for JPEGXL encoded images

Hey there. This is a proof-of-concept for JPEGXL decoding of the image/jxl mimetype.
I figured that if there is WEBP support, there should be JPEGXL as well.
After all, indie web requires indie codecs, amirite?
Right now, this adds an (optional) dependency on libjxl. That is a BSD-3-clause license, so it should be compatible?
If you think this is something you'd merge, I can have a look about android (are there build instructions available already?). Can't do iOS though since I don't have apple hardware.

Thanks. This looks reasonable, although I recommend running Clang-Format on your additions based on the included .clang-format file in the repository. I can merge this once you're happy with it.
When it comes to mobile, I've been building the image decoder libraries from source and using those in the build, so in theory little is needed to use this on Android and iOS except for some fiddling with the build environment. Of course, it would be nicer if the platform's native APIs were used, since they might be more efficient, but I don't think it's worth the implementation cost. Images are not Gemini's core use case.

One more thing that might be interesting: since you track isPartial on media files, it would make sense to pass that down to makeTexture_GmImage and then to loadJxl_ since jxl supports progressive decoding. Though, then it would probably be necessary to keep the decoder state somewhere, for it to continue on data that comes in later. Not sure if that would be a sensible thing to do, but the possibility exists. Maybe for another PR.

When it comes to mobile, I've been building the image decoder libraries from source and using those in the build, so in theory little is needed to use this on Android and iOS except for some fiddling with the build environment.

So, will you figure this out then? Available Android build instructions would be nice though!

Of course, it would be nicer if the platform's native APIs were used.

I'm not sure if any native implementations for jxl even exist though.

Hey there again. I had some time on my hands and gave progressive decoding a shot.
If you think that this is too much for now / needs further testing, feel free to tell me;
My suggestion for this PR would then be to revert 659876c and create another PR for that.
If not, there are a couple of concerns I have. There is now a global map to keep track of the iStatefulJxlDecoders, which is not thread-safe. I wasn't sure if your drawing code is multi threaded? If yes, this probably needs a mutex as well I think. Other than that, I chose the iGmLinkId to be the hashmap's keys. This assumes, that they stay consistent... Maybe there needs to be a more robust one?

Nice! Progressive decoding sounds useful, although I'll have to review your code when I have some more time available. It's certainly not mandatory to have, though, if the complexity is too high.

I wasn't sure if your drawing code is multi threaded?

Anything related to drawing is done in the main thread. Other threads are used for network requests, subscription updates, and searching for navbar lookup terms, not for anything that touches the UI widgets.

It's certainly not mandatory to have, though, if the complexity is too high.

Well as I see it there are two ways to do it:

Create-destroy decoders with every chunk of the image we receive. This is less complex, but also less efficient, since a JxlDecoder can keep it's progress when it has output an intermediate image, to then continue on any chunks that conclude the original stream
Create encoders upon first request, then keep them somewhere until we have fed them with all data, step by step, while we consume intermediate images to then receive the final image and free the decoder

I opted with the latter since it seemed like the proper way to me. The actual usage of the libjxl API does not get more complicated. And for larger images, keeping progress makes sense.
But as I have looked at the_Foundation, I have probably misinterpreted on how to create a subclass of iMapNode. I'll see what you suggest in your review though before I continue hacking on this :)

@Sir-Photch I reviewed the code and made some corrections. Please see the notes in 1c6a9b00ed0 about the changes. If you keep working on this, I recommend using the "work/jpegxl" branch as the basis.
The major issue that remains fixing here is that the Map containing the decoders is global while link IDs are specific to one GmDocument. I recommend moving the map to be owned by Media (which is owned by GmDocument).
When it comes to including this in prebuilt Lagrange binaries, I am worried about the size of the JXL library. It looks like the binaries would grow by several megabytes, which seems a lot for something that is needed very seldom. I may opt to not include this in the prebuilt binaries. People may of course enable JXL when building from source.

I recommend moving the map to be owned by Media (which is owned by GmDocument).

Done, though I am not sure on how to use the_Foundation correctly... deinit_,delete_,collect_,clear_? There isn't much documentation on the usage of the Map API there as well.
It's probably not ready to ship yet because there is still some kind of race-condition or bug, but I am not sure whether or not this comes from my changes. You can reproduce by quickly clicking on two inline jxls to trigger two decodings at the same time, collapse them again, and so on. Best case, the images load, mediocre case, it displays Failed to load Image while still decoding in the background (but not displaying intermediate frames), worst case: SIGSEGV.

When it comes to including this in prebuilt Lagrange binaries, I am worried about the size of the JXL library. It looks like the binaries would grow by several megabytes, which seems a lot for something that is needed very seldom.

Makes sense, though, also when statically linking and stripping?

Done, though I am not sure on how to use the_Foundation correctly... deinit_,delete_,collect_,clear_?

Some of the common conventions are explained here, in the repository README: https://git.skyjake.fi/skyjake/the_Foundation/
To elaborate on the ones you mentioned:

deinit methods free any resources owned by an object. The object's memory is NOT freed. (cf. C++ destructor method)
delete calls deinit and frees the object's memory, too. (cf. C++ delete)
collect puts a pointer to the object into the garbage collection queue, to be deleted later.
clear empties all elements/contents; the container remains usable for putting more elements in.

The first three methods are automatically generated by macros for a given type, so they are generally available for every declared type.

There isn't much documentation on the usage of the Map API there as well.

True. I would've used Hash here myself. (Hash is also used in many places in the app, while Map is not.) Map exists primarily for sorted keys, and that is not a requirement here. Switching to a Hash shouldn't be too difficult.
The memory model for Hash and Map is the same: the user is responsible for the element ownership, while Hash/Map just maintains a lookup mapping.

some kind of race-condition or bug

Hmm, but you are using separate decoders per link, and also in that test case of two images, isn't all the encoded data already in memory? I'll try to take a look in the debugger. Perhaps it is trying to show the image before decoding has completed, without the higher code levels realizing this.

when statically linking and stripping?

Remains to be seen... I tried compiling libjxl statically but for some reason the build failed (tried on macOS 15.2), lots of library not found for -lcrt0.o errors. There might be system libraries/APIs provided for decoding JPEG XL on macOS nowadays, but I didn't have time to look closer. I would prefer not to add much, if any, platform-dependent code for this, though.

An important note about async decoding: all the previous decoders in the app are synchronous, so once all the data is available, the image is decoded and drawn on screen. The UI thread is blocked during the decoding (!).
To properly handle an async decode, you'd have to draw the UI/document with some placeholder while decoding is still happening, and then when decoding is finished, you'd trigger a document relayout so it'll update all the inline images and refresh the UI. One thread-safe way to trigger the layout is postCommand_App("document.layout.changed redo:1"); that posts an SDL event that is then handled in the main thread as soon as possible.
I would be fine with synchronous jxl decoding, if the above starts feeling too cumbersome.

So I think I have the stability issues ironed out.
The remaining issue is caused by the fact that the drawing code expects the decoding of every image to be finished once any image is finished downloading; In other words, if you click on two inline image links and one downloads and decodes faster than the other, the slower one gets displayed with a caption indicating that loading the image failed. I worked around this in 0c2c014, such that the download progress of any unfinished image is being kept displayed.
It is a little crooked however, since I wasn't sure where & how the drawing offsets are calculated. This is how it currently looks like:
https://github.com/user-attachments/assets/8d48d12c-63cc-49e6-be9b-2e76e3c87a1f


where is your nuget package ?

Hi,

Check the include prerelease checkbox.

Thanks,
Is it work with CUDA 11 ?

If you can build you own native yolo dlls, then yes. Otherwise by default it requires cuda 10.2.

Thanks,
Where is source i can build yolo_cpp_dll_gpu.dll ?

https://github.com/AlexeyAB/darknet

Can i create multi YoloWrapper for detect multi images at same time ?
private YoloWrapper _yoloWrapper;

Sorry, I don't know this. This library is a fork from https://github.com/AlturosDestinations/Alturos.Yolo

I just investigated a little bit, and found, that CUDA probably allows only 1 execution in the same time, so although it is (probably) possible to call it on multiple threads, but it will wait on the real GPU calculation. So it makes useless to call it parallel.
So multi threading will fasten the detection only when you are using the CPU for the object detection. But that is very slow, so single thread GPU is much faster than parallel CPU.
I don't know what is the situation when you have multiple GPUs. In this case probably you could use them parallel, but as far as I see, the native yolo does not support it, so you have to implement that support in the native library. Is this your case?

seem some others has this problem:
https://github.com/AlturosDestinations/Alturos.Yolo/issues/144
https://github.com/AlturosDestinations/Alturos.Yolo/issues/127
and it's only work when PC has multiple GPU:
https://github.com/AlturosDestinations/Alturos.Yolo/issues/97


ytdl-core events

Hello,
I've tried testing this multiple ways. Right now I don't think it's possible to do the equivalent of
let ytstream = ytdl(url);

ytstream.on('info', function(infoObj) {

});

Reference
Would code that looks like this need to be changed to use the getInfo function instead?

Same issue here. Cant listen any type of event from stream object.

@JMTK yes, you would need to use getInfo for this.


[XGrid] Server-side filtering and multi-column filtering don't work well together

[x ] The issue is present in the latest release.
[x ] I have searched the issues of this repository and believe that this is not a duplicate.

Current Behavior 😯
When running server-side filtering (eg the example given here) but changed to XGrid),  if you press the "add filter" button in the panel it seems like nothing happens. No additional filter row is added as expected (and how it works in XGrid without server-side filtering).

Clicking elsewhere and then back to filter loads the filter panel again, it will now have N rows for every time you clicked "add filter" before

Expected Behavior 🤔
When pressing "add filter" while running server-side filtering in XGrid, an additional row should appear in the filter panel
Steps to Reproduce 🕹
Steps:

Load https://material-ui.com/components/data-grid/filtering/#server-side-filter locally or in codesandbox, using XGrid instead of DataGrid – example here: https://codesandbox.io/s/material-demo-forked-mv2xz?file=/demo.js
Filter the column
Press the "add filter" button
Observe no change to filter panel until you click elsewhere then back on filters

Context 🔦
A user should be able to both use server-side filtering and multi-column filtering nicely together
Your Environment 🌎
Observed using Chrome 88
 System:
    OS: macOS 11.1
  Binaries:
    Node: 15.8.0 - /usr/local/bin/node
    Yarn: 1.22.10 - /usr/local/bin/yarn
    npm: 7.5.0 - /usr/local/bin/npm
  Browsers:
    Chrome: 88.0.4324.150
    Edge: Not Found
    Firefox: 84.0.1
    Safari: 14.0.2
  npmPackages:
    @material-ui/core: ^4.11.3 => 4.11.3
    @material-ui/icons: ^4.11.2 => 4.11.2
    @material-ui/lab: ^4.0.0-alpha.57 => 4.0.0-alpha.57
    @material-ui/styles:  4.11.3
    @material-ui/system:  4.11.3
    @material-ui/types:  5.1.0
    @material-ui/utils:  4.11.2
    @material-ui/x-grid: ^4.0.0-alpha.19 => 4.0.0-alpha.19
    @material-ui/x-grid-data-generator: ^4.0.0-alpha.19 => 4.0.0-alpha.19
    @material-ui/x-license:  4.0.0-alpha.19
    @types/react:  17.0.1
    react: ^17.0.1 => 17.0.1
    react-dom: ^17.0.1 => 17.0.1

https://github.com/mui-org/material-ui-x/issues/1026


Update README.md

@SreejaVeerappan ,
First raise an issue then create the PR
-- and explain how your changes will be beneficial


Basic async support for map-reduce (without event-loop)

Is your feature request related to a problem? Please describe.
Extending predis pipeline, I was able to simultaneously send the same command to multiple Redis instances and wait for the responses and process them in PHP to form the final result. It is basically a map-reduce model. I am wondering if you can officially add such a feature to predis as well. Please note that here by "async" I don't mean to work on top of some event loop library. I am not entirely sure how efficient my code is. By predis support being back again, I hope for a better implementation and further support here.
Describe the solution you'd like
Here is my code and an example test:
class TwoStepPipeline extends Pipeline
{
    /**
     * @var ConnectionInterface
     */
    protected $waitingConnection;

    /**
     * @var \SplQueue
     */
    protected $waitingCommands;

    /**
     * Flush the queue without waiting for the responses.
     *
     * @inheritdoc
     */
    protected function executePipeline(ConnectionInterface $connection, \SplQueue $commands)
    {
        if (! $this->waitingCommands) {
            $this->waitingCommands = new \SplQueue();
        }

        foreach ($commands as $command) {
            $connection->writeRequest($command);
            $this->waitingCommands->enqueue($command);
        }

        $this->waitingConnection = $connection;

        return [];
    }

    /**
     * Read the responses of the last flushed queue.
     *
     * @return array
     */
    public function wait()
    {
        $responses = array();
        $exceptions = $this->throwServerExceptions();

        while (!$this->waitingCommands->isEmpty()) {
            $command = $this->waitingCommands->dequeue();
            $response = $this->waitingConnection->readResponse($command);

            if (!$response instanceof ResponseInterface) {
                $responses[] = $command->parseResponse($response);
            } elseif ($response instanceof ErrorResponseInterface && $exceptions) {
                $this->exception($this->waitingConnection, $response);
            } else {
                $responses[] = $response;
            }
        }

        $this->waitingConnection = null;

        return $responses;
    }
}

    public function test_two_step_pipeline()
    {
        $shards = ['redis-0', 'redis-1', 'redis-2', 'redis-3', 'redis-4', 'redis-5', 'redis-6', 'redis-7'];
        $pipelines = [];
        //Write to all pipes
        foreach ($shards as $shard) {
            $pipeline = new TwoStepPipeline(Redis::connection($shard)->client());
            $pipeline->execute(function ($redis) {
                $redis->set('key1', 'value1');
                $redis->set('key2', 'value2');
            });
            $pipeline->execute(function ($redis) {
                $redis->set('key3', 'value3');
                $redis->set('key4', 'value4');
            });
            $pipelines[] = $pipeline;
        }
        // Wait for all the responses
        foreach ($pipelines as $pipeline) {
            $pipeline->wait();
        }
        foreach ($shards as $shard) {
            $this->assertEquals('value1', Redis::connection($shard)->get('key1'));
            $this->assertEquals('value2', Redis::connection($shard)->get('key2'));
            $this->assertEquals('value3', Redis::connection($shard)->get('key3'));
            $this->assertEquals('value4', Redis::connection($shard)->get('key4'));
        }
    }

Describe alternatives you've considered
I have sent a similar issue to another package php-redis-client, before I know predis support is back. I also don't know if my solution is currently possible to be implemented using phpredis extension. I also think using an event loop library for my problem is not necessary.
Additional context
In our production use-case, the commands to be run in parallel are some cpu-bound operations implemented by Redis modules API. For us, a map-reduce design was the only way to utilize the resources in order to minimize the time needed to process each request.
Thanks @tillkruss for supporting predis.

@nrk thoughts?

Hi @halaei,
Honestly I'm not exactly sure I undestand your use case and maybe I'm missing something but wouldn't it be possible to do the same already just by not passing a callback as the argument for Predis\Client::pipeline() in order to use the pipeline instance directly? Without any argument it returns a new pipeline instance which is not flushed unless Predis\Pipeline\Pipeline::execute() is explicitly invoked.
Just to re-use your snippet, it would look something like this:
public function test_two_step_pipeline()
{
    $shards = ['redis-0', 'redis-1', 'redis-2', 'redis-3', 'redis-4', 'redis-5', 'redis-6', 'redis-7'];
    $pipelines = [];

    foreach ($shards as $shard) {
        $pipeline = Redis::connection($shard)->client()->pipeline();

        $pipeline->set('key1', 'value1');
        $pipeline->set('key2', 'value2');
        $pipeline->set('key3', 'value3');
        $pipeline->set('key4', 'value4');

        $pipelines[] = $pipeline;
    }

    foreach ($pipelines as $pipeline) {
        $pipeline->execute();
    }

    foreach ($shards as $shard) {
        $this->assertEquals('value1', Redis::connection($shard)->get('key1'));
        $this->assertEquals('value2', Redis::connection($shard)->get('key2'));
        $this->assertEquals('value3', Redis::connection($shard)->get('key3'));
        $this->assertEquals('value4', Redis::connection($shard)->get('key4'));
    }
}

I might be misreading the reporter's request, but I wonder if the I/O model they're envisioning looks something like this:

write commands to shard A
write commands to shard B
write commands to shard C
read responses from shard A
read responses from shard B
read responses from shard C

In the pipeline model, under-the-hood the I/O model is:

write commands to shard A
read responses from shard A
write commands to shard B
read responses from shard B
write commands to shard C
read responses from shard C

The problem is, $pipeline->execute() combines the read and write cycle, so processing multiple pipelines is serialized.

Assume I have 8 instances and each command takes 1 second on each instance to run. Using the current pipeline the total response time is 8 seconds, but using TwoStepPipeline assuming there are enough CPU cores and assuming Redis instances are not busy doing other tasks, it takes 1 second.

My code still is not efficient because the write and read operations are in blocking mode, so during I/O there is no parallelism.

Please note that here by "async" I don't mean to work on top of some event loop library.

Do you mean that you would like non-blocking I/O with the calling code invoking some kind of wait() method that indicates I/O should occur, e.g.,
foreach ($shards as $shard) {
  $pipe = $shard->nonblocking();
  $pipe->ping();
  $pipe->ping();
  $pipe->ping();

  $pipes[] = $pipe;
}

Predis\Nonblocking::wait($pipes); // all reads and writes done here using nonblocking I/O to parallelize

foreach ($pipes as $pipe) {
  $responses = $pipe->responses();
}

(I'm just providing an example, not trying to formalize an API or anything.)

@jimbonator Yes exactly.

I might be misreading the reporter's request, but I wonder if the I/O model they're envisioning looks something like this:

@jimbonator indeed, I missed the different behaviour compared to the current implementation of Predis\Pipeline\Pipeline. Sorry @halaei!

My code still is not efficient because the write and read operations are in blocking mode, so during I/O there is no parallelism.

@halaei with Predis we can't do any better in terms of "efficiency" than what you already did, as the whole library is designed around blocking I/O. This considered and adding the fact that, at least to me, all of this seems to be quite specific to your use-case, I don't think such a feature would be a good candidate for inclusion into the library. We may try to make it easier to change the behaviour of Predis\Pipeline\Pipeline when extended by third-party code but we can't really turn it upside-down just for one limited use-case.
By the way if you don't actually need most of the features of Predis\Pipeline\Pipeline such as callbacks for automatic execution or intermediate flushes of the queued commands) then it would probably end up being a bit less cumbersome to roll your own class without extending Predis\Pipeline\Pipeline instead of trying to work around the limitations imposed by its design.

By the way if you don't actually need most of the features of Predis\Pipeline\Pipeline such as callbacks for automatic execution or intermediate flushes of the queued commands, then it would probably end up being a bit less cumbersome to roll your own class without extending Predis\Pipeline\Pipeline instead of trying to work around the limitations imposed by its design.

Thanks @nrk for the suggestion. I take a look into it.

FWIW, I don't see this as a one-off or specific use-case request.  There's been times I've wished Predis offered an async mode, even if it meant all requests with the client had to be handled that way.  (In particular, it would help with Redis pub/sub across multiple servers.)
That said, we don't use separate servers as shards, we configure Predis\Client for client-side sharding.
Even if there was no async mode, I still feel pipelines could be more efficiently handled with clusters by buffering writes (#586), flushing all sockets at once, and then reading back the responses.  It would create opportunities for parallelism, but not actually solve the problem @halaei is requesting.

@jimbonator I was reading about #586 just the other day but I still haven't replied due to the massive backlog, anyway I've found it quite interesting especially because I played with a similar idea a few years ago by reusing my StringBuffer from Predis\Async.
As for a truly async mode in Predis, I'm not sure it'd be really feasible due to how the library is structured.


BUG: Make application SPA

Fixes: #150  When we click on navbar items then it loads respective page by refreshing the whole application but React is based on SPA approach then will fix that reloading again and again by react useNavigate  hook and handle onClick  button.
@skmirajulislam Please review it once, when i creating a PR then it show can't automatically merge but Don't worry you can still create pull request!!
See: Using navigate hook of react

Please merge it actually in my vs code it format whole file when i used ctrl + C, Believe me there is no conflict at all it just format

@harshbhar0629 already resolved sorry!


The terminal device is not displayed. The JFIF identifier is missing

How to force changes
JFIF APP0 tag segment?？

Thank you very much for your reply.
I want to process jpeg and png into JPEG(JFIF) in a unified way, because the terminal only supports JFIF JPG. So I can use sharp output JFIF format

Did you try the suggestion to use withMetadata()?

您尝试过使用建议吗withMetadata()？

Yes, I tried. It does not handle jfif

this is a example.
`
const sharp = require("sharp");
const fs = require("fs");
// // 输入JPEG文件路径
const inputFilePath = "demo.jpg";
const outputFilePath = "demo2.jpg";
sharp(inputFilePath)
.withMetadata()
.jpeg({
chromaSubsampling: "4:4:4",
})
.toFile(outputFilePath, (err, info) => {
if (err) {
console.error(err);
} else {
console.log("isJFIF:", isJFIF(outputFilePath));
}
});
function isJFIF(filePath) {
const buffer = Buffer.alloc(5);
const fileDescriptor = fs.openSync(filePath, "r");
fs.readSync(fileDescriptor, buffer, 0, 5, 0);
fs.closeSync(fileDescriptor);
return (
buffer[0] === 0xff &&
buffer[1] === 0xd8 &&
buffer[2] === 0xff &&
buffer[3] === 0xe0 &&
buffer[4] === 0x00
);
}
`

Try:
-    buffer[3] === 0xe0 &&
+    buffer[3] === 0xe1 &&

https://superuser.com/questions/1657522/what-makes-two-main-jpeg-file-formats-jfif-and-exif-incompatible

I hope this information helped. Please feel free to re-open with more details if further assistance is required.


Authentication fails only when debugging a pytest.

Package Name:  see below
Package Version: see below
Operating System: Windows 11
Python Version:   3.10.15
VSCode Version: 1.94.2

azure-common              1.1.28
azure-core                1.31.0
azure-data-tables         12.5.0
azure-identity            1.19.0
azure-keyvault-keys       4.9.0
azure-keyvault-secrets    4.8.0
azure-mgmt-compute        33.0.0
azure-mgmt-core           1.4.0
azure-storage-blob        12.23.1
Describe the bug
I have a simple Azure blob that I'm trying to connect to using DefaultCredentials in a pytest and it works fine when I run pytest from the command line, but when I try and debug the pytest in VSCode it fails with strange errors.
To Reproduce
Steps to reproduce the behavior:

debug a pytest that connects to Azure blob store.

Expected behavior
should work the same
Screenshots
Additional context
Here's the debug log:
d:\git\athens\SmartReplay\tests\agents\test_agent_utils.py::test_setup_model failed: command = 'az account get-access-token --output json --resource https://storage.azure.com'
timeout = 10

    def _run_command(command: str, timeout: int) -> str:
        # Ensure executable exists in PATH first.

        If the exit code was non-zero it raises a CalledProcessError.  The
        CalledProcessError object will have the return code in the returncode
        attribute and output in the output attribute.

        The arguments are the same as for the Popen constructor.  Example:

        >>> check_output(["ls", "-l", "/dev/null"])
        b'crw-rw-rw- 1 root root 1, 3 Oct 18  2007 /dev/null\n'

        The stdout argument is not allowed as it is used internally.
        To capture standard error in the result, use stderr=STDOUT.

        >>> check_output(["/bin/sh", "-c",
        ...               "ls -l non_existent_file ; exit 0"],
        ...              stderr=STDOUT)
        b'ls: non_existent_file: No such file or directory\n'

        There is an additional optional argument, "input", allowing you to
        pass a string to the subprocess's stdin.  If you use this argument
        you may not also use the Popen constructor's "stdin" argument, as
        it too will be used internally.  Example:

        >>> check_output(["sed", "-e", "s/foo/bar/"],
        ...              input=b"when in the course of fooman events\n")
        b'when in the course of barman events\n'

        By default, all communication is in bytes, and therefore any "input"
        should be bytes, and the return value will be bytes.  If in text mode,
        any "input" should be a string, and the return value will be a string
        decoded according to locale encoding, or by "encoding" if set. Text mode
        is triggered by setting any of text, encoding, errors or universal_newlines.
        """
        if 'stdout' in kwargs:
            raise ValueError('stdout argument not allowed, it will be overridden.')

        if 'input' in kwargs and kwargs['input'] is None:
            # Explicitly passing input=None was previously equivalent to passing an
            # empty string.

        The returned instance will have attributes args, returncode, stdout and
        stderr. By default, stdout and stderr are not captured, and those attributes
        will be None. Pass stdout=PIPE and/or stderr=PIPE in order to capture them,
        or pass capture_output=True to capture both.

        If check is True and the exit code was non-zero, it raises a
        CalledProcessError. The CalledProcessError object will have the return code
        in the returncode attribute, and output & stderr attributes if those streams
        were captured.

        If timeout is given, and the process takes too long, a TimeoutExpired
        exception will be raised.

        There is an optional argument "input", allowing you to
        pass bytes or a string to the subprocess's stdin.  If you use this argument
        you may not also use the Popen constructor's "stdin" argument, as
        it will be used internally.

        By default, all communication is in bytes, and therefore any "input" should
        be bytes, and the stdout and stderr will be bytes. If in text mode, any
        "input" should be a string, and stdout and stderr will be strings decoded
        according to locale encoding, or by "encoding" if set. Text mode is
        triggered by setting any of text, encoding, errors or universal_newlines.

        The other arguments are the same as for the Popen constructor.
        """
        if input is not None:
            if kwargs.get('stdin') is not None:
                raise ValueError('stdin and input arguments may not both be used.')
            kwargs['stdin'] = PIPE

        if capture_output:
            if kwargs.get('stdout') is not None or kwargs.get('stderr') is not None:
                raise ValueError('stdout and stderr arguments may not be used '
                                 'with capture_output.')
            kwargs['stdout'] = PIPE
            kwargs['stderr'] = PIPE

        with Popen(*popenargs, **kwargs) as process:
            try:
                stdout, stderr = process.communicate(input, timeout=timeout)
            except TimeoutExpired as exc:
                process.kill()
                if _mswindows:
                    # Windows accumulates the output in a single blocking
                    # read() call run on child threads, with the timeout
                    # being done in a join() on those threads.  communicate()
                    # _after_ kill() is required to collect that and add it
                    # to the exception.
                    exc.stdout, exc.stderr = process.communicate()
                else:
                    # POSIX _communicate already populated the output so
                    # far into the TimeoutExpired exception.
                    process.wait()
                raise
            except:  # Including KeyboardInterrupt, communicate handled that.
                process.kill()
                # We don't call process.wait() as .__exit__ does that for us.
                raise
            retcode = process.poll()
            if check and retcode:
>               raise CalledProcessError(retcode, process.args,
                                         output=stdout, stderr=stderr)
E               subprocess.CalledProcessError: Command '['cmd', '/c', 'az account get-access-token --output json --resource https://storage.azure.com']' returned non-zero exit status 1.

 This avoids a subprocess call that would fail anyway.
        if shutil.which(EXECUTABLE_NAME) is None:
            raise CredentialUnavailableError(message=CLI_NOT_FOUND)

        if sys.platform.startswith("win"):
            args = ["cmd", "/c", command]
        else:
            args = ["/bin/sh", "-c", command]
        try:
            working_directory = get_safe_working_dir()

            kwargs: Dict[str, Any] = {
                "stderr": subprocess.PIPE,
                "stdin": subprocess.DEVNULL,
                "cwd": working_directory,
                "universal_newlines": True,
                "timeout": timeout,
                "env": dict(os.environ, AZURE_CORE_NO_COLOR="true"),
            }
            return subprocess.check_output(args, **kwargs)
        except subprocess.CalledProcessError as ex:
            # non-zero return from shell
            # Fallback check in case the executable is not found while executing subprocess.
            if ex.returncode == 127 or ex.stderr.startswith("'az' is not recognized"):
>               raise CredentialUnavailableError(message=CLI_NOT_FOUND) from ex
E               azure.identity._exceptions.CredentialUnavailableError: Azure CLI not found on path

D:\Anaconda3\envs\sr\lib\site-packages\azure\identity\_credentials\azure_cli.py:239: CredentialUnavailableError

From the error message, the Azure CLI executable az can't be found in the path. Perhaps when you run or debug tests in VS Code, it might be using a different environment that doesn't have the Azure CLI in its PATH.

If you print os.environ.get("PATH") in your test, you can also check to see how it differs in VS Code versus normally. Ultimately, I think this is a VS Code configuration issue and some adjustments might be needed.

Ok, I made sure az is in my PATH for the USER and for SYSTEM and not just for the command line environment, and I get the same error.  Here's a small repro:
from azure.identity import AzureCliCredential
from azure.storage.blob import BlobServiceClient

def test_azure():
    credentials = AzureCliCredential()
    storage_account = "srexperiments"
    blob_container_name = "unittests"
    account_url = f"https://{storage_account}.blob.core.windows.net/"
    blob_service_client = BlobServiceClient(account_url, credential=credentials, logging_enable=False)
    container_client = blob_service_client.get_container_client(container=blob_container_name)
    assert container_client.exists()

Steps

Create storage account "srexperiments" and blob container "unittests" and make sure your SC-ALT account has these permissions:

"Reader",
"Storage Blob Data Reader",
"Storage Blob Data Contributor",
"Storage Queue Data Reader",
"Storage Queue Data Contributor",
"Storage Table Data Reader",
"Storage Table Data Contributor",
"Storage File Data Privileged Reader",

Install azcopy and az cli and make sure az is in your user PATH and system PATH.

Use azcopy login and login to your Azure SC-ALT account using web browser.

Use az login to also login to the same account (should be quick because of cached credentials.

run pytest from command line (works fine)

debug the pytest in VS code, fails with the following errors:

Running pytest with args: ['-p', 'vscode_pytest', '--rootdir=d:\\temp\\test', '--capture=no', 'd:\\temp\\test\\test_azure.py::test_azure']
============================= test session starts =============================
platform win32 -- Python 3.10.15, pytest-7.3.1, pluggy-1.5.0
rootdir: d:\temp\test
plugins: anyio-4.6.2.post1
collected 1 item

test_azure.py F

================================== FAILURES ===================================
_________________________________ test_azure __________________________________
command = 'az account get-access-token --output json --resource https://storage.azure.com'
timeout = 10
    def _run_command(command: str, timeout: int) -> str:
        # Ensure executable exists in PATH first.

        If the exit code was non-zero it raises a CalledProcessError.  The
        CalledProcessError object will have the return code in the returncode
        attribute and output in the output attribute.

        The arguments are the same as for the Popen constructor.  Example:

        >>> check_output(["ls", "-l", "/dev/null"])
        b'crw-rw-rw- 1 root root 1, 3 Oct 18  2007 /dev/null\n'

        The stdout argument is not allowed as it is used internally.
        To capture standard error in the result, use stderr=STDOUT.

        >>> check_output(["/bin/sh", "-c",
        ...               "ls -l non_existent_file ; exit 0"],
        ...              stderr=STDOUT)
        b'ls: non_existent_file: No such file or directory\n'

        There is an additional optional argument, "input", allowing you to
        pass a string to the subprocess's stdin.  If you use this argument
        you may not also use the Popen constructor's "stdin" argument, as
        it too will be used internally.  Example:
        >>> check_output(["sed", "-e", "s/foo/bar/"],
        ...              input=b"when in the course of fooman events\n")
        b'when in the course of barman events\n'

        By default, all communication is in bytes, and therefore any "input"
        should be bytes, and the return value will be bytes.  If in text mode,
        any "input" should be a string, and the return value will be a string
        decoded according to locale encoding, or by "encoding" if set. Text mode
        is triggered by setting any of text, encoding, errors or universal_newlines.
        """
        if 'stdout' in kwargs:
            raise ValueError('stdout argument not allowed, it will be overridden.')

        if 'input' in kwargs and kwargs['input'] is None:
            # Explicitly passing input=None was previously equivalent to passing an
            # empty string.

        The returned instance will have attributes args, returncode, stdout and
        stderr. By default, stdout and stderr are not captured, and those attributes
        will be None. Pass stdout=PIPE and/or stderr=PIPE in order to capture them,
        or pass capture_output=True to capture both.

        If check is True and the exit code was non-zero, it raises a
        CalledProcessError. The CalledProcessError object will have the return code
        in the returncode attribute, and output & stderr attributes if those streams
        were captured.

        If timeout is given, and the process takes too long, a TimeoutExpired
        exception will be raised.

        There is an optional argument "input", allowing you to
        pass bytes or a string to the subprocess's stdin.  If you use this argument
        you may not also use the Popen constructor's "stdin" argument, as
        it will be used internally.

        By default, all communication is in bytes, and therefore any "input" should
        be bytes, and the stdout and stderr will be bytes. If in text mode, any
        "input" should be a string, and stdout and stderr will be strings decoded
        according to locale encoding, or by "encoding" if set. Text mode is
        triggered by setting any of text, encoding, errors or universal_newlines.

        The other arguments are the same as for the Popen constructor.
        """
        if input is not None:
            if kwargs.get('stdin') is not None:
                raise ValueError('stdin and input arguments may not both be used.')
            kwargs['stdin'] = PIPE

        if capture_output:
            if kwargs.get('stdout') is not None or kwargs.get('stderr') is not None:
                raise ValueError('stdout and stderr arguments may not be used '
                                 'with capture_output.')
            kwargs['stdout'] = PIPE
            kwargs['stderr'] = PIPE

        with Popen(*popenargs, **kwargs) as process:
            try:
                stdout, stderr = process.communicate(input, timeout=timeout)
            except TimeoutExpired as exc:
                process.kill()
                if _mswindows:
                    # Windows accumulates the output in a single blocking
                    # read() call run on child threads, with the timeout
                    # being done in a join() on those threads.  communicate()
                    # _after_ kill() is required to collect that and add it
                    # to the exception.
                    exc.stdout, exc.stderr = process.communicate()
                else:
                    # POSIX _communicate already populated the output so
                    # far into the TimeoutExpired exception.
                    process.wait()
                raise
            except:  # Including KeyboardInterrupt, communicate handled that.
                process.kill()
                # We don't call process.wait() as .__exit__ does that for us.
                raise
            retcode = process.poll()
            if check and retcode:
>               raise CalledProcessError(retcode, process.args,
                                         output=stdout, stderr=stderr)
E               subprocess.CalledProcessError: Command '['cmd', '/c', 'az account get-access-token --output json --resource https://storage.azure.com']' returned non-zero exit status 1.
 This avoids a subprocess call that would fail anyway.
        if shutil.which(EXECUTABLE_NAME) is None:
            raise CredentialUnavailableError(message=CLI_NOT_FOUND)

        if sys.platform.startswith("win"):
            args = ["cmd", "/c", command]
        else:
            args = ["/bin/sh", "-c", command]
        try:
            working_directory = get_safe_working_dir()

            kwargs: Dict[str, Any] = {
                "stderr": subprocess.PIPE,
                "stdin": subprocess.DEVNULL,
                "cwd": working_directory,
                "universal_newlines": True,
                "timeout": timeout,
                "env": dict(os.environ, AZURE_CORE_NO_COLOR="true"),
            }
            return subprocess.check_output(args, **kwargs)
        except subprocess.CalledProcessError as ex:
            # non-zero return from shell
            # Fallback check in case the executable is not found while executing subprocess.
            if ex.returncode == 127 or ex.stderr.startswith("'az' is not recognized"):
>               raise CredentialUnavailableError(message=CLI_NOT_FOUND) from ex
E               azure.identity._exceptions.CredentialUnavailableError: Azure CLI not found on path

D:\Anaconda3\envs\sr\lib\site-packages\azure\identity\_credentials\azure_cli.py:239: CredentialUnavailableError
------------------------------ Captured log call ------------------------------
WARNING  azure.identity._internal.decorators:decorators.py:43 AzureCliCredential.get_token_info failed: Azure CLI not found on path
WARNING  azure.identity._internal.decorators:decorators.py:43 AzureCliCredential.get_token_info failed: Azure CLI not found on path
WARNING  azure.identity._internal.decorators:decorators.py:43 AzureCliCredential.get_token_info failed: Azure CLI not found on path
WARNING  azure.identity._internal.decorators:decorators.py:43 AzureCliCredential.get_token_info failed: Azure CLI not found on path
=========================== short test summary info ===========================
FAILED test_azure.py::test_azure - azure.identity._exceptions.CredentialUnava...
======================== 1 failed in 88.11s (0:01:28) =========================

If you were to have the following code in a separate python script, then use the "Run and Debug" feature in VSCode, does it yield the same error?
import subprocess
import os

print(os.environ['PATH'])

args = ["cmd", "/c", "az account --help"]
kwargs = {
    "universal_newlines": True,
    "env": dict(os.environ, AZURE_CORE_NO_COLOR="true"),
}
try:
    output = subprocess.check_output(args, **kwargs)
    print(output)
except subprocess.CalledProcessError as e:
    print(e)

If so, does removing the "cmd" and "/c" entries in the args list help at all? Would also be curious to see how the output from print(os.environ['PATH']) differs at runtime.
I'm not super familiar with all the VS Code mechanisms like the Debug Console vs Integrated Terminal, but seems like creating/updating a launch.json file could also be something to look into. Perhaps something like this might work:
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python Debugger: Current File",
            "type": "debugpy",
            "request": "launch",
            "program": "${file}",
            "console": "integratedTerminal",
            "purpose": [ "debug-test" ],
            "env": {
                "PATH": "${env:PATH};C:\\path\\to\\azure\\cli"
            }
        }
    ]
}

Your sample code above works fine in the debugger - the cmd runs with the correct path and az command completes.  I used "az account show" to be sure it fetches something from azure that requires authentication.  --help is not enough.
I also tested this in the debugger and it runs fine:
import os
import subprocess

def find_az_command():
    path = os.environ['PATH']
    for p in path.split(os.pathsep):
        if os.path.exists(os.path.join(p, 'az.cmd')):
            return os.path.join(p, 'az.cmd')
        if os.path.exists(os.path.join(p, 'az')):
            return os.path.join(p, 'az')
    print("ERROR: az command not found in PATH")
    return None

def get_account_details():
    az = find_az_command()
    args = [az, "account", "show"]
    kwargs = {
        "universal_newlines": True,
        "env": dict(os.environ, AZURE_CORE_NO_COLOR="true"),
    }
    try:
        output = subprocess.check_output(args, **kwargs)
        return output
    except Exception as e:
        return str(e)

def test_account_details():
    details = get_account_details()
    print(details)

And debugging this as a pytest in the debugger also succeeds, so not sure why my original test_azure function fails in the debugger during pytest.

Sorry for the delay in response. I'm still uncertain of what environment conditions cause this. However, I just noticed in the traceback, that this line passes:
       if shutil.which(EXECUTABLE_NAME) is None:
            raise CredentialUnavailableError(message=CLI_NOT_FOUND)

This means shutil.which is able to find and produce the path for the az executable, but the subprocess which is supposed to have the same PATH is not able to find it. I am testing out just using the full path of the executable found from shutil.which, and just calling that directly. I think this may resolve the issue you are encountering here.


Handling the unexpected EmptyBodyException for collections that are, in fact, empty

I don't have any Flair vents, and the logic in this helper wasn't handling the EmptyBodyException that the flair-client is throwing in that case and was preventing the entire HA plugin from being configured.
I have no idea why they chose to do it this way, but I did create an issue to get better understanding: https://github.com/flair-systems/flair-api-client-py/issues/4

@shauntarves Thank you! I've been meaning to get to that, but got sidetracked building another custom component. One my milestones (in the home-assistant-flair repo) for this library is to completely rewrite this to be async and not rely on their python library.


Does this work with cookies from iOS?

I was wondering if I can use cookies generated from iPhone login?

Which cookies are "generated" on iOS login? Could you just name the keys/names from them?

It generates same as Android, what I was doing is logging in on Instagram with and save cookies and send them with every request.
Cookies where same for iOS as for Android. But still got 403 Login is required.
I fixed this Issue by changing user web agent to Android one.


Add InfoListItem examples

Changes proposed in this Pull Request:

Add InfoListItem examples & API Page

Changes look fine 👍 .

Not related to this PR but the below links need to update.

https://blui-angular-docs--pr494-feature-3458-infolis-5gju50ok.web.app/Hero.md

https://blui-angular-docs--pr494-feature-3458-infolis-5gju50ok.web.app/ChannelValue.md

should the last...more complete example include the full code on github button? also wondering if there are plans to make a component out of the Copy all & Full Code on GitHub. I noticed the order of buttons are different between other examples...

The only piece of the example that isn't available in the code snippet below is the Colors variable, but I can refactor this example so that there's no external link needed.
Also yes, the order of these buttons should be consistent across all pages.

Not related to this PR but the below links need to update.

There's a ChannelValue story for adding a playground - I can updated the doc links as part of that PR.

@jeffvg I've went through all pages and made the order:
[GITHUB BUTTON] [COPY BUTTON]
We should be good now.

API page looks good
1 Just a thought
the dense variant appears a lot in design files. Perhaps we can sneak that in the first example?

2
This is a default info list item from Figma. It uses caption texts for the timestamp. Also note that the time part is bolden instead of AM

3
The third example looks long and complicated. It probably doesn't matter too much since in this case it is on the bottom of the page... but I might take out list item #2 and #5. I would also use a partial divider for all list items except for the last one to stay closer to the design convention.


Update country names and borders in example

The problem
Standard policy of opensource projects regarding international borders has always been to follow what the UN recognizes as such.
In the OpenLayers example Image Vector Layer, Cyprus, the island, appears divided to two countries, Cyprus and Northern Cyprus, which is incorrect. There is no country named North Cyprus which is internationally recognized as such, or by the UN.
Following the policy mentrioned above, in the same OpenLayers example, Crimea correctly appears to be part of Ukraine, as is internationally recognized.
On the same line, there is no country internationally recognized as 'Macedonia'. The correct name is 'North Macedonia'.
The issue exists in file countries.geojson
Attached is a corrected version of the file, without the false international border line, and country name.
countries.zip
.
Thank you.

I can submit the changes with a pull request, if necessary.

@dzach - Thanks for the report.  I haven't yet looked at your countries.zip, but it would be good to have an updated countries.geojson used throughout the examples.  It should be simplified in a similar way or otherwise represent the same level of generalization as the current dataset.
If you are able to create a pull request, please include details about the source for the updated dataset.  It would be good to have details in the git log about the provenance.

Swaziland should be renamed to Eswatini.  It would also be useful to include the ISO A2 code in the country properties to avoid needing a third party geojson for the Style renderer example.

@mike-000 - I verified that Eswatini is the correct name with wikipedia and will add it to this pull request.

@MoonE : Thank you for reviewing this PR and for pointing to the https://github.com/nvkelso/natural-earth-vector/issues/391#issuecomment-678230303 thread. Regretfully but necessarily, this is a long reply:
In principle:
Natural Earth Vector appears to have developed a concept of 'worldviews'. From what little I've read in that thread, that seems to me to be a legitimate quest to record and display on maps facts that exist 'on the ground'. Even recording 'facts on the ground' can, however, become very controversial, since even the act of recognizing a 'situation on the ground', or failing to do so, is inherently political. It is naive to believe or claim that a few individuals can record and do justice on issues whole nations cannot agree and decide upon. In the case of widely adopted open source projects, this also puts significant political power in the hands of few maintainers, hence it bears the risk of becoming strongly un-democratic. A 'benevolent dictator' can quickly become just a dictator.
OL is a platform that facilitates presentation of 'worldviews' on maps. The only way for a technical project like OL to avoid getting caught in controversial political issues seems to be its adherence to principles. What data it adopts matters a lot; deciding on that helps avoid becoming unwillingly propagators of somebody else's political views. This means there are costs to be paid: a cost to decide what is suitable, and another to maintain an own dataset, where necessary.
The simple principle I propose is this: if you have to use data prone to political bias, use what an international authority for such matters accepts. The international authority for statehood acceptance is the UN, and it has universally accepted rules for doing business.
Regarding costs:
OL is not linking directly to Natural Earth Vector's dataset; instead, it maintains its own dataset, based on external data it adopts, in this case from Natural Earth Vector; the very existence of #12942 points this out. So the cost of maintaining the dataset is already borne by OL, although is not as high as creating an own dataset. That's a benefit from being an open source project.
The cost of deciding what data to use is unavoidable, if a project intends to adhere to principles. Deferring this decision to other projects may end up violating its own principles and loosing its independence. Reviewer decisions may also violate a project's principles, albeit unintentionally and in good faith, while trying to avoid doing so.
To the point of my PR:
Having Northern Cyprus as a country in the dataset is a strong political view. There are numerous UN decisions declaring the Turkish act as an invasion of northern Cyprus, and asking it to withdraw. There is no nation in the world recognizing a 'Turkish Republic of Northern Cyprus', other than the invader itself. Therefore a decision for a 'Northern Cyprus' state to remain in OL's dataset asks for a reason, and the principle it adheres to.
Deferring the decision to what Natural Earth Vector does, does not make the decision less political; instead, it makes it even more political, as it adopts a specific 'worldview' from the plethora of such 'world views' Natural Earth offers, or intents to.
It is not my intention to take part in discussions about existing or past 'worldviews', not in general nor specifically in Natural Earth Vector's case. I am using OL as a technical platform to display non political maps. What I propose is a conservative, achieved by international consensus, widely adopted, neutral solution: use whatever data agrees with the commonly recognized and accepted authority.
Based on the above principle I requested the removal of the non UN recognized and therefore non legally existing state of 'Northern Cyprus' from the OL maintained, countries.geojson file. If another decision is made, it would be good faith and democratic to state on what principles such a decision was made.
Even better, maybe it would be prudent to include a short 'principles for data use' document with OL, stating a few but necessary rules for adopting or creating data to be used within the OpenLayers project. Maybe parts of this long post can serve as a basis for something like that ?

After reading more about Natural Earth, it seems to me that the scopes of the two projects, Natural Earth Vector and OpenLayers are quite different, although they do have a most significant common interface: OpenLayers is a technical platform facilitating presentation of maps and metadata in a web browser, thus it is agnostic about the content that is actually displayed, while Natural Earth provides map data and metadata that is actually displayed, thus it is the content itself, and therefore cannot be agnostic.
Natural Earth cannot avoid political controversies, nor does it intend to: as it is clearly stated in the Contributors page, the dataset started "for quick turnaround newspaper mapping". A newspaper's business depends on reporting about controversies and disputes, being pluralistic, progressive or conservative, or being supportive of strong views. A reporter working on Crimea needs to find quickly whether last nights events occured in Russian or Crimean territory. So the reporter needs to know the 'ground truth', where that border is. Natural Earth's interest is to dig out and collect such data, and provide the resulting dataset to its users. That's how newspapers make money. Please, don't shoot the pianist. One cannot ask a reporter not to report something that's happening, just because one may have a different view.
In doing so however, provided their dataset is widely used, the Natural Earth team takes the risk of appearing strongly biased, especially by promoting this 'ground truth' which they inherited from the newspapers business. They do indeed recognize that fact. They do not seem to have a 'principles' document published somewhere, so one cannot hold them accountable for something they do not claim to adhere to. Being free and open source can obscure the fact that the dataset can be biased toward controversy.
Why Natural Earth may be doing this seems clear to me. Why a data agnostic project like OpenLayers should choose a controversial 'worldview' dataset over a widely accepted one is a question that needs to be answered, I believe. There is nothing on earth  guaranteeing that a free and open source dataset, or project for that matter, will be unbiased.
I would say, trying to be humorous in a serious matter, that in mathematical or control systems terms, Natural Earth chose to promote (as admin-0) the derivative of the world's state instead of promoting the world's state itself, or its integral. That much is obvious.

Ref: https://github.com/nvkelso/natural-earth-vector/issues/391

In my opinion, it would be wise to either use a less disputable dataset for our vector demos, i.e. nothing that has to do with countries, nations and borders. If we cannot find anything suitable, we should at least use a CORS friendly third party source, instead of maintaining our own. Same goes for #12942, #12941, #12940 and past issues regarding this data set.
I'll think about an alternative and come up with a pull request that sets up our vector examples to use a different data set.

@ahocevar 100% agreement.  I did some poking around yesterday looking for suitable / interesting data.  I thought that a global biome (e.g. https://www.arcgis.com/apps/View/index.html?appid=144b1d74a5964d728b25aeb0542de485) dataset might be nice - but I haven't yet found one that is appropriately simplified.
Global watersheds (like something based on the USGS Hydro1k data https://www.wri.org/watersheds-world) might also be nice.

Why a data content agnostic project like OpenLayers should choose a controversial 'worldview' dataset over a widely accepted one is a question that needs to be answered, I believe. There is nothing on earth guaranteeing that a free and open source dataset, or project for that matter, will be unbiased.

Usage of the Natural Earth dataset is simply a matter of availability, and not an endorsement for one side of a conflict.
When searching for countries geojson it is in the first results and finding something else seems to be rather difficult.
A less controversial dataset for the examples will of course solve this issure in a more permanent fassion :+1: .

@MoonE : Yes, it's difficult, I've spent time myself trying to find one. It is unfortunate that issues like this pop up at times, but on the positive side, these may also be opportunities to re-adjust toward better solutions.
Choosing another type of dataset, e.g. one with geographical/geological features rather than features related to borders/limits conceived by humans, might be a good neutral solution. Choosing another planet would be ideal for the time being :-), but then maybe very few people would be interested in such a dataset.
I've looked through NASA's datasets this morning for pure geographical polygon data in geojson format, but haven't yet identified any.

The data from https://ec.europa.eu/eurostat/web/gisco/geodata/reference-data/administrative-units-statistical-units/countries appears to reflect UN status (which might be contentious in Taiwan) and is CORS friendly https://codesandbox.io/s/vector-layer-forked-nt4z5.

Thanks!


Error on startup

Since updating to v1.8.0 (272) I am getting an error on startup:
undefined is not iterable (cannot read property Symbol(Symbol.iterator))
I can dismiss it and everything seems to work fine.
I have the Lint and GitHub plugins installed if that helps to troubleshoot.

working on it.

Fixed in 1.8.1
Thanks 😊


Fixed typographical error, changed arbitary to arbitrary in README.

@openstack, I've corrected a typographical error in the documentation of the refstack-client project. You should be able to merge this pull request automatically. However, if this was intentional or if you enjoy living in linguistic squalor, please let me know and create an issue on my home repository.

Thank you for contributing to openstack/refstack-client!
openstack/refstack-client uses Gerrit for code review.
Please visit
http://docs.openstack.org/infra/manual/developers.html#development-workflow
and follow the instructions there to upload your change to Gerrit.


update jquery / allow to specify a jquery/framework

jquery should be updated (I recommend moving to 2.x since old browser support is not an issue in Firefox anyway.)
also, there should be a way to specify your own jquery.
an easy solution would be to allow to place a file ~/.js/jquery.js or lets put it more generic ~/.js/framework.js.
of course this raises the question why not just put it into ~/.js/default.js
but I see 2 good reasons:

seperate framework from user code
just putting my own jquery in default.js would mean double jquery inclusion in dotjs alone

also, it might be a good idea to check with the chrome plugin how they handle this to keep the behavior consistent

I wonder if it's even a good idea to always include jquery always anymore. I'll have to look at what the chrome version is doing.

well nowadays we have things like querySelector along with great native APIs, I dont think jQuery is required anymore
Besides we not using cross-browser, or heavy ajax scripts

It'd be nice to be able to either toggle the inclusion, or to add a preference field where you could specify a default library/framework to be included (multiple?).


Refactor Netatmo integration

Breaking Change:
A lot

for authentication only client id and secret are required, no need to pass your username and password anymore
public weather sensors are removed and will be added back in a separate PR
Service set_schedule now requires the name of the home
webhooks are removed and will be added back in a separate PR
Services to toggle the light/set it to auto have been removed until implemented in pyatmo

Description:

Implements OAuth2 account linking
Fixed set_schedule, now requires the name of the home
Presence camera flood light is exposed as an actual light (currently only its state)

Related issue (if applicable): fixes #
Pull request with documentation for home-assistant.io (if applicable): home-assistant/home-assistant.io#<home-assistant.io PR number goes here>
Example entry for configuration.yaml (if applicable):
netatmo:
  client_id: your_client_id
  client_secret: your_client_secret

Checklist:

[x] The code change is tested and works locally.
[x] Local tests pass with tox. Your PR cannot be merged unless tests pass
[ ] There is no commented out code in this PR.
[ ] I have followed the development checklist

If user exposed functionality or configuration variables are added/changed:

[ ] Documentation added/updated in home-assistant.io

If the code communicates with devices, web services, or third-party tools:

[ ] The manifest file has all fields filled out correctly. Update and include derived files by running python3 -m script.hassfest.
[x] New or updated dependencies have been added to requirements_all.txt by running python3 -m script.gen_requirements_all.
[ ] Untested files have been added to .coveragerc.

If the code does not interact with devices:

[ ] Tests have been added to verify that the new code works.

Waiting for upstream merge of https://github.com/jabesq/netatmo-api-python/pull/96.

This should be it. Now I'll just have to wait for a new pyatmo release so that the requirements are matched.

Looks good to me. Giving Martin final call 👍

Copy and pasting your suggestions wasn't that hard. 😉

I missed a docs PR. Please link it in the description.

That is true, I’ll fix that ASAP.


Wildlife-Dark Theme Doesn't Look Right

VSCode Version: 1.7.7
OS Version: Windows 7 Professional

Steps to Reproduce:

I am not sure if this is for all themes, but the Wildlife-Dark theme totally changed after the update
I noticed this yesterday after the first update. It then went back to normal after the rollback, and is now totally changed again after the last update.

I'll say please file issues against the theme you use as we make updates to TS/JS grammar so they may need to update their theme accordingly.


Update dutch

Fixes #65

Hello,
Can you help me on this one ?
Kind regards,
Bart Engelen

You can try using this button on your fork and then rebasing once again

Hello,
I got this error:

What can I do to fix this ?
Regards,
Bart Engelen

You are still working on an old version of master

There hasn't been any activity in this pull request recently so I will close it. Feel free to create a new one if you want to continue your work. Thanks for your contribution!


why is the max Y 127 for biome boundaries?

What if we want to see the boundary at 255?

It’s impossible to use the slider if the value goes all the way to 255... it would be impossible to select odd or even values.  The only workaround is you can set the config value to 255 it will work just fine.

It’s impossible to use the slider if the value goes all the way to 255... it would be impossible to select odd or even values.  The only workaround is you can set the config value to 255 it will work just fine.


Implement pruneDocuments() Appwrite Function ⚡

Introduction
Appwrite Functions allow you to extend and customize your Appwrite server functionality by executing your custom code 🤩 You can learn more at our official Appwrite Functions docs.
Your task is to implement pruneDocuments function. You can look at the existing Appwrite Functions demo in the coding language you prefer to see how it works.
This function should scan all documents in all collections to read their createdAt attribute. If a document has this attribute and it's older than 5 years, remove the document.

Please make sure to store all configurable parameters as environment variables, so others can start using your script without having to edit it.

Tasks summary:

[ ] Fork & clone this repository
[ ] Create feat-implement-prune-documents-X branch where X is programming language you used
[ ] Create folder named prune-documents in the language folder of your choice
[ ] Write code for the function
[ ] Test the function using Appwrite
[ ] Write a README.md explaining what function does, how to use and customize it. Here is an example.
[ ] Submit pull request

If you need any help, reach out to us on our Discord server.
Are you ready to work on this issue? 🤔 Let us know, and we will assign it to you 😊 There are 9 languages in which you can implement this function. When requesting to be assigned, please mention which language would you like to use.
Assignees table
✅ = Done - This language has already been finished
⚒  = In progress - Someone is already working on this language
❌ =  Unassigned yet - This language can be assigned to you

Function / Language
Deno
NodeJS
PHP
Python
Ruby
Dart
.NET
Java
Kotlin

pruneDocuments
❌
❌
❌
❌
❌
❌
❌
⚒ chandrikadeb7
❌

Happy Appwriting!

I want to implement this function for python language. Also, can you please guide me where can I find the whole structure of storage object and what do you mean by all collections. Please provide me the appropriate reference, happy to contribute to appwrite. Thanks !

@avats-dev Looks like you have some issues assigned to you already. We request you to complete those before requesting assignments on new ones. Also, please consider picking a different type of issue so other contributors can try this one.

@Meldiron I want to take this up with Java and Python

@chandrikadeb7 assigned Java to you. All the best 🚀

@Meldiron Can you help me with the Java implementation of this function? Which sdk to import and what to do?

@chandrikadeb7 You can use our Kotlin SDK

@Meldiron I would like to work on Ruby implementation.

Hi can I take the NodeJS implementation.


Vickel: Watch Alacarte[\W_]*+Tours(?!.net(?<=alacartetours.net))

Vickel requests the watch of the watch_keyword Alacarte[\W_]*+Tours(?!\.net(?<=alacartetours\.net)). See the MS search here and the Stack Exchange search in text, in URLs, and in code.

Alacarte[\W_]*+Tours(?!\.net(?<=alacartetours\.net)) has been seen in 1 true positive, 0 false positives, and 0 NAAs.

Approved by Jeff Schaller in Charcoal HQ


Cannot run Maven install

For openjdk-13, running the maven install goal reports switches are a preview feature. The following configuration fixes the issue, as well as prior warnings from plugin versions being unspecified.
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.7.0</version>
                <configuration>
                    <release>13</release>
                    <compilerArgs>--enable-preview</compilerArgs>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.22.2</version>
                <configuration>
                    <argLine>--enable-preview</argLine>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-failsafe-plugin</artifactId>
                <version>2.22.2</version>
                <configuration>
                    <argLine>--enable-preview</argLine>
                </configuration>
            </plugin>
        </plugins>
    </build>

I should note this does change the version from 12 to 13. I will change #5 if desired to the previous version 12, which had the same failures and warnings when testing in a docker environment.


python 3.12 essential?

Hello,
is python 3.12 essential or will the docker still build without errors with 3.11?
Reason is I wanted to add some more vs plugin(s) and most are older and not maintained anymore and at least one depends on python module imp and not importlib and this was removed in 3.12  - see here so it would require to re-write the plugin to work with importlib instead of imp.
It if does not work with 3.11 that's fine, it's not the most important plugin and I can drop it.
Thanks!
btw - thanks for your other answer, very appreciated!
btw2 - line 467 (vsgan build)
https://gitlab.com/nvidia/container-images/cuda/blob/master/dist/11.4.2/ubuntu2204/base/Dockerfile
should probably now point to 12.5.1 (?)

This might help:This file might fix it
https://mega.co.nz/#!B31G2LaZ!uBBOCp9hLC7bq9kP8NC6s4DanQJJZuoFRr5FI_jkeic
you may need to install the c compiler

is python 3.12 essential

No, you can build it with 3.11 and it should work fine, but I won't downgrade it myself. You should be able to build it yourself if you adjust the dockerfile. Outdated 3.11 reference.

should probably now point to 12.5.1 (?)

The non-avx docker is not updated yet, which you probably refer to. I plan to do so soon.

some versions changed on the servers

I adjust these urls all the time, but they keep changing. I usually adjust them if I try to build the docker and get 404 errors. Not sure if there is a better solution. I require the latest versions.


Add LFU, LRU evictions strategies

Codecov Report

Merging #30 (1a14863) into master (4b17da2) will decrease coverage by 1.54%.
The diff coverage is 14.51%.

@@            Coverage Diff             @@
##           master      #30      +/-   ##
==========================================
- Coverage   65.09%   63.55%   -1.55%
==========================================
  Files          28       28
  Lines        1553     1597      +44
==========================================
+ Hits         1011     1015       +4
- Misses        475      510      +35
- Partials       67       72       +5

Flag
Coverage Δ

unittests
63.55% <14.51%> (-1.55%)
:arrow_down:

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

Impacted Files
Coverage Δ

config.go
100.00% <ø> (ø)

sharded_map_go1.18.go
59.21% <11.11%> (-4.04%)
:arrow_down:

trait.go
74.48% <11.11%> (-3.22%)
:arrow_down:

sync_map.go
63.46% <14.28%> (-4.96%)
:arrow_down:

sharded_map.go
61.58% <15.38%> (-3.20%)
:arrow_down:

trait_go1.18.go
67.39% <25.00%> (-9.54%)
:arrow_down:

:mega: We’re building smart automated test selection to slash your CI/CD build times. Learn more


Different priority Pipelines with Different algorithm

HKube micro-service
Describe the bug
when executing Different priority Pipelines with Different algorithm the priority mechanism does not work
Expected behavior
A clear and concise description of what you expected to happen.
To Reproduce
execute 2 similar  pipelines with different priority
execute the low priority wait 5 second and execute the high priority
expect the high priority to take the resources
first pipeline priority 1
{
    "name": "high-priority",
    "nodes": [
        {
            "nodeName": "eval1",
            "algorithmName": "eval-alg2",
            "input": [
<EMAIL_ADDRESS>            ],
            "extraData": {
                "code": [
                    "(input) => {",
                    "const range = Array.from(Array(input[0]).keys());",
                    "return range }"
                ]
            }
        },
        {
            "nodeName": "evalsleep",
            "algorithmName": "eval-alg2",
            "input": [
                "#@eval1",
<EMAIL_ADDRESS>            ],
            "extraData": {
                "code": [
                    "(input,require)=> {",
                    "return new Promise((resolve,reject)=>{setTimeout(()=>resolve(4),input[1])});}"
                ]
            }
        }
    ],
    "flowInput": {
        "range": 300,
        "inputs": 5000
    },
    "experimentName": "main",
    "options": {
        "ttl": 3600,
        "batchTolerance": 80,
        "progressVerbosityLevel": "info"
    },
    "priority": 1
}

second pipeline priority 3
{
    "name": "low-priority",
    "nodes": [
        {
            "nodeName": "eval1",
            "algorithmName": "eval-alg",
            "input": [
<EMAIL_ADDRESS>            ],
            "extraData": {
                "code": [
                    "(input) => {",
                    "const range = Array.from(Array(input[0]).keys());",
                    "return range }"
                ]
            }
        },
        {
            "nodeName": "evalsleep",
            "algorithmName": "eval-alg",
            "input": [
                "#@eval1",
<EMAIL_ADDRESS>            ],
            "extraData": {
                "code": [
                    "(input,require)=> {",
                    "return new Promise((resolve,reject)=>{setTimeout(()=>resolve(4),input[1])});}"
                ]
            }
        }
    ],
    "flowInput": {
        "range": 300,
        "inputs": 5000
    },
    "experimentName": "main",
    "options": {
        "ttl": 3600,
        "batchTolerance": 80,
        "progressVerbosityLevel": "info"
    },
    "priority": 3
}

[ ] execute the priority 3 pipeline
[ ] wait 5 seconds and execute the second pipeline

I just edit the pipelines to make simpler


turrents wont work when connected to ship form open modular turrents

does not shoot any enemies

Looks like the OMT team is already working on this from their end:
https://github.com/OpenModularTurretsTeam/OpenModularTurrets/issues/284

Old issue, closed.


Check items for canonicalization when loading register data

Now checking that items are in canonical form when loading data into the register

I don't think we should have any changes to DataUpload.java or to ObjectReconstructor.java. Creating a new endpoint that loads canonical data is part of another story and it will be loading RSF lines, not JSON lines. This extra endpoint is therefore not necessary and only be deleted later. The new CanonicalJsonValidator can be used by the person writing the RSF load endpoint.

Please can you rebase? This cannot be merged as is.


IT Design/Concept Ideas

First of all, whow! I´ve seen a lot of YT-Clones but yes, you've created really the best one!
I'm not a frontend designer and im pretty sure, u dont need another.
But i'll share some backend-, it-concept & design ideas, that could help considerations, decisions for further coding.
Three main usecases

YT Frontend alternatives
YT Video Collection Manager (local Storage)
YT Download Manager

There are a lot of "Frontend alternatives" and "Download Manager" out there, but only a few 'Video Collection' Manager. But 3in1, i've never seen.
What kind of problems can be 'solved'?`

Where are coming videos and metadata from? Obtained by YT or maybe stored on your local disc? Both?
Do you like an 'alternative frontend' for browsing live data only? Or do you have a local video collection, managed or 'to be' managed?`Both?
Do you have a download manager that should compatible, or do you like to use one?

Unfortunately, most of solutions are isolated by theyre own data model, even though the well known YT API, data structure
Secondly, contributions are difficult to be made, even if you are not familiar with NodeJS, AND VueJS, TypeScript, Python, JSON, Linting, Testing, Staging, Github, Docker, ElasticSearch, Redis, Express, Electron and so on.. By the way, documentation is not everyones friend.
IMHO, the main Challenge or 'Goal': an unified data model and separate code in maintanable microservices, modules.

separate Dataproviders (YT, local storage, User generated, Application related)
Extendable coding structure, support for plugins (i've seen already with VueJS )
app development first

Im writing down my thougts first time, collected after evaluation of nearly 60 repos.  Lets chat if you are interested in further details and of course, Happy New Year / Yeni Yılın Kutlu Olsun
Tschüss

Hello and thanks for your amazing ideas :)
I haven't really thought of this project becoming a YouTube alternative, that's just a fun project I decided to make after seeing the concept designer Avdan's design. I was not planning to work on this project anymore, but I like your ideas and they might actually make this project into something that has a purpose to exist.
I'm not sure how we can handle all those YouTube stuff other than using APIs, which might not be the most efficient approach.
Currently I'm busy with school stuff, but we can think of it some other day. You can add me on discord if you have one: Tarık#0070, or you can suggest some other place, happy new year to you too!

Hello and thanks for your amazing ideas :)
I haven't really thought of this project becoming a YouTube alternative, that's just a fun project I decided to make after seeing the concept designer Avdan's design. I was not planning to work on this project anymore, but I like your ideas and they might actually make this project into something that has a purpose to exist.
I'm not sure how we can handle all those YouTube stuff other than using APIs, which might not be the most efficient approach.
Currently I'm busy with school stuff, but we can think of it some other day. You can add me on discord if you have one: Tarık#0070, or you can suggest some other place, happy new year to you too!


make transactions to wait multiple queries and execute them in a proper order

Im migrating from v3 and v4 and now I have
TransactionError: Can't acquire connection for the request. There is another request in progress.
errors. Is it related to Transaction and PreparedStatement internal queues was removed release change somehow? If yes, then can you explain what it means?

I found this issue is related. What is the problem "to wait" until previous query finishes execution (yeah im talking about a single connection on a single transaction). I think this is how other database drivers (mysql,pg,sqlite,oracle) work as well

I also found this issue in my program when I try to use it in a Promise queue (bluebird, promise.all, when I run my function and then throw this error), it seems like the request.query().then()... method is not a completely Promise.. If someone found out and resolved the question, please tell me about the reason~and I will also find out the resolution.

Has there been any progress on this issue?  I'm encountering this issue as well and I have no idea how to perform a proper transaction in 4.x.  My case also has instances of multiple for loops for many to many relationship inserts.

I am also encountering this issue when trying to use Promise.all with a transaction. I assume creating a function that executes an array of promises sequentially would work. For now I can use bulk for my needs. +1 for getting this working if possible though.

instead of results = await Promise.all(queries) you could do a results = []; for(let query of queries) results.push(await query)
but I can say, it's pretty frustrating to rewrite a mssql@3 to mssql@4 and it totally breaks my code since I have to fix all of them as it executes some code well (writes) and other fails in same process.

Upgrading from v3 to v4 and I'm stuck at this. It is too frustrating. Can someone work on the fix?

I had a similar issue with knex (which uses tediousjs for ms-sql). I had this:
exports.up = function(knex, Promise) {
return Promise.all([
  knex.schema.createTable('users') ...
  knex.schema.createTable('roles') ...
  knex.schema.createTable('userRoles') which references user
]);

Now, I'm using just awaits so everything is executed in order.
// Notice the async keyword
exports.up = async function(knex) {
  await knex.schema.createTable('users') ...
  await knex.schema.createTable('roles') ...
  await knex.schema.createTable('userRoles') which references user
};

Sorry that the upgrade from 3 -> 4 broke expectations but it does seem that it was clearly documented that in v4 the library wouldn't queue queries for you anymore. If you're using Promise.all to execute queries in order, then you need to change your code to either chain your promises using .then or by awaiting the previous queries.

Since this is the top-level google result for TransactionError: Can't acquire connection for the request. There is another request in progress., I thought I'd give my solution to people, given my context:
I have an app which starts a transaction, and a transaction.request(), and passes the transactionRequest around to different functions which all add onto it, via stuff like await transactionRequest.query`INSERT...`
I use the library await-lock to make this easier -- when I first make the transaction, and the transactionRequest that I will later pass on to all the other functions, I add a _lock onto the transactionRequest, transactionRequest._lock = new AwaitLock();, and then every time I want to use the transactionRequest, I'll first do await transactionRequst._lock.acquireAsync() and then make sure I release it later, in a try{}finally{ transactionRequst._lock.release() }
This has worked a treat

@dhensby It's not my understanding that people necessarily want them to run in parallel. They just want to be able to call the method, and have it work as expected, without concerning themselves if a previous promise has been resolved.
This is why my await lock solution works -- it allows me to add new things to the transaction, and it handles waiting for previous promises to resolve itself. I believe this is how it used to work.

@samjross I don't get your position. If you're using a Transaction then the order of execution of queries is not only important, but they can only be done sequentially. If your code is written in a way that means you're running queries in parallel then your code needs re-factoring (as you've admitted to doing by using a library to help you to do). If you're not writing your code in an asynchronous fashion (ie queries are run one after another) then there is no problem at all as that's how they have to be run in a Transaction.