[BUG] 'queue=False' appears not to disable queue prepopulation

Describe the bug
While using "queue=False" in i.e. config = picam2.create_still_configuration({"size": (1280, 800)}, raw={'format': 'R10'}, queue=False, controls=controls), it doesn't appear to accomplish the design intent of keeping the output buffer from pre-filling.
To Reproduce
I'm using an OV9281 sensor (arducam module in this case) with a Pi 4B.
import time
from picamera2 import Picamera2, Preview
from libcamera import controls

picam2 = Picamera2()
controls = {"ExposureTime": 100000, "AnalogueGain": 1.0}
config = picam2.create_still_configuration({"size": (1280, 800)}, raw={'format': 'R10'}, queue=False, controls=controls)
picam2.configure(config)
# In fact, picam2.start() would do this anyway for us:
picam2.start_preview(Preview.NULL)

picam2.start()
time.sleep(3)

count = 0
if __name__ == '__main__':
    #r = picam2.capture_request() # Fill the buffer with an initial frame so we know the one we try to get will be fresh
    while True:
        time.sleep(1)
        count += 1
        # metadata = picam2.capture_file(f"test-{count}.jpg")
        start = time.time()
        #r.release()
        r = picam2.capture_request()
        elapsed = time.time()-start
        print(f"Elapsed: {elapsed}")
        meta = r.get_metadata()
        print(meta)
        r.save("main", f"test-{count}.jpg")
        r.release()
        # print(metadata)
        print(f"Triggered {count}")

picam2.stop()

Expected behaviour
This snippet SHOULD take one 100ms capture on-demand once per while loop, then sleep a while (a second). The idea is that I want a single frame as close to right-after-when-I-request-it as possible.
Having read <IP_ADDRESS> in the Picamera2 manual, I figured I'd use the queue=False option in my configuration to make sure the queue was never pre-filled with prior-to-trigger image data.
As written, the call to picam2.capture_request() should be blocking and take at least as long as the exposure. I'd expect that the "elapsed time" counter should always be >> 100ms: 100ms to expose, plus however much to read out, process, compute, update apt, check stocks, phone home, etc.
In this case, however, my "elapsed" timer SOMETIMES takes >> 100ms, and sometimes returns within single-digit milliseconds. See console output below.
Console Output, Screenshots
Note below that all snapshots take well over 100ms to return, except the 3rd trigger which returns in only 4.9ms
Elapsed: 0.16357421875
{'SensorTimestamp':<PHONE_NUMBER>000, 'ScalerCrop': (0, 0, 1280, 800), 'DigitalGain': 1.0000009536743164, 'SensorBlackLevels': (4096, 4096, 4096, 4096), 'AeLocked': True, 'FrameDuration': 100036, 'AnalogueGain': 1.0, 'Lux': 22.06434440612793, 'FocusFoM': 5392, 'ExposureTime': 99999}
Triggered 1
Elapsed: 0.1396324634552002
{'SensorTimestamp':<PHONE_NUMBER>000, 'ScalerCrop': (0, 0, 1280, 800), 'DigitalGain': 1.0000009536743164, 'SensorBlackLevels': (4096, 4096, 4096, 4096), 'AeLocked': True, 'FrameDuration': 100036, 'AnalogueGain': 1.0, 'Lux': 22.03728675842285, 'FocusFoM': 5391, 'ExposureTime': 99999}
Triggered 2
Elapsed: 0.004918098449707031
{'SensorTimestamp':<PHONE_NUMBER>000, 'ScalerCrop': (0, 0, 1280, 800), 'DigitalGain': 1.0000009536743164, 'SensorBlackLevels': (4096, 4096, 4096, 4096), 'AeLocked': True, 'FrameDuration': 100036, 'AnalogueGain': 1.0, 'Lux': 22.044885635375977, 'FocusFoM': 5403, 'ExposureTime': 99999}
Triggered 3
Elapsed: 0.1906599998474121
{'SensorTimestamp':<PHONE_NUMBER>000, 'ScalerCrop': (0, 0, 1280, 800), 'DigitalGain': 1.0000009536743164, 'SensorBlackLevels': (4096, 4096, 4096, 4096), 'AeLocked': True, 'FrameDuration': 100036, 'AnalogueGain': 1.0, 'Lux': 22.053913116455078, 'FocusFoM': 5368, 'ExposureTime': 99999}
Triggered 4
Elapsed: 0.19505882263183594
{'SensorTimestamp':<PHONE_NUMBER>000, 'ScalerCrop': (0, 0, 1280, 800), 'DigitalGain': 1.0000009536743164, 'SensorBlackLevels': (4096, 4096, 4096, 4096), 'AeLocked': True, 'FrameDuration': 100036, 'AnalogueGain': 1.0, 'Lux': 22.055377960205078, 'FocusFoM': 5328, 'ExposureTime': 99999}
Triggered 5
Elapsed: 0.19681406021118164
{'SensorTimestamp':<PHONE_NUMBER>000, 'ScalerCrop': (0, 0, 1280, 800), 'DigitalGain': 1.0000009536743164, 'SensorBlackLevels': (4096, 4096, 4096, 4096), 'AeLocked': True, 'FrameDuration': 100036, 'AnalogueGain': 1.0, 'Lux': 22.062702178955078, 'FocusFoM': 5463, 'ExposureTime': 99999}
Triggered 6

Workaround :
I believe the above is a bug: perhaps "queue=False" gets ignored if there's only one allocated memory queue, assuming that the user won't want a frame "only very occasionally"?
In any event, the following configuration of the script works around the issue by deliberately holding the queue until right before the desired capture. We start by capturing a request right before entering the loop, then from that point on we only release that request right before making a new one.
The fact that this workaround works as expected makes me think the base case is indeed buggy and I'm not simply misunderstanding usage.
import time
from picamera2 import Picamera2, Preview
from libcamera import controls

picam2 = Picamera2()
controls = {"ExposureTime": 100000, "AnalogueGain": 1.0}
config = picam2.create_still_configuration({"size": (1280, 800)}, raw={'format': 'R10'}, queue=False, controls=controls)
picam2.configure(config)
# In fact, picam2.start() would do this anyway for us:
picam2.start_preview(Preview.NULL)

picam2.start()
time.sleep(3)

count = 0
if __name__ == '__main__':
    r = picam2.capture_request() # Fill the buffer with an initial frame so we know the one we try to get will be fresh
    while True:
        time.sleep(1)
        count += 1
        # metadata = picam2.capture_file(f"test-{count}.jpg")
        start = time.time()
        r.release()
        r = picam2.capture_request()
        elapsed = time.time()-start
        print(f"Elapsed: {elapsed}")
        meta = r.get_metadata()
        print(meta)
        r.save("main", f"test-{count}.jpg")
        #r.release()
        # print(metadata)
        print(f"Triggered {count}")

picam2.stop()

And the output. Note that the minimum elapsed capture time is 152ms:
Elapsed: 0.1956775188446045
{'SensorTimestamp':<PHONE_NUMBER>000, 'ScalerCrop': (0, 0, 1280, 800), 'DigitalGain': 1.0000009536743164, 'SensorBlackLevels': (4096, 4096, 4096, 4096), 'AeLocked': True, 'FrameDuration': 100036, 'AnalogueGain': 1.0, 'Lux': 22.440120697021484, 'FocusFoM': 5148, 'ExposureTime': 99999}
Triggered 1
Elapsed: 0.15225839614868164
{'SensorTimestamp':<PHONE_NUMBER>000, 'ScalerCrop': (0, 0, 1280, 800), 'DigitalGain': 1.0000009536743164, 'SensorBlackLevels': (4096, 4096, 4096, 4096), 'AeLocked': True, 'FrameDuration': 100036, 'AnalogueGain': 1.0, 'Lux': 22.417917251586914, 'FocusFoM': 5349, 'ExposureTime': 99999}
Triggered 2
Elapsed: 0.18652868270874023
{'SensorTimestamp':<PHONE_NUMBER>000, 'ScalerCrop': (0, 0, 1280, 800), 'DigitalGain': 1.0000009536743164, 'SensorBlackLevels': (4096, 4096, 4096, 4096), 'AeLocked': True, 'FrameDuration': 100036, 'AnalogueGain': 1.0, 'Lux': 22.452198028564453, 'FocusFoM': 5353, 'ExposureTime': 99999}
Triggered 3
Elapsed: 0.19385337829589844
{'SensorTimestamp':<PHONE_NUMBER>000, 'ScalerCrop': (0, 0, 1280, 800), 'DigitalGain': 1.0000009536743164, 'SensorBlackLevels': (4096, 4096, 4096, 4096), 'AeLocked': True, 'FrameDuration': 100036, 'AnalogueGain': 1.0, 'Lux': 22.430110931396484, 'FocusFoM': 5308, 'ExposureTime': 99999}
Triggered 4
Elapsed: 0.18757224082946777
{'SensorTimestamp':<PHONE_NUMBER>000, 'ScalerCrop': (0, 0, 1280, 800), 'DigitalGain': 1.0000009536743164, 'SensorBlackLevels': (4096, 4096, 4096, 4096), 'AeLocked': True, 'FrameDuration': 100036, 'AnalogueGain': 1.0, 'Lux': 22.414443969726562, 'FocusFoM': 5424, 'ExposureTime': 99999}
Triggered 5
Elapsed: 0.19856715202331543
{'SensorTimestamp':<PHONE_NUMBER>000, 'ScalerCrop': (0, 0, 1280, 800), 'DigitalGain': 1.0000009536743164, 'SensorBlackLevels': (4096, 4096, 4096, 4096), 'AeLocked': True, 'FrameDuration': 100036, 'AnalogueGain': 1.0, 'Lux': 22.442598342895508, 'FocusFoM': 5386, 'ExposureTime': 99999}
Triggered 6
Elapsed: 0.1977245807647705
{'SensorTimestamp':<PHONE_NUMBER>000, 'ScalerCrop': (0, 0, 1280, 800), 'DigitalGain': 1.0000009536743164, 'SensorBlackLevels': (4096, 4096, 4096, 4096), 'AeLocked': True, 'FrameDuration': 100036, 'AnalogueGain': 1.0, 'Lux': 22.397911071777344, 'FocusFoM': 5296, 'ExposureTime': 99999}
Triggered 7
Elapsed: 0.2108614444732666
{'SensorTimestamp':<PHONE_NUMBER>000, 'ScalerCrop': (0, 0, 1280, 800), 'DigitalGain': 1.0000009536743164, 'SensorBlackLevels': (4096, 4096, 4096, 4096), 'AeLocked': True, 'FrameDuration': 100036, 'AnalogueGain': 1.0, 'Lux': 22.412031173706055, 'FocusFoM': 5342, 'ExposureTime': 99999}
Triggered 8
Elapsed: 0.20072627067565918
{'SensorTimestamp':<PHONE_NUMBER>000, 'ScalerCrop': (0, 0, 1280, 800), 'DigitalGain': 1.0000009536743164, 'SensorBlackLevels': (4096, 4096, 4096, 4096), 'AeLocked': True, 'FrameDuration': 100036, 'AnalogueGain': 1.0, 'Lux': 22.511882781982422, 'FocusFoM': 5301, 'ExposureTime': 99999}
Triggered 9
Elapsed: 0.18394255638122559
{'SensorTimestamp':<PHONE_NUMBER>000, 'ScalerCrop': (0, 0, 1280, 800), 'DigitalGain': 1.0000009536743164, 'SensorBlackLevels': (4096, 4096, 4096, 4096), 'AeLocked': True, 'FrameDuration': 100036, 'AnalogueGain': 1.0, 'Lux': 22.493953704833984, 'FocusFoM': 5321, 'ExposureTime': 99999}
Triggered 10
Elapsed: 0.2063596248626709
{'SensorTimestamp':<PHONE_NUMBER>000, 'ScalerCrop': (0, 0, 1280, 800), 'DigitalGain': 1.0000009536743164, 'SensorBlackLevels': (4096, 4096, 4096, 4096), 'AeLocked': True, 'FrameDuration': 100036, 'AnalogueGain': 1.0, 'Lux': 22.491409301757812, 'FocusFoM': 5355, 'ExposureTime': 99999}
Triggered 11
Elapsed: 0.19242191314697266
{'SensorTimestamp':<PHONE_NUMBER>000, 'ScalerCrop': (0, 0, 1280, 800), 'DigitalGain': 1.0000009536743164, 'SensorBlackLevels': (4096, 4096, 4096, 4096), 'AeLocked': True, 'FrameDuration': 100036, 'AnalogueGain': 1.0, 'Lux': 22.49312400817871, 'FocusFoM': 5355, 'ExposureTime': 99999}
Triggered 12
Elapsed: 0.2053236961364746
{'SensorTimestamp':<PHONE_NUMBER>000, 'ScalerCrop': (0, 0, 1280, 800), 'DigitalGain': 1.0000009536743164, 'SensorBlackLevels': (4096, 4096, 4096, 4096), 'AeLocked': True, 'FrameDuration': 100036, 'AnalogueGain': 1.0, 'Lux': 22.47867202758789, 'FocusFoM': 5327, 'ExposureTime': 99999}
Triggered 13
Elapsed: 0.20030546188354492
{'SensorTimestamp':<PHONE_NUMBER>000, 'ScalerCrop': (0, 0, 1280, 800), 'DigitalGain': 1.0000009536743164, 'SensorBlackLevels': (4096, 4096, 4096, 4096), 'AeLocked': True, 'FrameDuration': 100036, 'AnalogueGain': 1.0, 'Lux': 22.511098861694336, 'FocusFoM': 5376, 'ExposureTime': 99999}
Triggered 14

