Links inside iframe don't open a new window

I want to test the following scenario:
When I go to a page with an iframe from an external source
And click a link, in the iframe, that has target="_blank" set
I see a new tab open
To test this, I'm doing the following:
        it 'correctly opens links in a new tab' do
          expect do
            within_frame find('.some-iframe-css') do
              click_link('Link that opens a new tab')
            end
          end.to change { windows.length }.by(1)
        end

This does not work, however, as windows does not change:
pry> windows
=> [#<Window @handle="0">]
pry> within_frame find('.some-iframe-css') do
pry)*   click_link('Link that opens a new tab')
pry)*   windows
pry)* end
=> [#<Window @handle="0">]

I found that the test works if I click on some other link that is not inside an iframe, which leads me to believe that this is an issue with links in iframes.
Following is the relevant debug output:
{"id":"259622ce-9702-4250-b432-3e69e28b6c57","name":"find","args":["css",".some-iframe-css"]}
{"command_id":"259622ce-9702-4250-b432-3e69e28b6c57","response":{"page_id":5,"ids":[1]}}
{"id":"a7d56279-f4b6-4b26-b1e0-3858cf282a0f","name":"visible","args":[5,1]}
{"command_id":"a7d56279-f4b6-4b26-b1e0-3858cf282a0f","response":true}
{"id":"17a3a9dc-6eca-450d-a36a-8e9f5cc0734a","name":"push_frame","args":[[5,1]]}
{"command_id":"17a3a9dc-6eca-450d-a36a-8e9f5cc0734a","response":true}
{"id":"fa5dcbfb-f405-481b-8340-b7779c234c00","name":"find","args":["xpath",".//a[./@href][(((./@id = 'Link that opens a new tab' or normalize-space(string(.)) = 'Link that opens a new tab') or ./@title = 'Link that opens a new tab') or .//img[./@alt = 'Link that opens a new tab'])]"]}
{"command_id":"fa5dcbfb-f405-481b-8340-b7779c234c00","response":{"page_id":5,"ids":[0]}}
{"id":"1411bc5b-72ec-4162-ad3b-d350ad07c5cb","name":"visible","args":[5,0]}
{"command_id":"1411bc5b-72ec-4162-ad3b-d350ad07c5cb","response":true}
{"id":"feac5a80-a679-4c3d-af0e-303fd71d4b11","name":"click","args":[5,0]}
{"command_id":"feac5a80-a679-4c3d-af0e-303fd71d4b11","response":{"position":{"x":103.5,"y":81.5}}}
{"id":"bfc50935-66a1-4c80-bd73-12da2d3ad135","name":"pop_frame","args":[]}
{"command_id":"bfc50935-66a1-4c80-bd73-12da2d3ad135","response":true}
{"id":"750f41b9-ca8e-4044-a9d3-93094bfb0035","name":"window_handles","args":[]}
{"command_id":"750f41b9-ca8e-4044-a9d3-93094bfb0035","response":["0"]}
{"id":"413f8d3b-883d-46cd-8234-4800d3dcb5f7","name":"render","args":["/some/path/screenshot.png",{"full":false}]}
{"command_id":"413f8d3b-883d-46cd-8234-4800d3dcb5f7","response":true}
test correctly opens links in a new tab
  Screenshot: /some/path/screenshot.png
{"id":"7d8e4fbd-96fd-4c0b-ab65-c0b06953887e","name":"reset","args":[]}
{"command_id":"7d8e4fbd-96fd-4c0b-ab65-c0b06953887e","response":true}
{"id":"e4451fe2-b3bb-4cfd-86a8-e0a5ae651671","name":"find","args":["xpath","/html/body/*"]}
{"command_id":"e4451fe2-b3bb-4cfd-86a8-e0a5ae651671","response":{"page_id":0,"ids":[]}}

  2) test correctly opens links in a new tab
     Failure/Error:
       expect do
         within_frame find('.some-iframe-css') do
           click_link('Link that opens a new tab')
         end
       end.to change { windows.length }.by(1)

       expected result to have changed by 1, but was changed by 0
     # /some/path/test.rb:141:in `block (4 levels) in <top (required)>'

 2/2 |================================================================ 100 =================================================================>| Time: 00:00:30

Finished in 30.07 seconds (files took 1.05 seconds to load)
2 examples, 2 failures

This works for me with the below code.  Your error is probably caused by it taking a little time for your new windows content to load and the change matcher runs immediately - you can make your test wait for the window to open by wrapping it in a call to window_opened_by, which will check for a little while until a new window is opened
require "capybara/dsl"
require "capybara/poltergeist"
html = DATA.read
app = proc { |env| [200, { "Content-Type" => "text/html" }, [html] ] }

Capybara.default_max_wait_time = 1

[:poltergeist].each do |driver|
  begin
    sess = Capybara::Session.new(driver, app)
    puts driver
    sess.visit("/")
    puts "before: #{sess.windows}"
    sess.within_frame('some-iframe-css') do
      sess.click_link('Link that opens a new tab')
    end
    puts "after: #{sess.windows}"
  end
end

__END__

<!doctype html>

<title>Some title</title>

  <iframe id="some-iframe-css" srcdoc='Link that opens a new tab'>

@tedplumtree Increasing the timeout wouldn't help because you're not waiting for anything in your test.  Also, using trigger is a bad code smell in tests, since it allows you to do things a user never could.  The correct solution for your test is (as I mentioned) to use window_opened_by so the test code waits until the new window opens
  it 'correctly opens links in a new tab' do
      expect do
        window_opened_by do # executes block and waits for a new window to open
          within_frame find('.some-iframe-css') do
            click_link('Link that opens a new tab')
          end
        end
      end.to change { windows.length }.by(1)
    end

@twalpole -- Sorry I wasn't clear. I had taken your suggestion and use window_opened_by, and then increased the timeout. By "did not do the trick", I meant that I was getting this error:
Capybara::WindowError:
       block passed to #window_opened_by opened 0 windows instead of 1

Doing a trigger instead of click makes things work in this case as well -- I'm not sure why. It's not like link is not being found (nor is my link animated, it's just static).
Thanks.

@tedplumtree That's very strange since it would tend to indicate that your click_link isn't actually clicking the link then, or is being cancelled somehow.  I guess it's possible phantomjs cancels the click when the frame is shifted back to the parent.  It would be good to know if that is the case.  Could you try a sleep after the click_link just to see if that fixes it please?
expect do
  within_frame find('.some-iframe-css') do
    click_link('Link that opens a new tab')
    sleep 2
  end
end.to change { windows.length }.by(1)

and/or
expect do
   within_frame find('.some-iframe-css') do
      window_opened_by do
        click_link('Link that opens a new tab')
      end
  end
end.to change { windows.length }.by(1)

First one fails with:
expected result to have changed by 1, but was changed by 0

Debug info:
{"id":"6232191c-a2b6-470a-99d9-5b2acb0714f2","name":"window_handles","args":[]}
{"command_id":"6232191c-a2b6-470a-99d9-5b2acb0714f2","response":["0"]}
{"id":"e3b6585e-8438-441a-ad9b-0fd92f8f6d00","name":"find","args":["css",".some-iframe-css"]}
{"command_id":"e3b6585e-8438-441a-ad9b-0fd92f8f6d00","response":{"page_id":5,"ids":[1]}}
{"id":"3535f64a-8dad-4f58-a7c1-3d3e2f54625b","name":"visible","args":[5,1]}
{"command_id":"3535f64a-8dad-4f58-a7c1-3d3e2f54625b","response":true}
{"id":"b14d5638-a8e8-48ee-bf3b-4f478607447d","name":"push_frame","args":[[5,1]]}
{"command_id":"b14d5638-a8e8-48ee-bf3b-4f478607447d","response":true}
{"id":"b7d58048-b145-40aa-b401-2829cc7e74ab","name":"find","args":["xpath",".//a[./@href][(((./@id = 'Link that opens a new tab' or normalize-space(string(.)) = 'Link that opens a new tab') or ./@title = 'Link that opens a new tab') or .//img[./@alt = 'Link that opens a new tab'])]"]}
{"command_id":"b7d58048-b145-40aa-b401-2829cc7e74ab","response":{"page_id":5,"ids":[0]}}
{"id":"c862651c-d953-4afc-aea4-dea7376aa442","name":"visible","args":[5,0]}
{"command_id":"c862651c-d953-4afc-aea4-dea7376aa442","response":true}
{"id":"d00d59b8-1984-40b4-be1d-e69a67f39ceb","name":"click","args":[5,0]}
{"command_id":"d00d59b8-1984-40b4-be1d-e69a67f39ceb","response":{"position":{"x":103.5,"y":81.5}}}
{"id":"412c183d-c111-440a-a36b-475f6aee9059","name":"pop_frame","args":[]}
{"command_id":"412c183d-c111-440a-a36b-475f6aee9059","response":true}
{"id":"3a9b2cb9-f892-421b-9433-7c7156278b3a","name":"window_handles","args":[]}
{"command_id":"3a9b2cb9-f892-421b-9433-7c7156278b3a","response":["0"]}

Second one fails with:
Capybara::WindowError:
       block passed to #window_opened_by opened 0 windows instead of 1

Debug info:
{"id":"bb458d08-dfb8-43a4-b27d-255b1a7f17fc","name":"window_handles","args":[]}
{"command_id":"bb458d08-dfb8-43a4-b27d-255b1a7f17fc","response":["0"]}
{"id":"546f0a10-b409-4b04-8a11-6b1db4dc922d","name":"find","args":["css",".some-iframe-css"]}
{"command_id":"546f0a10-b409-4b04-8a11-6b1db4dc922d","response":{"page_id":5,"ids":[1]}}
{"id":"f46f855e-5f72-47cc-bcaa-492205a21277","name":"visible","args":[5,1]}
{"command_id":"f46f855e-5f72-47cc-bcaa-492205a21277","response":true}
{"id":"10de3afc-07e7-41de-bf61-b70231be1184","name":"push_frame","args":[[5,1]]}
{"command_id":"10de3afc-07e7-41de-bf61-b70231be1184","response":true}
{"id":"5b567618-0dd4-4943-9175-7aba16bd9cfa","name":"window_handles","args":[]}
{"command_id":"5b567618-0dd4-4943-9175-7aba16bd9cfa","response":["0"]}
{"id":"fcc56252-9dc6-4a62-9f12-d0f844746321","name":"find","args":["xpath",".//a[./@href][(((./@id = 'Link that opens a new tab' or normalize-space(string(.)) = 'Link that opens a new tab') or ./@title = 'Link that opens a new tab') or .//img[./@alt = 'Link that opens a new tab'])]"]}
{"command_id":"fcc56252-9dc6-4a62-9f12-d0f844746321","response":{"page_id":5,"ids":[0]}}
{"id":"fc2df52a-e5a1-4ca8-9ead-47d9a7d946d8","name":"visible","args":[5,0]}
{"command_id":"fc2df52a-e5a1-4ca8-9ead-47d9a7d946d8","response":true}
{"id":"9bd045b2-1660-481f-8a46-9e57367eb951","name":"click","args":[5,0]}
{"command_id":"9bd045b2-1660-481f-8a46-9e57367eb951","response":{"position":{"x":103.5,"y":81.5}}}
{"id":"a129f247-2e3d-4a7f-ab4d-610d445b66fe","name":"window_handles","args":[]}
{"command_id":"a129f247-2e3d-4a7f-ab4d-610d445b66fe","response":["0"]}
{"id":"2a32225e-e71f-425b-adb5-8ca44f280c67","name":"window_handles","args":[]}
{"command_id":"2a32225e-e71f-425b-adb5-8ca44f280c67","response":["0"]}
{"id":"a77c0e79-cfcf-4cb8-bc14-f67df18fb182","name":"window_handles","args":[]}
{"command_id":"a77c0e79-cfcf-4cb8-bc14-f67df18fb182","response":["0"]}
{"id":"e780c106-0dfe-4923-80c3-1bc95bae7e19","name":"window_handles","args":[]}
{"command_id":"e780c106-0dfe-4923-80c3-1bc95bae7e19","response":["0"]}
{"id":"c223966c-76bd-40b0-b5e9-69f862b44764","name":"window_handles","args":[]}
{"command_id":"c223966c-76bd-40b0-b5e9-69f862b44764","response":["0"]}
{"id":"ab71fbaf-a4e1-48fc-881d-358f6eff98af","name":"window_handles","args":[]}
...
{"id":"c6e52f43-09d9-4348-9e33-23253b981482","name":"window_handles","args":[]}
{"command_id":"c6e52f43-09d9-4348-9e33-23253b981482","response":["0"]}
{"id":"d4a59cf1-f787-4639-a6fd-a0c3a3e6e78f","name":"pop_frame","args":[]}
{"command_id":"d4a59cf1-f787-4639-a6fd-a0c3a3e6e78f","response":true}

When it succeeds (with trigger, without sleep):
{"id":"2449b9e4-64aa-437b-a5cc-5cee8c1cb9dd","name":"window_handles","args":[]}
{"command_id":"2449b9e4-64aa-437b-a5cc-5cee8c1cb9dd","response":["0"]}
{"id":"98fbff38-1594-431d-bb76-c63e0e6e8eb3","name":"find","args":["css",".some-iframe-css"]}
{"command_id":"98fbff38-1594-431d-bb76-c63e0e6e8eb3","response":{"page_id":5,"ids":[1]}}
{"id":"e1e082c1-6ea2-40dd-84a8-34e962e6d520","name":"visible","args":[5,1]}
{"command_id":"e1e082c1-6ea2-40dd-84a8-34e962e6d520","response":true}
{"id":"7fccb3f0-7cd4-4d7f-8104-32f6f26a2f03","name":"push_frame","args":[[5,1]]}
{"command_id":"7fccb3f0-7cd4-4d7f-8104-32f6f26a2f03","response":true}
{"id":"50dee279-7b66-49e9-8d7e-5ebcb52778ad","name":"find","args":["xpath",".//a[./@href][(((./@id = 'Link that opens a new tab' or normalize-space(string(.)) = 'Link that opens a new tab') or ./@title = 'Link that opens a new tab') or .//img[./@alt = 'Link that opens a new tab'])]"]}
{"command_id":"50dee279-7b66-49e9-8d7e-5ebcb52778ad","response":{"page_id":5,"ids":[0]}}
{"id":"116933b6-242f-436f-8bc8-1e404d43b15c","name":"visible","args":[5,0]}
{"command_id":"116933b6-242f-436f-8bc8-1e404d43b15c","response":true}
{"id":"121bc824-03e3-421f-90a1-1f29c1728bcf","name":"trigger","args":[5,0,"click"]}
{"command_id":"121bc824-03e3-421f-90a1-1f29c1728bcf","response":"click"}
{"id":"d526f8e4-7eab-4d00-ae43-f378b2879818","name":"pop_frame","args":[]}
{"command_id":"d526f8e4-7eab-4d00-ae43-f378b2879818","response":true}
{"id":"9d415131-a6d3-41a9-a1aa-09a5bef1a297","name":"window_handles","args":[]}
{"command_id":"9d415131-a6d3-41a9-a1aa-09a5bef1a297","response":["0","1"]}

Hmmm.. those results don't make a lot of sense unless the real click is somehow missing the element or getting caught by a different handler somehow.


Added php 5.4.27, 5.5.21, and 5.6.5

This adds definitions for the very latest php releases.

Thanks, @GrahamCampbell! I just removed 5.4.37 because its released yet, ok?
https://travis-ci.org/CHH/php-build/jobs/47960991#1-1644
See ya!

@rogeriopradoj it gets released today. I sent this pull request in preparation for that release, like I've done in the past. I wasn't expecting it to be merged yet.

:-) Could you send it again? Sorry for this...

