Split backend settings in seperate gitignored file

Managing changes and general VC would be a bit easier if all settings/secrets were split-out into independent files that could be ignored by git. This is already done by the php frontend (ini file), but is not done by the python polling script.

Hi @ryan-jacobs,
Thanks for your issues and your PR.
I refactored some parts of the code with the last commit and I used some parts of your PR to only use  one config file for backend and frontend.
Thanks !


mailgun

#48
TODO
ops

[x] Configure credentials with Mailgun API key
[x] Edit production credentials to add Mailgun API key and domain
[x] setup mailgun with dueltasks DNS

code

[x] Set up Mailgun in the DuelTasks Rails app
[x] Create welcome email template
[x] Add welcome_email method in UserMailer
[x] Test email delivery in development environment
[x] Deploy changes to production

Manual testing

[x] c works 👍
[ ] test in prod

Ref

https://github.com/mailgun/mailgun-ruby
https://guides.rubyonrails.org/action_mailer_basics.html

sick 🔥 it worked (on signup)


Remove gizmos feature in documentation

Gizmos no longer exists in the current version of bevy
Objective

Gizmos feature description in cargo features markdown document no longer exists

Solution

Remove the entry

bevy_gizmos does not exist in 0.10, it was merged afterwards and will be released as 0.11. You might want to look at the docs for latest and not main.


Self referencing loop for JSON

I have error when calling SetAsync API in RedisCache.cs
 Message:
    Newtonsoft.Json.JsonSerializationException : Self referencing loop detected for property 'Client' with type 'IdentityServer4.EntityFramework.Entities.Client'. Path 'ClientSecrets[0]'.
  Stack Trace:
    JsonSerializerInternalWriter.CheckForCircularReference(JsonWriter writer, Object value, JsonProperty property, JsonContract contract, JsonContainerContract containerContract, JsonProperty containerProperty)
    JsonSerializerInternalWriter.CalculatePropertyValues(JsonWriter writer, Object value, JsonContainerContract contract, JsonProperty member, JsonProperty property, JsonContract& memberContract, Object& memberValue)
    JsonSerializerInternalWriter.SerializeObject(JsonWriter writer, Object value, JsonObjectContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty)
    JsonSerializerInternalWriter.SerializeValue(JsonWriter writer, Object value, JsonContract valueContract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerProperty)
    JsonSerializerInternalWriter.SerializeList(JsonWriter writer, IEnumerable values, JsonArrayContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty)
    JsonSerializerInternalWriter.SerializeValue(JsonWriter writer, Object value, JsonContract valueContract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerProperty)
    JsonSerializerInternalWriter.SerializeObject(JsonWriter writer, Object value, JsonObjectContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty)
    JsonSerializerInternalWriter.SerializeValue(JsonWriter writer, Object value, JsonContract valueContract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerProperty)
    JsonSerializerInternalWriter.Serialize(JsonWriter jsonWriter, Object value, Type objectType)
    JsonSerializer.SerializeInternal(JsonWriter jsonWriter, Object value, Type objectType)
    JsonSerializer.Serialize(JsonWriter jsonWriter, Object value, Type objectType)
    JsonConvert.SerializeObjectInternal(Object value, Type type, JsonSerializer jsonSerializer)
    JsonConvert.SerializeObject(Object value, Type type, JsonSerializerSettings settings)
    JsonConvert.SerializeObject(Object value, JsonSerializerSettings settings)
    RedisCache`1.Serialize(T item)
    RedisCache`1.SetAsync(String key, T item, TimeSpan expiration)
    ClientService.CacheClientAsync(Client client) line 239
    ClientService.CreateAsync(Client client) line 49
    ClientServiceTests.CreateAsync_ClientUseClientStoreCache_CreateInDbAndCache() line 80
    --- End of stack trace from previous location where exception was thrown ---

On Stackoverflow https://stackoverflow.com/questions/7397207/json-net-error-self-referencing-loop-detected-for-type, it requires to add
new JsonSerializerSettings
{
        ReferenceLoopHandling = ReferenceLoopHandling.Ignore
})

when using JsonConvert.SerializeObject. Since the JSON convert is wrapped into RedisCache.cs I can not change it. I also tried other ways without changing JsonSerializerSettings, like add
services.AddControllers()
                .AddNewtonsoftJson(options =>
                {
                    // Use the default property (Pascal) casing
                    options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
                    options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
                });

in Start.cs. But it still has the error when running unit test.
Do we need to add ReferenceLoopHandling = ReferenceLoopHandling.Ignore in JsonSerializerSettings to solve this problem?

Hi @Psybax
The library is not built to store the entity framework object, it's designed to store the models available in IdentityServer4.Models namespace.
there are extension method to convert back from the EF entity to the model, you can search for it.

Hi @Psybax
The library is not built to store the entity framework object, it's designed to store the models available in IdentityServer4.Models namespace.
there are extension methods to convert back from the EF entity to the model, you can search for it.

Thanks for the answer. Changed to use model and it works.


Implement custom gutter boundaries

Possible implementation for #3, currently without a proper API

@bunnybones1 could you review this pull request?


container: use lxcSetConfigItem() for lxc.log.file

So far we've been using the go-lxc SetLogFile() function. The problem is that
the go-lxc shared library might have been linked against an older liblxc than
LXD. In that case SetLogFile() will check:
if VersionAtLeast(2, 1, 0) {
err = c.setConfigItem("lxc.log.file", filename)
} else {
err = c.setConfigItem("lxc.logfile", filename)
}
but VersionAtLeast() will not check the runtime but the linked liblxc version
and thus set the wrong config item.
Fix this by using lxcSetConfigItem() which will check against the runtime
liblxc version.
Closes #4713.
Signed-off-by: Christian Brauner<EMAIL_ADDRESS>

I'm tentatively closing #4713 with this.


Question about disabling distribution plugins.

I couldn't seem to be able to find those options stated in the disable_distribution_plugins function in neovim's offical repo. The closest thing I could found are:
vim.g.loaded_gzip = 1
vim.g.loaded_tar = 1
vim.g.loaded_tarPlugin = 1
vim.g.loaded_zip = 1
vim.g.loaded_zipPlugin = 1
vim.g.loaded_vimball = 1
vim.g.loaded_vimballPlugin = 1
vim.g.loaded_matchit = 1
vim.g.loaded_matchparen = 1
vim.g.loaded_2html_plugin = 1
vim.g.loaded_netrw = 1
vim.g.loaded_netrwPlugin = 1
vim.g.loaded_netrwSettings = 1
vim.g.loaded_netrwFileHandlers = 1

Is there a reason using vim.g.did_load_XXX instead of vim.g.loaded_XXX?
Also, I couldn't find any vimscript that's related to following options:
vim.g.did_load_fzf = 1
vim.g.did_load_gtags = 1
vim.g.did_load_getscript = 1
vim.g.did_load_getscriptPlugin = 1
vim.g.did_load_logiPat = 1
vim.g.did_load_rrhelper = 1

Are those options shipped from other vim/neovim forks?
The only thing I could find is this neovim commit, which indicates getscript.vim was omitted from neovim.
Thanks for building such a great config!

It should be loaded and I forgot why I use did_load to avoid loading these plugins.


This query could not be parsed "try"

When opening a gleam file with the latest commit, I get the following error:
This query could not be parsed: QueryError { row: 96, column: 3, offset: 2086, message: "try", kind: NodeType }

The Version 0.32.0 works fine, it has broken after that commit.
Example file: https://github.com/philipgiuliani/glubs/blob/55edb1e95d6b8ec66daa0e8aa2a13a008aeafad2/src/glubs/webvtt.gleam
Editor: helix 23.10 (f6021dd0)

This is intentional: try was removed from Gleam a few minors ago and we fully removed the syntax from the parser in https://github.com/gleam-lang/tree-sitter-gleam/releases/tag/v0.32.0 (https://github.com/gleam-lang/tree-sitter-gleam/commit/23d2b896514087d97f75a62035b325a4704cbae5).
In general you can't change the revision of a tree-sitter grammar repository without also adjusting the highlights for the new changes to the parser. We maintain some example highlights in the repo under queries/highlights.scm that can be used as inspiration/suggestions when updating highlights in Helix (under runtime/queries/gleam/highlights.scm) or nvim


xtensa: set toolchain variant per SoC

The toolchain variant per SoC is not always the soc name, so set this
per SoC and use this in the SDK instead of hardcoding the soc name.

@galak  can you please give this a look?

@tejlmand  ditto

@tejlmand ditto

A little late, but LGTM.


Added Include plugin to readme

This resolves #52

hey @mkbhuiyan96 do you have a LinkedIn and Twitter? Would love to shout you out!

Hi @akbarbmirza I don't have Twitter but here's my LinkedIn. Thanks!


Added Invoke-PasswordFilterImplant powershell module

Added the Invoke-PasswordFilterImplant module. This module drops a custom password filter DLL that allows the capture of a user's credentials. Each password change event on a domain will trigger the registered DLL in order to exfiltrate the username and new password value prior successfully changing it in the Active Directory (AD).
Here is the link to the DLL in the code: https://github.com/GoSecure/DLLPasswordFilterImplant

After a long time of radio silence, I want to give an update on this PR:
We're in the process of finishing up adding asymmetric cryptography (RSA) and x86 support in the implant module. I have my own branch with the changes made by @Le-non but I'd like to know how you guys would like to proceed.
I can either make a separate PR and Empire can close this one, or I can PR to @Le-non and wait for her to update this PR.
Here's a run down of what we added:

No reboot by default (new switch: -RebootNow)
x86 detection and 32 bit DLL drop
Switch to configure the public key to push to the target

The implant repository now also contains a sample DNS server to receive and decrypt collected credentials.
Cheers,
Alex


Header Interaction gif in Configuring Headers doc is inconsistent with example code

In the final gif on this page shows the text below the header change on clicking "Lucy's Info" / "Done" from "Chat with Lucy" to "Contact Info Screen". This isn't explained at all in the Getting Started guide and is quite confusing. What is happening here?

It is explained on that page as far as I can see.

Just like title, the header option can be defined as a function of the navigation prop. Let's render a different button based on the route params, and set up the button to call navigation.setParams when pressed.

Below that, you can see code samples:

I believe the problem is that the gif has Contact Info Screen whereas the code snippet has Lucy's Contact Info.
There are two actions here:

change the example snippet to be Contact Info Screen, like on gif (not recommended, I like the Lucy's Contact Info much better)
re-generate new gifs

Check out the first code snippet on the StackNavigator page. Looks like you can pass props.

I guess my wording was off? Yes, the header changing was explained and made sense. What isn't explained is how the gif changes from Chat with Lucy to Contact Info Screen below the header. Perhaps an image would explain better:
The first screen is fine.

It's what happens after clicking on the Lucy's Info button.

What I got when following the explanations and example code is this (no change below the header):

Is what I'm getting correct? If so, I can go ahead and make a gif.
If instead we are supposed to see Contact info screen below the header, my guess is that onPress should also call a this.props.navigation.navigate to go to some new ContactInfoScreen that we write ourselves? Or maybe there's a conditional in ChatScreen's render?
I only started learning React Native this week. I apologize if I misread something and am simply not making the connection to what I need to do on my own in the code.

Hey @hysan yes, actually you are correct in saying that it's not that clear that you should create a new "dumb component" component that is only a view with a text saying "Contact info screen".
I'll update the doc asap.


Hover states?

Is it possible to highlight the currently hovered star and previous ones?

@voronianski

PR #23

solved in 1.4.0


Feature request: RTD config file in repo

I know this would be a big change; I'm opening an issue to discuss whether it's something RTD should do, and how it might work. :-)
The web interface is a helpful guide when setting up a first project, when you don't know what the options are. But when you're setting up several, mostly using the same settings, it's relatively tedious to click or tab through the options.
Other sites that do things from VCS repos (I'm thinking of CI services like Travis and Appveyor) look for a specially named config file in the repo root to control their options. It would be nice to be able to configure RTD by putting a readthedocs.(toml|yml|ini) file into my repo and then just pressing one button one the website. It also means that other people can suggest changes to the config by making pull requests.
Obviously the web interface shouldn't go away, so there's a question of how the two configs interact. Appveyor also offers both interfaces, and uses the simple rule that if there's an appveyor.yml file in the repo, the settings in the web interface are completely ignored. This seems like a good approach: more advanced users who prefer the config file can ignore the web interface.
CC @Carreau , who suggested this to me.

If there was an API endpoint to enable it would be even more awesome, you could have a readthedoc CLI interface, and "just" do $ readthedoc init in a repo to create the .readthedocs file and enable github web-hook.

Yup, this seems like a good idea to me. After getting used to file based config a for other projects (mostly CI related) I find it a much nicer experience.

These are both things that I have basic working versions of, but need more
testing to roll out. We've been trying to dig ourselves out of a number of
holes in the project before being able to get to bigger stuff like this,
but it's on the short term roadmap.
I will hopefully have something demo-able and tryable in this regard in the
next couple weeks, and would love feedback/testing once I do.
On Thu, Jun 11, 2015 at 12:07 PM, Dougal Matthews<EMAIL_ADDRESS>wrote:

Yup, this seems like a good idea to me. After getting used to file based
config a for other projects (mostly CI related) I find it a much nicer
experience.
—
Reply to this email directly or view it on GitHub
https://github.com/rtfd/readthedocs.org/issues/1336#issuecomment-111243357
.

--
Eric Holscher
Maker of the internet residing in Portland, Oregon
http://ericholscher.com

Awesome, we'll be happy to test when you're ready.

Likewise, happy to test and review etc.

+1

Indeed, this would great. In particular, the configuration steps required to build docs based on the scientific python stack are somewhat non-obvious. Being able to point someone to a config file for the advanced settings rather than talking them through the web interface would be much easier.

@ericholscher is this any closer to being ready for us to test?
I'd also like to see a way to put more flexible installation steps in the config file as an alternative to the specific options for setup.py and requirements.txt. I'm thinking of a list of commands to run before building the docs, similar to the 'install' section in a Travis config file.

If there is any way to enable that as a beta for some repositories that would be great !

This is the same as #752 -- closing as dupe.


CLI improvements for better CI/CD

The CLI needs to be improved to give a nice experience in CI

[x] #709
[ ] #723
[ ] Improve configuration

[ ] #707
[ ] #706

[ ] #708
[ ] #710
[ ] #711

When non-interactive (no terminal on stdin), we expect a RIG_CLIENT_ID and RIG_CLIENT_SECRET to be present, if no config file exists.

When non-interactive (no terminal on stdin), we expect a RIG_CLIENT_ID and RIG_CLIENT_SECRET to be present, if no config file exists.

I would rather say we expect credentials to be configured in the rig config file, but we let flags/env vars be ways of overriding their values.
When loading the config

Load the config file
Override from flags
Override from envvars

Which then makes for the full config.

That's in effect what's happening - but this way we allow running without a config file.


Unit tests fail following change to getTextFromPart

Test expects MessagingException but the recent change returns empty string if the body is null.

PreviewTextExtractor also broken.


Remove 4096 limit for SPI dma transfer size

Why is there a limit on the transfer size for dma?
https://github.com/esp-rs/esp-idf-hal/blob/81675ccbf5d6868fedb3fa19a57d84ee5cfc06b0/src/spi.rs#L103
The esp32-s3 can supposedly go up to 32768 and previous models even higher, as referenced on https://github.com/espressif/esp-idf/issues/7804
Also, the documentation doesn't mention this number, it says, for max_transfer_sz
"Maximum transfer size, in bytes. Defaults to 4092 if 0 when DMA enabled, or to SOC_SPI_MAXIMUM_BUFFER_SIZE if DMA is disabled. "

https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/peripherals/spi_master.html

4092 is the default, and the number is wrong too
The 4096 limit is arbitrary, and should be removed

You are correct that this limit is set arbitrary and may not make much sense. Though your assessments is about the 32768 is also not quite right as one has to think differently between actuall dma_descriptor lengths and what the C driver allows you to put a buffer into it. We had a discussion around it in the matrix channel some time ago. But in short, just removing it doesn't make the overall situation better.
What we would need is:
a) For every esp variant a verified dma transfer with the driver given arbitrary length buffers boxed on the heap for testing, and look what work and what doesn't work.
b) check how the c spi_driver constructs the dma linked list out of the buffer we give him, and verify or deny any possible limit from the input buffer perspective.
c) Find out about possible penalty of non aligned buffers with respect to the dma descriptors itself.
Based on that testing we could make a decision how to move forward correctly. So if you want to tackle the issue this are the first steps to dive into.

Isn't it wiser to just let the underlying esp-idf handle this?
Right now it panics at runtime and it's not that much different than returning an error (what idf does when you remove the limit)
What you are saying is probably better but looks like a lot of work and a lot of maintenance, don't let perfect be the enemy of good


How to reset Async request's state?

I do a request, it gives me a failure, I show to user alert dialog informing about the failure and I wanna reset the state of my request to Uninitialized because if I won't, the alert will be shown every time the state changes. Below is my attempt to solve this problem, however it doesn't set the request correctly. What's the best practice to do that?
    override fun epoxyController() = simpleController(viewModel) { state ->
        when (state.request) {
            is Success -> {}
            is Loading -> loadingRow {
                id("loading")
            }
            is Fail -> {
                val message = state.request.error.prettyMessage()
                alert(message, "Failed") {
                    okButton {
                        state.copy(request = Uninitialized) // Here is the problem. How to reset request?
                    }
                }.show()
            }
            else -> button {
                id("sendButton")
                title("Send Link")
            }
        }
    }

@qbait We recommend using selectSubscribe for showing something only a single time when an event changes.
#94 and #113 for more context.

Thanks @gpeal selectSubscribe works like a charm in onViewCreated, but inside epoxyController it behaves randomly. I solved it by checking my state in 2 places

in onViewCreated for displaying dialogs

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        viewModel.selectSubscribe(ResetState::request) {
            when (it) {
                is Success -> {
                    alert("Check your inbox") {
                        okButton {
                            loginNav.popBackStack()
                        }
                    }.show()
                }
                is Fail -> {
                    alert("Check your internet connection.", "Something went wrong") {
                        okButton {}
                    }.show()
                }
            }
        }
    }

In my EpoxyController for displaying rows

    override fun epoxyController() = simpleController(viewModel) { state ->
        ...
        when (state.request) {
            is Loading -> loadingRow {
                id("loading")
            }
            else -> button {
                id("sendButton")
                title("Send Link")
                onClick { _ -> viewModel.reset() }
                isEnabled(state.resetForm.email.isValid)
            }
        }
    }