Hardware :
Pi 4B with ArduCam OV9281 B0165 module.
Additional context
My true motive for this is to timestamp the frame capture as accurately as possible. I know that neither python nor linux are real-time and thus there are any number of preemptions that could cause jitter in my "timestamp-then-snap" delay, but I'm hunting for ways to minimize that. I know the returned "SensorTimestamp" is quite precise and accurate to the true second-shutter timing, but as far as I'm aware there's no way to accurately translate that to system time, correct? Whatever I can do to get a precise time.time() for the start/center/end of the shutter-open, I'd quite like to do, up to and including preempt_rt, but I'm not sure how dramatically that would help.

Not directly related to the bug but in my mission to get accurate timestamps: I just came across https://github.com/raspberrypi/picamera2/issues/703 and it seems my notion that the "SensorTimestamp" and time.monotonic_ns() come from different domains (VPU vs CPU) is actually incorrect.
With that knowledge, I modified my test code a little, not WITHOUT the workaround present:
count = 0
if __name__ == '__main__':
    #r = picam2.capture_request() # Fill the buffer with an initial frame so we know the one we try to get will be fresh
    while True:
        time.sleep(1)
        count += 1
        # metadata = picam2.capture_file(f"test-{count}.jpg")
        start = time.monotonic_ns()
        #r.release()
        r = picam2.capture_request()
        end = time.monotonic_ns()
        meta = r.get_metadata()
        print(f"Elapsed1: {(end-start)/1000000} Elapsed since frame: {(end-meta['SensorTimestamp'])/1000000}")
        print(meta)
        r.save("main", f"test-R8-maybenoisereduction-{count}.jpg")
        r.release()
        # print(metadata)
        print(f"Triggered {count}")

You see it now reports the time.monotonic_ns() elapsed while picam2.capture_request() runs, as well as the time elapsed between the frame timestamp and the very next line after capture_request()
What's throwing me for a loop now is that if you look at the output below, the "frame to next line" delta is always between 17 and 21ms, even when the capture_request() returns in only 4ms.
Elapsed1: 162.409195 Elapsed since frame: 19.740034
{'SensorTimestamp':<PHONE_NUMBER>000, 'ScalerCrop': (0, 0, 1280, 800), 'DigitalGain': 1.0000009536743164, 'SensorBlackLevels': (4096, 4096, 4096, 4096), 'AeLocked': True, 'FrameDuration': 100036, 'AnalogueGain': 1.0, 'Lux': 20.51514434814453, 'FocusFoM': 4854, 'ExposureTime': 99999}
Triggered 1
Elapsed1: 142.64831 Elapsed since frame: 18.66787
{'SensorTimestamp':<PHONE_NUMBER>000, 'ScalerCrop': (0, 0, 1280, 800), 'DigitalGain': 1.0000009536743164, 'SensorBlackLevels': (4096, 4096, 4096, 4096), 'AeLocked': True, 'FrameDuration': 100036, 'AnalogueGain': 1.0, 'Lux': 20.523059844970703, 'FocusFoM': 4723, 'ExposureTime': 99999}
Triggered 2
Elapsed1: 186.57649 Elapsed since frame: 18.562124
{'SensorTimestamp':<PHONE_NUMBER>000, 'ScalerCrop': (0, 0, 1280, 800), 'DigitalGain': 1.0000009536743164, 'SensorBlackLevels': (4096, 4096, 4096, 4096), 'AeLocked': True, 'FrameDuration': 100036, 'AnalogueGain': 1.0, 'Lux': 20.54002571105957, 'FocusFoM': 4742, 'ExposureTime': 99999}
Triggered 3
Elapsed1: 197.941533 Elapsed since frame: 17.099872
{'SensorTimestamp':<PHONE_NUMBER>000, 'ScalerCrop': (0, 0, 1280, 800), 'DigitalGain': 1.0000009536743164, 'SensorBlackLevels': (4096, 4096, 4096, 4096), 'AeLocked': True, 'FrameDuration': 100036, 'AnalogueGain': 1.0, 'Lux': 20.53316307067871, 'FocusFoM': 4899, 'ExposureTime': 99999}
Triggered 4
Elapsed1: 125.71644 Elapsed since frame: 20.704109
{'SensorTimestamp':<PHONE_NUMBER>000, 'ScalerCrop': (0, 0, 1280, 800), 'DigitalGain': 1.0000009536743164, 'SensorBlackLevels': (4096, 4096, 4096, 4096), 'AeLocked': True, 'FrameDuration': 100036, 'AnalogueGain': 1.0, 'Lux': 20.53297996520996, 'FocusFoM': 4892, 'ExposureTime': 99999}
Triggered 5
Elapsed1: 2.547462 Elapsed since frame: 18.628827
{'SensorTimestamp':<PHONE_NUMBER>000, 'ScalerCrop': (0, 0, 1280, 800), 'DigitalGain': 1.0000009536743164, 'SensorBlackLevels': (4096, 4096, 4096, 4096), 'AeLocked': True, 'FrameDuration': 100036, 'AnalogueGain': 1.0, 'Lux': 20.511856079101562, 'FocusFoM': 4842, 'ExposureTime': 99999}
Triggered 6
Elapsed1: 196.682543 Elapsed since frame: 18.538436
{'SensorTimestamp':<PHONE_NUMBER>000, 'ScalerCrop': (0, 0, 1280, 800), 'DigitalGain': 1.0000009536743164, 'SensorBlackLevels': (4096, 4096, 4096, 4096), 'AeLocked': True, 'FrameDuration': 100036, 'AnalogueGain': 1.0, 'Lux': 20.53684425354004, 'FocusFoM': 4913, 'ExposureTime': 99999}
Triggered 7
Elapsed1: 195.320534 Elapsed since frame: 14.01243
{'SensorTimestamp':<PHONE_NUMBER>000, 'ScalerCrop': (0, 0, 1280, 800), 'DigitalGain': 1.0000009536743164, 'SensorBlackLevels': (4096, 4096, 4096, 4096), 'AeLocked': True, 'FrameDuration': 100036, 'AnalogueGain': 1.0, 'Lux': 20.515575408935547, 'FocusFoM': 4885, 'ExposureTime': 99999}
Triggered 8
Elapsed1: 154.029186 Elapsed since frame: 18.789735
{'SensorTimestamp':<PHONE_NUMBER>000, 'ScalerCrop': (0, 0, 1280, 800), 'DigitalGain': 1.0000009536743164, 'SensorBlackLevels': (4096, 4096, 4096, 4096), 'AeLocked': True, 'FrameDuration': 100036, 'AnalogueGain': 1.0, 'Lux': 20.533973693847656, 'FocusFoM': 4696, 'ExposureTime': 99999}
Triggered 9
Elapsed1: 198.9581 Elapsed since frame: 18.578327
{'SensorTimestamp':<PHONE_NUMBER>000, 'ScalerCrop': (0, 0, 1280, 800), 'DigitalGain': 1.0000009536743164, 'SensorBlackLevels': (4096, 4096, 4096, 4096), 'AeLocked': True, 'FrameDuration': 100036, 'AnalogueGain': 1.0, 'Lux': 20.50151252746582, 'FocusFoM': 4874, 'ExposureTime': 99999}
Triggered 10
Elapsed1: 199.78176 Elapsed since frame: 18.536307
{'SensorTimestamp':<PHONE_NUMBER>000, 'ScalerCrop': (0, 0, 1280, 800), 'DigitalGain': 1.0000009536743164, 'SensorBlackLevels': (4096, 4096, 4096, 4096), 'AeLocked': True, 'FrameDuration': 100036, 'AnalogueGain': 1.0, 'Lux': 20.5031681060791, 'FocusFoM': 4611, 'ExposureTime': 99999}
Triggered 11
Elapsed1: 3.880729 Elapsed since frame: 18.518122
{'SensorTimestamp':<PHONE_NUMBER>000, 'ScalerCrop': (0, 0, 1280, 800), 'DigitalGain': 1.0000009536743164, 'SensorBlackLevels': (4096, 4096, 4096, 4096), 'AeLocked': True, 'FrameDuration': 100036, 'AnalogueGain': 1.0, 'Lux': 20.511371612548828, 'FocusFoM': 4838, 'ExposureTime': 99999}
Triggered 12
Elapsed1: 113.08176 Elapsed since frame: 18.759167
{'SensorTimestamp':<PHONE_NUMBER>000, 'ScalerCrop': (0, 0, 1280, 800), 'DigitalGain': 1.0000009536743164, 'SensorBlackLevels': (4096, 4096, 4096, 4096), 'AeLocked': True, 'FrameDuration': 100036, 'AnalogueGain': 1.0, 'Lux': 20.479738235473633, 'FocusFoM': 4793, 'ExposureTime': 99999}
Triggered 13
Elapsed1: 199.974833 Elapsed since frame: 18.773278
{'SensorTimestamp':<PHONE_NUMBER>000, 'ScalerCrop': (0, 0, 1280, 800), 'DigitalGain': 1.0000009536743164, 'SensorBlackLevels': (4096, 4096, 4096, 4096), 'AeLocked': True, 'FrameDuration': 100036, 'AnalogueGain': 1.0, 'Lux': 20.447607040405273, 'FocusFoM': 4478, 'ExposureTime': 99999}
Triggered 14

Does this imply that the "SensorTimestamp" is simply when the frame got returned, rather than being precisely tied to when the frame hit the SOC coming from the camera?

That all jives with info from this issue I opened with libcamera (since their documentation about the timestamp is a little ambiguous and not technically quite accurate) https://bugs.libcamera.org/show_bug.cgi?id=196, thank you!

You'll need to set the buffer_count to at least 2, otherwise you're guaranteed to drop every other camera frame.

I think what I'm trying to do is exactly this. I explicitly don't want a frame that was started earlier than I asked for, and I don't care about dropping frames.
For instance, say my exposure time is a full second, and "processing" takes half a second. I'm trying to minimize total latency from frame start to computation finish, NOT trying to "return data as soon as possible"
For example A, let's say it's T0 and I'm "ready" so I command a capture, wait 1s, get a frame, process for half a second, and 1.5s plus or minus some jitter later, I return data with a total latency of around 1.5s from image start to data out.
For example B, let's say it's T0 and I'm "ready" so I command a capture, but there's already a frame in the buffer that finished exposure 100ms ago, and that frame is returned to me instantly to process on, so I take my half second and do that. In this case, since the frame STARTED 1.1s before it was returned to me, I do my processing and return data with a full latency of 1.6s.
The data in B gets returned sooner than the data in A, BUT the data corresponds to a more-stale sample than in A.
My understanding with the queue=false scenario is that it SHOULD force scenario A, without my silly workaround of "bogart the buffer so the camera can't fill it until I say so" - which it seems not to be doing in my case.
But maybe you're suggesting a best-of-both worlds? I never want to receive a buffer that's already filled, but I wouldn't mind receiving a buffer that's in the process of filling. As long as the buffer corresponds to an exposure-in-progress-or-readout, that still implies a minimized total shutter-to-processed latency, rather than a filled buffer which means "image is no longer fresh"