Done. #254.


show old

This change is

Reviewed 2 of 2 files at r1.
Review status: all files reviewed at latest revision, 1 unresolved discussion.

Comments from Reviewable

Reviewed 1 of 2 files at r2, 1 of 1 files at r3.
Review status: all files reviewed at latest revision, all discussions resolved, some commit checks failed.

Comments from Reviewable

Reviewed 1 of 1 files at r4.
Review status: all files reviewed at latest revision, all discussions resolved.

Comments from Reviewable


Situation Awareness:  Unable to define distance and get incident information in desktop Safari

In desktop Safari only, using the Naperville data:

Turn on the Situation Awareness widget
Click on an existing feature and click "Set as Incident" in the popup to set it as the incident
Define a buffer distance
Note that the buffer does not draw and you are unable to get incident information by clicking between the tabs.

However, if you draw an incident from scratch using one of the drawing tools, there is no problem.
This appears to be specific to desktop Safari.  Could not repro on iOS8 iPad.

Duplicate of issue 66 in devtopia.


please correct and/or update the readme comparing other whisper implementations

Just FYI, I've messaged the folks over at faster-whisper, will for whisper.cpp as well as Jax.  I'm contemplating which approach to use in my code so...
Along those lines, I'm putting in this "issue" to ask for revisions to the readme regarding comparing other whisper implementations.  I'm hoping for a more apples-to-apples comparison.
For purposes of this issue, when I say "insanely-fast-whisper test" I'm referring to the test stating that it took 5 min 2 sec.   And when I refer to "faster-whisper test" I'm referring to the test stating it took 9 min 23 sec.  These two seem the most comparable.
Here are my requests regarding this issue:

The insanely-fast-whisper test should use large-v2 since the faster-whisper test does.
The faster-whisper test specifies a beam size of 1.  Was a beam size of 1 used for the insanely-faster-whisper test?  If so, please specify.  If it didn't, it's misleading and not a true comparison.
Please state for the faster-whisper test a batch size of 1 since it doesn't support batching, otherwise people will think that the underlying algorithms are responsible for speed increase when it's truly the batching functionality, which is "slightly" misleading.
Even if using batching increases VRAM/RAM usage in a "sub-linear" fashion, please make it clear that there will be an increase in VRAM usage and how much...again, that's the trade off with using insanely-fast-whisper over faster-whisper, and it's due to the batching...
Please run the distil-whisper using the large-v2 with the same clarifications above so it's more clear apples-to-apples.
Please include a comparison of whisper.cpp, especially since they recently made a significant improvement.
Please include a comparison with WhisperX since it uses faster-whisper with its own batching here.
Include a test of insanely-fast-whisper using a beam size of 5 and a batching of of 1, which mimics the default settings of faster-whisper.

Overall, I'm impressed and may move to using it...However, on my personal test using an RTX 4090, I specified a batch size of 1 using insanely-fast-whisper using bettertransformer and the Sam Altman audio took approximately 10 minutes (using fp16.  And I tested faster-whisper using a beam size of 5 (since I have to research how to include a beam size of 1 parameter), and it took almost the exact same time.  I fail to see how you're getting roughly half the time using insanely-fast-whisper...I haven't had a chance to test the Flash Attention 2 variety yet...
It's important to me, and I'm assuming others, before spending hours upon hours revising code, to have true comparisons.  Hope my suggestion comes across alright.  I'm truly interested in this technology and love the work that everyone is doing...Thanks!

Hi @BBC-Esq ,
Thanks for your message. This repo was made entirely out of volunteer time outside of my work. Whilst benchmarking sounds like a fun project. I nearly don't have enough time at the moment.
Please feel free to run the benchmarks yourself and open a PR.
I'm going to answer your questions though:

The insanely-fast-whisper test should use large-v2 since the faster-whisper test does.
large-v2 and large-v3 are exactly the same architecturally. It has no impact on the run-time.

The faster-whisper test specifies a beam size of 1. Was a beam size of 1 used for the insanely-faster-whisper test? If so, please specify. If it didn't, it's misleading and not a true comparison.
It is specified, please look at the benchmarks more closely, we use beam_size=1

Please state for the faster-whisper test a batch size of 1 since it doesn't support batching, otherwise people will think that the underlying algorithms are responsible for speed increase when it's truly the batching functionality, which is "slightly" misleading.
It is the algorithm itself; batching and the stitching of the batches is the reason why it is faster. Single file batching is quite complex and the implementation itself is the key part of making it faster, besides, better transformer and Fast Attention 2.

Even if using batching increases VRAM/RAM usage in a "sub-linear" fashion, please make it clear that there will be an increase in VRAM usage and how much...again, that's the trade off with using insanely-fast-whisper over faster-whisper, and it's due to the batching...
Feel free to run and report the numbers! Should be quite easy to do so with the batch_size params.

Please run the distil-whisper using the large-v2 with the same clarifications above so it's more clear apples-to-apples.
I'm not sure if I understand what you mean by this? Distil-whisper is a new model which is compatible with transformers implementation.

Please include a comparison of whisper.cpp, especially since they recently made a significant improvement.
Happy for someone else to run this!

Please include a comparison with WhisperX since it uses faster-whisper with its own batching here.
Same as above.

Include a test of insanely-fast-whisper using a beam size of 5 and a batching of of 1, which mimics the default settings of faster-whisper.
I have already answered above.

If I do the benchmarking would I then do a pull request to the readme.md, essentially?  I'd probably be willing to spend the time.
With that being said, even though it's your hobby, you did decide to put up the numbers that are there so...I'd ask for more apples-to-apples comparison or not comparing to other implementations altogether.  Thanks.

With that being said, even though it's your hobby, you did decide to put up the numbers that are there so...I'd ask for more apples-to-apples comparison or not comparing to other implementations altogether. Thanks.

In my opinion the numbers comparing Transformers with Faster-whisper 1:1 (for the reasons mentioned above) - I really am unaware of the whisper.cpp syntax and for that reason happy for someone to run that.
You can find the code I used to benchmark here: https://github.com/Vaibhavs10/insanely-fast-whisper/tree/main/notebooks

If I do the benchmarking would I then do a pull request to the readme.md, essentially? I'd probably be willing to spend the time.

Yes! 🤗

In order to do a pull request, what kind of proof would you need?  I don't know how to use GoogleColab so others can check my work, only how to test on my own PC.  I could provide the example code snippets displaying the parameters used, for example?

I'm running the tests as we speak, but I noticed that you didn't respond to my question about making clearer the batch functionality performing the speed up but also increased VRAM/RAM usage.  Is that something you will do, or of not, something I could do in a pull request as well?

Isn't it already clear with the optimisation column:

Not really.  I'll run my tests beam=1 and batch=1 for both whisper implementations.  Then I'll run insanely-fast-whisper using batch=1 though 24 (your recommended setting).  BTW, I tested my RTX 4090 with a batch size of 35 and it used approximately 20 GB of VRAM, so still some more wiggle room even...You'll have a graph of the vram/ram usage based on the batch size chosen.  That's what I'm referring to that will help people.  VRAM is crucial when people are trying to assess which technologies/models to use, as you know....sorry.

Okay sure! Maybe we can put your benchmarks in a separate folder (maybe benchmarks.md). wouldn't want to clog up the README and think it is worth givingin this case; I dedicated area.
Happy to look at the code and optimise it further with you.
btw, make sure to measure the generation time instead of model initialisation/ loading time (since it is not something we measure)
If you open a PR with the snippets then I can advise you for what range of parameters to use, on top of my head:

torch.dtype (fp32, fp16)
batch_size
flash attention 2 on compatible GPU
bettertransformers (for older GPU)
chunk_length

I'm using HWiNFO to run my tests and the graphs are created by GenericLogViewer.  BTW, I've tested both implementations several times now and noticed with insanely-fast-whisper that CUDA usage is never 100%.  Here's a pic:

However, when I use faster-whisper, it's always 100%.  Seems like there's an optimization issue there...so I'll also include CUDA usage in a message between you and I, not for the updated readme...

(the below should apply to both faster-whisper and transformers whisper implementation)

Hmm.. weird! Can you ping me the snippet you are using?

Yep, makes sense (regarding separate folder and settings).  I just forked the repo.  Each test just for a particular batch size takes time so...,multiple that by 24+ tests I have to do so...could be awhile.  Also, it's not good practice to just do one test, ever, but it'll have to do since my time is not unlimited.  I'll just put a small caveat about that...

Hmm.. weird! Can you ping me the snippet you are using?

Better yet, here's the entire script:
from transformers import pipeline

model_name = "openai/whisper-large-v2"

pipe = pipeline("automatic-speech-recognition",
                model=model_name,
                torch_dtype=torch.float16,
                device="cuda:0")

pipe.model = pipe.model.to_bettertransformer()

# Process the audio file
outputs = pipe(r"C:\PATH\Scripts\ChromaDB-Plugin-for-LM-Studio\v2_7 - working\TEST2\sam_altman_lex_podcast_367.flac",
               chunk_length_s=30,
               batch_size=1,
               return_timestamps=False)```

Hmm.. weird! Can you ping me the snippet you are using?

Better yet, here's the entire script:
from transformers import pipeline

model_name = "openai/whisper-large-v2"

pipe = pipeline("automatic-speech-recognition",
                model=model_name,
                torch_dtype=torch.float16,
                device="cuda:0")

pipe.model = pipe.model.to_bettertransformer()

# Process the audio file
outputs = pipe(r"[PERSONAL INFO REDACTED]\sam_altman_lex_podcast_367.flac",
               chunk_length_s=30,
               batch_size=1,
               return_timestamps=False)```

Ah yeah! I averaged the scores over 3 runs (you should do that too)
re: the code-snippet it makes sense, that the usage is low, since you're not using the pipeline the way it is supposed which is with higher batch_size, so it cannot fully utilise the GPU.
 Looking forward to the PR. Have a great evening/ day! 🤗

Here is the sample graph for insanely-fast-whisper showing total CUDA usage average of 34.5 percent.  Average VRAM usage is 28% of an RTX 4090 with 24 GB of VRAM.

Here's the same graph using faster-whisper with a beam size of 1 and obviously a batch size of 1 since that's all it supports.  Looking at when the model is loaded into memory, you'll notice faster-whisper took approximately 7 min 35 sec whereas insanely-fast-whisper took approximately 8 min 10 sec...hence my critique of your claim to 5 min 2 sec for insanely-fast-whisper and 9 mins 23 sec for faster-whisper; something is wrong:

NOTE, despite task manager stating 100% CUDA usage for the faster-whisper run....HwInfo only reported an average of 38%...Can't explain that, but will keep that number for apples-to-apples purposes.
The important thing is the huge disparity between your claimed runtimes...
I'll do the same test at batch size of 5, 10, 15, 20, 25, and 30 to save time, three each.  However, that'll take some significant time.  Also, I'll work on installing (try again) Flash Attention 2...and run those tests.  But if my results vary wildly I'd expect you to take down the claims on the main readme.md and replace them with a link to my pull request with a more thorough analysis.  It's not worth my time, with all due respect, to do this extensive testing if it's going to remain and there only be a link to an ancillary readme.md that a user may or may not find a small link to click on.
Let me know.  Regards.

I want to add that, to your credit, it's no small feat to get the batching of single file implemented...the folks over at faster-whisper/ctranslate2 have been struggling with that for some time, but it's important to verify claims of being the fastest before posting such claims and lightning bolt icons and such in a readme...
Regards.

And here's the graph for insanely-faster-whisper using a batch size of 5.  approximately 2 min 20 sec, VRAM usage average of 36%, and CUDA average usage of 68.2%:

We have a winner!  Batching makes a huge difference.  However, I noticed that the Altman audio is absolutely pristine, highest quality I've heard.  If you have low-quality audio...people speaking over one another, etc., being able to specify the number of "beams" could possibly be a huge benefit.  Insanely-faster-whisper doesn't have that parameter, correct, because of the nature of batching a single file??

Testing insane-faster-whisper with a batch size of 2.  Approximately 4 min 45 sec runtime, average CUDA usage of 64.5%, and average VRAM usage of 30.8%.

Testing insane-faster-whisper with a batch size of 3.  Approximately 3 min 30 sec, VRAM average 32%, CUDA usage 67.3%:

We're starting to notice diminishing returns of using a much larger batch size...

Testing insane-faster-whisper with a batch size of 25.  Approximately 1 min 3 sec.  Approximately 52% memory usage and 68% CUDA usage.  Average CUDA usage staying roughly the same (not near 100%) despite much larger batch size.  However, much more VRAM is being used and, to boot, much lower transcription time:

Batch size of 35 and we start to see a bottleneck as indicated by spikes of low and high usage...Transcription time only about 50 sec, VRAM average at 70%, and CUDA at 75.6%:

Batch size of 45.  48 second transcription.  VRAM at 83.3%.  CUDA at 73.2% and spiking more as the mismatch of CUDA power and VRAM's ability to send it information becomes more pronounced:

insanely-fast-whisper BEATS faster-whisper at float32, beam=1 and batch=1.  This is noteworthy, especially because it lost so handily at float16...and I retested this.
faster-whisper completed in approximately 9 min 10 sec using 40.6% VRAM and 87% CUDA usage.
insanely-fast-whisper completed in approximately 8 min 20 sec. using 2.7% more VRAM but 14.% LESS CUDA usage.  This is significant in and of itself.
The first image is for faster-whisper and the second for insanely-fast-whisper:

FINALLY, for insanely-faster-whisper I used batch size of 24 at float16....wait for it...the transcription of only took approximately 1 minute!  This is the most comparable test to where you state that you got 5 min 2 sec!

This is likely due to the larger number of CUDA cores than on the A100 (from 2020) that you tested, not withstanding that that card has 80 GB of HBM memory.  Therefore, you NEED TO TEST ON RELEVANT GPUS.
I'd respectfully request that you re-test and provide comparisons on an relevant GPU for 99.9% of the people who will be using this library...not the .1% corporate people who are paying $20,000+ for a H100 GPU.  Also, please compare float16 and float16 with all permutations, including batch size of 1 for insanely-fast-whisper when comparing it to faster-whisper.  This is your responsibility since you posted the claim, even if it's a hobby and not part of your formal job duties at Huggingface like you stated.
I'll commit to re-testing on my RTX 4090 (including all testing for Flash Attention 2 if you'll make this small commitment and also make it clear on the Readme my test results if they conflict with yours.
Regards.

https://www.width.ai/post/what-is-beam-search

Also, I'd really appreciate it if you could explain how it performs on CPU-only, and whether it supports things like this:
https://opennmt.net/CTranslate2/hardware_support.html?highlight=mkl
I do appreciate your honesty, however, regarding its much slower performance on MPS than when using CUDA...and how batch size can't really be utilized with MPS for whatever reason.

By the way, I did actually, manually, compare the transcriptions for both whisper implementations for quality.  I extracted the .json output from insanely-fast-whisper, pasted into Microsoft WORD.  I think copied and pasted the transcription from faster-whisper.  Within WORD, I then did a redline comparison.
They were the same quality overall.  Both had roughly the same number of errors.  What was interesting, however, is that they both had their own unique errors regarding certain words.  lol.
Anyways, this is with the perfect, unrealistic, audio that this developer uses.  As you get lower in audio quality and/or use a lower quality whisper model, I'd bet that you start seeing the advantage of having a beam size parameter.  Again, this would take a fair amount of testing that I don't have time for, but it's a worthwhile thing to mention...or you can do what this guy does and put cool pictures of bullet trains...because who doens't like trains!  And lightning bolts!  And call your project "insane"!  Dude!  It's radical dude!
Um no...be respectful, professional, and a little humble in touting your own work and recognize others.

Wow, interesting journey here. I think everybody will benefit from your work @BBC-Esq, thank you! A noob question from me. Does batch size affect the quality of transcriptions?

Another cool link you might find interesting from this developer's employer nonetheless:
https://huggingface.co/docs/transformers/main_classes/pipelines#pipeline-batching

Activating timestamps will improve the transcription time further, since the model will hallucinate less. Also, specifying the language and task seems to help with WER performance:
from transformers import pipeline

model_name = "openai/whisper-large-v2"

pipe = pipeline("automatic-speech-recognition",
                model=model_name,
                torch_dtype=torch.float16,
                device="cuda:0")

pipe.model = pipe.model.to_bettertransformer()

# Process the audio file
outputs = pipe(r"[PERSONAL INFO REDACTED]\sam_altman_lex_podcast_367.flac",
               chunk_length_s=30,
               batch_size=45,
               return_timestamps=True,
               generate_kwargs={"language": "en", "task": "transcribe"},
)

For beam search, you can do:
from transformers import pipeline

model_name = "openai/whisper-large-v2"

pipe = pipeline("automatic-speech-recognition",
                model=model_name,
                torch_dtype=torch.float16,
                device="cuda:0")

pipe.model = pipe.model.to_bettertransformer()

# Process the audio file
outputs = pipe(r"[PERSONAL INFO REDACTED]\sam_altman_lex_podcast_367.flac",
               chunk_length_s=30,
               batch_size=45,
               return_timestamps=True,
               generate_kwargs={"language": "en", "task": "transcribe", "num_beams": 5},
)

You and I had been speaking over at the Jax "Issue" place...thanks for popping over here to address this issue.
I will provide my benchmarking approach, but first.
(1) I understand that it's difficult to test all permutations and I don't expect perfection.  However, when a person specifically compares it to another technology and, in my personal opinion, does such an excellent job of not even trying to do sufficient testing, it deserves my critique.
(2) To state it differently, this developer's testing was so poor, his attitude so poor, and his blustering so annoying, it deserved my full attention.  Your testing is not perfect, neither is mine...I'm talking about a "range of reasonableness" here that he failed to achieve...,and more importantly, he didn't give a (&*^ that he failed to achieve it when I tried to point it out.
(3) Therefore, I understand testing isn't perfect and it's difficult/impossible to test all permutations, but you need to understand that I understand that...so you can accurately understand my point.
With that being said, my testing rubric was as follows:
(1) Here's the script for all tests regarding insanely-fast-whisper:
from transformers import pipeline

model_name = "openai/whisper-large-v2"

pipe = pipeline("automatic-speech-recognition",
                model=model_name,
                torch_dtype=torch.float16,
                device="cuda:0")

pipe.model = pipe.model.to_bettertransformer()