Is it currently the best approach or I'm missing something here?

@qbait You'll want the behavior post this PR (https://github.com/airbnb/MvRx/pull/113) with isUnique set to true.

And the subscription should be in onCreate (https://github.com/airbnb/MvRx/issues/118)


Update GitHub Action pylint

GitHub Action pylint fails for files within a subdirectory; see #8 for example failure.
Potential fix: starter-workflows 363/367

Action manually disabled for this repro.

Action manually disabled for this repro.


RAILS 2.3.14 Defaults

I ran into trouble trying to implement jquery and rails.js as defaults in my app (I am upgrading from 2.1 to 2.3.14 and then eventually to 3.1).
At the bottom of the jquery ujs page, it has:
config.action_view.javascript_expansions[:defaults] = %w(jquery rails)

Which after some searching appears to be Rails 3 only. This works for rails 2.3 - put it in config/initializers/js_defaults.rb (or any name you choose):
module ActionView::Helpers::AssetTagHelper
  remove_const :JAVASCRIPT_DEFAULT_SOURCES
  JAVASCRIPT_DEFAULT_SOURCES = %w(jquery.js rails.js)

  reset_javascript_include_default
end

I've never submitted anything to github (issues or otherwise) so hopefully I have done this correctly. I believe the documentation for jquery-ujs should be updated to reflect this; it took me a while to find out how to get it to load these defaults.

Oh, then I am confused in reading the documentation - I assumed that the manual installation had to be done for rails 2.x, since it specifically mentioned it there. Sorry.

@d3vkit Sorry about that, you are right. That was a result of some refactoring of the README a while ago. I updated it with the correct instructions.


Add find all button

Fixed #14836

Hi @yisibl, I'm your friendly neighborhood Microsoft Pull Request Bot (You can call me MSBOT). Thanks for your contribution!

In order for us to evaluate and accept your PR, we ask that you sign a contribution license agreement. It's all electronic and will take just minutes. I promise there's no faxing. https://cla.microsoft.com.

TTYL, MSBOT;

@alexandrudima This can be merge?

I would like to bring in our UX folks on this, rather than just merging it in and get their advice on how we can add functionality to the find widget without overdoing it.
@stevencl @bgashler1 Can I please get your opinion on this proposal?

@alexandrudima Thanks!

I really like the idea. We might consider doing something similar to Visual Studio. Instead of three separate buttons for find next, find previous and find all, VS has a button with a drop down that allows you to select the specific action you want to use. So it would look something like this mockup (showing what the user sees when they click the drop down):

The idea would be that you click on the drop down next to the button to run and then change the command. So if you click Find Previous in the drop down, the button changes to the Find Previous button. If you click Find All, the button changes to the Find All button etc.
@bgashler1 might have some other, better ideas. I haven't spoken with him about this today.

@stevencl
I am more inclined to the 100% width of the search box, and the height is adaptive. Now the search box is too short, and the preparation of the code when you may often need to search for a relatively long code fragment. If it is a 100% width search box, then there is no need to fold the button.
Sublime Text:

Anyway I expect the next version can be added to find all button.
Thanks!

Thanks @yisibl. I understand the points you are making about the current find experience.
As you've pointed out, Sublime has a very different user experience for find and find in files. We use the small box for find and a viewlet for find in files so that we minimise the extent to which we interfere with the code that the user is browsing.
In order to accommodate richer find interactions such as the one you are proposing here we need to ensure that we minimise the amount of code we obscure when we draw the find UI. Hence my suggestion above (and the reason why we align the find UI to the right).
So without any major modifications to the current find UI, I would recommend the drop down button to expose the Find All command. That way we incorporate the new functionality without requiring major changes to the overall find UX.

Update README
https://goo.gl/JBljdR

I'll review this PR in next iteration when I do full width find widget.

@rebornix Where's the plan for "full width find widget"?

@yisibl Merge conflicts.
This looks like ready to merge to me. Why has this been delayed for so long?

@duttaditya18 I'm sorry, I haven't read the vscode code for a long time.

@yisibl Any chances you can follow up?

How about add a item for files (now only for folders, so we can just search in folders)?
So that we can search in a specific file, of course it can  find all.
Find in folder related code as bellow:
MenuRegistry.appendMenuItem(MenuId.ExplorerContext, {
	group: '4_search',
	order: 10,
	command: {
		id: FIND_IN_FOLDER_ID,
		title: nls.localize('findInFolder', "Find in Folder...")
	},
	when: ContextKeyExpr.and(ExplorerFolderContext, ResourceContextKey.Scheme.isEqualTo(Schemas.file)) // todo@remote
});

@alexandrudima cant this be merged now if the conflicts are fixed? Have the UX people looked at this? This is the oldest Pr and the best idea...

I leave it to @rebornix to drive it. Just FYI "find all" exists already, it just doesn't have a button. You can invoke it by pressing alt+enter in the find input box.

@alexandrudima Thank you for saving me countless hours. I use this all the time now

I have re-updated this feature, please review.
@alexandrudima I'm not sure if the click button should call this.closeFindWidget() to close the FindWidget.I tend to close it, otherwise there will be a highlighting prompt to interfere with the user editing the text.

@stevencl use for all (∀) symbol.

Best to design another codicon for it

I have logged a issue for adding a bespoke icon specifically for this pull

It's embarrassing that this is 6 years old!

Find all button in other places is usually for show list of them, not select!
Btw I hope it will add by https://github.com/microsoft/vscode/issues/158598#issuecomment-1229740025

Just an idea:
Change the color of number of founds and make it clickable.
Click on it should go to search panel with seed of current search and just include current file.
(It could have support CTRL+click to find in all files.)
Details can go under hovering.
Also, there is an extension  currently do this but main problem there is no way to back previous state of search panel. (it could solve with using search editor)

I personally think the caption should be "Select All Matches" like the exploration done in #14836.
The icon could just be expand-all or plus which is the best analog in the UI for "multi-target actions"

I personally think the caption should be "Select All Matches" like the exploration done in #14836.
The icon could just be expand-all or plus which is the best analog in the UI for "multi-target actions"

Nvm I will make a PR to your fork branch and see if I can reup this.

@miguelsolorio your thoughts please on the UI/UX recommendation in https://github.com/microsoft/vscode/pull/7559#issuecomment-1402792391.
If core team is happy, reup PR is ready to go.

@daviddossett @joyceerhl @bpasero @lszomoru @miguelsolorio could one of you take PR assignee targeting April iteration? We want to reup this - #14836 (comment)

hi, @rebornix , could you please take a look

Is this still relevant?


Finetuning a model in the streaming mode ?

I want to ask if i can finetune a normal llm in the streaming mode and if this would be benefiical on results.

Hello, StreamingLLM is designed for deploying LLMs with infinite-length inputs without compromising efficiency or performance. It is not intended for training LLMs.


Minor refactoring and adding .gitignore.

Commit messages suffice.

It all looks great besides the second commit. I've commented my concern.


Conversion of RAW file to mzML fails when "Failed to get reaction when parsing precursor"

When converting a Thermo RAW file to indexed mzML with the Docker containers 1.4.0 and 1.4.1 on Ubuntu 18.04, the conversion fails (see output below).
With version 1.3.4, the conversion works.
With 1.4.0 and 1.4.1 I get a valid mzML file that ends with the scan that produced the warning (819 in this case).
It seems like the stream is closed when the warning is reported and then it cannot write to the closed stream which causes the "Stream has been closed" error.
I guess the offending commit was this one: 7b7854d8c8512e5f5385cfa1a240ff7e96a38821
2022-11-15 07:29:35 INFO Started parsing /data/rawfile.raw
2022-11-15 07:29:38 INFO Processing 5936 MS scans
10% 2022-11-15 07:29:40 WARN Failed to get reaction when parsing precursor 819
2022-11-15 07:29:40 ERROR An unexpected error occured while parsing file:/data/rawfile.raw
2022-11-15 07:29:40 ERROR System.ObjectDisposedException: Cannot access a disposed object.
Object name: 'Stream has been closed'.
  at System.IO.FileStream.Write (System.Byte[] array, System.Int32 offset, System.Int32 count) [0x0000d] in <7cd4deb8302a478d9d393f24754841da>:0
  at System.Security.Cryptography.CryptoStream.FlushFinalBlock () [0x00070] in <7cd4deb8302a478d9d393f24754841da>:0
  at System.Security.Cryptography.CryptoStream.Dispose (System.Boolean disposing) [0x0000b] in <7cd4deb8302a478d9d393f24754841da>:0
  at System.IO.Stream.Close () [0x00000] in <7cd4deb8302a478d9d393f24754841da>:0
  at ThermoRawFileParser.Writer.MzMlSpectrumWriter.Write (ThermoFisher.CommonCore.Data.Interfaces.IRawDataPlus rawFile, System.Int32 firstScanNumber, System.Int32 lastScanNumber) [0x00faa] in <7a789c83cb9d4db2bd14ef83a0b964a9>:0
  at ThermoRawFileParser.RawFileParser.ProcessFile (ThermoRawFileParser.ParseInput parseInput) [0x000e9] in <7a789c83cb9d4db2bd14ef83a0b964a9>:0
  at ThermoRawFileParser.RawFileParser.TryProcessFile (ThermoRawFileParser.ParseInput parseInput) [0x00000] in <7a789c83cb9d4db2bd14ef83a0b964a9>:0

Hi @mroemer,
thank you for reporting this error.
The warning itself should not affect the processing, i.e. should not lead to closing the file stream. I suspect that missing precursor might lead to some exception in the downstream processing that is not properly handled.
I do not have any files that generate the same behavior. Will it be possible to share the raw file that produces the error so I can debug it further?

If necessary, I can provide you with the link to a resource allowing sharing large files.

I'm sorry, but I cannot share the raw file that produces the error.

Ok. I will try to debug it as it is.
Meanwhile, I figured out that the Stream has been closed error is due to the index-writing routine, namely, TRFP still wants to write the mzML index even if the processing has been aborted. That, of course, has to be fixed, but it also means that the reported exception "shadows" the real cause of the problem. Could you, please, run the same processing with plain mzML format (-f mzml or -f 1) that might help in figuring out what was the primary cause.

I think I could fix this problem (generated a workaround to be more exact).
I would prefer not to do the release until it is clear that the fix is working, thus, there won't be a docker container. I have generated an updated executable - it is available from https://syddanskuni-my.sharepoint.com/:u:/g/personal/vgor_bmb_sdu_dk/EZXUNMZPFPlIiv1P05yu6acB3wjV0xqYWie9cEDNFG8mww
You can either run it natively (having mono-complete or mono-devel packages should be enough to run it on Ubuntu) or map the contents to the container. I hope that will be sufficient.
It is still not clear why the Failed to get reaction ... is happening. I am afraid that something could have been broken when the support of all MSn levels has been added (version 1.4.0).
The new version generates a warning for every such event that contains some extra debug info. I would appreciate it if you can forward the output here. Thank you.

Thank you.
Yes, the change in the warning is by design - the previous message referenced the parent scan, and the current one - the fragmentation scan (the latter is more useful, IMO).
There indeed seems to be a problem with finding precursors in your file - i.e. it should get reaction 0 instead of 1.
Unfortunately, I cannot reproduce this error on any RAW file at hand. Does this warning (1320) happen to all MS2 scans in your file (the following command can be used to count MS2 scans in the mzML file without any special tools grep -o 'MSn spectrum' file.mzML | wc -l)? Is it the only file that behaves that way? Can you disclose the instrument you used (so I can check some raw files from the same instrument in PRIDE)? Do you use some extra activation, such as in-source fragmentation? Would it be possible for you to send me the dump of scan headers of your file?
You can use this tool - https://bitbucket.org/caetera/scanheadsman/src/master/ All the necessary dependencies should be present in the TRFP docker container, thus you can just copy it somewhere and run as mono ScanHeadsman.exe {path to raw file} It will generate a CSV file (in the same folder as raw file) with all scan headers (only headers, such as scan number, filter string, ms level, and other technical information, but not actual scan data - m/z and intensities).

I have gotten permission to share the file. It's 312M, how can I send it to you?

You can use FileSender link https://filesender.deic.dk/?s=upload&vid=61fe1192-a050-6aac-e76a-9de9432058a0

I have sent the file via the link.

Thank you. Received.
I have checked scan 820 and I think I know what the problem is. This scan reports that its parent is scan 819 which is already an MS2 scan, thus, TRFP expects that 820 is an MS3 scan and tries to parse it accordingly (i.e. looking for the second precursor and so on). I believe, it is because of the decision tree used, but, still, it is strange that the instrument reports 819 as the parent scan.
However, I don't have the final decision on how to deal with such cases, if it is a faulty raw file or instrument, then the way it is done now is, likely good enough, but if all decision tree methods produce these types of scans we need to add proper support for such cases, especially, since we use parent scan information in some other places. I plan to inspect other raw files with decision trees to get deeper into this.

I can confirm, that same pattern (reporting "deciding" scan as a the parent one) is observed on other tribrid systems and, thus, a proper fix has to be implemented.

Hello,
I have similar problem.
2022-12-07 08:17:40 INFO Started parsing /home/martin.pasen/Code/prosit-library-reanalises/data/02101a_GC1-TUM_proteo_TMT_25_01_01-ETD-1h-R2/raw.raw
2022-12-07 08:17:45 INFO Processing 18535 MS scans
2022-12-07 08:17:51 WARN Failed to get reaction when parsing precursor 1412
2022-12-07 08:17:51 ERROR An unexpected error occured (see below)
2022-12-07 08:17:51 ERROR System.NullReferenceException: Object reference not set to an instance of an object
  at ThermoRawFileParser.Writer.SpectrumWriter.CalculateSelectedIonMz (ThermoFisher.CommonCore.Data.Business.IReaction reaction, System.Nullable`1[T] monoisotopicMz, System.Nullable`1[T] isolationWidth) [0x00000] in <d8889af6238044b48ab06f99e7b486ca>:0
  at ThermoRawFileParser.Writer.MzMlSpectrumWriter.ConstructPrecursorList (System.Int32 precursorScanNumber, ThermoFisher.CommonCore.Data.Interfaces.IScanEventBase scanEvent, System.Nullable`1[T] charge, System.Nullable`1[T] monoisotopicMz, System.Nullable`1[T] isolationWidth, System.Collections.Generic.List`1[T] SPSMasses, System.Int32& reactionCount) [0x000d8] in <d8889af6238044b48ab06f99e7b486ca>:0
  at ThermoRawFileParser.Writer.MzMlSpectrumWriter.ConstructMSSpectrum (System.Int32 scanNumber) [0x00456] in <d8889af6238044b48ab06f99e7b486ca>:0
  at ThermoRawFileParser.Writer.MzMlSpectrumWriter.Write (ThermoFisher.CommonCore.Data.Interfaces.IRawDataPlus rawFile, System.Int32 firstScanNumber, System.Int32 lastScanNumber) [0x008f1] in <d8889af6238044b48ab06f99e7b486ca>:0
  at ThermoRawFileParser.RawFileParser.ProcessFile (ThermoRawFileParser.ParseInput parseInput) [0x000e7] in <d8889af6238044b48ab06f99e7b486ca>:0
  at ThermoRawFileParser.RawFileParser.TryProcessFile (ThermoRawFileParser.ParseInput parseInput) [0x00000] in <d8889af6238044b48ab06f99e7b486ca>:0
2022-12-07 08:17:51 INFO Processing completed 1 errors, 1 warnings

The raw file i used can be downloaded from here:
https://www.ebi.ac.uk/pride/archive/projects/PXD010595
the name of the file is 02101a_GC1-TUM_proteo_TMT_25_01_01-ETD-1h-R2.raw
I have version 1.4; running with -f mzML

Hi, thanks for the fix. I tried it for over 230 files. Both the first and the second beta versions worked for me. The second one is a lot more convenient since it does not fill my log file with warnings.
For all the files it worked flawlessly, but i am working only with scan number, injection time, start time of scan and scan intensity, so I can't say for sure that it works correctly for the other parameters as well.
Thanks once again!

Sorry, I won't be able to confirm from our side, as we decided to skip the mzML conversion altogether and therefore won't be pursuing this problem for now.
However, as it works for @martinPasen and you tested it on the rawfile we provided, I assume this should be resolved either way.

@martinPasen, great, yes, the difference between the first and the second beta, is that the first one is just ignoring parent information of the problem scans and shows warning about it, while the second one tries to correct for the mismatch in parent scans and generate complete output. Thus, the second one, if implemented properly should handle all files without warnings. I hope that is the case for you.
@mroemer fine, thank you for your help.

Closed in version 1.4.2


Make import.num_threads be able to config online

What is changed and how it works?

Issue Number: Close #17572

What's Changed:
We add a new thread pool in utils named ResizableRuntime which is able to resize itself without killing the running tasks.
With this new thread pool, import.num_threads is able to change online without restart the tikv server.
Related changes

[ ] PR to update pingcap/docs/pingcap/docs-cn:
[ ] Need to cherry-pick to the release branch

Check List
Tests

[x] Unit test
[ ] Integration test
[x] Manual test (add detailed scripts or steps below)
[ ] No code

[root@tikv]# ps -TC tikv-server -o comm | uniq -c
      #...
      8 import
      #...
[root@tikv]# tikv-ctl --host <IP_ADDRESS>:20160 modify-tikv-config -n import.num_threads -v 4
success
[root@tikv]# ps -TC tikv-server -o comm | uniq -c
      #...
      4 import
      #...

Side effects

[ ] Performance regression: Consumes more CPU
[ ] Performance regression: Consumes more Memory
[ ] Breaking backward compatibility

Release note

Make `import.num_threads` be able to change online without restart the tikv-server.

/test pull-unit-test

@ zhangjinpeng87

@ zhangjinpeng87

/hold

/hold

/hold

/unhold

/ok-to-test

/retest

/test pull-unit-test

/retest

/test pull-unit-test


Why not add the AT24C32 and AT24C64 to the library?

Why not add to the library also the c32 and c64?
I tried with this H file and seems to work good with the example code. Just changed the size of the eeprom and the page size to 32
#ifndef AT24C32_H
#define AT24C32_H

#include "at24cxxx.h"

class AT24C32 : public AT24Cxxx {

  public:
    AT24C32(uint8_t address, TwoWire& i2c = Wire, uint8_t writeDelay = 6) :
      AT24Cxxx(address, i2c, writeDelay, 4096, 32) {}
};

#endif

Can be also updated the keyword file
AT24C32	KEYWORD3
Same thing can be done for the at24C64 but only with 8192 size

I have now merged you pull request with the support for the chips and released as 1.1.0, Thanks a lot for the contribution and sorry I was so slow on merging - I appreciate the help!


custom-button-menu component styling remains consistent

fixes https://bugzilla.redhat.com/show_bug.cgi?id=1552201
Mild continuation of this work, looks like custom-button-menu componet was a lil borked, didn't have the correct classes applied to the ui-bootstrap tool, this fixes both instances of its use, resource/service details pages.
behavior after this pr

behavior before this pr (wait for it, you wont be disappointed)

cc @Yadnyawalkya

Ok we gotta real bz now 😋

Created https://bugzilla.redhat.com/show_bug.cgi?id=1552201 for this issue!
Thanks! @AllenBW

Gaprindashvili backport details:
$ git log -1
commit d511d2ffe1364277b25c03d7d450bcbaf9b048da
Author: Martin Hradil<EMAIL_ADDRESS>Date:   Thu Mar 8 12:59:17 2018 +0000

    Merge pull request #1395 from AllenBW/bug/#1550833-custom-button-menu-classes

    custom-button-menu component styling remains consistent
    (cherry picked from commit e31fbeb5e5d06430f712593a52a2297a67baff2c)

    Fixes https://bugzilla.redhat.com/show_bug.cgi?id=1553483


Pattern Searching::Mismatch Observation - Implement KMP Algorithm

Wikipedia Says,

In computer science, the Knuth–Morris–Pratt string-searching algorithm (or KMP algorithm) searches for occurrences of a "word" W within a main "text string" S by employing the observation that when a mismatch occurs, the word itself embodies sufficient information to determine where the next match could begin, thus bypassing re-examination of previously matched characters.

Read about the algorithm here.
Acceptance Condition

Code is written with proper mentions of edge cases
Well commented code
Well documentation(refer to codebase)

Hey @Abhijit2505
I would like to add KMP pattern search algo in python to the algorithms directory.
Please assign the issue to me

@Audarya07 please get started

Hey @Abhijit2505
I have raised a PR.
Please have a look and let me know if any changes are required from my end


Add support for defining custom input processors

Did you need it just for a custom type to be used? Would a custom type being passed to key be enough?

I don't actually have this problem (which might be enough of a reason not
to merge it) but while building JSON schema I thought it would be nice for
people to be able to override particular types based their requirements.
On Wed, 6 Apr 2016 at 9:16 PM, Piotr Solnica<EMAIL_ADDRESS>wrote:

Did you need it just for a custom type to be used? Would a custom type
being passed to key be enough?
—
You are receiving this because you authored the thread.
Reply to this email directly or view it on GitHub
https://github.com/dry-rb/dry-validation/pull/97#issuecomment-206317393

OK so let's hold off with this but keep it open. We should add features when somebody actually wants to use them and we can agree that it's a good idea.

I really like this idea, there are coercions which are dependent on external parameters (e.g date formats can depend on locale) or come in mangled form like rails' date_(1i), date_(2i) date select helper.
Often you want to write a general schema with basic types such as ints, bools, dates without any input format specific coercions.
An example might be a schema for a person:
PersonSchema = Dry::Validation.Schema do
  key(:name).required(:string?)
  key(:date_of_birth).required(:date?)
end

This is a very generic schema. In my case I have different input sources to fill this schema:

JSON
Form date_select boxes, i.e date_of_birth: { "date(1i)" => "2012", "date(2i)" => "11", "date(3i)" => "28" }
Form text input field, depending on the current user's locale i.e dd.mm.yyyy or mm/dd/yyyy

The first two scenarios can be handled by a stateless InputCompiler, but the last one needs the current user's locale as state variable.
So it would be nice if we could re-configure the schema on-thy-fly by passing the options:
JSON:
PersonSchema.with(input_processor: :json).call(json_params)
Custom stateful input compiler:
input_processor = CustomFormInputCompiler.new(date_format: current_user.date_format)
PersonSchema.with(input_processor: inputProcessor).call(json_params)