If you just want to minimise the time from the frame starting to processing it, then I think that setting queue=False probably does this, and the frames you get will be the very next ones to pop out of libcamera. But the behaviour of the system will still be jittery (Linux is not very real-time after all, and Python even less so), and interpreting the timestamps is not so straightforward, as per the other details in this discussion.
Maybe you could set a pre_callback which records the current time in the CompletedRequest object. That should give you the time (as best we can get hold of it) at which the frame pops out of libcamera. Would that help you to sort out what is going on?


feat: edit this page link

Web
Mobile

That's great!
Just a small tweak: Can you add display: flex; align-items: center; to the link (to better align icon and text)?

fixed and force pushed.

Thank you!


Can I feed the populate hook an id from a separate join table ?

populate(fieldName: string, { service: ServiceName, field = fieldName })
I am using postgres and have a many-to-many relation. How can I retrieve an item based on an id in another table? I don't have a service for the relation.
Can the populate hook do this?

The signature of your function is for the deprecated version of the populate hook. So, to start, ypu should use the more full featured  new version https://docs.feathersjs.com/v/auk/hooks/common/populate.html
Neither populate hook does a m:m join. However you can write your own custom hook to do it for your table.


Company Page - Contract View- Create Customized new Filter Area

Problem-
User dont want additional filter in this Area,
Solution
Create New Filter area for this View
Technical Detail -
Currently We have not created any special filter area for Different Views,
If this is required than new section needed
Design
@vinpahilwani Please Provide how many filters required in Contact View
Time Required - 0.5 - 1 Day

We can wait its not urgent "Not Required Now"

coding for different view Show / hide is time consuming so leaving for now


Disable autoselection of the value on open

When the popup opens, it auto selects the value at the top. This brings up the keyboard when you are doing it on mobile. Is there anyway to disable this auto selection?

Thats a valid use case.  Unfortunately, because mobile wasn't really in the scope of the app it was created for, it was definitely not a use case I was concerned with.  I'll get this added as soon as I can.

If you pass in an options and throw an if statement around these lines, that should do the trick:
https://github.com/brianpkelley/md-color-picker/blob/develop/src/js/mdColorPicker.js#L760-L761

This has been added in the plugin-rewrite.  Unfortunately I'm swamped with work at the moment so it may be a few weeks before I wrap up the refactor.
https://github.com/brianpkelley/md-color-picker/blob/feature/Plugin-Rewrite/src/js/mdColorPicker.js#L470-L480

sounds good, thanks


[Test] Solve certificate issue with radios

Try not using --no-install-recommends and see if this has something to do with the issue

Available in 2022-10-30


Support Pydap 3.2, including on Python 3

[x] Closes #1174
[x] Tests added / passed
[x] Passes git diff upstream/master | flake8 --diff
[x] Fully documented, including whats-new.rst for all changes and api.rst for new API

Thanks @laliberte for doing the hard work that made this possible!


Remove concatenation of empty string in ResultBuilder::reconstructExpression()

When if( m_exprComponents.op == "" ) is true, there is no need to concatenate with m_exprComponents.op.

Agreed.


Bump controller-runtime to 0.4.0

What this PR does / why we need it:
This should not be a breaking change as we were already depending on CR few commits behind this, just that now it was officially released. We should probably do tests agains pre-1.16 kubernetes on this anyway just to be sure.
There were 2 "breaking" changes in CR that affected us:

fake client started adding resource version https://github.com/kubernetes-sigs/controller-runtime/pull/620/files which affected the step_test because one of the resources had this extra field
https://github.com/kubernetes-sigs/controller-runtime/pull/675/files - that was actually bug on our side that CR just made obvious. Read #1073 for full context

Fixes #

pushed the mod tidy


License?

Very helpful!  Could you add/specify a license?

Yup, done. Public domain via the "unlicense". (see the just-commited file "LICENSE")

Yup, done. Public domain via the "unlicense". (see the just-commited file "LICENSE")

Thanks!

Thanks!


HTML head base tag breaks exceptions folding

The existence of a
<base href="https://confluence.mywebsite.com"/>

breaks any anchor usage.

Close strator-dev/greenpepper#27


Fault when opening some Buurtbatterij LESses

When opening some older lesses on the Buurtbatterij, I get the following fault message:

This is the same for the LESses 'Showcase buurtbatterij - verzwaren', 'Showcase buurtbatterij -BAU', Showcase buurtbatterij -buurtbatterij'.
Can you fix this, becasue I woant to use these cases in a presentation.
@JeroenvdLogt ; @ThomBuijs  FYI

The topologies were owned by the Quintel user and had been marked as private. Try it now @MarjoleinSchwachofer; hopefully they should be working for you again.

Some now work, but 'Showcase buurtbatterij - BAU'  still doesn't work

Sorry! I must have missed that one. It should now be fixed.

yes, it now works. Thanks for the quick solution.


XY Chart: Show the entries as a filtered tree

requires #43
The left part of the view showing the entries should be a filtered tree, with the possibility to check elements to display their data.

Fixed with commit 2d38260dd1159adef10b379c72636b5029564fab


No zoom on scope

Really simple yet nice feature to have, might be useful for some people, what it does is there is no zoom on scope.

Good for raging :D


Add s390x support

Add s390x support to rancher/rancher
Part of https://github.com/rancher/rancher/issues/35501


(v2) feat: complete color support

This commit adds a new function Complete that replaces the old CompleteColor type. It returns a CompleteFunc which takes three colors and returns the appropriate one based on the given color profile.

I see CompleteColor still exists in compat, is it needed for AdaptiveColor support?


batch: singleton seq scan on local mode

Describe the bug
Currently, when scanning from a singleton mview, we still schedule multiple scans.
To Reproduce
create table t (v int);
create materialized view mv as select v from t order by v limit 10;

explain verbose select * from mv;
                          QUERY PLAN
--------------------------------------------------------------
 BatchExchange { order: [], dist: [Single] }
   BatchScan { table: mv, columns: [mv.v], distribution: [] }

The distribution is [], that is, HashShard with empty keys. This is incorrect, we should use Single instead.
https://github.com/singularity-data/risingwave/blob/eb8109fc122ad51a8ccfcf4fc1efc03d79bfdb0a/src/frontend/src/optimizer/plan_node/batch_seq_scan.rs#L75-L93
#4153 introduced a fix while commented out, since it won't work on local mode now. We should fix this.
Expected behavior
                          QUERY PLAN
---------------------------------------------------------------
 BatchScan { table: mv, columns: [mv.v], distribution: Single }

Additional context
#4153 fixes the similar issue of StreamScan.

@xxchan Could you please help to take a look?

Well this problem is hard to find cuz the execution works fine and we can get the results. 👍

Agreed that HashShard(vec![]) should not a valid expression in our system.

This is a known issue, another case the table scan maybe singleton is partition prunning.

I think we should fix it in fragmenter, since we will move root fragment execution into frontend later.


Ite2: fix some wording issue for download page

make some more change per the feedback

@MSraye : Thanks for your contribution! The author, @stevestein, has been notified to review your proposed change.

Closing this one - per https://github.com/MicrosoftDocs/sql-docs/pull/1779


Adding idCulThei1 EAR

Assembly review request

ToLID: idCulThei1
Species: Culex theileri
Project: ERGA-BGE
Affiliation: Sanger

Ok

yes

Hi Dom @DomAbsolon,
Thanks for submitting yet another tricky assembly. I'm sure you guys will be really happy not to see any more Culex genomes. Generally the scaffolding itself looks perfect, I have just found a number of regions that look to have retained haplotypes and from the stats it looks like you already had to remove quite a number. I have put with a star those that I am less sure about. Hopefully a quick look-through for you as well.
Many thanks again
Potential retained duplication SUPER_1 around 45.5Mb, 108Mb, 154.9Mb, 198.7Mb, 305.3Mb, 333.8Mb

SUPER_2 around 32.9Mb*, 42.3Mb, 148.3Mb (hapdup with 53.2Mb), 167.7Mb, 187.1Mb*, 206.9Mb & 208.8Mb, 248.7Mb*

SUPER_3 looks good to me

Hi @DomAbsolon have you had a chance to look through the suggested edits? I don't think it should take long to turn this around and get it submitted

@tbrown91 I have uploaded new map for you to check. If you're happy with it I will remake the EAR. https://tolqc.cog.sanger.ac.uk/erga-bge/insects/Culex_theileri/assembly/curated/idCulThei1.1/ear_v2/idCulThei1.1_normal.pretext

Hi @DomAbsolon Thanks for the new map. The map overall is looking good. I wonder if something happened with your super_2_unloc sequence - it looks like the first 2Mb have ended up at the end of SUPER_2:

Here's my edit:
https://box.fu-berlin.de/s/psS7A6q8wiA4Poc
Otherwise I'm happy with the rest of the assembly

Oh sorry yeah you're right. I'll re-unloc (must have miss painted) and make a new ear to upload

Hi @DomAbsolon
Can you share the savestate with the latest proposed changes so @tbrown91 can have a look and move forward to approve this one? Thx!

Hi, there's no save state to be shared I don't think. I am waiting for the EAR to be regenerated. Should be up in the next day or so.

Thanks @DomAbsolon I'm really happy with this one.
Please no more Culex's


Hungry Games Init

Want to start the HungryGames game/system

Closing since Killian is setting this up externally. Out-of-scope for RTByte.


Merge oref0-setup instructions to master (from dev)

I think we're about ready to start making oref0-setup the default.  It still has some rough edges, but it's way easier to use (and support) than manual builds.
Anything we need to fix up in dev before we merge to master?

I had already some time trying to understand the first instructions when you suggested going through the oref0-set up... so I was exposed to both. My comments so far:
first instructions help you understand the system from a programming point of view, while this could be good for some people for other could be extremely rough I think. The oref0 definitely helps one focus on the actual diabetes care concepts more quickly and with less distractions. I think this is definitely a right move although definitely there are clarifications to do.
As I move on through the process. I'll comment back later on again.

Definitely update it to the new set up.  Way easier.

+1 for @scottleibrand (resolving loop list conflicts), given feedback in Gitter & here, for going ahead and merging to master. If anyone looks at this in the future, please note that the "manual setup" instructions are still part of the docs, but have been moved downstream as part of the manual setup section.


private imports

When you have something like import weakref in .pyx, then dir(...) will show it as part of module.
In 0.14 we got support for @cython.internal to hide classes, would be nice to get same thing for imports.

This isn't really a bug report, more a question is better asked on the cython-users@ list.


Upgrading from PHP version 7.x to version 8.x BE CAREFUL OF YOUR PLUGINS

All:
This is more of an fyi for those of you who are upgrading from version 7.x to version 8.x. The old 'shortcode' plugin is NOT compatiable with php8.1. I removed it and it fixed everything. You get the horrible error message:
Server Error
Sorry, something went terribly wrong!

E_NOTICE - spl_autoload_register(): Argument #2 ($do_throw) has been ignored, spl_autoload_register() will always throw
For further details please review your logs/ folder, or enable displaying of errors in your system configuration.

I assume you meant PHP version 7 to 8 as Grav is at 1.7 currently.
Actually shortcode plugin is fully PHP 8.1 compatible, but if you were on a very old version, it's possible that it was a version that was not compatible.  All the core Team Grav and TrilbyMedia plugins are 8.1 compatible as is Grav itself of course.
It's always tricky changing PHP versions if you are running code that was released prior to the version and perhaps is not 100% compatible.  The best approach is always be running the latest versions of everything (Grav, Plugins, Themes, etc), and then upgrade your PHP version.  This way you ensure you are running any PHP-specific fixes before you upgrade the underlying PHP that runs everything.


Introduce the CopyTypes trait and the TypeMapping type.

This is built off of #1588
This replaces all instances of the manual implementation of copy_types with the CopyTypes trait.

after this goes in, I will take some of that refactoring and apply it here as well so we have the best of both worlds

Great! Also note: #1591 and #1592, which refactor the type engine significantly. But, both of those are ready to go in ASAP, if they would be helpful to your changes 😄


K8S removes LGTM label without a reason

See: https://github.com/kubernetes/contrib/pull/1670

Bot seems to not compare time between a /lgtm cancel and a manual label application? @hongchaodeng or @apelisse can one of you take a look?

I'll take a look at it.