# Process the audio file
outputs = pipe(r"C:\PATH\Scripts\ChromaDB-Plugin-for-LM-Studio\v2_7 - working\TEST2\sam_altman_lex_podcast_367.flac",
               chunk_length_s=30,
               batch_size=1,
               return_timestamps=False)```

For testing faster-whisper I used a program I created located at [my repo](https://github.com/BBC-Esq/ChromaDB-Plugin-for-LM-Studio).  Specifically, I used the functionality of my program that stems from the transcribe file script [located here](https://github.com/BBC-Esq/ChromaDB-Plugin-for-LM-Studio/blob/main/src/transcribe_module.py).  However, I had to modify ```line 60``` to include the beam size parameter since I hadn't been using it (and hence the default beam size of 5 was being used).

HwInfo was used to monitor the metrics, which are saved to CSV file.  "GenericLogViewer" was used to display the graphs.

You have to chop off the ends of the graphs to show when the model is actually loaded into memory versus the time between when you start monitoring and the model is loaded...This gives a correct average.

That's pretty much it.

By the way, I appreciate your comments.  However, I'm unwilling to be goaded into "my testing is insufficient" in the face of the testing of insanely-fast-whisper being so pathetic.  It's not his turn to revise his testing...give actual accurate numbers...give true apples-to-apples comparisons.  I've spent 6 hours so far testing...and it's borderline disrespectful to muddy the issue as if it's just "oh, everybody's testing is insufficient...BBC, you could improve your testing...let's look at that, let's focus on that).

No thanks, sir, make some corrections on insanely-fast-whisper first, and then we'll talk, otherwise, I'll conclude that this egotist is more concerned about being right than what the truth actually is.

Regards.

Activating timestamps will improve the transcription time further, since the model will hallucinate less. Also, specifying the language and task seems to help with WER performance:
from transformers import pipeline

model_name = "openai/whisper-large-v2"

pipe = pipeline("automatic-speech-recognition",
                model=model_name,
                torch_dtype=torch.float16,
                device="cuda:0")

pipe.model = pipe.model.to_bettertransformer()

# Process the audio file
outputs = pipe(r"[PERSONAL INFO REDACTED]\sam_altman_lex_podcast_367.flac",
               chunk_length_s=30,
               batch_size=45,
               return_timestamps=True,
               generate_kwargs={"language": "en", "task": "transcribe"},
)

For beam search, you can do:
from transformers import pipeline

model_name = "openai/whisper-large-v2"

pipe = pipeline("automatic-speech-recognition",
                model=model_name,
                torch_dtype=torch.float16,
                device="cuda:0")

pipe.model = pipe.model.to_bettertransformer()

# Process the audio file
outputs = pipe(r"[PERSONAL INFO REDACTED]\sam_altman_lex_podcast_367.flac",
               chunk_length_s=30,
               batch_size=45,
               return_timestamps=True,
               generate_kwargs={"language": "en", "task": "transcribe", "num_beams": 5},
)

Interesting...so you CAN do beams, that's cool.  I'll check that out!  Thanks.

I might have forgot to mention...I used CUDA 11.8 in my testing @sanchit-gandhi Python 3.11.6.

Ayy @sanchit-gandhi - Thanks a ton for taking care of the questions! 🤗
Hey @BBC-Esq - Brilliant work on the analysis. Would you happen to have a markdown version of these benchmarks you showcased here? https://github.com/Vaibhavs10/insanely-fast-whisper/issues/82#issuecomment-1833024914
If you cannot, then I'm happy to convert it myself. -> Will add them along with your script there as well. I think the only thing it is missing is a script to benchmark
Your comments here and in the Whisper-JAX repo indicate that I should update the README to demystify the magic a bit more and explain what goes on under the hood. I'll update it over the weekend.
Thanks again for your contributions and for spending time stress-testing the implementation.
P.S. I'm sorry if my comments came across as egotistic to you and more so sorry for the terse responses earlier.
(I'm keeping this issue open till I get around to updating the benchmarks)

Thanks for the compliment and for not escalating the matter.  I was a little heated.
With that being said, before I start contributing I'd like to know a few things.  First, did you actually develop any of the technology like the batching, because what you said earlier was misleading in that regard not to mention your github page is misleading.  As I understand it, you only helped develop the command line functionality, none of the underlying technology like Transformers, Optimum BetterTransformer, Transformers Pipeline or what have you?  In fact, it appears from the credit to others that you give on the github, that you didn't even build the CLI entirely either.
So basically, you work at HuggingFace, your employer builds these great technologies, then in your "off time" you make a website promoting them as "insanely" and "blazingly" fast to bring repute to HuggingFace.  Informally, implicitly, it's expected that employees there have repos with Huggingface technologies and pump them up, which is apparent by you and your organizations ability to get 2.5k starts for "your" repo.
Thus, before I contribute I want to know what Huggnface's mission statement is.  I'm not interested in contributing my time to a a greedy selfish for-profit corporation.  If it's a non-profit and, despite reasonable flaws, has an altruistic mission that I agree with overall, I'd be happy to contribute.  But just so we're clear, you did not develop any of the underlying technology used to actually speed up Whisper transcriptions; that was whoever worked on the underlying technologies.  I did notice in some of your code you explicitly attributed WhisperX for the diarization and stuff...so I'm not trying to be impartial here.  But since we got off on the wrong foot I want to clear the air a little.  Once that's done I'd be happy to contribute if you'll commit to changing the so-called test results, which you already stated you would.

I believe I found the answer online.  Apparently, Huggingface, your employer, is a French-US company based in New York and it's for-profit:
[SEE HERE](https://research.g2.com/insights/machine-learning-startup-hugging-face-valued-at-2-billion-dollars#:~:text=Hugging Face%2C a startup that,ML) space
SEE ALSO HERE
I'm not interested in providing free labor for Huggingface since it's a for-profit company.  I even sometimes hesitate sometimes for non-profits.
Your repository, while it feigns to be your own pet project, in reality has the purpose of promoting the things that Huggingface develops.  While there's nothing inherently wrong with that, you portraying it as completely separate and having nothing to do with your work at Huggingface is, simply put, false.  The same applies to @sanchit-gandhi's repository for Jax, although at least he doesn't claim that it has nothing to do with his work at Huggingface...
In short, if either you or @sanchit-gandhi worked at Microsoft/Apple, your repositories exclusively showcasing Huggingface technologies WOULD NOT EXIST...So let's be honest about the genesis of them, regardless of whether you're explicitly required under your job description when Huggingface hired you...
If you want to pretend that it's an altruistic thing you're doing that has nothing to do with Huggingface's for-profit motives, perhaps to induce free labor from others, that's fine, but I will not be contributing to your code base nor that of Huggingface's.  That is, unless Huggingface wants to cross-promote and throw some shoutouts to my project as well!
With that being said,  I am wiling to help you correct your testing procedures to the extent I'm able, provided you were genuine with you willingness to do so.  I believe it's important not to "call out" other technologies like ctranslate2/faster-whisper without robust tests.  I would ask that you include either scripts as you proposed and create the markdown yourself.
If you'll do that, what I suggest is...I can extract out the logic in the script used  to test faster-whisper into a standalone script, that way people don't have to use my program to use it...and then submit a pull request so people can run it easier.  But I'd expect the readme to be changed with the updated testing I did before that happens.
Eventually, I'd like to also submit a pull request of a script I create that allows a user to test insanely-fast-whisper all at once.  They run the script, for example, and it runs multiple tests and saves the results to a .csv, for example.  I had to do each test manually...which was very tedious.
Let me now dude!

I apologize that it affected you to that extent.  Will you be planning to amend the tests so I can submit some additional testing like I suggested?  I would appreciate that as a man of your word.  And I would like to contribute as long as its done ethically professionally.

Hi @BBC-Esq,
I hope this message finds you well.
First of all I wanted to thank you for taking the initiative to conform the benchmarks across variety of projects. I am an independent indie developer in the context of AI tech and I find it sometimes to be challenging to compare apples to apples.
However I felt that your tone of voice, accusations and complete approach is just NOT acceptable. Open source is rarely well paid, if paid at all. It is done out of one's heart and desire to bring to the community. Whether the creators of this, jax or another projects work at HuggingFace is the most irrelevant fact. Just as it doesn't matter by whom I am employed. Please do think it through in your future journeys.
Furthermore, I would like to shed light on A100/H100/TPUs. You're absolutely right that the main consumers of such hardware are the big corporations. However NOT all. I am, as a self-funded, used both A100, H100 and TPU v3 (Google did not grant access to 4 unfortunately). I was very excited and very grateful to have had a chance to transcribe over several thousand of hours of content from my favorite creators to create a searchable database for my personal use. The total cost was less than 50usd.

TPU v3 costs around 2usd/hour on Google Cloud which, over the span of 4 hours, I transcribed several hundreds of content. Cards such as A100 are easily available on RunPod/TensorDock/Modal Labs which also cost anywhere from 1.5-5usd/hour. Same story. H100 however is pricey, less available and highly diminishing returns on Whisper.

The other day I was helping out someone on the Discord group who, for his own personal use, just wanted to spin up A100 to serve Mistral in the ocean of existing APIs and providers. It doesn't matter how much a card costs because even RTX 4090 is more than my salary but even if it was a third of it, I'd not consider buying one at all. Many of practical cases implementations like this help, is for developers hacking around, learning and trying to glue some fun stuff. The benefit of renting one for a few hours is all we need, not the box of H100 running under my table.
To the contrary, in my experience, a corporation like you refer to, will not even bother finding out which framework is the fastest. They will just pay a heck load of money directly to OpenAI or Azure and use their API endpoint, which is not fast at all. 🤣
Finally, back to the creators of these libraries, it takes a lot of time to build something like this. Sometimes it's a dream and vision that happens at 5AM and sometimes it's an idea that sparked thanks to the on-going project at their work. However it is always provided as-is. You, me, he, she, it paid zero for it. Therefore WE HAVE NO RIGHT to demand for anything. Yet the authors have displayed extremely professional approach to communicating and attempting to collaborate.
As an idea, why not to make an awesome-whisper-benchmarks repository that we would all love to bookmark? :)

I appreciate your message and I agree my tone could have been better.  But I think that if you review the messages between myself and this developer  you'll find that he never carried through in even attempting to get more accurate comparisons.  There's a new "issue" where he discusses possible ways to benchmark it with @sanchit-gandhi, who's an excellent programmer BTW, but no follow through.  I think what triggered me was he ostentatious claims he makes without having competent benchmarks, then saying he will revise them, and then trying to get me to revise them for him with the "hope" that he'll accept my pull request.
Huggingface is a large company this developer is not a humble solo-practicing programmer.  He's presumably paid a fair amount to do his job, and it's his job to have competent benchmarks, and more importantly, not to delegate to the general public to do the benchmarks for him.
I should have communicated that in a more friendly manner, but the facade that he's a humble programmer who's not paid for his work, and that he's not responsible for shoddy benchmarks, or to follow through with what he says, is just not accurate.
I am a hunble solo practicing programmer/hobbyist; he is not.  And neither is @sanchit-gandhi .  They all work at Huggingface, which I like a lot, but it's a huge for-profit company that pays these guys...

Yeah Blair, the trap is you believe that hugging face is involved here.

"P.P.S. This project originally started as a way to showcase benchmarks for Transformers, but has since evolved into a lightweight CLI for people to use. This is purely community driven. We add whatever community seems to have a strong demand for!" [from README.md]

I double checked the README and this is a prototype project provided by a bright person for the community as-is. Therefore any claims may be made and they're still allowed to. That's the first amendment I believe.
If HuggingFace or another company was out there to pay for us, developers, to do side projects for the community without taking any credit, then I wish to know!!
Hope you make an independent repository with all the benchmarks, it'd be super cool to see in one place. Happy new years!

Oh yeah, I love the First Amendment.  I used to speak on panels at cons about the First Amendment. It totally allows for him to put up shoddy, poorly-implemented, lazy, and, most importantly inaccurate, tests for the public to consume, just like he has.  I suppose the First Amendment also covers disgruntled comments complaining about these tests as well.
What I'm referring to is not merely being satisfied with what the bare minimum of the First Amendment protects...but rather trying to do a little more than the bare minimum.

Btw, there is a delete button. Here I just would have issued a banana prize.

This is hilarious, I wish I saw this thread before 😄. @BBC-Esq is right though. Many of the boosts compared to other libraries claimed by the author are not fair-comparison and you will never achieve them. In my tests the performance is really on par with whisper-x/faster-whisper. I appreciate author's the contribution to open source but the all these misleading/shallow advertising are annoying.

I had forgotten about this thread (got notifcation) but I happened to have recently ran transcripts and written down my own observations. Perhaps someone will find them useful.

Benchmarks are notoriously hard because of the variety of variables. While OP is right, it is extremely rude to blame free as-is software. Instead, it would be wonderful if we could build an open source collection of scripts that we could evaluate various frameworks.
I run my own transcript on Modal.com infrastructure. Script is from https://huggingface.co/distil-whisper/distil-large-v3. With flash attention 2.

From the benchmarks on the main page it's obvious where it's faster, why it's faster and where it wouldn't be faster.
Blame yourself if you fell victims of your imaginations.

Hahaha chill man! Why is everybody is so aggressive in this thread? 🤣 I just pointed out that the claims of OP are right.


non-negative test suite build failure with newest QuickCheck

CC @thielema
[7 of 7] Compiling Test.Utility     ( Test/Utility.hs, dist/build/test/test-tmp/Test/Utility.o )

Test/Utility.hs:22:4: error:
    ‘coarbitrary’ is not a (visible) method of class ‘Arbitrary’
   |
22 |    coarbitrary = undefined
   |    ^^^^^^^^^^^

Test/Utility.hs:28:4: error:
    ‘coarbitrary’ is not a (visible) method of class ‘Arbitrary’
   |
28 |    coarbitrary = undefined
   |    ^^^^^^^^^^^

On Mon, 31 Jul 2017, Michael Snoyman wrote:

CC @thielema
[7 of 7] Compiling Test.Utility     ( Test/Utility.hs, dist/build/test/test-tmp/Test/Utility.o )
Test/Utility.hs:22:4: error:
‘coarbitrary’ is not a (visible) method of class ‘Arbitrary’
|
22 |    coarbitrary = undefined
|    ^^^^^^^^^^^
Test/Utility.hs:28:4: error:
‘coarbitrary’ is not a (visible) method of class ‘Arbitrary’
|
28 |    coarbitrary = undefined
|    ^^^^^^^^^^^

fixed

There's another issue:
Test/Utility.hs:20:10: error:
    Duplicate instance declarations:
      instance Arbitrary Char -- Defined at Test/Utility.hs:20:10
      instance [safe] Arbitrary Char
        -- Defined in ‘Test.QuickCheck.Arbitrary’
   |
20 | instance Arbitrary Char where
   |          ^^^^^^^^^^^^^^

Test/Utility.hs:23:10: error:
    Duplicate instance declarations:
      instance Arbitrary a => Arbitrary (Maybe a)
        -- Defined at Test/Utility.hs:23:10
      instance [safe] Arbitrary a => Arbitrary (Maybe a)
        -- Defined in ‘Test.QuickCheck.Arbitrary’
   |
23 | instance Arbitrary a => Arbitrary (Maybe a) where
   |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

On Mon, 31 Jul 2017, Michael Snoyman wrote:

There's another issue:
Test/Utility.hs:20:10: error:
Duplicate instance declarations:
instance Arbitrary Char -- Defined at Test/Utility.hs:20:10
instance [safe] Arbitrary Char
-- Defined in ‘Test.QuickCheck.Arbitrary’
|
20 | instance Arbitrary Char where
|          ^^^^^^^^^^^^^^
Test/Utility.hs:23:10: error:
Duplicate instance declarations:
instance Arbitrary a => Arbitrary (Maybe a)
-- Defined at Test/Utility.hs:23:10
instance [safe] Arbitrary a => Arbitrary (Maybe a)
-- Defined in ‘Test.QuickCheck.Arbitrary’
|
23 | instance Arbitrary a => Arbitrary (Maybe a) where
|          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

fixed


can std::string of soci hold the right utf8 data?

I get wrong Chinese bytes using into(string)

with sql << select ... , into(string)

@lkkey80 Which OS? Linux or Windows?

linux, centos 7。
for example oracle varchar '鲁XXXXXX', sql << select ..., into(string); I got ?XXXXXX everytime.

contents of varchar is encoded in GBK，not utf8, but I think soci should handle this.

On 3 March 2017 at 14:30, lkkey80<EMAIL_ADDRESS>wrote:

contents of varchar is encoded in GBK，not utf8, but I think soci should
handle this.

No. SOCI is supposed to be encoding-agnostic, transferring between
server/client whatever it is fed up with.

after setting NLS_LANG="Simplified Chinese_china".ZHS16GBK, the issue disappeared.

I'm glad you've solved the problem.
Thank you for sharing the solution.

I don't think it is encoding-agnostic since it depends on the value being NUL-terminated. Just saying.

@jsonn good point, there are caveats


client is newer than server (client API version: 1.26, server API version: 1.24)

Quote of the "full" error log in the build: ERROR: Error response from daemon: client is newer than server (client API version: 1.26, server API version: 1.24)
Infrastructure is on Rancher with CoreOS Stable currently running docker version 1.12.6.
Where do I start to dig deeper as to why this error happens?

you can set DOCKER_API_VERSION=1.24 with the agent
http://stackoverflow.com/questions/43072703/client-is-newer-than-server-client-api-version-1-24-server-api-version-1-21

Awesome, that solved it, thanks @bradrydzewski

To record it here:
Had this issue on Kubernetes (GCE) and the above resolved it. thanks

Add env In k8s to fix this issue:
        env:
        - name: DOCKER_API_VERSION
          value: "1.24"


Swiftfall and FreeIPA are in Archives

In private browsing they are still there.

They are very much still available on the main page. This is a caching issue.

I still have an issue
I don't know why you closed this


[Additional Parameter Request] Codeunit 80 Sales-Post - OnCheckAndUpdateOnAfterCalcInvDiscount

Hi Team,
In codeunit 80 we need possibility to have additional checks in the procedure CheckAndUpdate. Standard publisher OnCheckAndUpdateOnAfterCalcInvDiscount would suit us if it had additional parameter TempWhseShptHeader: Record "Warehouse Shipment Header".

[IntegrationEvent(false, false)]
local procedure OnCheckAndUpdateOnAfterCalcInvDiscount(SalesHeader: Record "Sales Header"; TempWhseShptHeader: Record "Warehouse Shipment Header")

Thanks for reporting this. We agree, and we’ll publish a fix asap, either in an update for the current version or in the next major release. We will update this issue with information about availability.


Add message for natively supported device types

I was surprised when I saw the log messages start coming in on first setup with a bunch of "not yet supported, skipping setup". I quickly realized that these devices were the actual switches I have paired to the Caseta bridge, but the message didn't sit right.
Since these devices are intentionally unsupported, I think it makes sense to give them their own message. It also tells the user "don't worry, this is normal".
While I was at it, I added an explicit case to the "not supported" category for the occupancy sensor, since I have the device name in the log. I may come back and add proper support for it since I have one, but I'm not a typescript developer so we'll see 😛

Is the list of "natively supported" devices exhaustive?

Probably not, these are just the ones I have available. I imagine the repeater would show up differently as would the plug-in dimmer and outdoor plug.
The ELV+ dimmer showed up the same as the regular Wall Dimmer, so I imagine the Caseta Pro variants of the in-wall devices will appear the same as well.

I'm probably crazy overthinking this, but I feel like non-exhaustively special-casing the natively-supported devices, and yet having anything unknown default to the "not yet" message is ... not quite right. I think maybe three separate messages is best:

not yet supported because I don't have the hardware (or nobody who does has done it)
natively supported
not natively supported but no plans to add support / unknown?

Yeah, I think having a third message might be useful, though "unknown" is probably better than "no plans". Do you have anything in mind that is neither natively supported nor planned to be supported once someone has the hardware?
I'd say the following categories would work:

Natively supported: in wall switches, bridges, etc
Not yet supported: remotes/other devices not normally exposed to HomeKit that have known device types
Unknown: basically just the default case, any device type we haven't seen before and thus don't know if it's natively supported or not yet supported.

If you have something that you know about and never intend to support, a fourth "not to be supported" message could be added.

that sgtm


pivpn add does not fill in remote ip address in opvn file

pi@raspberrypi:/etc/openvpn/easy-rsa $ pivpn add nopass
Enter a Name for the Client:  dude
NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys
spawn ./build-key dude
...

/home/user/dude.ovpn:
client
dev tun
proto udp
remote  1194
...

I added my public ip to both the /etc/openvpn/easy-rsa/keys/dude.ovpn and /home/user/dude.ovpn files and everything worked fine.

Ah, looking at the code, I think it's because my Raspberry Pi didn't have dig installed. This should probably be in the required packages list.


GenericContainer#withCopyFileToContainer is not efficient memory-wise

Hi,
We've recently seen OOM in our tests and after debugging  by generating a heap dump and opening it, we found that for the following code that we use in XWiki tests, TC is copying all the content of the sourceDirectory in memory:
MountableFile mountableDirectory = MountableFile.forHostPath(sourceDirectory);
container.withCopyFileToContainer(mountableDirectory, targetDirectory);

Since our directory contains 300MB+ of files, the memory we give to the JVM is not enough.
Note that we copy and don't bind because we need to have it work in the DOOD use case. Our code is:
    protected void mountFromHostToContainer(GenericContainer<?> container, String sourceDirectory,
        String targetDirectory)
    {
        // Note 1: File mounting is awfully slow on Mac OSX. For example starting Tomcat with XWiki mounted takes
        // 45s+, while doing a COPY first and then starting Tomcat takes 8s (+5s for the copy).
        // Note 2: For the DOOD use case, we also do the copy instead of the volume mounting since that would require
        // to have the sourceDirectory path mounted from the host and this would put and leave files on the host which
        // would not work with parallel executions (think about multiple CI jobs executing in parallel on the same host)
        // and would also not be clean.
        String osName = System.getProperty("os.name").toLowerCase();
        if (isInAContainer() || osName.startsWith("mac os x")) {
            MountableFile mountableDirectory = MountableFile.forHostPath(sourceDirectory);
            container.withCopyFileToContainer(mountableDirectory, targetDirectory);
        } else {
            container.withFileSystemBind(sourceDirectory, targetDirectory);
        }
    }

It would be great if TC could stream the data instead of keeping it in memory. Is that possible?
Thanks

I'm currently look into this issue.
Can reproduce the error. Getting OOM errors for files 100mb locally.
Just from what I've gathered, it seems like it's possible to stream to container, I think under the hood it uses:
https://docs.docker.com/engine/api/v1.41/#tag/Container/operation/PutContainerArchive
I think the problem is that we create the Tar archive in memory - and so the whole file gets loaded into memory. One possible solution is to stream the tar archive to disk and then stream it to docker? Still looking into solutions though.

@REslim30 Thanks for looking into this, that sounds indeed like the right direction. @eddumelendez might share some more details since he was recently looking into a similar topic in the context of Jib integration.

Hello guys. FTR we're still getting this issue on the XWiki build.
01:36:19,047 [ERROR] There was an error in the forked process
01:36:19,047 [ERROR] Java heap space
01:36:19,047 [ERROR] java.lang.OutOfMemoryError: Java heap space
01:36:19,047 [ERROR]    at java.base/java.util.Arrays.copyOf(Arrays.java:3745)
01:36:19,047 [ERROR]    at java.base/java.io.ByteArrayOutputStream.grow(ByteArrayOutputStream.java:120)
01:36:19,047 [ERROR]    at java.base/java.io.ByteArrayOutputStream.ensureCapacity(ByteArrayOutputStream.java:95)
01:36:19,047 [ERROR]    at java.base/java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:156)
01:36:19,047 [ERROR]    at org.apache.commons.compress.utils.CountingOutputStream.write(CountingOutputStream.java:62)
01:36:19,047 [ERROR]    at org.apache.commons.compress.utils.FixedLengthBlockOutputStream$BufferAtATimeOutputChannel.write(FixedLengthBlockOutputStream.java:91)
01:36:19,047 [ERROR]    at org.apache.commons.compress.utils.FixedLengthBlockOutputStream.writeBlock(FixedLengthBlockOutputStream.java:259)
01:36:19,047 [ERROR]    at org.apache.commons.compress.utils.FixedLengthBlockOutputStream.maybeFlush(FixedLengthBlockOutputStream.java:169)
01:36:19,047 [ERROR]    at org.apache.commons.compress.utils.FixedLengthBlockOutputStream.write(FixedLengthBlockOutputStream.java:206)
01:36:19,047 [ERROR]    at org.apache.commons.compress.archivers.tar.TarArchiveOutputStream.write(TarArchiveOutputStream.java:713)
01:36:19,047 [ERROR]    at java.base/java.io.InputStream.transferTo(InputStream.java:705)
01:36:19,047 [ERROR]    at java.base/java.nio.file.Files.copy(Files.java:3119)
01:36:19,047 [ERROR]    at org.testcontainers.utility.MountableFile.recursiveTar(MountableFile.java:362)
01:36:19,047 [ERROR]    at org.testcontainers.utility.MountableFile.recursiveTar(MountableFile.java:371)
01:36:19,047 [ERROR]    at org.testcontainers.utility.MountableFile.recursiveTar(MountableFile.java:371)
01:36:19,047 [ERROR]    at org.testcontainers.utility.MountableFile.recursiveTar(MountableFile.java:371)
01:36:19,047 [ERROR]    at org.testcontainers.utility.MountableFile.transferTo(MountableFile.java:327)
01:36:19,047 [ERROR]    at org.testcontainers.containers.ContainerState.copyFileToContainer(ContainerState.java:306)
01:36:19,047 [ERROR]    at org.testcontainers.containers.ContainerState.copyFileToContainer(ContainerState.java:282)
01:36:19,047 [ERROR]    at org.testcontainers.containers.GenericContainer$$Lambda$603/0x00000001003ca040.accept(Unknown Source)
01:36:19,047 [ERROR]    at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:684)
01:36:19,047 [ERROR]    at org.testcontainers.containers.GenericContainer.tryStart(GenericContainer.java:430)
01:36:19,047 [ERROR]    at org.testcontainers.containers.GenericContainer.lambda$doStart$0(GenericContainer.java:344)
01:36:19,047 [ERROR]    at org.testcontainers.containers.GenericContainer$$Lambda$571/0x00000001003a1440.call(Unknown Source)
01:36:19,047 [ERROR]    at org.rnorth.ducttape.unreliables.Unreliables.retryUntilSuccess(Unreliables.java:81)
01:36:19,047 [ERROR]    at org.testcontainers.containers.GenericContainer.doStart(GenericContainer.java:334)
01:36:19,047 [ERROR]    at org.testcontainers.containers.GenericContainer.start(GenericContainer.java:322)
01:36:19,047 [ERROR]    at org.xwiki.test.docker.internal.junit5.DockerTestUtils.startContainerInternal(DockerTestUtils.java:218)
01:36:19,047 [ERROR]    at org.xwiki.test.docker.internal.junit5.DockerTestUtils.startContainer(DockerTestUtils.java:181)
01:36:19,047 [ERROR]    at org.xwiki.test.docker.internal.junit5.AbstractContainerExecutor.start(AbstractContainerExecutor.java:56)
01:36:19,047 [ERROR]    at org.xwiki.test.docker.internal.junit5.servletengine.ServletContainerExecutor.startContainer(ServletContainerExecutor.java:323)
01:36:19,048 [ERROR]    at org.xwiki.test.docker.internal.junit5.servletengine.ServletContainerExecutor.start(ServletContainerExecutor.java:155)
01:36:19,048 [ERROR]
01:36:19,048 [ERROR]    at org.apache.maven.plugin.surefire.booterclient.ForkStarter.fork(ForkStarter.java:628)
01:36:19,048 [ERROR]    at org.apache.maven.plugin.surefire.booterclient.ForkStarter.run(ForkStarter.java:285)
01:36:19,048 [ERROR]    at org.apache.maven.plugin.surefire.booterclient.ForkStarter.run(ForkStarter.java:250)
01:36:19,048 [ERROR]    at org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeProvider(AbstractSurefireMojo.java:1203)
01:36:19,048 [ERROR]    at org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeAfterPreconditionsChecked(AbstractSurefireMojo.java:1055)
01:36:19,048 [ERROR]    at org.apache.maven.plugin.surefire.AbstractSurefireMojo.execute(AbstractSurefireMojo.java:871)

Yes I have issue on 1.19.0, 1.18.x, only working with 1.18.0

I proposed a working workaround here https://github.com/testcontainers/testcontainers-java/issues/7239#issuecomment-1746603941

Seems same as https://github.com/testcontainers/testcontainers-java/issues/7239

Seems same as https://github.com/testcontainers/testcontainers-java/issues/7239

I am now also hit by this when using 1.19.1
Currently it is not possible to copy larger files or a directory into the container without getting an OOM.
There are a couple of other tickets which are also related to this OOM (#1348, #7239,#2863, #4203), so I think this is not an edge usecase.

I just tried to upgrade to 1.19.3 (from 1.17.6) and I am also hit with OutOfMemoryError: Java heap space:
org.apache.maven.surefire.booter.SurefireBooterForkException: There was an error in the forked process
Java heap space
java.lang.OutOfMemoryError: Java heap space
	at java.base/java.util.Arrays.copyOf(Arrays.java:3541)
	at java.base/java.io.ByteArrayOutputStream.toByteArray(ByteArrayOutputStream.java:187)
	at org.testcontainers.containers.ContainerState.copyFileToContainer(ContainerState.java:337)
	at org.testcontainers.containers.ContainerState.copyFileToContainer(ContainerState.java:308)
	at org.testcontainers.containers.GenericContainer$$Lambda/0x00007f8cc0cd0860.accept(Unknown Source)
	at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:986)
	at org.testcontainers.containers.GenericContainer.tryStart(GenericContainer.java:444)
	at org.testcontainers.containers.GenericContainer.lambda$doStart$0(GenericContainer.java:357)
	at org.testcontainers.containers.GenericContainer$$Lambda/0x00007f8cc0cc4000.call(Unknown Source)
	at org.rnorth.ducttape.unreliables.Unreliables.retryUntilSuccess(Unreliables.java:81)
	at org.testcontainers.containers.GenericContainer.doStart(GenericContainer.java:347)
	at org.testcontainers.containers.GenericContainer.start(GenericContainer.java:333)
	at org.testcontainers.containers.ContainerisedDockerCompose.invoke(ContainerisedDockerCompose.java:64)
	at org.testcontainers.containers.ComposeDelegate.runWithCompose(ComposeDelegate.java:254)
	at org.testcontainers.containers.ComposeDelegate.createServices(ComposeDelegate.java:163)
	at org.testcontainers.containers.DockerComposeContainer.start(DockerComposeContainer.java:137)

A fix proposal has been pushed here https://github.com/testcontainers/testcontainers-java/issues/7239
it's working for me

@gba-foundever Do you mean this patch: https://github.com/alexanderankin/testcontainers-java/commit/21cbc05d6633bcff443478c7844851fbf5e1ea66 ? Thx

@vmassol yes

@kiview Hello! Any chance of having the patch at https://github.com/alexanderankin/testcontainers-java/commit/21cbc05d6633bcff443478c7844851fbf5e1ea66 be included in the next release of TC by any chance? :) Thx

Does someone have a TC fork with the patch applied and released? :)

Is it possible to give some priority to this? I believe putting the docker compose file in the root of the project is something a lot of people do (Even start.spring.io generates it like that). All the duplicates of this issue (#7239, #1348, #2863) are a testament to this being quite an issue for a lot of people currently.
Even some mechanism to tell testcontainers to not copy every file, but just .env for example would already be great I guess.


java.util.concurrent.TimeoutException: com.neovisionaries.ws.client.WebSocket.finalize() timed out after 10 seconds

java.util.concurrent.TimeoutException: com.neovisionaries.ws.client.WebSocket.finalize() timed out after 10 seconds
'com.neovisionaries:nv-websocket-client:2.2'

It looks like a network issue which is often observed. What I can say for your short message is only this.


Issues with drag and drop on DockLayout

DockPanel drag and drop event handlers (beside on 'p-dragenter') don't check MIME type which can conflict with other drag and drop logic on container element.
I created fork since I want to keep using 0.6.1 but I think you should fix it too in future release.
This is what fixed issues for me:
https://github.com/phosphorjs/phosphor/compare/master...mladen107:master

If the mime type is incorrect, it doesn't accept the event, so it shouldn't get any further drag/drop events (which means it doesn't need to check the mimetype). Can you be a bit more specific with an example?

https://github.com/phosphorjs/phosphor/blob/master/src/ui/dockpanel.ts#L413-L418
If the default is not prevented on p-dragenter, no further drag/drop events are sent. If they are being sent, that's probably a bug.
  private _evtDragEnter(event: IDragEvent): void {
    // If the factory mime type is present, mark the event as
    // handled in order to get the rest of the drag events.
    if (event.mimeData.hasData(FACTORY_MIME)) {
      event.preventDefault();
      event.stopPropagation();
    }
  }

I have div element that contains dockpanel. My div element has attached listeners to 'p-' drag/drop events. Until I made my fix on each drag/drop event handler of dockpanel, dockpanel was handling all other events beside 'p-dragenter'. After my fix I finally started receiving events on div and it didn't break dockpanel's default logic.
So I guess there is bug in drag/drop machinery.
Also previously I had native (html5) drag and drop. I didn't have to use dragenter to make working dragover and drop events(tested on chrome, firefox, safari and edge). I didn't read HTML5 drag/drop spec so I'm not sure what should be correct behavior.

Just to add, I dockpanel was reacting on mimeData that doesn't contain data for FACTORY_MIME key. That's the easiest way to reproduce bug.

I'm unable to reproduce what you describe. If I drag over a dock panel with a mimedata which doesn't contain the 'application/vnd.phosphor.widget-factory' mimetype, the only drag event that the dock panel receives is p-dragenter.

If you have a self-contained simple example that I can run which reproduces the problem, please open a new issue.


Feedback on the new live demo

I've noticed the link in the readme to the live demo viewer has been changed.
Readme used to point to http://gltf.ux3d.io/
Now it points to http://github.khronos.org/glTF-WebGL-PBR/
The two implementations have different UIs and features.

I think the new hover/click controls are very nice. Though the equations are incomprehensible to our QA and Artists, who form the bulk of our viewer userbase. If possible, I'd like to see a return of the additional debug view modes from the former viewer: Normal, Occlusion, Emissive, and Alpha.

It was helpful in the old one to enable/disable IBL and Punctual, as well as switch IBLs.
It's very nice being able to rotate and pitch the punctual light in the new one.
I miss being able to change the background color.
The new viewer doesn't seem to support drag-n-drop?
Thanks to everyone working on these viewers, they're great resources for us to use!

It has not changed, you are just on the master branch.
This is the "correct" branch:
https://github.com/KhronosGroup/glTF-WebGL-PBR/tree/reference-viewer

Oh, my apologies! Shouldn't the master branch Readme point to the reference viewer branch then?

No problem. As soon as the Khronos 3D formats group agreed on the math of the reference viewer, it will be merged into the master branch. At the moment, the master branch contains legacy code.


Fix #1093

Hello,
This PR fixes the problem discovered in #1093.
Thanks for any comment.

Thank you for the feedback. CHANGELOG modified.

Looks good now.  As soon as PR #1123 is done, you'll be able to rebase this one and the test failures will be fixed.

Thank you. I'm wating for PR #1123 now.

You should be able to rebase now.

Thank you. The PR is rebased.

@tathanhdinh the commit log could receive some love, don't you think?
I know the issue is detailed but it'd be good if the commit log could be extended with it.


Initial setup

This PR includes

ICAs

Gradient-based ICA
Natural gradient-based ICA
Fast ICA

Test scripts
Documents

Codecov Report

:exclamation: No coverage uploaded for pull request base (main@b5e6e3f). Click here to learn what that means.
The diff coverage is n/a.

@@           Coverage Diff           @@
##             main       #2   +/-   ##
=======================================
  Coverage        ?   50.39%
=======================================
  Files           ?        2
  Lines           ?      252
  Branches        ?        0
=======================================
  Hits            ?      127
  Misses          ?      125
  Partials        ?        0

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 b5e6e3f...2763289. Read the comment docs.


Fix ReplaceTokens bug in AttributeRouteModel

Add scope to track when the token ends.
Addresses #6105

Thanks for fixing this. It will be in 3.0 preview3.

Was fun! Thanks for guidance!


Add AWS site health monitors (if we can)

I'm thinking we should close this issue.
We need more information about why we would want to implement health checks.

Do we have any services that routinely go down, for which we don't have monitoring already? In other words, do we have an immediate need? (I can't think of much beyond just pinging the site domains.)
Or, are we trying to check off a box to make our publishing model more appealing to other departments? If so, is this still a valuable/viable goal for us, given recent restructuring?

In either case, I think we should be more intentional about which services specifically need health checking. Then we could create separate tickets in each case.
@zakiya, what are your thoughts here?

This ties into a discussions that have come up on both cannabis and covid19. We have a solution for uptime monitoring with Google Console that has been implemented for cannabis and innovations.ca.gov.
The idea of checking for certain elements and/or regular visual regression testing has also come up. I agree that this is something we need to discuss before we throw ourselves into implementation.

Gonna close this. Other tasks can be opened if necessary


API capability for downloading runInfoNNN.tar.gz file

In order to de-multiplex NGS raw data and run Galaxy workflow, runInfoNNN.tar.gz file is needed from PEGR, where NNN is the run number.
Currently the file can be downloaded through graphical interface by going to "Sequencing Runs"- > "RUN ID: NNN" -> "Download Run Info Files".
Would you please create an API such that the file can be downloaded through command line with an API call.
Please note that inclusion of the first line in pegr_run_info.txt file where the address of sequencer is given, is not necessary to be provided.

Related to #240


Table: better way to show most important information

Based on the customer feedback:

[x] Filter branches by prefix (e.g. show only branches like "dvc-exps/%")
[x] Setting to show only the top of each branch
[x] Remove all records where one column is not defined (only-changed?) @shcheklein to confirm if this is about experiments or columns.
[x] Add a way to reset number of commits per branch. As a first step show a reset action per branch + we agreed to spend some time on the performance of these actions (especially - since we don't have to send any commands). That should mitigate the issue with being able to quickly see only HEADs.

Filtering branches by a prefix is already possible:
https://github.com/iterative/vscode-dvc/assets/37993418/41d094cf-6857-47df-acd9-f2b154d38414

Remove all record where one column is not defined

This cannot currently be done via filters because of https://github.com/iterative/vscode-dvc/pull/1732. I think we should reverse that decision. I am not sure what the effort is without looking but we could potentially only apply that logic to queued experiments.

I've added a "not missing" filter which will be available in the next release
https://github.com/iterative/vscode-dvc/assets/37993418/93a3b8a9-c3e5-4c2f-865b-75282d665c00
I've also limited the number of commits for selected branches to 1.

Feedback:

Old commits are still there and the extension lags a lot (it's almost impossible to use it because I'm waiting for several seconds for every single action)
Non-null filtering does not help. I filtered the output by final_score is not null, but it seems that the filtering is done on branch level rather that commit level

Can it be for some branches that we hit +/- we remembered their state? Should we have a reset to defaults or something similar?

Old commits are still there and the extension lags a lot (it's almost impossible to use it because I'm waiting for several seconds for every single action)

Lag/performance is a separate story that we need to address.

Non-null filtering does not help. I filtered the output by final_score is not null, but it seems that the filtering is done on branch level rather that commit level

Yes, my mistake. Filters only work on experiments not commits/branches. If we wanted to change this we could go back to the logic that we used for checkpoints. I.e we filter commits/branches but if a commit/branch does not meet the filter criteria but a single experiment under the parent meets the criteria then we would continue to show the parent as well as the unfiltered experiment.

Can it be for some branches that we hit +/- we remembered their state? Should we have a reset to defaults or something similar?

Yes, we only set the default value if the branch has never been seen before. We even save this value between sessions. We could use reset defaults or we could introduce an option that only shows the current commit for each selected branch (including the current one). The behaviour should change to only show the most recent commit for new branches.
There is also a command that is already available to flush the persisted state:

After running that command new branches should be shown with a single commit.

There is also a command that is already available to flush the persisted state:

☝🏻 a note on this. It will nuke all persisted state for the extension. That includes selected branches, experiments, etc.

Non-null filtering does not help. I filtered the output by final_score is not null, but it seems that the filtering is done on branch level rather that commit level

Branches/commits will now be filtered as well
Demo
https://github.com/iterative/vscode-dvc/assets/37993418/4d93a784-c3f7-4644-9460-6ef45010642e

@Danila89 we've implemented/made the first iteration of the original list. Please LMK if there is anything outstanding.
@shcheklein will follow up.

Finally it started to work fine in our scenario, thank you very much for the improvement!


Fix remove bot id from start of message

Coverage increased (+0.07%) to 95.708% when pulling aa83cc2723f875f5e73bce2fbe462c708c0c2345 on fix-remove-bot-id-frm-msg into 4b060e9002a8c9a66fe3eea3116a6abefb6a5116 on master.


Error creating rooms

When trying to create a new room after bridging a guild and opening a room channel, an Internal Server Error is thrown when the bot attempts to create the room:
mx-puppet-discord error logs:
Sep 13 10:21:01 matrix.[REMOVED] matrix-mx-puppet-discord[21748]: Sep-13 14:21:01.218 [PuppetBridge] info: Got request to bridge room puppetId=1 roomId=[REMOVED]
Sep 13 10:21:01 matrix.[REMOVED] matrix-mx-puppet-discord[21748]: Sep-13 14:21:01.223 [RoomSync] info: Fetching mxid for roomId [REMOVED] and puppetId -1
Sep 13 10:21:01 matrix.[REMOVED] matrix-mx-puppet-discord[21748]: Sep-13 14:21:01.231 [RoomSync] info: Channel doesn't exist yet, creating entry...
Sep 13 10:21:01 matrix.[REMOVED] matrix-mx-puppet-discord[21748]: Sep-13 14:21:01.232 [NamespaceHandler] info: Fetching new room override data...
Sep 13 10:21:01 matrix.[REMOVED] matrix-mx-puppet-discord[21748]: Sep-13 14:21:01.252 [bot-sdk-MatrixHttpClient] info: (REQ-14) GET http://matrix-nginx-proxy:12080/_matrix/client/r0/account/whoami
Sep 13 10:21:01 matrix.[REMOVED] matrix-mx-puppet-discord[21748]: Sep-13 14:21:01.280 [Util] info: Processing profile update...
Sep 13 10:21:01 matrix.[REMOVED] matrix-mx-puppet-discord[21748]: Sep-13 14:21:01.287 [bot-sdk-MatrixHttpClient] info: (REQ-15) POST http://matrix-nginx-proxy:12080/_matrix/client/r0/createRoom
Sep 13 10:21:01 matrix.[REMOVED] matrix-mx-puppet-discord[21748]: Sep-13 14:21:01.323 [bot-sdk-MatrixLiteClient] error: (REQ-15) {"errcode":"M_UNKNOWN","error":"Internal server error"}
Sep 13 10:21:01 matrix.[REMOVED] matrix-mx-puppet-discord[21748]: Sep-13 14:21:01.324 [RoomSync] error: Error fetching mxid: { errcode: 'M_UNKNOWN', error: 'Internal server error' }
Sep 13 10:21:01 matrix.[REMOVED] matrix-mx-puppet-discord[21748]: Sep-13 14:21:01.326 [MatrixEventHandler] error: Error handling appservice query.room { errcode: 'M_UNKNOWN', error: 'Internal server error' }

synapse error logs:
Sep 13 10:21:01 matrix.[REMOVED] matrix-synapse[12031]: 2021-09-13 14:21:01,163 - synapse.appservice.api - 120 - WARNING - GET-749 - query_alias to http://matrix-mx-puppet-discord:8432/rooms/%23_discordpuppet__[REMOVED] received 404

synapse worker error logs:
Sep 13 10:18:50 matrix.[REMOVED] matrix-synapse-worker-generic_worker-18111[12805]: 2021-09-13 14:18:50,319 - shared_secret_authenticator - 54 - INFO - POST-53 - Bad hmac value for user: @bot.matrix-reminder-bot:[REMOVED]
Sep 13 10:20:05 matrix.[REMOVED] matrix-synapse-worker-generic_worker-18111[12805]: 2021-09-13 14:20:05,718 - shared_secret_authenticator - 41 - INFO - POST-642 - Authenticating user: @[REMOVED]:[REMOVED]
Sep 13 10:20:05 matrix.[REMOVED] matrix-synapse-worker-generic_worker-18111[12805]: 2021-09-13 14:20:05,724 - shared_secret_authenticator - 63 - INFO - POST-642 - Authenticated user: @[REMOVED]:[REMOVED]
Sep 13 10:21:01 matrix.[REMOVED] matrix-synapse-worker-generic_worker-18111[12805]: 2021-09-13 14:21:01,315 - synapse.http.server - 93 - ERROR - POST-2296 - Failed handle request via 'RoomCreateRestServlet': <SynapseRequest at 0x7f58830ccb50 method='POST' uri='/_matrix/client/r0/createRoom' clientproto='HTTP/1.0' site=18111>
Sep 13 10:21:01 matrix.[REMOVED] matrix-synapse-worker-generic_worker-18111[12805]: Traceback (most recent call last):
Sep 13 10:21:01 matrix.[REMOVED] matrix-synapse-worker-generic_worker-18111[12805]: File "/usr/local/lib/python3.8/site-packages/synapse/http/server.py", line 258, in _async_render_wrapper
Sep 13 10:21:01 matrix.[REMOVED] matrix-synapse-worker-generic_worker-18111[12805]: callback_return = await self._async_render(request)
Sep 13 10:21:01 matrix.[REMOVED] matrix-synapse-worker-generic_worker-18111[12805]: File "/usr/local/lib/python3.8/site-packages/synapse/http/server.py", line 446, in _async_render
Sep 13 10:21:01 matrix.[REMOVED] matrix-synapse-worker-generic_worker-18111[12805]: callback_return = await raw_callback_return
Sep 13 10:21:01 matrix.[REMOVED] matrix-synapse-worker-generic_worker-18111[12805]: File "/usr/local/lib/python3.8/site-packages/synapse/rest/client/room.py", line 84, in on_POST
Sep 13 10:21:01 matrix.[REMOVED] matrix-synapse-worker-generic_worker-18111[12805]: info, _ = await self._room_creation_handler.create_room(
Sep 13 10:21:01 matrix.[REMOVED] matrix-synapse-worker-generic_worker-18111[12805]: File "/usr/local/lib/python3.8/site-packages/synapse/handlers/room.py", line 726, in create_room
Sep 13 10:21:01 matrix.[REMOVED] matrix-synapse-worker-generic_worker-18111[12805]: await directory_handler.create_association(
Sep 13 10:21:01 matrix.[REMOVED] matrix-synapse-worker-generic_worker-18111[12805]: File "/usr/local/lib/python3.8/site-packages/synapse/handlers/directory.py", line 162, in create_association
Sep 13 10:21:01 matrix.[REMOVED] matrix-synapse-worker-generic_worker-18111[12805]: await self._create_association(room_alias, room_id, servers, creator=user_id)
Sep 13 10:21:01 matrix.[REMOVED] matrix-synapse-worker-generic_worker-18111[12805]: File "/usr/local/lib/python3.8/site-packages/synapse/handlers/directory.py", line 88, in _create_association
Sep 13 10:21:01 matrix.[REMOVED] matrix-synapse-worker-generic_worker-18111[12805]: await self.store.create_room_alias_association(
Sep 13 10:21:01 matrix.[REMOVED] matrix-synapse-worker-generic_worker-18111[12805]: AttributeError: 'GenericWorkerSlavedStore' object has no attribute 'create_room_alias_association'

Troubleshooting steps:

deleted the mx-puppet-bridge postgres database
restarted all services (bot, synapse(+workers))
rejoin guilds (works fine)

Next steps: completely remove the bot, including registration and user accounts via synapse-admin

After a full reinstall, the same error is still received.
I suspect this may have more to do with using workers than this bot, but I'm not 100% sure.

Looks like a bug in synapse: https://github.com/matrix-org/synapse/issues/10716 with a merged PR.


support PySide6

Describe the solution you'd like
Are there plans to support PySide6 because Maya2025 has switched to it?

Yes, I've been working on it. We've dropped Py 2 support as we move towards PySide6. I can't promise a timeline, this is still mostly a side project for us. 🙂

I made some changes to get the UI up and running, but there are still a LOT of things to convert.

Here's the branch I've been working on. Most of the changes needed to get the editor open and doing the basics are in there: https://github.com/nxt-dev/nxt_editor/tree/features/qt/pyside_6

Thanks for sharing. I will pull your branch and check to see if I have something to contribute from my changes.

dev now supports PySide6. Still working out a few visual issues, but it's functional. You'll also need to use the latest dev branch of the core if you're trying to run in Python 3.11.


I need help ASAP i'm using prefix's and i wanna make ranks but when i do &4[Owner]&9 It Makes The User Name Red And at the begging there is [World]

I just need to know how to make user names custom colors they just turn red and have [world] every time no mater what :(
These are my plugins
world guard-6.2.1
worldedit-bukkit-<IP_ADDRESS>
vault
timelock
shopkeepers
setspawn
scoreboardstats
protocollib
permissionsEX
mulitvers-core
minigames
libsdisguises
imageonmap
essentialsX
essentialsSpawn EssentialsProtect EssentialsChat EssentialsAntibuild Essentials
cs-CoreLib
CreateYourOwnMenus
ClearLag
Citizens

I'm handling this in ticket 32874.  You can reply there if help is still needed.


DllExport doesn't compile when duplicate _ are present

Steps to reproduce:
. . .

DllExport -version: 1.7.4
Used Visual Studio / MSBuild / ...:

Visual Studio 2022 Preview
MSBuild: 17.1.0-preview-22055-02+797fd829a for .NET Framework
using System;
using System.Runtime.InteropServices;

namespace InnoSetup.dotnet
{
    public static class InnoSetup
    {
        public static Func<string, int, int> MessageBox { get; private set; } = (_, _) => throw new Exception(nameof(MessageBox));
        public static void SetMessageBoxCallback(Func<string, int, int> callback) => MessageBox = callback;
    }

    public static class Exports
    {
        public delegate int MessageBoxDelegate([MarshalAs(UnmanagedType.LPWStr)] string message, int options);
        [DllExport(nameof(RegisterMessageBoxCallback), CallingConvention = CallingConvention.StdCall)]
        public static void RegisterMessageBoxCallback(MessageBoxDelegate callback)
        {
            InnoSetup.SetMessageBoxCallback((message, options) => callback(message, options));
        }
    }
}

Hi, so interestingly it doesn't like the (_, _) => ...
If I change it to (a, b) => ... it's ok
Error message:
dotnet.il(121) : warning : Duplicate param name '_' in method '<.cctor>b__15_2' 	dotnet	...\packages\DllExport.1.7.4\tools\net.r_eg.DllExport.targets	76

If I compile from within Visual Studio I don't get the error, but if I call msbuild foo.sln it fails.
I then removed this nuget package and tried again and it succeeded.

In log you can find what instance is actually selected, for example

[Debug] Instance: 'C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\amd64\MSBuild.exe'

Also,

VSWhere is a better way to determine latest MSBuild:

hMSBuild is better due to backward compatibility with all products.
Since DllExport.bat was based on GetNuTool + hMSBuild, see related keys:

DllExport -h

-msb {path}           - Full path to specific msbuild.
-hMSBuild {args}      - Access to hMSBuild tool (packed) https://github.com/3F/hMSBuild
-GetNuTool {args}     - Access to GetNuTool (integrated) https://github.com/3F/GetNuTool
-debug                - To show additional information.

Tl;dr

(_, ) => throw new Exception(nameof(MessageBox));
...
dotnet.il(121) : warning : Duplicate param name '' in method '<.cctor>b__15_2' dotnet ...\packages\DllExport.1.7.4\tools\net.r_eg.DllExport.targets 76

I think this is expected behavior since I don't remember implementing any support for _ discards in a lambda. Thus, only if in future releases. Thanks for the report!


Did not expect to collide with a 1st-pass ExInfo during a EH stackwalk

Affected test:
JIT\Regression\CLR-x86-JIT\V1-M12-Beta2\b68872\b68872
JIT\Regression\JitBlue\GitHub_4044\GitHub_4044\GitHub_4044

The test seems to have two nested try blocks with the inner one being filtered.

The same crash repros with ProjectN as well. The problem is that the runtime does not handle  exceptions thrown from filters.
Minimal repro:
using System;

class C
{
    static void Main()
    {
        try
        {
            throw new Exception();
        }
        catch when (Throw())
        {
        }
    }

    static bool Throw()
    {
        throw new Exception();
    }
}


Versioning of the docs

Because Rancher goes through a lot of changes and will continue to change, we need a proper versioning system of the docs, similar to the Kubernetes docs.
Certain sections are getting hard to read because they contain information about multiple versions. If there's a dropdown menu that you can use to view older versions of the docs, things should become more clear.

The Longhorn docs versioned their Hugo site. The pull request for adding versioning to their Hugo site is https://github.com/longhorn/website/pull/47 I'm thinking we could use it as a model.

Closing in favor of https://github.com/rancher/docs/issues/2835


Is there a way to play the data received ?

Hi
i 've tried to play to data , and i found a way but the problem is that i want to append data to the player
but i can't figure it out.
please help
regards

@satyres ,

are you playing audio or video?

2)what do you mean by "append data to the player" ?
- do you mean add more audio or video on the end?
- do you mean metadata?
- or something else?
cheers

Hi
Thanks for your answser
i'm playing an audio radio stream ,
so i'm using AVAudioPlayer , the problem is after getting some amount of data i call
AVAudioPlayer and it play the data , but the problem is that the sound glitches because the AVAudioPlayer get new data
here is the code :
if audioData.length > 1024*100{
player = try AVAudioPlayer(data: audioData as Data, fileTypeHint: AVFileType.caf.rawValue)
player?.play()
}
so is there a way to append the data to AVAudioPlayer after getting the first byte to be played?
regards

@satyres just to be clear ..
are you in fact using CachingPlayerItem,
or, are you asking how to get started with it?
If you are already using CachingPlayerItem, everything is automatic and quite easy!

@smhk
Yes i'm already using it ,and i'm getting the bytes and it record
i want to play to data received on and recording at the same time
but i can't figure it out
regards

to set up your AVPlayer
let pi = CachingPlayerItem(url: .. string url .. )
pi.delegate = self
let avp = AVPlayer(playerItem: pi)
avp.automaticallyWaitsToMinimizeStalling = false

Then CPI will tell you when it is ready to play
avp.play()

@smhk
i've tried to play using delegate .
i got the message "cpi  says READY TO PLAY"
but there is no sound after calling avp.play() !
am i missing something ?
regards

@satyres I would strongly suggest
(1) just remove CPI from your project
(2) try getting it working normally with just AVAudioPlayer
(3) once it is working perfectly w/ AVAudioPlayer, just drop in CPI
(4) you will really have to ask on stackoverflow.com for general questions about getting AVAudioPlayer working - you can post all your code there and people are very fast/helpful
Good luck !

Ok i got the problem.
it works ,only with file with limited data (like the example)
but for live stream it doesn't work
how can i play the live data stream as soon as the buffer get the filled
regards

investigate
     func playerItemReadyToPlay(_ playerItem: CachingPlayerItem)
good luck

Hi
thank you for the hint , but i didn't figure it out.
i've tried to get the data and then passed to AVAudioPlayer , i can hear sound
but it stops and glitches , because i update all the data and i want to append it.
AVAudioPlayer doesn't have a method to append Data , so how can we do ?
playerItemReadyToPlay works only when the file has been cached , for endless stream how can we do
i'm sorry but i'm totally desperate.
any help please
regards

simply ask on Stackoverflow!   your problem does not relate to CPI. good luck !

@smhk
i did already , but no answer : https://stackoverflow.com/questions/60950374/how-to-append-data-to-avaudioplayer-live-audio-stream
regards


Fix for In-App Triggered Notifications

For a triggered SMS message, check if notification flag is set. If so, send to GCM service.

@conradsp Changes Looks OK. Please send PR with single commit, so that any committer can merge this code.

Will re-submit PR with single change


handle http2 statistics based on ENABLE_STATISTICS flag

handle http2 statistics consistently with HTTP and AJP listener, and reduce unnecessary overhead if ENABLE_STATISTICS is disabled

@neowu thanks for your PR! Your PR LGTM, I'll just double check that there was no reason for not setting the connectorStatistics as null (such as a race when statics is enabled, then I'll get back to this PR and merge it. I'll keep you posted.

Issue: https://issues.redhat.com/browse/UNDERTOW-1952


Expose the Sass files themselves in package.json

Enables importing them easily through the use of eg. https://www.npmjs.com/package/sass-module-importer
With that module one would simply do @import "spinkit"; and get all of the files or do @import "spinkit/scss/spinners/1-rotating-plane"; to import a specific spinner, all without having to know exactly where npm put the module, which if Spinkit is a sub-dependency of another package will be hard due to npm 3:s flattening of the dependency tree.

Obsolete as of #143 🙏


Preedit and candidate changes buffer modification flag.

What steps will reproduce the problem?
1. setup mozc.el under emacs.
2. activate mozc, and input something in preedit on unmodified buffer.
3. push ESC for clear preedit string.

What is the expected output?
The buffer modification flag isn't changed. (keep unmodified)

What do you see instead?
The buffer modification flag is turned on.

What version of the product are you using? On what operating system?
2.16.1924.102

Please provide any additional information below.
A propose patch is attached.

Original issue reported on code.google.com by<EMAIL_ADDRESS>on 24 Nov 2014 at 11:14
Attachments:

mozc-el-diff

Thank you for the report.  d7b6196aeac52dd908ca051ba65e97b389f4503a should addressed this issue.
As for the patch, we do not accept any patch from external contributor as explained in CONTRIBUTING.md.  We appreciate for your understanding.


Enabling CCD (Continuous Collision Detection)

Is there currently a way to enable CCD? I couldn't find a solution on how to enable the Pair Flag eDETECT_CCD_CONTACT for the Filter Shader.
As described here: https://gameworksdocs.nvidia.com/PhysX/4.0/documentation/PhysXGuide/Manual/AdvancedCollisionDetection.html#continuous-collision-detection

The default filter shader sets the flags present in word2 of the PxFilterDatas of the involved collision objects: https://github.com/fabmax/PhysX/blob/5951e9dbe1e4d003bb7524cfa6aeca19356dc838/physx/source/physxwebbindings/src/PhysXJs.h#L170
So it should be sufficient to set the eDETECT_CCD_CONTACT flag in the simulation filter data of your actors. I'm actually using this in my engine.

Perfect, thanks!


window management: window move screen {number}

for moving a window to a different screen: https://github.com/dwiel/talon_community/blob/master/misc/window_snap.py

I have a WIP implementation for this and #217 on my window_snap branch, but it's waiting on first-party support in Talon for window resizing on Windows & Linux. It may already work on Mac, but I can't test it yet.

I've got this version as well. Which works on mac, not sure about others
https://github.com/knausj85/knausj_talon/compare/master...dwiel:master#diff-c8f5f3c289379630eff2dd117390ecbb

Just saw your PR dont worry about my implementation