Gonna close this one since we decided to remove input processor compilers in 1.0.0 in favor of explicit type specs.

@solnic are you keeping the branch around for any particular reason?

Nope
On 7 July 2016 at 14:49:39, Fran Worley<EMAIL_ADDRESS>wrote:

@solnic https://github.com/solnic are you keeping the branch around for
any particular reason?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/dry-rb/dry-validation/pull/97#issuecomment-231067824,
or mute the thread
https://github.com/notifications/unsubscribe/AAAEKjqs5u2gyIo_6Erkv7eI3Pe6IFXPks5qTPXjgaJpZM4IAuOt
.


Suggestion

i've been a great fan of this emulator but theres one thing that makes me want to kill myself
i can't play pokemon nds games because they're too laggy
can you add bigger file support
the game still works but at like 10 frames
thanks
pokemon is life

i can't play pokemon nds games because they're too laggy

The reason for this will be the cpu power of your device. Lower end devices may not have the capability to run newer emulators in the web browser. I have a friend who plays ds games in the browser and they run at 60fps on his machine so it's not really something that can be fixed

can you add bigger file support

The only size limit for the files are limits not because of anything we can do, but limits of the browser itself, and ds roms are not likely to reach this limit
Also @BinBashBanana I hope you're ok with me trying to help people like this, if not let me know and I'll stop.

@ethanaobrien yeah it's ok
@WhenIsItBig file size is not at all related to emulator speed, however when I finish the GLES 3.0 support on melonDS it should be faster.


Don't expand parent element if it's the root in single folder workspace when editing an element in explorer.

Fixes #72626

This trully fixes that issue.
However I have left some comments in your changes. Can you please address them.
Also why does this fix this issue? How did you find that this is the root cause?

@isidorn Looking at this in more detail I found that the real problem is when disposing the input element because the renderElement method gets called multiple times between this.tree.expand(e.parent!), this.refresh(false, e.parent); and this.tree.reveal(e);,  and the ignoreDisposeAndBlur flag is still turned on because of the 100ms timeout. I'll update my PR with a better fix.

This seems to be working except that it breaks when you are editing an element and click on the Refresh or Collapse All buttons, maybe they should be disabled like the New File and New Folder buttons.
Also I think ignoreDisposeAndBlur flag is no longer needed.

This is good work. Let's merge it in. I will remove the ignoreDisposeAndBlur and check the refresh action. Thanks a lot!

Great! Don't forget about the Collapse All action, it should also be disabled while editing.

Collapse All does not break anything for me. So I left it enabled.

@isidorn I just build and tested it from source code, it breaks.

You are correct. I have tackled that via https://github.com/microsoft/vscode/commit/0991cb526e878ec1ed4b17c4e99a451042092fab
Thanks!


Media > Video | Design QA | Styling

Detailed description

Describe in detail the issue you're having.

Video Storybook
Caption font size is currently 16 but should be 14, per $body-long-01 specs:
body-long-01
Type: IBM Plex Sans
Size: 14px / .875rem
Line-height: 20px / 1.25rem
Weight: 400 / Regular
Letter-spacing: .16px
Carbon Typography Page

Is this a feature request (new component, new icon), a bug, or a general
issue?

Bug.

Is this issue related to a specific component?

Media > Video

What did you expect to happen? What happened instead? What would you like to
see changed?

Caption font size is currently 16 but should be 14, per $body-long-01 specs:

What browser are you working in?

Chrome Version 80.0.3987.149 (Official Build) (64-bit) on Mac.

What version of the IBM.com Library are you using?

1.5.1
Steps to reproduce the issue

Open Video Storybook
Use Inspect to view font-size (see screenshot below)

Additional information

Visual specs for Media > Video

Media component is scheduled for sprint 20-08.  This font size will be corrected when developing the media component.  Closing this issue.


Comments (on pastes)

Is your feature request related to a problem? Please describe.
I'm always frustrated when I paste something and I cannot comment on my paste, or have others comment on it. I think the ability to comment on pastes will be good for soliciting feedback from friends, family, and members of the community.
Describe the solution you'd like
I'd like to see some kind of input at the bottom of each paste that allows registered users (and maybe anonymous users?) to comment on the paste.
Describe alternatives you've considered
I have considered the alternative of using GitHub Gists, since they do allow comments to be added to Gists, but this is not preferable due to the inability to create an anonymous Gist.
Additional context
Here is a screenshot of the GitHub Gist comment box, in relation to files within the Gist:

And here is a mockup of paste.gg with the same functionality:

Comments are a tarpit of features, bugs, and heuristics; they're very easy to add "because you can", but you end up creating a buggy, undocumented, ad-hoc implementation of half of Discourse.
Right now, paste.gg is almost useless for cyberbullies and spammers. The latter still hit it, but that's just because they're automated. They're not getting any SEO advantage by spamming it, because the links are all nofollow, and they're not getting any human viewers because paste.gg has no list of pastes that exist.
Trolls and bullies have the same problem. Right now, if someone makes a paste that you don't like, or merely someone you don't like makes a paste, there's nothing you can do about it.  Naturally, there's stuff you can do about this; try to remove duplicate (and almost-duplicate) comments, add a way to ban users, rate limit users, browser fingerprinting to recognize users who utilize private-browsing-mode and proxies, special treatment for Tor (ideally a form of special treatment that doesn't involve blocking it outright), moderation tools...
Basically, adding comments turns paste.gg from a mere utility like a wall outlet and turns it into a community platform. Unless you really enjoy babysitting, I recommend against adding comments.

Of this I have no doubt. Using a minimal platform for it is an option, as well, but I'd be interested in seeing if that would even be worth it.

... they're not getting any human viewers because paste.gg has no list of pastes that exist.

That's not entirely true. In the future, there will be the ability to search, at least, and most likely list from the web interface. As it stands, you can view all public pastes via the API (GET /api/<version>/pastes). I agree that spammers get very little out of spamming paste instances, though, and we've recently added honeypots which are relatively simple to help fight against the spam in part.

Trolls and bullies have the same problem. Right now, if someone makes a paste that you don't like, or merely someone you don't like makes a paste, there's nothing you can do about it.

I hadn't really though about this, and I'll be bringing it up both on here and in "team meetings" (aka talking on IRC/Discord). I'm curious about @lol768, @kashike, and @AKPWebDesign's takes on this. While I like the idea of paste spurring collaboration, it seems like the wrong place to do it. paste is for sharing snippets of text, and you need a medium to share a link to a paste, which, presumably, can also be used for discussion.
Taking on comments might be a larger hassle than we really need for no perceivable benefit. To quote @notriddle:

Basically, adding comments turns paste.gg from a mere utility like a wall outlet and turns it into a community platform.

And I don't think that's within paste's scope.

Comments can be very useful on pastes - on GitHub Gist, gists quite often have comments asking for help or giving suggestions to improve, and this is far better than a PM system or emailing.
Allowing paste authors to disable and delete comments would be good to have.

Comments can be very useful on pastes - on GitHub Gist, gists quite often have comments asking for help or giving suggestions to improve, and this is far better than a PM system or emailing.

Paste.gg probably shouldn't add a PM system, either, for the same reason. It turns paste.gg from a passive document retrieval system into a system that actively pushes content to you. GitHub requires an ever-growing system of shadowbanning, rate limiting, Bayesian filtering, a staff of moderators, and a variety of tools for repository owners, and they are still under fire for not doing enough.

Allowing paste authors to disable and delete comments would be good to have.

That requires you to predict whether a paste is likely to be flooded. It becomes victim blaming when you guess wrong.
Which isn't to say that community platforms shouldn't offer such a feature; they totally should. But offering someone the ability to turn off comments and delete comments after they have already been abused is not an okay answer.


Fix the bug in broker logging for execution statistics

PR #3525 introduced the bug on broker log for execution statistics.
This pr resolves the issue.

Before fix
RequestId:10, table:, timeMs:10, docs:20/15593300, entries:0/2, segments(queried/processed/matched):2/2/80 servers:1/1, groupLimitReached:false, exceptions:0, serverStats:<IP_ADDRESS>_O=1,1,2,7, query:

After fix
RequestId:5, table:, timeMs:14, docs:20/15593300, entries:0/80, segments(queried/processed/matched):2/2/2 servers:1/1, groupLimitReached:false, exceptions:0, serverStats:snlee-mn1_O=0,0,0,11, query:

Codecov Report

Merging #3587 into master will increase coverage by 0.19%.
The diff coverage is 100%.

@@             Coverage Diff              @@
##             master    #3587      +/-   ##
============================================
+ Coverage     70.63%   70.82%   +0.19%
  Complexity        4        4
============================================
  Files          1009     1009
  Lines         46227    46228       +1
  Branches       6204     6204
============================================
+ Hits          32652    32742      +90
+ Misses        11421    11332      -89
  Partials       2154     2154

Impacted Files
Coverage Δ
Complexity Δ

...roker/requesthandler/BaseBrokerRequestHandler.java
79.7% <100%> (+0.1%)
0 <0> (ø)
:arrow_down:

...in/pinot/core/query/pruner/ValidSegmentPruner.java
57.14% <0%> (-28.58%)
0% <0%> (ø)

...lix/EmptyBrokerOnlineOfflineStateModelFactory.java
86.66% <0%> (-13.34%)
0% <0%> (ø)

...inkedin/pinot/common/config/RealtimeTagConfig.java
93.33% <0%> (-6.67%)
0% <0%> (ø)

...impl/dictionary/DoubleOnHeapMutableDictionary.java
75.55% <0%> (-6.67%)
0% <0%> (ø)

...elix/core/relocation/RealtimeSegmentRelocator.java
73.95% <0%> (-6.25%)
0% <0%> (ø)

...impl/dictionary/FloatOffHeapMutableDictionary.java
87.27% <0%> (-5.46%)
0% <0%> (ø)

...e/operator/dociditerators/SortedDocIdIterator.java
59.45% <0%> (-5.41%)
0% <0%> (ø)

...der/HighLevelConsumerBasedRoutingTableBuilder.java
90.9% <0%> (-3.04%)
0% <0%> (ø)

...regation/function/customobject/QuantileDigest.java
55.65% <0%> (-2.22%)
0% <0%> (ø)

... and 21 more

Continue to review full report at Codecov.

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


Best way to check whether an image is corrupted?

I would like users of the image_processing gem to be able to validate whether the user-uploaded images are not corrupted, before accepting them an processing them. So I'm searching for the best way to validate the images. This is what I currently have:
def valid_image?(file)
  image = ::Vips::Image.new_from_file(file.path, fail: true)
  format = File.extname(file.path)[1..-1] || "jpg"
  image.write_to_buffer(".#{format}").clear
  true
rescue Vips::Error
  false
end

I like this solution, but the only downside is that I'm loading the whole image into memory (though it's immediately deallocated with String#clear). The alternative is writing to a temporary file, which makes the code a bit more complex because I have to erase the file afterwards.
def valid_image?(file)
  image = ::Vips::Image.new_from_file(file.path, fail: true)
  format = File.extname(file.path)[1..-1] || "jpg"
  output = Tempfile.new(["null", ".#{format}"])
  image.write_to_file(output.path)
  true
rescue Vips::Error
  false
ensure
  output.close! if output
end

ImageMagick has a "null" output format, which just thows away the image results.
$ convert -regard-warnings input.jpg null:

I thought about just writing to /dev/null, but ruby-vips needs the output format to have an extension.
image.write_to_file(File::NULL)
# Vips::Error: No known saver for '/dev/null'

I just wanted to check if there was perhaps another way. But if not, feel free to close this, I'm ok implementing the temporary output file solution.

Nevermind, I'm totally fine with a temporary file, I just remembered that there is a Tempfile.create which accepts a block and automatically deletes the file at the end of the block, so I can do:
def valid_image?(file)
  image = ::Vips::Image.new_from_file(file.path, fail: true)
  format = File.extname(file.path)[1..-1] || "jpg"
  Tempfile.create(["null", ".#{format}"]) { |tempfile| image.write_to_file(tempfile.path) }
  true
rescue Vips::Error
  false
end

You could calculate some stats, such as image average.
image = Vips::Image.new_from_file filename, access: :sequential
average = image.avg

That will scan the whole file and throw an exception if there's a problem.
It will be horribly slow though. My preference would be to have this as an optional validate method, and by default just let processing fail later.
Did you see the "Opening files" chapter in the docs?
http://jcupitt.github.io/libvips/API/current/How-it-opens-files.md.html
It tries to run through how image files are opened and when memory is allocated and freed.

@jcupitt Thanks a bunch, I tried this now and it's twice as fast as the previous solution! I just had to add fail: true to make it actually raise an exception. The chapter you linked is also very useful.

It will be horribly slow though. My preference would be to have this as an optional validate method, and by default just let processing fail later.

I agree it shouldn't be automatic, my #valid_image? method is something that users will have to explicitly call in their validation if they want to validate the image.

I used ImageMagick to check for corruption:
system("identify", "-verbose", image_filename, out: IO::NULL, err: IO::NULL)

as was proposed here https://stackoverflow.com/a/39304913/322020

@Nakilon Note that you also have to add -regard-warnings if you want the shell command to return a nonzero exit status. So it would be:
system("identify", "-regard-warnings", "-verbose", image_filename, out: IO::NULL, err: IO::NULL)

If you use MiniMagick, it will automatically raise a MiniMagick::Error with stderr in the message:
MiniMagick::Tool::Identify.new do |cmd|
  cmd.regard_warnings
  cmd.verbose
  cmd << image_filename
end # raises MiniMagick::Error in case of corrupt images

However, identify -verbose is terribly slow, it takes 2.6s for me on a 2.8MB image. But I recently discovered a faster way on the ImageMagick forums, which is to convert image and dump it to "null device".
MiniMagick::Tool::Convert do |cmd|
  cmd.regard_warnings
  cmd << image_filename
  cmd << "null:"
end

For a 2.8MB image this now takes only 0.26s, which is 10x faster than the identify -verbose version.
Anyway, that's not related to ruby-vips, I just wanted to mention it here.


Additional ports for Rancher webhook and imported clusters.

What kind of request is this (question/bug/enhancement/feature request):
bug
Steps to reproduce (least amount of steps as possible):

Update port requirement to include the new webhook port 8443 & 9443
Doc

Result:
From: Rancher Node
To: Hosted / Imported Cluster
Port:
8443 TCP
9443 TCP
Other details that may be helpful:
Environment information

Rancher version (rancher/rancher/rancher/server image tag or shown bottom left in the UI): v2.5.1
Installation option (single install/HA): HA

I already had a PR open to clean up the required ports in our docs: https://github.com/rancher/docs/pull/2637.
I added these two to the matrix with https://github.com/bashofmann/docs/commit/e842604f7cd471bedf23eb660ca3d94db36dc67a for hosted and imported clusters.

It looks like the documentation page has been updated.
https://rancher.com/docs/rancher/v2.x/en/installation/requirements/ports/#ports-for-hosted-kubernetes-clusters


@matterlabs/hardhat-zksync-verify Version 1.7.0: Fail - Unable to verify

Summary
I upgraded the dependency @matterlabs/hardhat-zksync-verify to the latest version 1.7.0 in my template repository: https://github.com/pcaversaccio/hardhat-project-template-ts/commit/d3a86672c94f895e071879d762d32c10f808442d.
I wanted to test the verification, but it consistently fails. The full log:
~$ pnpm compile

><EMAIL_ADDRESS>compile /mnt/c/Dev/Blockchain/hardhat-project-template-ts
> npx hardhat compile && forge build --root . -C contracts/src --optimize --out forge-artifacts

Solidity 0.8.28 is not fully supported yet. You can still use Hardhat, but some features, like stack traces, might not work correctly.

Learn more at https://hardhat.org/hardhat-runner/docs/reference/solidity-support

Compiling contracts for ZKsync Era with zksolc v1.5.7 and zkvm-solc v0.8.28-1.0.1
Compiling 3 Solidity files
Generating typings for: 3 artifacts in dir: typechain-types for target: ethers-v6
Successfully generated 20 typings!
Successfully compiled 3 Solidity files
 ·------------------------|--------------------------------|--------------------------------·
 |  Solc version: 0.8.28  ·  Optimizer enabled: true       ·  Runs: undefined               │
 ·························|································|·································
 |  Contract Name         ·  Deployed size (KiB) (change)  ·  Initcode size (KiB) (change)  │
 ·························|································|·································
 |  Greeter               ·                      3.906 ()  ·                      3.906 ()  │
 ·------------------------|--------------------------------|--------------------------------·
[⠃] Compiling...
[⠃] Compiling 27 files with Solc 0.8.28
[⠢] Solc 0.8.28 finished in 3.93s
Compiler run successful!
~$ pnpm deploy:zksynctestnet

><EMAIL_ADDRESS>deploy:zksynctestnet /mnt/c/Dev/Blockchain/hardhat-project-template-ts
> npx hardhat deploy-zksync --network zkSyncTestnet --script deploy-zksync.ts

Greeter deployed to: 0x1424e5D9f188DE76b17763e762AAf500a9F940D3

Waiting 30 seconds before beginning the contract verification to allow the block explorer to index the contract...

 ·------------------------|--------------------------------|--------------------------------·
 |  Solc version: 0.8.28  ·  Optimizer enabled: true       ·  Runs: undefined               │
 ·························|································|·································
 |  Contract Name         ·  Deployed size (KiB) (change)  ·  Initcode size (KiB) (change)  │
 ·························|································|·································
 |  Greeter               ·                 3.906 (0.000)  ·                 3.906 (0.000)  │
 ·------------------------|--------------------------------|--------------------------------·
Your verification ID is: rhmgl6vee6fcjpzwuuevnq4xkpsum3dmhvjavnv1fxhp9w9nkh
We tried verifying your contract contracts/src/Greeter.sol:Greeter without including any unrelated one, but it failed.
Trying again with the full solc input used to compile and deploy it.
This means that unrelated contracts may be displayed on the explorer.
 ·------------------------|--------------------------------|--------------------------------·
 |  Solc version: 0.8.28  ·  Optimizer enabled: true       ·  Runs: undefined               │
 ·························|································|·································
 |  Contract Name         ·  Deployed size (KiB) (change)  ·  Initcode size (KiB) (change)  │
 ·························|································|·································
 |  Greeter               ·                 3.906 (0.000)  ·                 3.906 (0.000)  │
 ·------------------------|--------------------------------|--------------------------------·
Your verification ID is: vyypb2dfwnd3icttjp5zagydfgieppfw8fxfftjiwfrymde5ng
Error in plugin @matterlabs/hardhat-zksync-verify: Fail - Unable to verify. Solidity Compilation Error: Standard JSON parsing: missing field `` at line 26 column 7

For more info run Hardhat with --show-stack-traces
 ELIFECYCLE  Command failed with exit code 1.
~$ npx hardhat verify --network zkSyncTestnet --constructor-args arguments.js 0x1424e5D9f188DE76b17763e762AAf500a9F940D3
 ·------------------------|--------------------------------|--------------------------------·
 |  Solc version: 0.8.28  ·  Optimizer enabled: true       ·  Runs: undefined               │
 ·························|································|·································
 |  Contract Name         ·  Deployed size (KiB) (change)  ·  Initcode size (KiB) (change)  │
 ·························|································|·································
 |  Greeter               ·                 3.906 (0.000)  ·                 3.906 (0.000)  │
 ·------------------------|--------------------------------|--------------------------------·
Your verification ID is: cjim8qzjzuiqsy8ive6ndrvn4upss33dshlvcmxgfvuqqxnjr4
We tried verifying your contract contracts/src/Greeter.sol:Greeter without including any unrelated one, but it failed.
Trying again with the full solc input used to compile and deploy it.
This means that unrelated contracts may be displayed on the explorer.
 ·------------------------|--------------------------------|--------------------------------·
 |  Solc version: 0.8.28  ·  Optimizer enabled: true       ·  Runs: undefined               │
 ·························|································|·································
 |  Contract Name         ·  Deployed size (KiB) (change)  ·  Initcode size (KiB) (change)  │
 ·························|································|·································
 |  Greeter               ·                 3.906 (0.000)  ·                 3.906 (0.000)  │
 ·------------------------|--------------------------------|--------------------------------·
Your verification ID is: hazaulpwhd2ztvsfyalcx97q8ix6xx7v1nluehe16gwjf62pyj
 ·------------------------|--------------------------------|--------------------------------·
 |  Solc version: 0.8.28  ·  Optimizer enabled: true       ·  Runs: undefined               │
 ·························|································|·································
 |  Contract Name         ·  Deployed size (KiB) (change)  ·  Initcode size (KiB) (change)  │
 ·························|································|·································
 |  Greeter               ·                 3.906 (0.000)  ·                 3.906 (0.000)  │
 ·------------------------|--------------------------------|--------------------------------·
Your verification ID is: 31114
hardhat-zksync-verify found one or more errors during the verification process:

ZkSyncEtherscan:
Fail - Unable to verify. Solidity Compilation Error: Standard JSON parsing: missing field `` at line 26 column 7

ZkSyncBlockExplorer:
Failed to send contract verification request
 Reason: ZkSyncVerifyPluginError: Deployed bytecode is not equal to generated one from given source

Hello @pcaversaccio ,
It appears that Etherscan currently does not support zksolc version 1.5.7, which causes a backend error. We cloned your repository and tested it with version 1.5.6, and everything worked successfully. You can see the verification here: https://sepolia-era.zksync.network/address/0x6b17994de1a3447C95d03af991C67E218ac9B77a#code.

Ah one question: As you can see, there was also the error:
ZkSyncBlockExplorer:
Failed to send contract verification request
 Reason: ZkSyncVerifyPluginError: Deployed bytecode is not equal to generated one from given source

Have you also tested it on the ZKsync explorer? I guess it's also a version issue?

Yeah, it seems that the issue was related to the compiler version. It’s working now, and we successfully verified the contract with the new version. https://sepolia.explorer.zksync.io/address/0xaf941b089B396E64cE506B7200328102FC08a85D#contract


Move the logs management from the carbon kernel

Is your feature request related to a problem? Please describe.
Currently, any changes to our logs require a kernel release, which is not practical. By moving these logs to a dedicated repository, we can manage them more efficiently and make improvements more easily.
This new repository will serve as a centralized location for managing and enhancing our logs across the identity server.

This issue is being closed due to extended inactivity. Please feel free to reopen it if further attention is needed. Thank you for helping us keep the issue list relevant and focused!


Introduce Zuul Project template

Project template allows us to define common jobs
at one place and calls them in another projects via template name.
It will help to update the job definition at one place and avoid sending multiple prs to update the same job.
Note: This patch also adds content provider job to ci-framework allowing developers to test dependent patches at any place.
As a pull request owner and reviewers, I checked that:

[x] Appropriate testing is done and actually running

/approve
/lgtm


Re-deploying flows when the MQTT node is waiting to reconnect leaves phantom mqtt client running in the background

To reproduce:

Connect to a MQTT client using the MQTT node
Connect to the same client id using some external application (MQTT.fx) or another NR instance
When your MQTT node in NR get disconnected, immediately (under the 5s reconnect period) make a change and deploy the flow again in NR.

This leaves an MQTT client that is not cleaned up when Node-RED restarts its the flows on re-deploy. When the new client is created, the reconnect event from the previous client will trigger and compete for the connection from the new one and the old client won't be cleaned up until your restart NR.
The bug is due to "end()" only being called on the mqtt client inside the broker node when:

client is connected
client is connecting
and not when the client is waiting to make an automatic reconnect attempt after a close event

Fix is to also check for the boolean "node.client.reconnecting" as a case for calling node.client.end();

/nodes/core/io/10-mqtt.js - line 301 (#0.16.2)

change:
} else if (this.connecting) {
to:
} else if (this.connecting || node.client.reconnecting) {

Hi,
would you like to raise a PR for this ? Or as it's only a single line patch I'm happy to apply by hand here if you like. Up to you ?

Sure, it would be great if you could help. Thanks!


Added definition file for PC Engine tiles and sprites.

Well, I was originally splitting the defs up so a format only appeared once. For example, we technically already have PC Engine tile format inside the Super Famicom def. However... I've been thinking about it, and my original method isn't a great solution. It's messy and not user friendly and there are already probably some duplicated color formats I missed. I like the idea more of just having a single gfxdef for a system, even if some parts are duplicated.
I'm going to merge this in, and I appreciate the contribution!


Change NoBidsReceived error

Background
This is very jarring and does not give the user any more information.
Linked Issues & Documentation

List of linked issues, external links, etc

Definition Of Done
Change the error to an "Info" type alert. It should say "Boost liquidity not available". Hovering over the tooltip should say "The transaction will complete within 120 minutes".
Tasks

@rhlsthrm Can you QA?

@pjenviri can we also make it so this tooltip shows up after 5 minutes of inactivity if there is no other error? When you view a transfer page it can check if time_now > xcall_timestamp + 5 minutes and if so and no other errors, it can show the same info tooltip.

@rhlsthrm  In the current UI, the status and tooltip are immediately shown whenever there is an error status.
To clarify, do you want the UI to show the NoBidsReceived status for any inactive transactions for more than 5 mins (even if they do not have an error status)?

Okay, updated to prod.


Support MLton-style aggressive type inference

Problem
Millet reports a 5023 error for the definition of f here:
type foo = {x: int, y: string}

fun f foo = #x foo

fun g (foo: foo) = f foo

However, this code is accepted by MLton. The reason MLton accepts it is because the type of f can be fully inferred within the definition of g. (You can confirm this deleting the definition of g; MLton will then reject it.)
Solution
It would be nice for Millet to optionally support more aggressive type inference, to mimic MLton.
Perhaps this could even be enabled by default when workspace.root is a .mlb.

Put this test in as a failing test in 8973f8027d5f482811e9bf2b12d20a3c89de5eb8.
Supporting this would be somewhat non trivial. I'd have to think about what sort of invariants we currently rely on by generalizing per declaration, that would be broken if we started doing it across declarations.
Here's where we do generalization for val decs; this is also thus currently the only place we emit the unresolved record ty error.


Upgrade Maven to 3.5.2

Upgrade versions in all the images to latest version: 3.5.2

There's no way to install maven 3.5.x from packages on older versions (14.04 and 16.04), and Cloudstack depends on maven to be installed as package and not zip file.


APEXMALHAR-2034 Adding new Avro Module to encapsulate Container File to Avro GenericRecord to POJO transformations

Link to previously closed PR: https://github.com/apache/apex-malhar/pull/666
(Avro files were moved from contrib to new maven module in old PR. Since history of files were moved too, creating this new PR to just pick the code changes)
Updated the JIRA to refer to only code changes. Removing the scope of moving Avro files to new maven module

@tweise please could you review and let me know if the changes look good?

@SaumyaMohan, @sandeshh, @tweise I am joining late to this discussion but it seems the PR originally created a new module but there was an objection that it was not discussed. Why don't you start a discussion on dev about creating a new module. Recent trend has been to put operators in their own modules, see kudu PR for example, which helps users because they can include exactly the operators they want and don't have to keep track of transitive dependencies.

@PramodSSImmaneni there already has been related discussion on previous PRs and mailing list. In this case, we have seen that the majority of the work of creating a new Maven module is unrelated to the objective of adding the composite operator and the contributor is not ready to take up that work. Therefore I would rather see this PR completed and then, if contributor or anyone else is interested, take up new module separately, which would start on the mailing list.

@tweise yes that should be fine

Merging and marking JIRA incomplete.


CI/CD engagements auto-deletion

In today's world, people (like me) have DefectDojo ingest a ton of reports through CI pipelines and do not use the re-import feature in order to keep track overtime of findings as they relate to various docker images tags for example, ending up with some 1 million findings in the database, where most of them are plain duplicates with no added value. This has adverse effects on performance, but also usability.
Say your pipeline runs some Anchore scans multiple times a day.  Chances are that most if not all scans bear no difference with a scan that got imported the previous day. 100% duplicate. You do not want to have your engineering teams do custom things in the pipelines too, as it add increased maintenance burden overtime. So you swallow them all.
This PR is about keeping this in check.
It introduces system settings such as and to delete "useless" engagements. It is disabled by default.

The conditions (to be documented) are hard-coded for some part in the utils.py file. Only to be considered for auto-deletion, engagements that:

Have been created before today - x days (field to be renamed to make more sense in screenshot above)
Are CI/CD engagements
Must only contain duplicate findings
Must not contain any notes (such as a human could have put a note there)
Does not match the "lock tag" in system settings

It's got its own notification type, such as

and at product level

Great idea, I have the same problem. But I am using the delete duplicate function, so I have a lot of engagements with zero findings.
I would prefer a solution that is similar to duplicated findings: Find "duplicated engagements" - for example only the date differs - and that an option to delete some of them.

The existing cleanup job could be extended with some system settings options:

only delete duplicates (existing option)
only delete aside xxx  duplicates (existing option)
only delete findings untouched for XXX days
only delete findings without notes
also delete empty tests
also delete empty engagements
only delete inactive mitigated findings (so not only focus on duplicates)

Maybe add a 'protected' flag to engagements (or all defect dojo models) that prevents automatic (or accidental) deletion.

Maybe change "Engagement Auto-Deletion Days" to "Engagement Auto-Deletion TTL" aka Time To Live.
Also, the PR says "CI/CD engagements auto-deletion" but if I were to see the included settings UI, how would I know that these only apply to CI/CD engagements vs engagements in general?

Maybe change "Engagement Auto-Deletion Days" to "Engagement Auto-Deletion TTL" aka Time To Live.

Why not. Just wanted to align on the auto-close engagements verbiage.

Also, the PR says "CI/CD engagements auto-deletion" but if I were to see the included settings UI, how would I know that these only apply to CI/CD engagements vs engagements in general?

Currently, this is indicated in the ? hover.

I am going to close this, and let's then think on a better way then.


Option to don't pass the queryKey as an argument to queryFn

Hi there. Thanks for this amazing library. Really easy to use. I'm currently in my way to implement this in a large code base, and I don't want to refactor all our services functions. Is there an option to don't pass the ID part of the queryKey to the function?
const { data = [], refetch, status } = useQuery({
    queryKey: ["IDon'tWantThis", ...ActualParamsInTheServiceFn],
    queryFn: service.getAll
  });

Do you this this is possible?

Yes!
https://github.com/tannerlinsley/react-query/issues/145#issuecomment-590377800

Can this be configured globally?

Yes, see https://github.com/tannerlinsley/react-query#reactqueryconfigprovider

Thanks! :)

I'm sorry to bother you, I know maybe this doesn't belong here, but I'm using Typescript, and I can't find a type safe way for this. Do you have any experience or suggestions?

I don't use Typescript, but maybe you'll find this discussion useful - https://github.com/tannerlinsley/react-query/discussions/242


[Dialog] merge title style when title it a node

fixes #3373.

[ ] PR has tests / docs demo, and is linted.
[x] Commit and PR titles begin with [ComponentName], and are in imperative form: "[Component] Fix leaky abstraction".
[x] Description explains the issue / use-case resolved, and auto-closes the related issue(s) (http://tr.im/vFqem).

I came up with this, but what about just ignoring the type of title and always insert it as children?
Like this:
const titleElement = (
  <h3 className={titleClassName} style={prepareStyles(styles.title)}>
    {title}
  </h3>
);

@antoinerousseau What if the user doesn't want a h3 for structural reasons or has their own typography components that insert the html tags (h1-6, p, etc)?

sure

@antoinerousseau travis is crying, help him

hmmm that's weird, I don't have these issues locally...

well I've rebased the PR and now it's passing...

Sorry the tests stopped at the unit tests, had to launch karma tests too.
Should be better now.

Could you adjust the commit msg so it starts with [Dialog]? Can just stick the fixes on the end

done :)

@antoinerousseau Death to ugly, unreadable multiline ternaries!

@antoinerousseau Thanks.


License?

The LICENSE file says BSD-3-Clause:
https://github.com/elm-land/elm-land/blob/1a62ab6abcd246e5881a9fcbbfbb2cb9ca5ff4d0/LICENSE
But all package.json say ISC:
https://github.com/elm-land/elm-land/blob/1a62ab6abcd246e5881a9fcbbfbb2cb9ca5ff4d0/projects/cli/package.json#L30
https://github.com/elm-land/elm-land/blob/1a62ab6abcd246e5881a9fcbbfbb2cb9ca5ff4d0/projects/graphql/package.json#L19
https://github.com/elm-land/elm-land/blob/1a62ab6abcd246e5881a9fcbbfbb2cb9ca5ff4d0/projects/tooling/codegen/package.json#L21

The project is BSD-3-Clause, but the code is ISC.

Ok! That sounds confusing to me, but it’s your choice of course! Thanks for the reply.


🧑💻 : ADD term of uses page

:red_circle: missing term of us page :
:red_circle: adding tem of use page :
Objective
Create a "Terms of Use" page for the website. The page should outline the terms and conditions for using the website. It must be accessible from the footer and follow the website's design and layout guidelines.
Screenshots 📷

✅ Details to Include When Taking the Issue:
Name :Subham sahu
Participant Role ( GSSOC, Hacktoberfest,):

Sorry, someone is already working on this. Do not be demotivated and raise a new issue.