Yeah, it doesn't check when the lgtm label was added. It will just remove it as long as the last comment is /lgtm cancel. The easy work-around if it happens to you is to do /lgtm ...
Can you have a look @hongchaodeng ?

We fixed this. Closing.


add snow API integration

we can follow this guide for docs  strings https://sphinxcontrib-napoleon.readthedocs.io/en/latest/example_google.html please also check the spacing between sections :)


Adding new charts for private DNS

Hi all
I need to get a second external dns controller and nginx ingress working for internal DNS for webhooks and other components.  I need both internal and external ingress for the webhooks and other components because of the VPN connection we use into AWS.  The problem is that jx gitops update is adding a new line in the values array for a values.yaml.gotmpl file, and that file is
overwriting some of the values I am setting.
I have added a new directory:
helmfiles/external-dns-private

In that directory I have added
helmfile.yaml
filepath: ""
environments:
  default:
    values:
    - jx-values.yaml
namespace: external-dns-private
repositories:
- name: bitnami
  url: https://charts.bitnami.com/bitnami
- name: stable
  url: https://charts.helm.sh/stable
- name: ingress-nginx
  url: https://kubernetes.github.io/ingress-nginx
releases:
- chart: bitnami/external-dns
  version: 6.0.2
  condition: jxRequirementsIngressExternalDNS.enabled
  name: external-dns-private
  values:
  - values.yaml.gotmpl
  - jx-values.yaml
  - ../../versionStream/charts/bitnami/external-dns/values.yaml.gotmpl
- chart: ingress-nginx/ingress-nginx
  version: 3.12.0
  name: nginx-ingress-private
  values:
  - nginx-values.yaml.gotmpl
  - jx-values.yaml
  - ../../versionStream/charts/ingress-nginx/ingress-nginx/values.yaml.gotmpl
templates: {}
renderedvalues: {}

When I run jx gitops update I am getting  the following line added to the values section.
This is causing some of my values to be overwritten. What options do I have?
 values:
 - ../../versionStream/charts/bitnami/external-dns/values.yaml.gotmpl

when we've had similar issues, we figure that If you move the auto-added line to be the first, rather than the last one in the list then your values will override the ones from versionStream
e.g.
- chart: bitnami/external-dns
  version: 6.0.2
  condition: jxRequirementsIngressExternalDNS.enabled
  name: external-dns-private
  values:
  - ../../versionStream/charts/bitnami/external-dns/values.yaml.gotmpl
  - values.yaml.gotmpl
  - jx-values.yaml

does that help?

To make jx gitops skip updating the values of a release you add the label values.jenkins-x.io: lock to the release:
  labels:
    values.jenkins-x.io: lock


Docker image references "static" dir, doesnt exist?

Hello!
Project looks great! I'm building a Kubernetes one-click installer for microbin for https://pibox.io - but ran into an issue. When building the image for ARM64 (or any arch), I fail to copy /usr/src/microbin/static https://github.com/szabodanika/microbin/blob/master/Dockerfile#L23
It looks like that directory has been renamed "templates" in https://github.com/szabodanika/microbin/commit/4cc737731add523845814b23c00f2ffcd98e6166
Is the fix as easy as changing the line to:
COPY --from=builder /usr/src/microbin/templates /usr/local/bin/templates

I'll test this now, but figured you might want to know about it! ❤

Hi @erulabs, thanks for letting me know about this! You are right, the static folder previously contained the water.css stylesheet, but that has been moved into an askama template so that there aren't any resources outside the binary itself. The folder simply doesn't need to be copied over now, so that line can actually be safely deleted from the dockerfile.

Just an FYI if you're interested, this is how the water.css file is served now, and how other static resources will be served in the future:
https://github.com/szabodanika/microbin/blob/4cc737731add523845814b23c00f2ffcd98e6166/src/endpoints/static_resources.rs
This allows me to contain all the resources in the binary and have complete control over how they're served as well.
I will update the Dockerfile soon and if it works fine, I'll push the change.


ailuromania, chubbed

This pull request was generated by the 'mq' tool
[test]
flake rate: 0.4
logical conflict every: 100
sleep for: 300s
[pullrequest]
requests per hour: 30
deps=[a,c]

/trunk merge


Anything on Laravel 9 and PHP 8 support?

  Problem 1
    - nette/schema is locked to version v1.2.1 and an update of this package was not requested.
    - nette/schema v1.2.1 requires php >=7.1 <8.1 -> your php version (8.1.2) does not satisfy that requirement.
  Problem 2
    - nette/utils is locked to version v3.2.2 and an update of this package was not requested.
    - nette/utils v3.2.2 requires php >=7.2 <8.1 -> your php version (8.1.2) does not satisfy that requirement.
  Problem 3
    - phpspec/prophecy is locked to version 1.13.0 and an update of this package was not requested.
    - phpspec/prophecy 1.13.0 requires php ^7.2 || ~8.0, <8.1 -> your php version (8.1.2) does not satisfy that requirement.
  Problem 4
    - nette/schema v1.2.1 requires php >=7.1 <8.1 -> your php version (8.1.2) does not satisfy that requirement.
    - league/config v1.1.1 requires nette/schema ^1.2 -> satisfiable by nette/schema[v1.2.1].
    - league/config is locked to version v1.1.1 and an update of this package was not requested.

can i work this issue

you can open a terminal and write ->"composer update " work fine

I can work on this issue and update the LARAVEL 9

its work? or update php version


Detail thread safety

Ref material:
https://docs.hdfgroup.org/hdf5/v1_12/_m_t.html
https://portal.hdfgroup.org/display/knowledge/Questions+about+thread-safety+and+concurrent+access

with non-multithread support
q)a:10?enlist .hdf5.write_name
q)b:.hdf5.readData[.hdf5.fname]
q)b peach a
'error opening file
  [2]  /src/q/hdf5.q:106: .hdf5.readData:{[fname;dname]
  typ:$[isAttr[fname;dname;"datatype_kdb"];readAttr[fname;dname;"datatype_kdb"];"*"];
        ^

with multithread support (hdf5 rebuilt with ./configure --enable-threadsafe --disable-hl --prefix=/hdf5/hdf5-1.10.4/cbuild_threaded)
q)a:10?enlist .hdf5.write_name
q)b:.hdf5.readData[.hdf5.fname]
q)b peach a
HDF5-DIAG: Error detected in HDF5 (1.10.4) thread<PHONE_NUMBER>16128:
  #000: H5F.c line 509 in H5Fopen(): unable to open file
    major: File accessibilty
    minor: Unable to open file
  #001: H5Fint.c line 1400 in H5F__open(): unable to open file
    major: File accessibilty
    minor: Unable to open file
  #002: H5Fint.c line 1583 in H5F_open(): file is already open for read-only
    major: File accessibilty
    minor: Unable to open file
'error opening file
  [2]  /src/q/hdf5.q:106: .hdf5.readData:{[fname;dname]
  typ:$[isAttr[fname;dname;"datatype_kdb"];readAttr[fname;dname;"datatype_kdb"];"*"];

Details added to README regarding threaded/concurrent access.
.hdf5.isThreadsafe[] (returns bool) added as extra api call to detect whether hdf5 lib used was built to support threading.
Changed the following to open file in read only mode (rather than read/write)

.hdf5.fileSize
.hdf5.dataSize
.hdf5.isAttr
.hdf5.isObject
.hdf5.getDataShape
.hdf5.getAttrShape
.hdf5.readData
.hdf5.readAttrDataset
.hdf5.copyObject (read file)


Dynamically set/add Configuration for rate limiting

Expected Behavior / New Feature
For every re-route, we need to add
"RateLimitOptions": {
"ClientWhitelist": [],
"EnableRateLimiting": true,
"Period": "10s",
"PeriodTimespan": 3,
"Limit": 1
}
Now, if I want to fetch this configuration from a database or any file at run time and assign it for specific routes
For eg"
Startup.cs
ConfigureServices()
{
services.AddOcelot().AddRateLimitingConfiguration( Datatable or file )
}

@neetra Hi Netra!
Could you look at linked PR please?
This PR contains new Ocelot feature to load configuration from memory, from dynamic FileConfiguration object. You can load data from DB, from anywhere and construct the configuration on the fly.
Enjoy after upcoming release soon.


Installation with brew cask install doesnt work

Running brew cask install vimmotion displays the error message
 Updating Homebrew... ==> Downloading https://github.com/dwarvesf/VimMotionApp/releases/download/v1.2. Already downloaded: /Users/christian/Library/Caches/Homebrew/downloads/cf3c0f58dd5775b2510c3330f8723133bdd88878fe042f2a2c22e275ac4186b7--VimMotion.1.2.dmg ==> Verifying SHA-256 checksum for Cask 'vimmotion'. ==> Installing Cask vimmotion ditto: WARNING: bom /var/folders/2b/ryjl62js723c_x6sjlkvbgl00000gn/T/20200915-3074-da05j4.bom contains no files, nothing copied ==> Purging files for version 1.2.2 of Cask vimmotion Error: It seems the App source '/usr/local/Caskroom/vimmotion/1.2.2/VimMotion.app' is not there.

We are unable to reproduce the bug. Please clean up - reset your brew and try again.
brew update-reset
brew update
brew doctor
Those brew commands may help.

After reseting Brew - Installations works
Thanks


Infinite loop Vulnerability in commons-compress library version being used

The commons-compress library version that is being used (1.24.0) has a vulnerability as reported here: https://security.snyk.io/vuln/SNYK-JAVA-ORGAPACHECOMMONS-6254296
We want to use the https://github.com/google/libphonenumber library in our company but that has a transitive dependency on commons-compress, but due to the vulnerability we are not getting a go ahead from our infosec team. Would appreciate if the version of commons-compress is bumped up to 1.26.0

Checking

https://github.com/GoogleCloudPlatform/appengine-plugins/pull/1014 will address it. Currently blocked by a CI failure.

Thank you for looking into this on priority !

@suztomo Once this change is merged, we will need to uptake the new version of appengine-plugins in https://github.com/GoogleCloudPlatform/appengine-plugins/tree/main/app-maven-plugin and then use the new version of app-maven-plugin in https://github.com/google/libphonenumber

I've never used https://github.com/google/libphonenumber. Where do you see libphonenumber using appengine-plugins? It's very unlikely a Java library has dependency on an appengine plugin.

I've never used https://github.com/google/libphonenumber. Where do you see libphonenumber using appengine-plugins? It's very unlikely a Java library has dependency on an appengine plugin.

@suztomo It's a transitive dependency. libphonenumber has a dependency on app-maven-plugin which in turn has a dependency on appengine-plugins-core that is using the vulnerable version of commons-compress

I need to learn more. Where do you see the transitive dependency?
https://central.sonatype.com/artifact/com.googlecode.libphonenumber/libphonenumber => app-maven-plugin does not appear there.
The repository does not have "app-maven-plugin":
suztomo@suztomo2:~$ git clone https://github.com/google/libphonenumber
Cloning into 'libphonenumber'...
remote: Enumerating objects: 60426, done.
remote: Counting objects: 100% (1186/1186), done.
remote: Compressing objects: 100% (587/587), done.
remote: Total 60426 (delta 521), reused 1064 (delta 471), pack-reused 59240
Receiving objects: 100% (60426/60426), 226.39 MiB | 34.27 MiB/s, done.
Resolving deltas: 100% (34469/34469), done.
suztomo@suztomo2:~$ cd libphonenumber/
suztomo@suztomo2:~/libphonenumber$ grep -ir app-maven-plugin .
suztomo@suztomo2:~/libphonenumber$

Sorry, there was a typo
Check this in libphonenumber pom.xml
      <plugin>
        <groupId>com.google.cloud.tools</groupId>
        <artifactId>appengine-maven-plugin</artifactId>
        <version>2.4.4</version>
        <configuration>
        </configuration>
      </plugin>

Can you give me the URL of the file you're looking at?
https://central.sonatype.com/artifact/com.googlecode.libphonenumber/libphonenumber/overview does not have it.

@suztomo Here is the file: https://github.com/google/libphonenumber/blob/master/java/demo/pom.xml

Thank you. That’s a pom.xml for demonstration on how to use the libphonenumber. It’s irrelevant to the dependencies of libphonenumber.

Thank you. That’s a pom.xml for demonstration on how to use the libphonenumber. It’s irrelevant to the dependencies of libphonenumber.

Right, only the demo module has the dependency that leads to the vulnerable library down the dependency graph. We have added the following depedency in our project which pulls in the dependencies of the demo module as well.
        <dependency>
            <groupId>com.googlecode.libphonenumber</groupId>
            <artifactId>libphonenumber</artifactId>
            <version>8.13.32</version>
        </dependency>

That dependency declaration of <artifactId>libphonenumber</artifactId> does not pull the demo module. You can confirm that via “mvn dependency:tree” and https://central.sonatype.com/artifact/com.googlecode.libphonenumber/libphonenumber/overview .

That dependency declaration of <artifactId>libphonenumber</artifactId> does not pull the demo module. You can confirm that via “mvn dependency:tree” and https://central.sonatype.com/artifact/com.googlecode.libphonenumber/libphonenumber/overview .

This is great news, thank you !


Library support for multidimensional arrays

Library support for multidimensional arrays
Abstract and conceptual overview
Q# currently provides the array type 'T[] for any type 'T. By using arrays of arrays (i.e.: 'T[][]), Q# allows for representing multidimensional data. As discussed at https://github.com/microsoft/qsharp-language/pull/49, however, using nested arrays in this way presents a number of limitations.
This proposal builds on the work in https://github.com/microsoft/qsharp-language/pull/49 by providing a number of different library functions and operations to support the new multidimensional arrays in the corresponding Q# language proposal. For details on the motivation, justification, and context for both proposals, please see https://github.com/microsoft/qsharp-language/pull/49.
Proposal
New and modified functions and operations
This proposal introduces new functions and operations for creating, manipulating, and transforming multidimensional arrays (i.e.: values of type [|'T|], [||'T||], and so forth), extending the Microsoft.Quantum.Array namespace to support the new types introduced by https://github.com/microsoft/qsharp-language/pull/49. To distinguish functions acting on multidimensional arrays of distinct ranks, suffixes are used to denote the rank each function or operation acts on (e.g.: EmptyArray2 returns a value of type [|'T|] while EmptyArray3 returns a value of type [||'T||]). For brevity, we list only the rank-1, rank-2, and rank-3 variants of each proposed addition here, but the pattern should be continued to include multidimensional arrays of rank up to and including 8. For details on how to remove these suffixes using bounded polymorphism, please see "Relationship to Q# language feature proposals," below.
As an implementation detail, all of the functions and operations proposed here can be written in pure Q#, using the functions described in https://github.com/microsoft/qsharp-language/pull/49 to create and deconstruct multidimensional arrays from their underlying strides, offsets, and sizes.

namespace Microsoft.Quantum.Arrays

Concatenation

function Concatenated<'T>(left : 'T[], right : 'T[]) : ['T]
function Concatenated2<'T>(axis : Int, left : [|'T|], right : [|'T|]) : [|'T|]
function Concatenated3<'T>(axis : Int, left : [||'T||], right : [||'T||]) : [||'T||]

Array creation

Multidimensional from jagged:
These functions convert jagged (aka nested) arrays to multidimensional arrays, failing when the input is not rectangular in shape (e.g.: [[1], [2, 3]]).

function JaggedAsRectangular2<'T>(jagged : 'T[][]) : [|'T|]
function JaggedAsRectangular3<'T>(jagged : 'T[][][]) : [||'T||]

Diagonal arrays:
These functions create new multidimensional arrays given a one-dimensional array of data to be applied along the diagonal (e.g.: DiagonalArray2(0, [1, 2])) returns [|1, 0|, |0, 2|]).

function DiagonalArray2<'T>(zero : 'T, diag : 'T[]) : [|'T|]
function DiagonalArray3<'T>(zero : 'T, diag : 'T[]) : [||'T||]

Constant arrays:
These functions extend the existing ConstantArray function to apply to multidimensional arrays.

function ConstantArray2<'T>(size : (Int, Int), value : 'T) : [|'T|]
function ConstantArray3<'T>(size : (Int, Int, Int), value : 'T) : [||'T||]

Empty arrays:
These functions return empty arrays of given types and rank.

function EmptyArray2<'T>() : [|'T|]
function EmptyArray3<'T>() : [||'T||]

Array metadata, accessors and deconstructors

Size: returns the extent along each axis of a multidimensional array

function Size2<'T>(array : [|'T|]) : (Int, Int)
function Size3<'T>(array : [||'T||]) : (Int, Int, Int)

Element at:
returns an element at a given index, mainly useful in combinators and partial application.

function ElementAt2<'T>(index : (Int, Int), array : [|'T|]) : 'T
function ElementAt3<'T>(index : (Int, Int, Int), array : [||'T||]) : 'T

Diagonal:
returns all elements along the diagonal of a multidimensional array as a one-dimensional array (e.g.: [arr[(0, 0, 0)], arr[(1, 1, 1)], arr[(2, 2, 2)], ...]).

function Diagonal2<'T>(array : [|'T|]) : ['T]
function Diagonal3<'T>(array : [||'T||]) : ['T]

Subarray:
extracts the given elements of a multidimensional array into a one-dimensional array.

function Subarray2<'T>(indices : (Int, Int)[], array : [|'T|]) : ['T]
function Subarray3<'T>(indices : (Int, Int, Int)[], array : [||'T||]) : ['T]

Reduction

Folded along axes:
These functions generalize the existing Fold by computing folds along each axis of a multidimensional array.

function FoldedAlongAxis2<'TInput, 'TOutput>(reduction : (['TInput] -> 'TOutput), axis : Int, array : [|'TInput|]) : ['TOutput]
function FoldedAlongAxis3<'TInput, 'TOutput>(reduction : (['TInput] -> 'TOutput), axis : Int, array : [||'TInput||]) : [|'TOutput|]

Linear algebra

Tensor contractions:
These functions calculate generalized tensor contractions, with functions being provided for addition and multiplication.

function TensorDot2With2<'T>(plus : (('T, 'T) -> 'T), times : (('T, 'T) -> 'T), (idxLeft : Int, idxRight : Int), left : [|'T|], right : [|'T|]) : [|'T|]
function TensorDot3With2<'T>(plus : (('T, 'T) -> 'T), times : (('T, 'T) -> 'T), (idxLeft : Int, idxRight : Int), left : [||'T||], right : [|'T|]) : [||'T||]
function TensorDot2With3<'T>(plus : (('T, 'T) -> 'T), times : (('T, 'T) -> 'T), (idxLeft : Int, idxRight : Int), left : [|'T|], right : [||'T||]) : [||'T||]
function TensorDot3With3<'T>(plus : (('T, 'T) -> 'T), times : (('T, 'T) -> 'T), (idxLeft : Int, idxRight : Int), left : [||'T||], right : [||'T||]) : [|||'T|||]

Matrix dot products:
These functions specialize tensor contractions to common applications (e.g.: vectors and matrices of Double or Complex elements)

function Dot11D(left : [Double], right : [Double]) : Double
function Dot11C(left : [Complex], right : [Complex]) : Complex
function Dot12D(left : [Double], right : [|Double|]) : [Double]
function Dot21D(left : [|Double|], right : [Double]) : [Double]
function Dot22D(left : [|Double|], right : [|Double|]) : [|Double|]

Hermitian conjugation

function Dagger(array : [|Complex|]) : [|Complex|]

Element-wise operations:
These functions take scalar functions and apply them elementwise between two multidimensional arrays, broadcasting as necessary.

function Elementwise2<'TLeft, 'TRight, 'TOutput>(fn : (('TLeft, 'TRight) -> 'TOutput)) : (([|'TLeft|], [|'TRight|]) -> [|'TOutput|])
For example: Elementwise2(TimesD)(left, right) returns the elementwise product of each element in left and right.
function Elementwise3<'TLeft, 'TRight, 'TOutput>(fn : (('TLeft, 'TRight) -> 'TOutput)) : (([||'TLeft||], [||'TRight||]) -> [||'TOutput||])

Reshaping and broadcasting

Reshape: These functions convert one-dimensional and multidimensional arrays to multidimensional arrays of a given shape.

function Reshaped1To2<'T>(array : ['T], newShape : (Int, Int)) : [|'T|]
function Reshaped1To3<'T>(array : ['T], newShape : (Int, Int, Int)) : [||'T||]
function Reshaped2To3<'T>(array : [|'T|], newShape : (Int, Int, Int)) :[|| 'T||,]
function Reshaped3To3<'T>(array : [||'T||], newShape : (Int, Int, Int)) :[|| 'T||,]
function Reshaped3To2<'T>(array : [||'T||], newShape : (Int, Int)) : [|'T|]

Broadcast:
These functions repeat elements of multidimensional arrays as needed to produce arrays of the same shape.

function Broadcasted2<'T0, 'T1>(in0 : 'T0[,], in1 : 'T1[,]) : ('T0[,], 'T1[,])
function Broadcasted3<'T0, 'T1>(in0 : 'T0[,,], in1 : 'T1[,,]) : ('T0[,,], 'T1[,,])

Transposition

function Transposed2<'T>(data : [|'T|]) : [|'T|]
function Transposed3<'T>(axes : (Int, Int, Int), data : [||'T||]) : [||'T||]
function Transposed4<'T>(axes : (Int, Int, Int, Int), data : [|||'T|||]) : [|||'T|||]

Note that the list above does not include a few functions common in other frameworks, deferring to language Q# support in such cases (e.g.: np.ones((3, 3)) can be replaced by [| 1.0, size=(3, 3) |]).
Examples
TODO
Relationship to Q# language feature proposals
Bounded polymorphism (microsoft/qsharp-compiler#557)
The use of rank suffixes could be largely eliminated by using bounded polymorphism to represent common patterns, such as indexing and size.
For example:
concept 'TArray is IndexedBy<'TIndex, 'TElement> when {
    unction ElementAt(index : 'TIndex, array : 'TArray) : 'TElement;f
}
example <'T> ['T] is IndexedBy<Int, 'T> { ... }
example <'T> ['T] is IndexedBy<Range, 'T[]> { ... }
example <'T> [|'T|] is IndexedBy<(Int, Int), 'T> { ... }
example <'T> [|'T|] is IndexedBy<(Range, Int), ['T]> { ... }
example <'T> [|'T|] is IndexedBy<(Int, Range), ['T]> { ... }
example <'T> [|'T|] is IndexedBy<(Range, Range), [|'T|]> { ... }

function Subarray<'TArray, 'TIndex, 'TElement where 'TArray is IndexedBy<'TIndex, 'TElement>>(
    indices : ['TIndex], array : 'TArray
)
: 'TElement {
    return Mapped(ElementAt(_, array), indices);
}

Open design questions and considerations

Suffixes like 2 and 3 are also used to indicate the number of inputs, as in Zipped2; how can we disambiguate these two uses?

Edited to reflect recent changes in https://github.com/microsoft/qsharp-language/pull/49.

Thanks for the proposal, @cgranade. Here are some comments:

The return type seems broken in Reshaped2To3 and Reshaped3To3
Will there be a function called Size for consistency with Size2 and Size3. Would this function be identical to Length?

Thanks for the proposal, @cgranade. Here are some comments:

The return type seems broken in Reshaped2To3 and Reshaped3To3

Thanks for catching that typo!

Will there be a function called Size for consistency with Size2 and Size3. Would this function be identical to Length?

I'm somewhat reticent to introduce another function that is identical to Length but that has a different name; perhaps it would be worth renaming Length instead?


Initializing a typing.Dict subclass leads to runtime errors.

Describe the bug
Initializing a subclass of typing.Dict results in a runtime error.
To Reproduce
Code to reproduce the behaviour:
test.py
import typing

class MyDict(typing.Dict[int, float]):
    pass

$ cython test.py -3 --inplace
$ python -c "import test"
Python 3.8.5 (default, Jul 27 2020, 08:42:51)
[GCC 10.1.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import test
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "test.py", line 4, in init test
    class MyDict(typing.Dict[int, float]):
TypeError: __init__() takes 3 positional arguments but 4 were given

Expected behavior
It should initialize successfully.
Using dict instead of typing.Dict works fine, but typing.Dict has dict in its MRO anyway, so I am not sure why this isn't working.
>>> typing.Dict.mro()
[<class 'dict'>, <class 'object'>]

Environment (please complete the following information):

OS: [e.g. Linux, Windows, macOS]
$ uname -a

Linux z170x 5.8.1-3-MANJARO #1 SMP PREEMPT Sat Aug 15 19:17:30 UTC 2020 x86_64 GNU/Linux

Python version [e.g. 3.8.4]
$ python -VV

Python 3.8.5 (default, Jul 27 2020, 08:42:51)
[GCC 10.1.0]

Cython version [e.g. 0.29.18]
git+https://github.com/cython/cython@4d54aeff34753551cf0ac9977d50c292dbf9d5d5 - origin/master

I have made a diff of the generated source between using class MyDict(dict) which works and class MyDict(typing.Dict[int, float]) which doesn't.
generated.diff.txt
I can also confirm that it still breaks if I use MyDict(typing.Dict) without typevars, so it is the call to one of the subclassing hooks, rather than the class getitem.

Looks like it is definitely this line that is causing the issue:
2091      __pyx_t_4 = __Pyx_Py3ClassCreate(__pyx_t_2, __pyx_n_s_MyDict, __pyx_t_1, __pyx_t_3, NULL, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4, __pyx_L1_error). I'll try installing cygdb and see if I can get any other details.

Ok, from what I can tell, it looks like the class is being initialized with (NULL, name, bases, dict) when it is only expecting (NULL, name, bases).
Is this an overly easy fix?

I think this requires support for __class_getitem__ which was added in https://github.com/cython/cython/pull/3518. That feature is only in the Cython 3 alpha releases at the moment so you may need to upgrade to one of those.
I don't know if this is the full extent of the issue though - perhaps the error reporting is failing us a little in Cython 0.29.x?

Duplicate of https://github.com/cython/cython/issues/3537
Looks like we don't support it at the moment. Obviously if you get anywhere with your investigations the a PR (or further details) would be welcome.


Docker file

This Dockerfile provides installation for java8, chrome, chrome driver.

The PR seems to be already merged.


Extending limited history to properly check for the existence of past values

In general, this change improves the security properties that are supposed to be attained from a limited history proof. A (full) key history proof provides a list of all past versions for a query key. A limited history proof allows for some past version to be left out of the proof. Previously, the way this was implemented was to literally truncate the older versions.
Now, we are instead properly adding the existence proofs for past marker versions and non-existence proofs for future marker versions.
Specifically in this change, it:

Removes HistoryParams::SinceEpoch, since this is not really supportable by the existing construction. The only way for specifying a non-default parameter now is with HistoryParams::MostRecent.
Parameters in the HistoryProof struct were repurposed and renamed to support past and future marker versions
Added a new get_marker_versions() utility function which determines the past and future version numbers to check as part of the history proof generation and verification
Moved HistoryParams out from akd and into akd_core since it is also used by verification
Added a new InvalidVersion error type
Added tests for the new history proof verification behavior, and updated docs as well

I am also bumping the version to 0.12.0-pre.1, since the introduced changes are incompatible with the previous version.

Codecov Report
Attention: 12 lines in your changes are missing coverage. Please review.

Comparison is base (24b11de) 87.99% compared to head (7074208) 88.13%.

Files
Patch %
Lines

akd/src/directory.rs
87.17%
5 Missing :warning:

akd_core/src/verify/history.rs
95.37%
5 Missing :warning:

akd/src/errors.rs
0.00%
2 Missing :warning:

Additional details and impacted files
@@            Coverage Diff             @@
##             main     #422      +/-   ##
==========================================
+ Coverage   87.99%   88.13%   +0.13%
==========================================
  Files          39       39
  Lines        9054     9177     +123
==========================================
+ Hits         7967     8088     +121
- Misses       1087     1089       +2

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

Subsumed by #433, closing this one.


WebSocket auto stop sending data to client  after 30 miniutes

This is the codes
@Component
@Log4j2
public class BinanceApiWebSocketListener2 {
@Autowired
private BinanceApiWebSocketClient binanceApiWebSocketClient;
@PostConstruct
public void init() {
//listener
binanceApiWebSocketClient.onDepthEvent(Constant.btcusdt, (DepthEvent response) -> {
System.out.println("buy:"+response.getBids().get(0).getPrice()+","+"sell:"+response.getAsks().get(0).getPrice());
});
System.out.println("Waiting for events...");
}
}

You need to ping it. See the official docs.

https://github.com/binance-exchange/binance-official-api-docs/blob/master/user-data-stream.md#pingkeep-alive-a-listenkey

Indeed, what @mcourteaux said.


Add a preview-migration issue template

Template to point folks to for any issues that may arise when migrating from Preview to GitHub-native Dependabot (e.g. via clicking "Update config file" on https://app.dependabot.com).
Captures general information about the ecosystem/manifest/etc. as well as Preview and GitHub-native behavior.

Thanks for adding this Mike!


StartedAt Exception when triggering recurring job

I get the following exception when I trigger a recurring job from the hangfire UI:
System.Collections.Generic.KeyNotFoundException
The given key 'StartedAt' was not present in the dictionary.
System.Collections.Generic.KeyNotFoundException: The given key 'StartedAt' was not present in the dictionary.
   at System.Collections.Generic.Dictionary`2.get_Item(TKey key)
   at Hangfire.Console.Server.ConsoleServerFilter.OnPerforming(PerformingContext filterContext)
   at Hangfire.Server.BackgroundJobPerformer.InvokePerformFilter(IServerFilter filter, PerformingContext preContext, Func`1 continuation)

Exception is persistent, even after cleaning entire project and dropping the hangfire database.
Using latest version, 1.40.
If any further details can help, please let me know.
Thanks a lot.

Oh, this feels pretty weird, because Processing state must have StartedAt field.
I can only think of two possible reasons for this to happen:

Job storage you’re using is broken, and doesn’t properly serialize state properties.
You have altered Hangfire’s json serializer settings, so it now serializes them differenty (e.g. with camel case or whatever).

 The second reason is what's going on.
I changed the default Newtonsoft.Json serialization settings in my application. Not knowing, and expecting!, that this would influence Hangfire behaviour.
JsonConvert.DefaultSettings = () =>
{
    return new JsonSerializerSettings()
    {
        ContractResolver = new CamelCasePropertyNamesContractResolver(),
        ...
     };
};

However, I would expect a library to shield itself from this. For example, looking at https://github.com/pieceofsummer/Hangfire.Console/blob/master/src/Hangfire.Console/Dashboard/JobProgressDispatcher.cs#L65 the following is used:
var serialized = JsonConvert.SerializeObject(result);

But probably the own serialization settings should be explicitly set each time:
var settings = new JsonSerializerSettings();
settings.ContractResolver = new ...

var serialized = JsonConvert.SerializeObject(result, settings);

So this might be the root cause?

Indeed, I’d been negligent about that line. Thanks for mentioning it, will fix it in the future updates.
However, it is a minor issue. The worst could happen is progress indicator not shown (because of job ids serialized with a wrong case), and only for storages where job ids are alphanumeric.
The major issue is serializing of state data inside Hangfire itself. Both internal state renderers and extensions are expecting for state properties to have original letter casing.
And if they don’t, well, things would either silently fail (e.g. job history missing all the details, like job duration, latency, return value etc.), or they would fail with exception above.
/cc @odinserj


Support Android 11

Is your feature request related to a problem? Please describe.
There is a clear feature need to develop which this repository should support  Android 11
Describe the solution you'd like
https://developer.android.com/training/permissions/requesting

closing this issue after verified android 11 is OK


Update Defect tracking table

What needs to be done

Out of scope

Defect Tracking table is currently up-to-date as of 01/26. Will keep an eye out for more bugs before closing this issue.

Defect Tracking table is currently up-to-date as of 01/26. Will keep an eye out for more bugs before closing this issue.


Hope for inference code

Awesome work!
I wonder if there is an inference code that can conduct multi-image question answering tasks.

Awesome work! I wonder if there is an inference code that can conduct multi-image question answering tasks.

Thank you! We will be adding inference code in a few weeks.


NoMethodError in the job_enabled? method

Occasionally when trying to enable/disable a recurring job in the Sidekiq UI I get this error (full stacktrace below). Based on the error it appears the Sidekiq module was not loaded?
What's weird is that when I try to enable/disable a recurring job a second time (after the first failure) everything works as expected.
gems/sidekiq-scheduler-2.1.5/lib/sidekiq/scheduler.rb:349:in `job_enabled?': undefined method `[]' for nil:NilClass (NoMethodError)
    from gems/sidekiq-scheduler-2.1.5/lib/sidekiq/scheduler.rb:355:in `toggle_job_enabled'
    from gems/sidekiq-scheduler-2.1.5/lib/sidekiq-scheduler/web.rb:25:in `block in registered'
    from gems/sidekiq-5.0.2/lib/sidekiq/web/application.rb:266:in `instance_exec'
    from gems/sidekiq-5.0.2/lib/sidekiq/web/application.rb:266:in `block in call'
    from gems/sidekiq-5.0.2/lib/sidekiq/web/application.rb:262:in `catch'
    from gems/sidekiq-5.0.2/lib/sidekiq/web/application.rb:262:in `call'
    from gems/rack-protection-2.0.0/lib/rack/protection/xss_header.rb:18:in `call'
    from gems/rack-protection-2.0.0/lib/rack/protection/base.rb:50:in `call'
    from gems/rack-protection-2.0.0/lib/rack/protection/base.rb:50:in `call'
    from gems/rack-protection-2.0.0/lib/rack/protection/path_traversal.rb:16:in `call'
    from gems/rack-protection-2.0.0/lib/rack/protection/json_csrf.rb:26:in `call'
    from gems/rack-protection-2.0.0/lib/rack/protection/base.rb:50:in `call'
    from gems/rack-protection-2.0.0/lib/rack/protection/base.rb:50:in `call'
    from gems/rack-protection-2.0.0/lib/rack/protection/frame_options.rb:31:in `call'
    from gems/rack-protection-2.0.0/lib/rack/protection/base.rb:50:in `call'
    from gems/rack-2.0.3/lib/rack/session/abstract/id.rb:232:in `context'
    from gems/rack-2.0.3/lib/rack/session/abstract/id.rb:226:in `call'
    from gems/rack-2.0.3/lib/rack/urlmap.rb:68:in `block in call'
    from gems/rack-2.0.3/lib/rack/urlmap.rb:53:in `each'
    from gems/rack-2.0.3/lib/rack/urlmap.rb:53:in `call'
    from gems/rack-2.0.3/lib/rack/builder.rb:153:in `call'
    from gems/sidekiq-5.0.2/lib/sidekiq/web.rb:103:in `call'
    from gems/sidekiq-5.0.2/lib/sidekiq/web.rb:108:in `call'
    from gems/actionpack-5.0.3/lib/action_dispatch/routing/mapper.rb:17:in `block in <class:Constraints>'
    from gems/actionpack-5.0.3/lib/action_dispatch/routing/mapper.rb:46:in `serve'
    from gems/actionpack-5.0.3/lib/action_dispatch/journey/router.rb:39:in `block in serve'
    from gems/actionpack-5.0.3/lib/action_dispatch/journey/router.rb:26:in `each'
    from gems/actionpack-5.0.3/lib/action_dispatch/journey/router.rb:26:in `serve'
    from gems/actionpack-5.0.3/lib/action_dispatch/routing/route_set.rb:725:in `call'
    from gems/warden-1.2.7/lib/warden/manager.rb:36:in `block in call'
    from gems/warden-1.2.7/lib/warden/manager.rb:35:in `catch'
    from gems/warden-1.2.7/lib/warden/manager.rb:35:in `call'
    from gems/rack-2.0.3/lib/rack/etag.rb:25:in `call'
    from gems/rack-2.0.3/lib/rack/conditional_get.rb:25:in `call'
    from gems/rack-2.0.3/lib/rack/head.rb:12:in `call'
    from gems/rack-2.0.3/lib/rack/session/abstract/id.rb:232:in `context'
    from gems/rack-2.0.3/lib/rack/session/abstract/id.rb:226:in `call'
    from gems/actionpack-5.0.3/lib/action_dispatch/middleware/cookies.rb:613:in `call'
    from gems/actionpack-5.0.3/lib/action_dispatch/middleware/callbacks.rb:38:in `block in call'
    from gems/activesupport-5.0.3/lib/active_support/callbacks.rb:97:in `__run_callbacks__'
    from gems/activesupport-5.0.3/lib/active_support/callbacks.rb:750:in `_run_call_callbacks'
    from gems/activesupport-5.0.3/lib/active_support/callbacks.rb:90:in `run_callbacks'
    from gems/actionpack-5.0.3/lib/action_dispatch/middleware/callbacks.rb:36:in `call'
    from gems/actionpack-5.0.3/lib/action_dispatch/middleware/remote_ip.rb:79:in `call'
    from gems/actionpack-5.0.3/lib/action_dispatch/middleware/debug_exceptions.rb:49:in `call'
    from gems/actionpack-5.0.3/lib/action_dispatch/middleware/show_exceptions.rb:31:in `call'
    from gems/railties-5.0.3/lib/rails/rack/logger.rb:36:in `call_app'
    from gems/railties-5.0.3/lib/rails/rack/logger.rb:24:in `block in call'
    from gems/activesupport-5.0.3/lib/active_support/tagged_logging.rb:69:in `block in tagged'
    from gems/activesupport-5.0.3/lib/active_support/tagged_logging.rb:26:in `tagged'
    from gems/activesupport-5.0.3/lib/active_support/tagged_logging.rb:69:in `tagged'
    from gems/railties-5.0.3/lib/rails/rack/logger.rb:24:in `call'
    from gems/actionpack-5.0.3/lib/action_dispatch/middleware/request_id.rb:24:in `call'
    from gems/rack-2.0.3/lib/rack/method_override.rb:22:in `call'
    from gems/rack-2.0.3/lib/rack/runtime.rb:22:in `call'
    from gems/actionpack-5.0.3/lib/action_dispatch/middleware/executor.rb:12:in `call'
    from gems/rack-2.0.3/lib/rack/sendfile.rb:111:in `call'
    from gems/railties-5.0.3/lib/rails/engine.rb:522:in `call'
    from gems/unicorn-5.2.0/lib/unicorn/http_server.rb:562:in `process_client'
    from gems/unicorn-5.2.0/lib/unicorn/http_server.rb:658:in `worker_loop'
    from gems/unicorn-5.2.0/lib/unicorn/http_server.rb:508:in `spawn_missing_workers'
    from gems/unicorn-5.2.0/lib/unicorn/http_server.rb:132:in `start'
    from gems/unicorn-5.2.0/bin/unicorn:126:in `<top (required)>'
    from bin/unicorn:22:in `load'
    from bin/unicorn:22:in `<main>'

Pushed PR #196

Released in v2.1.6


Add example for serving static files

Description
This adds an example for a simple static server.
Motivation and Context
My personal server had been using iron for over a year - I finally found time to switch to something else and my choice was tide :smile: - I wrote a simple static server using tide and I thought I could strip down some code and add it as an example in this repository.
How Has This Been Tested?
My website is alive and well. I haven't added any unit tests here. I thought it's an overkill for an example.
Types of changes

[ ] Bug fix (non-breaking change which fixes an issue)
[ ] New feature (non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to change)
[x] Other?

Checklist:

[ ] My change requires a change to the documentation.
[ ] I have updated the documentation accordingly.
[x] I have read the CONTRIBUTING document.
[ ] I have added tests to cover my changes.
[x] All new and existing tests passed.

This is exactly the kind of useful example Tide needs. Thanks, @wafflespeanut!

Thanks for the PR! Fix up the merge conflict, and it should be good to go.

Cool! Thanks!


Question about loss weight

Hi all! Firstly, thanks for your work and effort! I noticed that in the config file, the weight for each loss is different than that in af2's paper. For example, the weight for angle loss is 1, instead of 0.3. Some of them, such as the violation loss, experimentally solved loss, have a weight of 0. Is there any reason that the weight is set up this way? For instance, for losses that have been assigned a weight of 0 in the implementation, are they still under testing? Thanks!

The default config contains the settings used for the first phase of AlphaFold training. Violation loss and experimentally resolved loss were only activated during the second fine-tuning phase. Both have been tested and are fully usable, though.
As for the angle loss: 0.3 is the default weight for distogram loss in paper, not FAPE loss, no?

The default config contains the settings used for the first phase of AlphaFold training. DeepMind only activated violation loss and experimentally resolved loss during the fine-tuning phase. Both losses have been tested and are fully usable, though.
As for the angle loss: 0.3 is the default weight for distogram loss in the paper, not the torsion angle loss, no?

Thanks, it is much clear now. Btw, the angle loss is part of the auxiliary loss, which has a weight of 0.5.


Code | Symbol Pattern 64

I would like to work on this as part of SWOC.
Could you please assign it to me?


Extract custom object hibernate configuration into SSB script

Please confirm CLA so I would be able to merge it.


Impersonated credentials should implement IdTokenProvider interface

Currently there is no easy way to acquire an id_token for a service account that was impersonated.
For example, if you run an application as SA1 but you would like to get an id_token for SA2, you would have to first use Impersonated module to get a raw access_token for SA2 and then use that in iamcredentials.generateIdToken() api call manually.
in another example, if you run running workload identity federation (WIF) in AWS and need an id_token to access Cloud Run, you would need to acquire the access_token for the service account for WIF on aws and then use that same generateIDToken() api call.
This FR is to allow the Impersonated module to acquire its own id_token

the workaround i tried was to edit the following

node_modules/google-auth-library/build/src/auth/impersonated.d.ts

export declare class Impersonated extends OAuth2Client implements IdTokenProvider {}

    /**
     * Fetches an ID token.
     * @param targetAudience the audience for the fetched ID token.
     */
    fetchIdToken(targetAudience: string): Promise<string>;

node_modules/google-auth-library/build/src/auth/impersonated.js

     async fetchIdToken(targetAudience) {
        try {
            await this.sourceClient.getAccessToken();
            const name = 'projects/-/serviceAccounts/' + this.targetPrincipal;
            const u = `${this.endpoint}/v1/${name}:generateIdToken`;
            const body = {
                delegates: this.delegates,
                audience: targetAudience,
                includeEmail: true,
            };
            const res = await this.sourceClient.request({
                url: u,
                data: body,
                method: 'POST',
            });
            const tokenResponse = res.data;

            return tokenResponse.token
        }
        catch (error) {
     ...
        }
    }

then the usage would be
    const scopes = 'https://www.googleapis.com/auth/cloud-platform'
    const auth =  new GoogleAuth({
        scopes: scopes
    });
    const client = await auth.getClient();

    // First impersonate
    let targetCredentials =<EMAIL_ADDRESS>    let targetClient = new Impersonated({
        sourceClient: client,
        targetPrincipal: targetCredentials,
        lifetime: 30,
        delegates: [],
        targetScopes: [scopes]
    });

    // then get an ID Token
    let idClient = new IdTokenClient({
        targetAudience: 'https://foo.bar',
        idTokenProvider: targetClient
    })

    const res = await idClient.request({
        method: 'GET',
        url: 'https://httpbin.org/get',
      });
    console.log(res.data);

Finally, please note the following:
ref:

https://github.com/googleapis/google-auth-library-nodejs/issues/1305
https://github.com/googleapis/google-auth-library-nodejs/issues/1210
(The last issue describes the limits of using the impersonated module with google cloud client libraries)

@salrashid123 do you have a testing project where you're experimenting with this functionality, I'd be happy to help add this functionality, but it would be nice to have a real world environment to test against.

@bcoe I'll make an effort to prod at this next week during the slow week, feel free to message me if you feel like wokring on this patch together.

Hey @m0ar, @salrashid123, & @FrodoTheTrue: found some time to work on this today. Here's the PR:

https://github.com/googleapis/google-auth-library-nodejs/pull/1439

It should be merged shortly after review 👌🏽


fix conflicting golang import bindings

the import "i" binding will jump to imports, instead of opening import prefix

I do not see a conflict. The original keybind was ri, not i.

I had issues with the keybind ri, but probably that was caused by something different. Quite new to lisp / emacs incorrectly assumed the prefix didn't work.

No worries! In that case I'll consider this resolved.


if there is no keypair given, generate one and use that

Adding functionality to generate the name for a keypair, rather than use the one provided (giving the user the option to not provide it)

Example usage:
//with keypair specified
openstack:
  keypair: consul-01
  keyfile: ~/.ssh/id_rsa
  instances:
    - name: molecule-test-01
      image: 'trusty64'
      flavor: m1.tiny
      sshuser: ubuntu
      security_groups:
        - default

Result: keypair named consul-01 is created with ~/.ssh/id_rsa key and uploaded to openstack
//with keypair not specified
openstack:
  keyfile: ~/.ssh/id_rsa
  instances:
    - name: molecule-test-01
      image: 'trusty64'
      flavor: m1.tiny
      sshuser: ubuntu
      security_groups:
        - default

Result: keypair named molecule-abcdef1234 is created with ~/.ssh/id_rsa key and uploaded to openstack

@russ216 - If you are going to generate a keypair name, shouldn't you also be generating a keypair file and then use that to create the keypair in OpenStack?

thanks for checking it out @trumant - so just so i'm clear, what this PR is doing is just adding functionality to generate the name for a keypair, rather than use the one provided (giving the user the option to not provide it)
After this part, the keypair is generated and sent via the compute API, using the keyfile the user specifies. If that keyfile (typically ~/.ssh/id_rsa) is missing, molecule throws an error and bails out. This is existing in molecule's master already as part of the shade provisioning work.
Using this in practice, I generate a id_rsa keyfile on the jenkins box, and use that to create a specified keyname (eg. "consul-01") - but now i have the option to not specify the name.

@russ216 Appreciate the explanation. I had assumed that if the user hadn't specified the key name, that they probably also had not specified the keyfile name...

👍


chore(deps): upgrade dependencies

Upgrades project dependencies. See details in workflow run.

Automatically created by projen via the "upgrade-k8s-23-main" workflow

⚪ Backport skipped
The pull request was not backported as there were no branches to backport to. If this is a mistake, please apply the desired version labels or run the backport tool manually.
Manual backport
To create the backport manually run:
backport --pr 1008

Questions ?
Please refer to the Backport tool documentation


Improving arena images and adding new ones.

please note that the old "legendary arena" was renamed to "hog mountain" and a new legendary arena was added.

I wasn't able to sync fork after the last pull request, please ignore f90cb82

just noticed an extra .png in the file name of pekka's-playhouse.png.png, sorry about that


Unable to load class

i have included your project to my gradle and all was going fine with my implementaion for medaition of MoPub with Facebook : but i got a pop with this error in my log
Caused by: java.lang.ClassNotFoundException: Didn't find class "org.github.ayltai.mopub.adapter.FacebookNativeAd" on path: DexPathList[[zip file "/data/app/com.ezydev.phonecompare-2/base.apk"],nativeLibraryDirectories=[/data/app/com.ezydev.phonecompare-2/lib/arm, /vendor/lib, /system/lib]]

@Override
public void onNativeLoad(final com.mopub.nativeads.NativeAd nativeAd) {
Log.i(this.getClass().getSimpleName(), "Native ad loaded");
    nativeAd.setMoPubNativeEventListener(this);
    final StaticNativeAd staticNativeAd = (StaticNativeAd)nativeAd.getBaseNativeAd();

    if (staticNativeAd instanceof FacebookNativeAd) {
        Log.i(this.getClass().getSimpleName(), "Native ad loaded FacebookNativeAd");
    }
}

and is their a way i can know if the ad is of FACEBOOK or Google on onNativeLoad() fun . or is it the instance of  StaticNativeAd  that will help me with this separate identification ??? Please help with integration

and their is no call named
org.github.ayltai.mopub.adapter.FacebookNativeEvent

Is it debug build or release build?
In release build, if you use ProGuard or some other similar tools to obfuscate your app code, you have to add org.github.ayltai.mopub.* to your proguard-rules.pro filter.

To know which ad provider is the ad loaded from, yes, you can check the instance type, or log it inside the adapter (but you have to fork this repo to modify it).

Thanks @peter1408 for pointing out the incorrect event name. It should be org.github.ayltai.mopub.adapter.FacebookEventNative


Dockerization

Enable the user to avoid installing Python, pip and pip packages and easily use Docker instead.

Thank you very much master Delic!


Cybersecurity: 1.9.9 Limitations of Indian IT Act, 2000

Description
The Information Technology Act, 2000 serves as the de facto framework for digital governance in India. It has its limitation also.
Discuss some limitations of IT Act, 2000.
Note:

If interested, mention in which format you want to contribute: Documentation or Video
Please avoid copy/paste, BE YOURSELF
Try to explain with Diagrams
Changes should be made inside the Cyber_Security/ directory & Cyber_Security branch.
Task will be assigned on first come first serve
Check it out Contribution Guidelines

i want to contribute on this in documentation form

i want to contribute on this in documentation form

Okay!
Assigned for Documentation!


Server 2012 crashes when multiple computers connect with usb devices using /dvc:urbdrc,dev:046d:082d

We have 30 machines in the office all running Ubuntu 16.04  and connecting to Windows Server 2012 using xfreerdp 2.0RC
Everything has been working great until the client wanted to connect USB webcams.
I've got the connection strings working along with the permissions for the usb device and everything appears to work great on the RDP session (webcam is recognised and displays images)
Unfortunately when I deployed it I received a BSOD twice on server 2012.
Analysing the minidump. There appears to a problem with tsusbhub.sys experiencing a PNP_DETECTED_FATAL_ERROR due to Duplicate PDO.
Now reading up about this error it appears that windows does not like having 2 devices with the same device id, unique id and then serial number? connected to the same hub.
Unfortunately my knowledge stops a understanding the device id and unique id. I presume windows should be able to cope with multiple devices with the same device id and unique id. I presume what is happening is some how during reconnects from xfreerdp perhaps duplicate PDOs exist on the server and it crashes?
Is there anything I can do with Xfreerdp to get around this?
Here is further analysis of  BSOD:
PNP_DETECTED_FATAL_ERROR (ca)
PnP encountered a severe error, either as a result of a problem in a driver or
a problem in PnP itself.  The first argument describes the nature of the
problem, the second argument is the address of the PDO.  The other arguments
vary depending on argument 1.
Arguments:
Arg1:<PHONE_NUMBER>000001, Duplicate PDO
A specific instance of a driver has enumerated multiple PDOs with
identical device id and unique ids.
Arg2: ffffe001cf21b240, Newly reported PDO.
Arg3: ffffe001d36f32e0, PDO of which it is a duplicate.
Arg4:<PHONE_NUMBER>000000
Debugging Details:
TRIAGER: Could not open triage file : e:\dump_analysis\program\triage\modclass.ini, error 2
BUGCHECK_STR:  0xCA_1
DEVICE_OBJECT: ffffe001cf21b240
DRIVER_OBJECT: ffffe001cb425760
IMAGE_NAME:  tsusbhub.sys
DEBUG_FLR_IMAGE_TIMESTAMP:  593dc69e
MODULE_NAME: tsusbhub
FAULTING_MODULE: fffff800971cb000 tsusbhub
CUSTOMER_CRASH_COUNT:  1
DEFAULT_BUCKET_ID:  WIN8_DRIVER_FAULT_SERVER
PROCESS_NAME:  System
CURRENT_IRQL:  0
LOCK_ADDRESS:  fffff8011bb56020 -- (!locks fffff8011bb56020)
Resource @ nt!PiEngineLock (0xfffff8011bb56020)    Available
WARNING: SystemResourcesList->Flink chain invalid. Resource may be corrupted, or already deleted.
WARNING: SystemResourcesList->Blink chain invalid. Resource may be corrupted, or already deleted

So I guess you have in your hand a CVE targeting 2k12 servers: you can remote crash a whole server by just sending the right packet sequence !

So is this a limitation of the server 2012 OS and I should contact Microsoft or will say they the crash is down to an incorrect implementation of the RDP library?

@laughingguffly the server shouldn't crash in any circumstances even if the implementation is incorrect or has problems. (Even worse if it is remote).

Ok I've reached out to Microsoft.
https://social.technet.microsoft.com/Forums/ie/en-US/cf961173-d704-4efa-83f0-792cae021ee0/bsod-pnpdetectedfatalerror-when-using-usb-redirection-over-rdp?forum=winserver8gen
I'll see what they say..

Wow, that microsoft support is worse than Dell firstline helpdesk

Hi folks,
Please install KB4025335 on Windows Server 2012 R2. There's no fix for 2016 yet.
After it, do this:

Go to the registry location SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations.
Create a new DWORD value “fUniqueInstanceID” (without quotes ofc.).
Set the value to “1”.
Reboot after setting this registry.

:-)

From what I've read in the thread it seems like the crash is related to your AVG antivirus...

So, is this really a FreeRDP bug or can it be closed?

I can confirm that is was a bug with Windows Server and NOT freerdp.
Implementing x86s comments fixed the issue for us.

@laughingguffly Thanks for the clarification.


Automated cherry pick of #3958: add lock on host detected offline

Cherry pick of #3958 on release/2.11.
#3958: add lock on host detected offline

Codecov Report

:exclamation: No coverage uploaded for pull request base (release/2.11@382de0d). Click here to learn what that means.
The diff coverage is 0%.

@@              Coverage Diff               @@
##             release/2.11   #3961   +/-   ##
==============================================
  Coverage                ?   7.13%
==============================================
  Files                   ?     480
  Lines                   ?   78013
  Branches                ?       0
==============================================
  Hits                    ?    5567
  Misses                  ?   71979
  Partials                ?     467

Flag
Coverage Δ

#aFlag
7.13% <0%> (?)

Impacted Files
Coverage Δ

pkg/compute/models/hosts.go
0.38% <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 382de0d...93074ab. Read the comment docs.

/lgtm

/approve

/approve


drop_path

Hi, when i run main_ppi.py , there are something wrong with drop_path .
Traceback (most recent call last):   File "main_ppi.py", line 163, in <module>     train()   File "main_ppi.py", line 56, in train     train_acc, train_obj,class_acc = train_step( model, criterion, optimizer)   File "main_ppi.py", line 77, in train_step     logits, logits_aux = model(features,edge_index)   File "/usr/local/lib/python3.6/dist-packages/torch/nn/modules/module.py", line 532, in __call__     result = self.forward(*input, **kwargs)   File "/content/drive/My Drive/model.py", line 98, in forward     s0, s1 = s1, cell(s0, s1, edge_index, self.drop_path_prob)   File "/usr/local/lib/python3.6/dist-packages/torch/nn/modules/module.py", line 532, in __call__     result = self.forward(*input, **kwargs)   File "/content/drive/My Drive/model.py", line 42, in forward     h1 = drop_path(h1, drop_prob)   File "/content/drive/My Drive/NAS-GCN-SAR/tools/utils.py", line 137, in drop_path     x.mul_(mask) RuntimeError: output with shape [46659, 32] doesn't match the broadcast shape [46659, 1, 46659, 32]
If i assign 0  to --drop_path_prob , that work well.
Can you help me ? Thank you very mach !!

Hi @quqxui. We did not use drop path in our GCN experiments. I guess it is because the shapes here does not match.
https://github.com/lightaime/sgas/blob/7b6d7636249c84e0d4433e1bbe5f398e8c3dc4b3/gcn/utils.py#L130
We would check and extend the drop path for with GCN.

Hello. @quqxui. Sorry for my late reply. The drop_path function should be different for PPI and ModelNet since their data format is different. Please check our latest code for PPI exp.
Thank you for pointing it out.

thank you!


fix(p6-translation): fixes the alignment of the component with the other fields of the form

fix(p6-translation): fixes the alignment of the component with the other fields of the form
Closes #21

with the responsive rules active :

with the responsive rules active :

Why the text from the textarea seems to be more compressed than the select's one ?

Why the text from the textarea seems to be more compressed than the select's one ?

after the modifications reported by @vuongc

with the responsive rules active :

after the modifications reported by @vuongc

with the responsive rules active :


Some float and negative number differences to jq

I don't know if jaq aim to be jq compatible in these cases:
# jaq errors, jq ceils
jq -n '"abcd"[1.9:2.9]'
"bc"

# jaq errors, jq ceils codepoint
# jq -n '[106.9, 113.0] | implode'
"jq"

# jq master not 1.7.1
$ jq -n 'limit(-2; 1,2,3,4,5)'
jq: error (at <unknown>): limit doesn't support negative count
$ jaq -n 'limit(-2; 1,2,3,4,5)'
<empty>

# jaq errors
$ jq -n 'limit(2.1; 1,2,3,4,5)'
1
2
3

$ jq -n 'halt_error(2.1)'; echo $?
2
$ jaq -n 'halt_error(2.1)'
Error: cannot use 2.1 as integer

My general reasoning is: In places where the decimal places of a float are ignored, providing a float should yield an error.
From this follows that floats yield an error when they are used for indexing, implode, and halt_error.
limit is an interesting case: First, the same argument as for indexing applies to exclude floats in the first argument. My reasoning to allow negative numbers in the first argument is: limit($n; f) should return at most $n$ elements, meaning that negative $n are equivalent to 0. But I have to admit that I'm less sure about admitting negative values of $n$ than about forbidding floats. What do you think?

My general reasoning is: In places where the decimal places of a float are ignored, providing a float should yield an error. From this follows that floats yield an error when they are used for indexing, implode, and halt_error.

For jq i think it's a bit accidental how it behaves in some places :( some more consistency would have been nice. What about cases like this 10/2, 1.1 | trunc where the result could be an integer? still good with explicit conversion? i'm a bit torn how strict or terse jq should be and not throw errors when there could be not too confusing and useful non-erroneous behavior. Sorry for the non-answer, will have to think more about this :)

limit is an interesting case: First, the same argument as for indexing applies to exclude floats in the first argument. My reasoning to allow negative numbers in the first argument is: limit($n; f) should return at most $n$ elements, meaning that negative $n are equivalent to 0. But I have to admit that I'm less sure about admitting negative values of $n$ than about forbidding floats. What do you think?

Think im leaning towards your reasoning, negative will just be empty. It was changed in https://github.com/jqlang/jq/pull/3181, before negative for some reason (bug?) would emit all values, 0 was empty, and it was changed to be in align with nth.

What about cases like this 10/2, 1.1 | trunc where the result could be an integer?

The case for 10/2 is different from the rest of the cases in this discussion, because there, both arguments are integer. Anyway, this falls under the two rules given in the README:

The sum, difference, product, and remainder of two integers is integer.
Any other operation between two numbers yields a float.

trunc is a bit of a special case because it inherits its semantics from libm. So even if by the rules, it should yield an integer, it does not, because otherwise, it would not respect the libm semantics.

By the way, talking about trunc: I see that you use trunc quite a bit in jqjq, but I believe that using floor (or round?) might be more appropriate. This is because trunc returns a float, while floor/round return integers.


Moved LiquidateRebalancePositionSizer back to rebalance.py as this al…

…lows full unit testing. Added in unit tests from Pull Request #175 (https://github.com/mhallsmoore/qstrader/pull/175).

Coverage increased (+0.5%) to 56.974% when pulling 32bdb92ac80c06340476935129753f0a9f56aaba on rebalance into ac2ab784917f982579e00ad0e3a7fadeae400bfa on master.

Coverage increased (+0.6%) to 57.098% when pulling ba4f590af13c56417601fb276280828fff353166 on rebalance into ac2ab784917f982579e00ad0e3a7fadeae400bfa on master.


Add test coverage checks

Codecov Report

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

@@            Coverage Diff            @@
##             master       #2   +/-   ##
=========================================
  Coverage          ?   95.71%
=========================================
  Files             ?        7
  Lines             ?      210
  Branches          ?        0
=========================================
  Hits              ?      201
  Misses            ?        9
  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 eaccb7f...b5bc159. Read the comment docs.


Unable to use with Next

I'm not sure if is an SSR issue or something else.  I'm on object-fit-images version 3.2.4 and when I follow the instructions and call objectFitImages() in the MyApp function, it doesn't do anything.  So I moved the call to useEffect so that it emulates document.ready and I get the following error that objectFitImages is not a function:

Here's my code:
import objectFitImages from 'object-fit-images'

function MyApp({ Component, pageProps }) {
  useEffect(() => {
    objectFitImages()
  }, [])

  return <>
    <Navbar />
    <Component {...pageProps} />
  </>
}

export default MyApp

I also tried to move the objectFitImages calls to the pages that need them and it still didn't work (but I didn't try in useEffect there).

This is unrelated to next. The error just says it’s not a function, which means that something in the build or the way it’s imported is not right. I suggest searching existing issues for a possible solution.

You might have to use require to import the module


Telegram Notification

Hi,
is it possible to add telegram notification instead of slack?
Would be very nice.
Thanks for the nice project.

that seems a reasonable request, although I would rather add it as an addition and not a replacement

hey, sorry it took me long enough, and probably it's no longer needed, well anyway, it's now available in version 3.0.0...

Thanks :)