Reload nftables service if hash at last service load does not match

This is a variation on https://github.com/voxpupuli/puppet-nftables/pull/115, where I use:

2 execs
no script file on disk
no service file modifications.

Effect:
First install:

after nftables is installed and configured and service started, a hash of memory state (without counters) is written to disk in the same puppet run

Subsequent runs:
Hash file not present (eg deleted):

nftables service is notified to reload
hash file is regenerated

Hash of memory state does not match hash on disk (eg rule manually added in memory):

nftables service is notified to reload
hash file is regenerated

Changes invoked by Puppet to rules:

hash file is regenerated (as this module already notifies the service)

Exec time hit
Everyone tries not to use execs, but they work well in this case and over a number of tests I barely saw a 0.1 sec difference, and that wasn't consistent so I think its a good solution.
Thanks for your consideration of this PR!

Please run bundle exec rake strings:generate:reference to update the REFERENCE.md

one question I have relates to the choice of location for the hash by the previous PR, which I have copied.  Writing it to /run means that upon a reboot the file is missing and will be regenreated, notifying the nftables service to reload unneccesarily.  Should this default to a location where the hash file survives a reboot, such as /var/tmp?


test al querybuilder methods

test al querybuilder methods and confirm that all are working like expected

Done, no errors during testing.


config should handle lower and upper case checks

Overview
Currently the package accepts only lower case letters, when passing upper case it throws an error.
Steps to Reproduce
Steps to reproduce the behavior:
1.In the config json file give the chain name in upper case
2. Observe the output
Expected Behavior
It should internally convert to lower case and continue with execution. execution should not stop
Screenshots

Fixed in pr #176

Closing this issue as fixed


Upload beta release

[x] setup play store page

[x] take screenshots

[x] Easily be able to show low battery notification so I can use for screenshot

[x] design screenshots

build release app on my local machine
upload build to google play beta testing track. should be early access.

Uploaded to play!


add outlet management support to cwms-python

same comment as other pull request.  I don't see the endpoints in CWBI-test and want to wait for them to be present before committing.  We can keep the pull request open until that occurs.


Universal binary iree-compile do not run on M1

Problem: Trying to run e2e Resnet model on M1 with preinstalled binaries but ran into device not supported.
RuntimeError: Error invoking function: <vm>:0: UNKNOWN; device not supported in the compiled configuration;
[ 0] bytecode module.forward:1996 <stdin>:279:10

Further investigation show that issue stem from iree-compile
/Users/user/venv/shark/lib/python3.9/site-packages/iree/compiler/_mlir_libs/iree-compile  --iree-mlir-to-vm-bytecode-module -iree-hal-target-backends=dylib /tmp/Resnet50Module.mlir -iree-vm-bytecode-source-listing=foo.mlir -o Resnet50Module-dylib.vmfb

iree-build/iree/tools/iree-benchmark-module --driver=dylib --entry_function=forward --function_input=1x3x224x224xf32 --module_file=Resnet50Module-dylib.vmfb --benchmark_repetitions=1

# Result:
Running ../iree-build/iree/tools/iree-benchmark-module
Run on (8 X 24.2407 MHz CPU s)
CPU Caches:
  L1 Data 64 KiB (x8)
  L1 Instruction 128 KiB (x8)
  L2 Unified 4096 KiB (x2)
Load Average: 1.58, 1.52, 1.51
<vm>:0: UNKNOWN; device not supported in the compiled configuration;
[ 0] bytecode module.forward:1996 [
    /tmp/Resnet50Module.mlir:279:10
      at /tmp/Resnet50Module.mlir:9:3,
    "vm"(foo.mlir:295:4)
  ]
[1]    84694 abort      ../iree-build/iree/tools/iree-benchmark-module --driver=vulkan

But when I use iree-compile built from source it can translate and run fine.
Looking at the iree-vm-bytecode-source-listing seems like the preinstalled binary iree-compile is generating x86:

While if we run iree-compile built from source it will generate ARM:

I was wondering if there is a way to set the iree-compile to generate ARM instead of x86?

Interesting that the binary from the python packages and the from source build are differing here.
You can set -iree-llvm-target-triple to target any machine (from the LLVM targets that have been compiled in / initialized, see the bottom of LLVMAOTTarget.cpp): https://github.com/google/iree/blob/aae314e8bb72115aa00ce2556fbd8ed1559d459d/iree/compiler/Dialect/HAL/Target/LLVM/LLVMTargetOptions.cpp#L66-L68 (also see the other options in that file)
For example, I've set -iree-llvm-target-triple=x86_64-linux-gnu to compile for Linux from Windows.
If you don't set those options explicitly, they'll default to what LLVM can infer: https://github.com/google/iree/blob/aae314e8bb72115aa00ce2556fbd8ed1559d459d/iree/compiler/Dialect/HAL/Target/LLVM/LLVMTargetOptions.cpp#L28-L30

Thanks @ScottTodd! setting -iree-llvm-target-triple=arm64-apple-darwin21.4.0 got it working!
Interesting that the binary from the python packages and the from source build are differing here.

It is peculiar that source built infer Arm, and prebuilt infer X86 😅 .  Perhaps llvm::sys::getDefaultTargetTriple() automatically load the clang it was built on's defaults?

@stellaraccident fyi since she has her M1 now.

It is peculiar that source built infer Arm, and prebuilt infer X86  . Perhaps llvm::sys::getDefaultTargetTriple() automatically load the clang it was built on's defaults?

I am guessing that is exactly what it is doing.

llvm::sys::getDefaultTargetTriple() returns the default target triple the compiler has been configured to produce code for and in particular it is set at the point where iree-compile is compiled (so for universal binary I'm assuming that during compilation time it only gets set for x86 and that same config used both sides). We could potentially use getProcessTriple instead which should give the triple of the machine being run on [I was trying to verify that but kept running into other issues today].

Looks like it. Please re-open if there are still issues.


putTotalPages doesn't work in 1.2.61

I'm using the standard code for invoking this
if (typeof doc.putTotalPages === 'function') {                 footerStr = footerStr + " of " + totalPagesExp;             }
and the function isn't defined. I reverted to version 1.0.272 and my code then works correctly.

putTotalPages refactored and tested with #1998


[core-http] samples should follow the guidelines

current there's only a samples\node-samples.ts and an index.html.  We should have

[ ] samples under javascript folder
[ ] samples under typescript folder
[ ] proper readme file under samples with metadata so that samples are zipped and made available on docs site.

README.md also needs update once we have samples running

closing. core-http is not intended for end users.  The existing sample is more like a smoke tests. I don't think we need to treat it the same as other libraries' sample.


Open README.md at launch

Removes the need for users to specify this in their settings.

Please don't merge, this is not behaving as expected yet

This experiment didn't work out how I'd hoped...users should instead configure the Startup Editor setting to readme instead.


🐛  Square format doesn't work

What's happening?
I am trying to take a photo, either 1:1 or 4:5.
I have a toggle on my UI and two formats to choose from:
  const format = useCameraFormat(device, [
    {
      photoAspectRatio: isSquareRatio ? 1 / 1 : 4 / 5,
    },
    {photoResolution: { width: 1080, height: isSquareRatio ? 1080 : 1350 }},
    {videoAspectRatio: isSquareRatio ? 1 / 1 : 4 / 5},
    {videoResolution: {height: isSquareRatio ? 1080 : 1350, width: 1080}},
  ]);

The 4:5 works fine, it outputs the same view I have set for the camera, but 1:1 does not work.
When I set the photo resolution and ratio to 1 / 1, it does not output a square photo.
I used FFMPEG to do this before in v2, but now I am trying to get rid of this step (as it seems possible to just take the photo in that format instead of post cropping and processing all over again)...
Great library!
Reproduceable Code
N/A

Relevant log output
N/A

Camera Device
{"formats": [{"autoFocusSystem": "phase-detection", "fieldOfView": 64.72028350830078, "maxFps": 60, "maxISO": 3264, "maxZoom": 189, "minFps": 60, "minISO": 34, "photoHeight": 3024, "photoWidth": 4032, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": false, "videoHeight": 144, "videoStabilizationModes": [Array], "videoWidth": 192}, {"autoFocusSystem": "phase-detection", "fieldOfView": 64.72028350830078, "maxFps": 60, "maxISO": 3264, "maxZoom": 189, "minFps": 60, "minISO": 34, "photoHeight": 3024, "photoWidth": 4032, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": false, "videoHeight": 144, "videoStabilizationModes": [Array], "videoWidth": 192}, {"autoFocusSystem": "phase-detection", "fieldOfView": 59.326927185058594, "maxFps": 60, "maxISO": 3264, "maxZoom": 189, "minFps": 60, "minISO": 34, "photoHeight": 3024, "photoWidth": 3696, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": false, "videoHeight": 288, "videoStabilizationModes": [Array], "videoWidth": 352}, {"autoFocusSystem": "phase-detection", "fieldOfView": 59.326927185058594, "maxFps": 60, "maxISO": 3264, "maxZoom": 189, "minFps": 60, "minISO": 34, "photoHeight": 3024, "photoWidth": 3696, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": false, "videoHeight": 288, "videoStabilizationModes": [Array], "videoWidth": 352}, {"autoFocusSystem": "phase-detection", "fieldOfView": 64.72028350830078, "maxFps": 60, "maxISO": 3264, "maxZoom": 189, "minFps": 60, "minISO": 34, "photoHeight": 3024, "photoWidth": 4032, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": false, "videoHeight": 360, "videoStabilizationModes": [Array], "videoWidth": 480}, {"autoFocusSystem": "phase-detection", "fieldOfView": 64.72028350830078, "maxFps": 60, "maxISO": 3264, "maxZoom": 189, "minFps": 60, "minISO": 34, "photoHeight": 3024, "photoWidth": 4032, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": false, "videoHeight": 360, "videoStabilizationModes": [Array], "videoWidth": 480}, {"autoFocusSystem": "phase-detection", "fieldOfView": 64.72028350830078, "maxFps": 60, "maxISO": 3264, "maxZoom": 189, "minFps": 60, "minISO": 34, "photoHeight": 3024, "photoWidth": 4032, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": false, "videoHeight": 480, "videoStabilizationModes": [Array], "videoWidth": 640}, {"autoFocusSystem": "phase-detection", "fieldOfView": 64.72028350830078, "maxFps": 60, "maxISO": 3264, "maxZoom": 189, "minFps": 60, "minISO": 34, "photoHeight": 3024, "photoWidth": 4032, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": false, "videoHeight": 480, "videoStabilizationModes": [Array], "videoWidth": 640}, {"autoFocusSystem": "phase-detection", "fieldOfView": 64.72028350830078, "maxFps": 60, "maxISO": 3264, "maxZoom": 94.5, "minFps": 60, "minISO": 34, "photoHeight": 1512, "photoWidth": 2016, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": false, "videoHeight": 480, "videoStabilizationModes": [Array], "videoWidth": 640}, {"autoFocusSystem": "phase-detection", "fieldOfView": 64.72028350830078, "maxFps": 60, "maxISO": 3264, "maxZoom": 94.5, "minFps": 60, "minISO": 34, "photoHeight": 1512, "photoWidth": 2016, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": false, "videoHeight": 480, "videoStabilizationModes": [Array], "videoWidth": 640}, {"autoFocusSystem": "phase-detection", "fieldOfView": 70.29109191894531, "maxFps": 60, "maxISO": 3264, "maxZoom": 123.75, "minFps": 60, "minISO": 34, "photoHeight": 2376, "photoWidth": 4224, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": false, "videoHeight": 540, "videoStabilizationModes": [Array], "videoWidth": 960}, {"autoFocusSystem": "phase-detection", "fieldOfView": 70.29109191894531, "maxFps": 60, "maxISO": 3264, "maxZoom": 123.75, "minFps": 60, "minISO": 34, "photoHeight": 2376, "photoWidth": 4224, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": false, "videoHeight": 540, "videoStabilizationModes": [Array], "videoWidth": 960}, {"autoFocusSystem": "phase-detection", "fieldOfView": 64.72028350830078, "maxFps": 60, "maxISO": 3264, "maxZoom": 171.875, "minFps": 60, "minISO": 34, "photoHeight": 3024, "photoWidth": 4032, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": false, "videoHeight": 768, "videoStabilizationModes": [Array], "videoWidth": 1024}, {"autoFocusSystem": "phase-detection", "fieldOfView": 64.72028350830078, "maxFps": 60, "maxISO": 3264, "maxZoom": 171.875, "minFps": 60, "minISO": 34, "photoHeight": 3024, "photoWidth": 4032, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": false, "videoHeight": 768, "videoStabilizationModes": [Array], "videoWidth": 1024}, {"autoFocusSystem": "phase-detection", "fieldOfView": 70.29109191894531, "maxFps": 30, "maxISO": 3264, "maxZoom": 123.75, "minFps": 30, "minISO": 34, "photoHeight": 2376, "photoWidth": 4224, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": false, "videoHeight": 720, "videoStabilizationModes": [Array], "videoWidth": 1280}, {"autoFocusSystem": "phase-detection", "fieldOfView": 70.29109191894531, "maxFps": 30, "maxISO": 3264, "maxZoom": 123.75, "minFps": 30, "minISO": 34, "photoHeight": 2376, "photoWidth": 4224, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": false, "videoHeight": 720, "videoStabilizationModes": [Array], "videoWidth": 1280}, {"autoFocusSystem": "phase-detection", "fieldOfView": 70.29109191894531, "maxFps": 30, "maxISO": 3264, "maxZoom": 123.75, "minFps": 30, "minISO": 34, "photoHeight": 2376, "photoWidth": 4224, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": true, "videoHeight": 720, "videoStabilizationModes": [Array], "videoWidth": 1280}, {"autoFocusSystem": "phase-detection", "fieldOfView": 70.29109191894531, "maxFps": 60, "maxISO": 3264, "maxZoom": 123.75, "minFps": 60, "minISO": 34, "photoHeight": 2376, "photoWidth": 4224, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": false, "videoHeight": 720, "videoStabilizationModes": [Array], "videoWidth": 1280}, {"autoFocusSystem": "phase-detection", "fieldOfView": 70.29109191894531, "maxFps": 60, "maxISO": 3264, "maxZoom": 123.75, "minFps": 60, "minISO": 34, "photoHeight": 2376, "photoWidth": 4224, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": false, "videoHeight": 720, "videoStabilizationModes": [Array], "videoWidth": 1280}, {"autoFocusSystem": "phase-detection", "fieldOfView": 70.29109191894531, "maxFps": 60, "maxISO": 3264, "maxZoom": 123.75, "minFps": 60, "minISO": 34, "photoHeight": 2376, "photoWidth": 4224, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": true, "videoHeight": 720, "videoStabilizationModes": [Array], "videoWidth": 1280}, {"autoFocusSystem": "phase-detection", "fieldOfView": 70.29109191894531, "maxFps": 60, "maxISO": 3264, "maxZoom": 61.875, "minFps": 60, "minISO": 34, "photoHeight": 1188, "photoWidth": 2112, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": false, "videoHeight": 720, "videoStabilizationModes": [Array], "videoWidth": 1280}, {"autoFocusSystem": "phase-detection", "fieldOfView": 70.29109191894531, "maxFps": 60, "maxISO": 3264, "maxZoom": 61.875, "minFps": 60, "minISO": 34, "photoHeight": 1188, "photoWidth": 2112, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": false, "videoHeight": 720, "videoStabilizationModes": [Array], "videoWidth": 1280}, {"autoFocusSystem": "phase-detection", "fieldOfView": 70.29109191894531, "maxFps": 240, "maxISO": 1360, "maxZoom": 67.5, "minFps": 240, "minISO": 34, "photoHeight": 720, "photoWidth": 1280, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": false, "videoHeight": 720, "videoStabilizationModes": [Array], "videoWidth": 1280}, {"autoFocusSystem": "phase-detection", "fieldOfView": 70.29109191894531, "maxFps": 240, "maxISO": 1360, "maxZoom": 67.5, "minFps": 240, "minISO": 34, "photoHeight": 720, "photoWidth": 1280, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": false, "videoHeight": 720, "videoStabilizationModes": [Array], "videoWidth": 1280}, {"autoFocusSystem": "phase-detection", "fieldOfView": 64.72028350830078, "maxFps": 60, "maxISO": 3264, "maxZoom": 94.5, "minFps": 60, "minISO": 34, "photoHeight": 1512, "photoWidth": 2016, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": false, "videoHeight": 1080, "videoStabilizationModes": [Array], "videoWidth": 1440}, {"autoFocusSystem": "phase-detection", "fieldOfView": 64.72028350830078, "maxFps": 60, "maxISO": 3264, "maxZoom": 94.5, "minFps": 60, "minISO": 34, "photoHeight": 1512, "photoWidth": 2016, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": false, "videoHeight": 1080, "videoStabilizationModes": [Array], "videoWidth": 1440}, {"autoFocusSystem": "phase-detection", "fieldOfView": 70.29109191894531, "maxFps": 30, "maxISO": 3264, "maxZoom": 123.75, "minFps": 30, "minISO": 34, "photoHeight": 2376, "photoWidth": 4224, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": false, "videoHeight": 1080, "videoStabilizationModes": [Array], "videoWidth": 1920}, {"autoFocusSystem": "phase-detection", "fieldOfView": 70.29109191894531, "maxFps": 30, "maxISO": 3264, "maxZoom": 123.75, "minFps": 30, "minISO": 34, "photoHeight": 2376, "photoWidth": 4224, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": false, "videoHeight": 1080, "videoStabilizationModes": [Array], "videoWidth": 1920}, {"autoFocusSystem": "phase-detection", "fieldOfView": 70.29109191894531, "maxFps": 30, "maxISO": 3264, "maxZoom": 123.75, "minFps": 30, "minISO": 34, "photoHeight": 2376, "photoWidth": 4224, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": true, "videoHeight": 1080, "videoStabilizationModes": [Array], "videoWidth": 1920}, {"autoFocusSystem": "phase-detection", "fieldOfView": 70.29109191894531, "maxFps": 30, "maxISO": 3264, "maxZoom": 123.75, "minFps": 30, "minISO": 34, "photoHeight": 2376, "photoWidth": 4224, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": false, "videoHeight": 1080, "videoStabilizationModes": [Array], "videoWidth": 1920}, {"autoFocusSystem": "phase-detection", "fieldOfView": 70.29109191894531, "maxFps": 60, "maxISO": 3264, "maxZoom": 123.75, "minFps": 60, "minISO": 34, "photoHeight": 2376, "photoWidth": 4224, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": false, "videoHeight": 1080, "videoStabilizationModes": [Array], "videoWidth": 1920}, {"autoFocusSystem": "phase-detection", "fieldOfView": 70.29109191894531, "maxFps": 60, "maxISO": 3264, "maxZoom": 123.75, "minFps": 60, "minISO": 34, "photoHeight": 2376, "photoWidth": 4224, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": false, "videoHeight": 1080, "videoStabilizationModes": [Array], "videoWidth": 1920}, {"autoFocusSystem": "phase-detection", "fieldOfView": 70.29109191894531, "maxFps": 60, "maxISO": 3264, "maxZoom": 123.75, "minFps": 60, "minISO": 34, "photoHeight": 2376, "photoWidth": 4224, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": true, "videoHeight": 1080, "videoStabilizationModes": [Array], "videoWidth": 1920}, {"autoFocusSystem": "phase-detection", "fieldOfView": 70.29109191894531, "maxFps": 60, "maxISO": 3264, "maxZoom": 123.75, "minFps": 60, "minISO": 34, "photoHeight": 2376, "photoWidth": 4224, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": false, "videoHeight": 1080, "videoStabilizationModes": [Array], "videoWidth": 1920}, {"autoFocusSystem": "phase-detection", "fieldOfView": 70.29109191894531, "maxFps": 60, "maxISO": 3264, "maxZoom": 61.875, "minFps": 60, "minISO": 34, "photoHeight": 1188, "photoWidth": 2112, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": false, "videoHeight": 1080, "videoStabilizationModes": [Array], "videoWidth": 1920}, {"autoFocusSystem": "phase-detection", "fieldOfView": 70.29109191894531, "maxFps": 60, "maxISO": 3264, "maxZoom": 61.875, "minFps": 60, "minISO": 34, "photoHeight": 1188, "photoWidth": 2112, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": false, "videoHeight": 1080, "videoStabilizationModes": [Array], "videoWidth": 1920}, {"autoFocusSystem": "phase-detection", "fieldOfView": 38.78413772583008, "maxFps": 120, "maxISO": 1360, "maxZoom": 135, "minFps": 120, "minISO": 34, "photoHeight": 1080, "photoWidth": 1920, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": false, "videoHeight": 1080, "videoStabilizationModes": [Array], "videoWidth": 1920}, {"autoFocusSystem": "phase-detection", "fieldOfView": 38.78413772583008, "maxFps": 120, "maxISO": 1360, "maxZoom": 135, "minFps": 120, "minISO": 34, "photoHeight": 1080, "photoWidth": 1920, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": false, "videoHeight": 1080, "videoStabilizationModes": [Array], "videoWidth": 1920}, {"autoFocusSystem": "phase-detection", "fieldOfView": 70.29109191894531, "maxFps": 240, "maxISO": 1360, "maxZoom": 67.5, "minFps": 240, "minISO": 34, "photoHeight": 1080, "photoWidth": 1920, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": false, "videoHeight": 1080, "videoStabilizationModes": [Array], "videoWidth": 1920}, {"autoFocusSystem": "phase-detection", "fieldOfView": 70.29109191894531, "maxFps": 240, "maxISO": 1360, "maxZoom": 67.5, "minFps": 240, "minISO": 34, "photoHeight": 1080, "photoWidth": 1920, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": false, "videoHeight": 1080, "videoStabilizationModes": [Array], "videoWidth": 1920}, {"autoFocusSystem": "phase-detection", "fieldOfView": 67.09603881835938, "maxFps": 30, "maxISO": 3264, "maxZoom": 157.5, "minFps": 30, "minISO": 34, "photoHeight": 3024, "photoWidth": 4032, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": false, "videoHeight": 1440, "videoStabilizationModes": [Array], "videoWidth": 1920}, {"autoFocusSystem": "phase-detection", "fieldOfView": 67.09603881835938, "maxFps": 60, "maxISO": 3264, "maxZoom": 157.5, "minFps": 60, "minISO": 34, "photoHeight": 3024, "photoWidth": 4032, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": false, "videoHeight": 1440, "videoStabilizationModes": [Array], "videoWidth": 1920}, {"autoFocusSystem": "phase-detection", "fieldOfView": 67.09603881835938, "maxFps": 60, "maxISO": 3264, "maxZoom": 157.5, "minFps": 60, "minISO": 34, "photoHeight": 3024, "photoWidth": 4032, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": false, "videoHeight": 1440, "videoStabilizationModes": [Array], "videoWidth": 1920}, {"autoFocusSystem": "phase-detection", "fieldOfView": 67.09603881835938, "maxFps": 60, "maxISO": 3264, "maxZoom": 157.5, "minFps": 60, "minISO": 34, "photoHeight": 3024, "photoWidth": 4032, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": true, "videoHeight": 1440, "videoStabilizationModes": [Array], "videoWidth": 1920}, {"autoFocusSystem": "phase-detection", "fieldOfView": 67.09603881835938, "maxFps": 60, "maxISO": 3264, "maxZoom": 157.5, "minFps": 60, "minISO": 34, "photoHeight": 3024, "photoWidth": 4032, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": false, "videoHeight": 1440, "videoStabilizationModes": [Array], "videoWidth": 1920}, {"autoFocusSystem": "phase-detection", "fieldOfView": 67.09603881835938, "maxFps": 60, "maxISO": 3264, "maxZoom": 94.5, "minFps": 60, "minISO": 34, "photoHeight": 1512, "photoWidth": 2016, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": false, "videoHeight": 1440, "videoStabilizationModes": [Array], "videoWidth": 1920}, {"autoFocusSystem": "phase-detection", "fieldOfView": 67.09603881835938, "maxFps": 60, "maxISO": 3264, "maxZoom": 94.5, "minFps": 60, "minISO": 34, "photoHeight": 1512, "photoWidth": 2016, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": false, "videoHeight": 1440, "videoStabilizationModes": [Array], "videoWidth": 1920}, {"autoFocusSystem": "phase-detection", "fieldOfView": 67.09603881835938, "maxFps": 30, "maxISO": 3264, "maxZoom": 189, "minFps": 30, "minISO": 34, "photoHeight": 3024, "photoWidth": 4032, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": false, "videoHeight": 1944, "videoStabilizationModes": [Array], "videoWidth": 2592}, {"autoFocusSystem": "phase-detection", "fieldOfView": 67.09603881835938, "maxFps": 30, "maxISO": 3264, "maxZoom": 189, "minFps": 30, "minISO": 34, "photoHeight": 3024, "photoWidth": 4032, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": false, "videoHeight": 1944, "videoStabilizationModes": [Array], "videoWidth": 2592}, {"autoFocusSystem": "phase-detection", "fieldOfView": 67.09603881835938, "maxFps": 30, "maxISO": 3264, "maxZoom": 189, "minFps": 30, "minISO": 34, "photoHeight": 3024, "photoWidth": 4032, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": false, "videoHeight": 2448, "videoStabilizationModes": [Array], "videoWidth": 3264}, {"autoFocusSystem": "phase-detection", "fieldOfView": 67.09603881835938, "maxFps": 30, "maxISO": 3264, "maxZoom": 189, "minFps": 30, "minISO": 34, "photoHeight": 3024, "photoWidth": 4032, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": false, "videoHeight": 2448, "videoStabilizationModes": [Array], "videoWidth": 3264}, {"autoFocusSystem": "phase-detection", "fieldOfView": 70.29109191894531, "maxFps": 30, "maxISO": 3264, "maxZoom": 129.125, "minFps": 30, "minISO": 34, "photoHeight": 2376, "photoWidth": 4224, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": false, "videoHeight": 2160, "videoStabilizationModes": [Array], "videoWidth": 3840}, {"autoFocusSystem": "phase-detection", "fieldOfView": 70.29109191894531, "maxFps": 30, "maxISO": 3264, "maxZoom": 129.125, "minFps": 30, "minISO": 34, "photoHeight": 2376, "photoWidth": 4224, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": false, "videoHeight": 2160, "videoStabilizationModes": [Array], "videoWidth": 3840}, {"autoFocusSystem": "phase-detection", "fieldOfView": 70.29109191894531, "maxFps": 30, "maxISO": 3264, "maxZoom": 129.125, "minFps": 30, "minISO": 34, "photoHeight": 2376, "photoWidth": 4224, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": true, "videoHeight": 2160, "videoStabilizationModes": [Array], "videoWidth": 3840}, {"autoFocusSystem": "phase-detection", "fieldOfView": 70.29109191894531, "maxFps": 30, "maxISO": 3264, "maxZoom": 129.125, "minFps": 30, "minISO": 34, "photoHeight": 2376, "photoWidth": 4224, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": false, "videoHeight": 2160, "videoStabilizationModes": [Array], "videoWidth": 3840}, {"autoFocusSystem": "phase-detection", "fieldOfView": 70.29109191894531, "maxFps": 60, "maxISO": 3264, "maxZoom": 129.125, "minFps": 60, "minISO": 34, "photoHeight": 2160, "photoWidth": 3840, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": false, "videoHeight": 2160, "videoStabilizationModes": [Array], "videoWidth": 3840}, {"autoFocusSystem": "phase-detection", "fieldOfView": 70.29109191894531, "maxFps": 60, "maxISO": 3264, "maxZoom": 129.125, "minFps": 60, "minISO": 34, "photoHeight": 2160, "photoWidth": 3840, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": false, "videoHeight": 2160, "videoStabilizationModes": [Array], "videoWidth": 3840}, {"autoFocusSystem": "phase-detection", "fieldOfView": 70.29109191894531, "maxFps": 60, "maxISO": 3264, "maxZoom": 129.125, "minFps": 60, "minISO": 34, "photoHeight": 2160, "photoWidth": 3840, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": true, "videoHeight": 2160, "videoStabilizationModes": [Array], "videoWidth": 3840}, {"autoFocusSystem": "phase-detection", "fieldOfView": 67.09603881835938, "maxFps": 30, "maxISO": 7616, "maxZoom": 189, "minFps": 30, "minISO": 34, "photoHeight": 3024, "photoWidth": 4032, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": false, "videoHeight": 3024, "videoStabilizationModes": [Array], "videoWidth": 4032}, {"autoFocusSystem": "phase-detection", "fieldOfView": 67.09603881835938, "maxFps": 30, "maxISO": 7616, "maxZoom": 189, "minFps": 30, "minISO": 34, "photoHeight": 3024, "photoWidth": 4032, "pixelFormats": [Array], "supportsDepthCapture": false, "supportsPhotoHDR": false, "supportsVideoHDR": false, "videoHeight": 3024, "videoStabilizationModes": [Array], "videoWidth": 4032}], "hardwareLevel": "full", "hasFlash": true, "hasTorch": true, "id": "com.apple.avfoundation.avcapturedevice.built-in_video:0", "isMultiCam": false, "maxZoom": 189, "minZoom": 1, "name": "Back Camera", "neutralZoom": 1, "physicalDevices": ["wide-angle-camera"], "position": "back", "sensorOrientation": "landscape-right", "supportsFocus": true, "supportsLowLightBoost": false, "supportsRawCapture": false}

Device
iPhone 13 Pro Max
VisionCamera Version
3.6.4
Can you reproduce this issue in the VisionCamera Example app?
Yes, I can reproduce the same issue in the Example app here
Additional information

[ ] I am using Expo
[ ] I have enabled Frame Processors (react-native-worklets-core)
[X] I have read the Troubleshooting Guide
[X] I agree to follow this project's Code of Conduct
[X] I searched for similar issues in this repository and found none.

Hi @mrousavy
iOS does support square format. At least it does now, when I'm going the camera on the iphone :-) It doesn't seem like this library can support it atm though.. Do you think it will be possible? :-)


Implement UndoRedo and save prompt

Bug Fixes

Fix ConditionNodePanel operator not updating (similar to #9 in ActionNodePanel)
Fix ActionNodePanel ActionVariable value controls not updating when selecting a different variable type
Fix ActionNodePanel PlayAudio's pitch slider affecting volume label
Fix BridgeOut node being created in the center instead of next to BridgeIn when creating from picker
Fix off-centered position of newly created nodes ddec7fb0ae42e725f07d88ac65bcb4876075bb2d

Features

Implement UndoRedo for the following operations (history is tracked in each MonologueGraphEdit, i.e. per file)

Adding and deleting graph nodes
Connecting and disconnecting graph nodes, including from picker
Changes to node panel data
Changes to option IDs and their NextID connections thereof
Use Ctrl + Z and Ctrl + Shift + Z

Add save prompt on tab close

Unsaved files have asterisk (*) in their name, checked with UndoRedo's built-in versioning
When closing individual tabs, user will be prompted to save, discard or cancel
When closing the entire window, the first tab will close and prompt if needed, then continue to close tabs recurringly until there are no more prompts

Developer Notes

RootNodePanel is now a MonologueNodePanel
MonologueNodePanel has a base function _on_node_property_change() that allows you to define any graph node properties to update, it has a built-in equality check to try and only register new changes, PropertyHistory will call the panel's _from_dict() on undo/redo to update the panel with the graph node's _to_dict()
Renamed Control.gd, GraphEdit.gd, GraphEdit.tscn to have "Monologue" prefix because the previous names were exactly the same as Godot's built-in classes, making it confusing
For LineEdit, TextEdit and SpinBox, the UndoRedo history is only committed on focus_exited and text_submitted, but node previews can still be updated in real-time like in SentenceNodePanel _on_sentence_text_edit_changed()

Summary by Sourcery
Implement UndoRedo functionality and add save prompt on tab close. Fix various bugs related to node updates and positioning. Refactor and enhance node panel handling and naming conventions for clarity.
New Features:

Implement UndoRedo functionality for adding, deleting, connecting, and disconnecting graph nodes, as well as changes to node panel data and option IDs.
Add save prompt on tab close, with unsaved files indicated by an asterisk (*) and prompts for saving, discarding, or canceling changes.

Bug Fixes:

Fix ConditionNodePanel operator not updating.
Fix ActionNodePanel ActionVariable value controls not updating when selecting a different variable type.
Fix ActionNodePanel PlayAudio's pitch slider affecting volume label.
Fix BridgeOut node being created in the center instead of next to BridgeIn when creating from picker.
Fix off-centered position of newly created nodes.

Enhancements:

Refactor RootNodePanel to MonologueNodePanel and introduce a base function _on_node_property_change() for updating graph node properties with built-in equality checks.
Rename Control.gd, GraphEdit.gd, and GraphEdit.tscn to include 'Monologue' prefix to avoid confusion with Godot's built-in classes.

Thank you so much!


[Question] How to create grammar to parse unary post increment and decrement AST?

Hey!
Got a little stuck while trying to parse to AST post inc(++) and dec(--). Wherever it seem logic to me to put expression_unary_post rule, once I do it compilation throws:
Error parsing grammar
Maximum call stack size exceeded

How to make it work? (assuming that you can pre and post increment anything)
start = precedence_11

precedence_11_operator = "+" / "-"
precedence_11
  = left:precedence_12 empty? operator:precedence_11_operator empty? right:precedence_11 {
        const { start, end } = location();
        return {
            type: "math",
            subtype: operator,
            left,
            right,
            start: start.offset, end: end.offset,
        };
    }
  / precedence_12

precedence_12_operator = "*" / "/"
precedence_12
  = left:precedence_13 empty? operator:precedence_12_operator empty? right:precedence_12 {
        const { start, end } = location();
        return {
            type: "math",
            subtype: operator,
            left,
            right,
            start: start.offset, end: end.offset,
        };
    }
  / precedence_13

precedence_13
  = left:expression_primary empty? "**" empty? right:precedence_13 {
        const { start, end } = location();
        return {
            type: "math",
            subtype: "**",
            left,
            right,
            start: start.offset, end: end.offset,
        };
    }
  / expression_primary

expression_unary_post_operator = "++" / "--"
expression_unary_post
  = left:expression_primary empty? operator:expression_unary_post_operator {
        const { start, end } = location();

        return {
            type: "post",
            subtype: operator,
            isUnary: true,
            left,
            right: null,
            start: start.offset, end: end.offset,
        };
    }

expression_group
  = sign:sign? "(" empty? operation:expression empty? ")" {
        const { start, end } = location();
        return {
            type: "group",
            sign,
            operation,
            start: start.offset, end: end.offset,
        };
    }

expression_unary_pre_operator = "!" / "~" / "++" / "--"
expression_unary_pre
  = operator:expression_unary_pre_operator empty? right:expression_primary {
        const { start, end } = location();
        let type;
        switch (operator) {
            case "--": type = "pre"; break;
            case "++": type = "pre"; break;
            case "!": type = "logic"; break;
            case "~": type = "bit"; break;
        }

        return {
            type,
            subtype: operator,
            isUnary: true,
            left: null,
            right,
            start: start.offset, end: end.offset,
        };
    }

expression_primary =
    number /
    expression_unary_pre /
    expression_group

Tip: if you need only start and end offset, more performant solution is use range() function.
Typical solution to parse arithmetic expressions:
//{ The higher the priority, the larger the rule number.
Expr// assignment, minimal priority
  = l:Expr0 t:(p1 Expr0)* {return rightAssotiative(l, t);};
Expr0// value lists
  = h:(@Expr1 comma)* t:Expr1? {return list(h, t);};
Expr1// Logical OR
  = l:Expr2 t:(p2 Expr2)* {return leftAssotiative(l, t);};
Expr2// Logical AND
  = l:Expr3 t:(p3 Expr3)* {return leftAssotiative(l, t);};
Expr3// Bitwise OR
  = l:Expr4 t:(p4 Expr4)* {return leftAssotiative(l, t);};
Expr4// Bitwise XOR
  = l:Expr5 t:(p5 Expr5)* {return leftAssotiative(l, t);};
Expr5// bitwise AND
  = l:Expr6 t:(p6 Expr6)* {return leftAssotiative(l, t);};
Expr6// comparison operators
  = l:Expr7 t:(p7 Expr7)* {return leftAssotiative(l, t);};
Expr7// relational operators
  = l:Expr8 t:(p8 Expr8)* {return leftAssotiative(l, t);};
Expr8// bitwise shift
  = l:Expr9 t:(p9 Expr9)* {return leftAssotiative(l, t);};
Expr9// addition and substraction
  = l:Expr10 t:(p10 Expr10)* {return leftAssotiative(l, t);};
Expr10// multiplication, division, remainder
  = l:Expr11 t:(p11 Expr11)* {return leftAssotiative(l, t);};
Expr11// pow
  = l:Expr12 t:(p12 Expr12)* {return leftAssotiative(l, t);};
Expr12// Logical and bitwise NOT, unary operators, maximum priority
  = o:p13 r:Expr12 {return node({kind: o, expr: r});}
  / Expr13
  ;
Expr13// prefix increment / decrement
  = o:p14 r:Expr13 {return node({kind: o, expr: r});}
  / Expr14
  ;
Expr14// postfix increment / decrement
  = r:Expr15 o:p15 {return node({kind: o, expr: r});}
  / Expr15
  ;
Expr15// function call, indexation, dot syntax
  = /*l:Expr16 t:suffix* {return suffix(l, t);};
Expr16
  = funcdef
  / block
  / literal
  / constant
  / IfExpr
  / ForExpr
  / WhileExpr
  / BreakExpr
  / YieldExpr
  / ReturnExpr
  / ContinueExpr
  / define
  / name
  / */"(" @Expr ")"
  ;
//}

//{ Operators
comma = @',' _;

p1 = @('='/'+='/'-='/'*='/'/='/'%='/'<<='/'>>='/'&='/'^='/'|='/'&&='/'||=') _;
p2 = @'||'_;
p3 = @'&&'_;
p4 = @'|' _;
p5 = @'^' _;
p6 = @'&' _;
p7 = @('=='/'!=') _;
p8 = @('<='/'<'/'>='/'>') _;
p9 = @('<<'/'>>') _;
p10= @[+-] _;
p11= @[*/%]_;
p12= @'**' _;
p13= !p14 @[!~+-] _;
p14= @('++'/'--') _;
p15= p14;
//}
_ 'Whitespace' = [ \r\n\t]*;

Error parsing grammar
Maximum call stack size exceeded

This is bad. Could you post the full minimal reproducible example of such grammar? It could be bug in peggy looks like some infinity recursion was not detected

Thanks for tip and grammar pattern!

This is bad. Could you post the full minimal reproducible example of such grammar? It could be bug in peggy looks like some infinity recursion was not detected

Here is example that ends with that error:

start = elements:(empty / expression)* {
    return elements;
}

// #######################################################################
// === Utils ===

new_line = "\r\n" / "\n" {
    const { start, end } = location();
    return {
        type: "new_line",
        start: start.offset, end: end.offset,
    };
}

space = [ \t]+ {
    const { start, end } = location();
    return {
        type: "space",
        start: start.offset, end: end.offset,
    };
}

empty = elements:(space / new_line )+ {
    const { start, end } = location();
    return {
        type: "empty",
        elements,
        start: start.offset, end: end.offset,
    };
}

sign = "+" / "-"
number = [0-9]+ ("_" [0-9]+)* {
    const { start, end } = location(); return { start: start.offset, end: end.offset };
}

// ===================================
expression
  = precedence_11

precedence_11_operator = "+" / "-"
precedence_11
  = left:precedence_12 empty? operator:precedence_11_operator empty? right:precedence_11 {
        const { start, end } = location();
        return {
            type: "math",
            subtype: operator,
            left,
            right,
            start: start.offset, end: end.offset,
        };
    }
  / precedence_12

precedence_12_operator = "*" / "/"
precedence_12
  = left:precedence_13 empty? operator:precedence_12_operator empty? right:precedence_12 {
        const { start, end } = location();
        return {
            type: "math",
            subtype: operator,
            left,
            right,
            start: start.offset, end: end.offset,
        };
    }
  / precedence_13

precedence_13
  = left:expression_primary empty? "**" empty? right:precedence_13 {
        const { start, end } = location();
        return {
            type: "math",
            subtype: "**",
            left,
            right,
            start: start.offset, end: end.offset,
        };
    }
  / expression_primary

expression_unary_post_operator = "++" / "--"
expression_unary_post
  = left:expression_primary empty? operator:expression_unary_post_operator {
        const { start, end } = location();

        return {
            type: "post",
            subtype: operator,
            isUnary: true,
            left,
            right: null,
            start: start.offset, end: end.offset,
        };
    }

expression_group
  = sign:sign? "(" empty? operation:expression empty? ")" {
        const { start, end } = location();
        return {
            type: "group",
            sign,
            operation,
            start: start.offset, end: end.offset,
        };
    }

expression_unary_pre_operator = "!" / "~" / "++" / "--"
expression_unary_pre
  = operator:expression_unary_pre_operator empty? right:expression_primary {
        const { start, end } = location();
        let type;
        switch (operator) {
            case "--": type = "pre"; break;
            case "++": type = "pre"; break;
            case "!": type = "logic"; break;
            case "~": type = "bit"; break;
        }

        return {
            type,
            subtype: operator,
            isUnary: true,
            left: null,
            right,
            start: start.offset, end: end.offset,
        };
    }

expression_primary =
    number /
    expression_unary_pre /
    expression_group /
    expression_unary_post

@Mingun
Narrowed it, this is minimal, or close to minimal that causes maximum stack exceeded error:
start = expr*

expr
  = expr "++"

@Mingun do you have a suggestion for how to catch this as an infinite loop?

These are unintended consequences of #160 -- because we now run checks of each stage without trowing exceptions, the AST in reportInfiniteRepetition pass can have infinity recursive rules which we try to check. The fast solution is to factor out the reportInfiniteRecursion pass to its own stage. The more clever solution is to tweak all passes in a check stage so that they will not assume that AST contains no recursive rules.

That was part of it.  The other part is that the reportInfiniteRecursion recursion rule keeps going after it finds an error, in this case.  I'm moving the rule into the new prepare phase, and sprinkling some checks around looking to see if we've gotten an error yet.  This means that we will only find the first infinite recursion, but I'm fine with that in order to fix this class of bugs.


Update nginx from 1.14 to 1.16

Ticket: https://trello.com/c/5YbDtvdz/1313-update-router-base-image

Any expected changes (breaking or otherwise)? I can't seem to find the changelog

Ah wait, here it is https://www.nginx.com/blog/nginx-1-16-1-17-released/


fix: use html.isRaw method when appending child Markup instances

Fixes #9

Use isRaw from html interface

This fixes the error thrown when isRaw is undefined

abandoned


Refactor theming and font.

@janaSunrise Don't use the next Image component on the contributors page. Vercel limits get crossed 😢


Updated ws package version

Updated websocket ws package version from 0.8.1 to 1.1.1 after stumbling upon a nasty application crash described here:
https://github.com/websockets/ws/issues/778
The Node Security Platform also reports a high severity and a medium severity security issues with version < 1.1.1:
https://nodesecurity.io/advisories/120
https://nodesecurity.io/advisories/67

HI - this is a duplicate of   #931
and is addressed there...
https://github.com/node-red/node-red/issues/931

Coverage remained the same at 88.015% when pulling b8de533808a9768fbbccbfa44e03fe581fab40f7 on MonkeyDo:patch-2 into c3a99cf5a4b91da7fd1c23dc97e20d5b8546cd35 on node-red:master.

Coverage decreased (-0.1%) to 87.904% when pulling b8de533808a9768fbbccbfa44e03fe581fab40f7 on MonkeyDo:patch-2 into c3a99cf5a4b91da7fd1c23dc97e20d5b8546cd35 on node-red:master.


Tracker and Downloading File Questions !!

Hello!
I have two questions...

I've already did the implementation of the client and have no problem, but, i'm only getting the .torrent file, but how can i get the complete file? I'm testing by downloading an image of an debian virtual machine, and i'm just getting the .torrent (http://cdimage.debian.org/debian-cd/8.6.0/amd64/bt-dvd/debian-8.6.0-amd64-DVD-1.iso.torrent)... How can i get the original/complete file from there?

I'm trying to implement a tracker, and i'm using the "Tracker code" you publish in the README, but i'm having problems with it...

Hope you can help me.

why-you-must-not-ask-questions-on-github-issues

Getting the full file from a .torrent file is the whole point of a torrent client.
What problem are you having with the tracker? What are you trying to do with it?

Hello Petazzoni.

I've already solve the problem with the tracker, was a concept issue in my head, just a confusion.
I know that getting the full file is the point... but, i'm not sure how to do it, at the time, i create the torrent file, but i don't know how to get a file from de tracker... I mean, where (in the code) do i have tu text the .torrent file path and get de original file...

I'm sorry, i've been trying and nothing happens.


Setting vertical-align for tooltip to top to avoid shifting layout wh…

…en inline

just added vertical alignment to block class


where is the backbone pretrained model?

Could you please provide the backbone pretrained model (weights/backbone_resnet34.pth)? I want to train coco dataset, Looking forward to your reply, thx.

I uploaded. https://github.com/feiyuhuahuo/SOLOv2_minimal/releases/tag/v1.0

I uploaded. https://github.com/feiyuhuahuo/SOLOv2_minimal/releases/tag/v1.0

Thank you so much!  By the way, I tried to convert the pytorch model to onnx, but I encountered some problems, the error is as follows:
ther case, this might cause the trace to be incorrect.
  x = (x - torch.tensor([127., 127., 127.], device='cuda')) / torch.tensor([60., 60., 60.], device='cuda')
/opt/conda/lib/python3.8/site-packages/torch/functional.py:478: UserWarning: torch.meshgrid: in an upcoming release, it will be required to pass the indexing argument. (Triggered internally at /opt/pytorch/pytorch/aten/src/ATen/native/TensorShape.cpp:2966.)
  return _VF.meshgrid(tensors, **kwargs)  # type: ignore[attr-defined]
Traceback (most recent call last):
  File "export2onnx.py", line 30, in <module>
    torch.onnx.export(model,
  File "/opt/conda/lib/python3.8/site-packages/torch/onnx/utils.py", line 479, in export
    _export(
  File "/opt/conda/lib/python3.8/site-packages/torch/onnx/utils.py", line 1411, in _export
    graph, params_dict, torch_out = _model_to_graph(
  File "/opt/conda/lib/python3.8/site-packages/torch/onnx/utils.py", line 1054, in _model_to_graph
    graph = _optimize_graph(
  File "/opt/conda/lib/python3.8/site-packages/torch/onnx/utils.py", line 550, in _optimize_graph
    _C._jit_pass_lower_all_tuples(graph)
RuntimeError: tuple index with non-constant index

```,  Can you provide some help？

Can your model reach this line when exporting? https://github.com/feiyuhuahuo/SOLOv2_minimal/blob/e1d81cfb8beb16d6675a3b701963a70919eed814/model/head.py#L466

Can your model reach this line when exporting?
https://github.com/feiyuhuahuo/SOLOv2_minimal/blob/e1d81cfb8beb16d6675a3b701963a70919eed814/model/head.py#L466

Yes, I can reach there:
get_seg = torch.jit.script(get_seg_scripted)
        seg_result = get_seg(cate_preds, kernel_preds, mask_feat_pred)
        # print("seg_result: ", seg_result)
```,  get the seg_result success.

I have solved this problem, But I can't convert onnx to tensorrt...

TensorRT C++ API or Python API？

For Python, This code not support in tensorrt (DynamicConv):
seg_preds = F.conv2d(seg_preds, kernel_preds, stride=1).squeeze(0).sigmoid()

Can you convert tensorrt success??

The logs as below:
[07/21/2023-07:43:51] [E] [TRT] ModelImporter.cpp:726: While parsing node number 413 [Conv -> "onnx::Squeeze_1420"]:
[07/21/2023-07:43:51] [E] [TRT] ModelImporter.cpp:727: --- Begin node ---
[07/21/2023-07:43:51] [E] [TRT] ModelImporter.cpp:728: input: "onnx::Conv_1159"
input: "onnx::Conv_1419"
output: "onnx::Squeeze_1420"
name: "Conv_915"
op_type: "Conv"
attribute {
  name: "dilations"
  ints: 1
  ints: 1
  type: INTS
}
attribute {
  name: "group"
  i: 1
  type: INT
}
attribute {
  name: "kernel_shape"
  ints: 1
  ints: 1
  type: INTS
}
attribute {
  name: "pads"
  ints: 0
  ints: 0
  ints: 0
  ints: 0
  type: INTS
}
attribute {
  name: "strides"
  ints: 1
  ints: 1
  type: INTS
}

[07/21/2023-07:43:51] [E] [TRT] ModelImporter.cpp:729: --- End node ---
[07/21/2023-07:43:51] [E] [TRT] ModelImporter.cpp:732: ERROR: onnx2trt_utils.cpp:2060 In function convMultiInput:
[8] Assertion failed: layer && "Failed to add the Convolution layer."

The tensorrt deploy is diffucult. About the training problem, Could you please tell me the code below can be detele?
    def train(self, mode=True):
        super(ResNetSOLO, self).train(mode)
        self._freeze_stages()
        if mode and self.norm_eval:
            for m in self.modules():
                # trick: eval have effect on BatchNorm only
                if isinstance(m, _BatchNorm):   # This line
                    m.eval()
```,
When I delete this code(m.eval()), mAP is low....
But for some reason I'm going to delete it and use another BackBone. Or when I delete these codes, is there any other places that can be modified to improve the accuracy, looking forward to your reply.

Some parameters are different during training and evaling. So use module.train() and module.eval() to control it. Set module.train() when evaling certainly cause low mAP.

OK， Thank you


Add flag to optionally ignore custom summaries

What is the context of this PR?
Adds a boolean flag to optionally ignore custom section summaries. This fixes an issue whereby custom section summaries were causing KeyError exceptions on Summary blocks.
How to review
Check that the tests pass and there are no regressions.

 Fix bug in questionnaire summary context handler


Download image attachments in bulk

if images have been collected as part of the ODK portion of a survey. is there a way to get a single download of all the image files?

They are in the submissions directory. There is no endpoint that finds the images and makes a zip, but that would be straightforward.

We could make a very simple bash script to do this and wrap it in an endpoint. After field work type of task.

as noted in #88, there's currently no support for image type questions
so support for image type questions
and the ability to download all images for a form as a zip

image question type
http://xlsform.org/#question-types

The root cause of @emilyeros's breakage (explained in #88) was a space in the filename, not anything to do with image attachments.

How (image) attachments are currently treated:

@danbjoseph when downloading all images for a form as a zip does it make sense to also include the JSON and XML responses (the XForm submissions)? (If so, it also makes sense to preserve the directory structure.) Thoughts?

i think a zip of just the images is fine. i think most users would probably end up doing some sort of mail merge using the csv download and a single folder of all the images. if a user is doing something with the individual json and xml, they probably are advanced enough to just copy the directory from the server. including those files in the image zip download would likely confuse some users.


Axon deserialize issue: "..is invalid, likely because it points to an old version of the code"

I've been running into some de/serialization issues with the model. It may be that I have loaded or saved the model wrong (just used File.write!/read! defaults.
params =
    model
    |> Axon.Loop.trainer(loss_fn, optimizer)
    |> Axon.Loop.run(data, %{}, epochs: 5, iterations: 1)

serialized_model = Axon.serialize(model, params)
File.write!("./model_b", serialized_model)

serialized = File.read!("./model_b")
{saved_model, saved_params} = Axon.deserialize(serialized)

After inspecting deserialize/2 in Axon, it seems its it's throwing this error from the map_to_axon call.

%Inspect.Error{
  message: "got BadFunctionError with message \"function #Function<58.92691295/2 in Axon> is invalid, likely because it points to an old version of the code\" while inspecting %{__struct__: Axon, args: [:layer], hooks: [], id: 20, name: #Function<57.92691295/2 in Axon>, op: :softmax, op_name: :softmax, opts: [], output_shape: {nil, 1, 9}, parameters: [], parent: [%{__struct__: Axon, args: [:layer, :parameter, :parameter], hooks: [], id: 19, name: #Function<57.92691295/2 in Axon>, op: :dense, op_name: :dense, opts: [], output_shape: {nil, 1, 9}, parameters: [%Axon.Parameter{frozen: false, id: 17, initializer: :glorot_uniform, name: \"kernel\", shape: {100, 9}}, %Axon.Parameter{frozen: false, id: 18, initializer: :zeros, name: \"bias\", shape: {9}}], parent: [%{__struct__: Axon, args: [:layer], hooks: [], id: 16, name: #Function<57.92691295/2 in Axon>, op: :dropout, op_name: :dropout, opts: [rate: 0.2], output_shape: {nil, 1, 100}, parameters: [], parent: [%{__struct__: Axon, args: [:layer], hooks: [], id: 15, name: #Function<38.92691295/2 in Axon>, op: #Function<41.92691295/2 in Axon>, op_name: :elem, opts: [], output_shape: {nil, 1, 100}, parameters: [], parent: [%{__struct__: Axon, args: [...], ...}], policy: p=f32 c=f32 o=f32}], policy: p=f32 c=f32 o=f32}], policy: p=f32 c=f32 o=f32}], policy: p=f32 c=f32 o=f32}"
}

This is only happening if you save the Axon.serialize using File.write! in another process, once you run a new process and load the relevant file output you get the below.
If you save the serialized state and load it straight away (from the same process, or mix run -e) there isn't any issue.

@josevalim Is there a way around this? I was a but concerned with serializing functions being an issue and it seems it is

Serialized functions is not going to work across Axon versions, yeah. If the function implementation changes, then the serialized function changes. You can serialize full references, such as &Axon.foo/3.


[Snyk] Security upgrade aiohttp from 3.8.6 to 3.9.4

This PR was automatically created by Snyk using the credentials of a real user.Snyk has created this PR to fix one or more vulnerable packages in the `pip` dependencies of this project.
Changes included in this PR

Changes to the following files to upgrade the vulnerable dependencies to a fixed version:

examples/workflow/requirements.txt

Vulnerabilities that will be fixed
By pinning:

Severity
Priority Score (*)
Issue
Upgrade
Breaking Change
Exploit Maturity

521/1000  Why? Recently disclosed, Has a fix available, CVSS 4.7
Cross-site Scripting (XSS) SNYK-PYTHON-AIOHTTP-6645291
aiohttp:  3.8.6 -> 3.9.4
No
No Known Exploit

(*) Note that the real score may have changed since the PR was raised.
Some vulnerabilities couldn't be fully fixed and so Snyk will still find them when the project is tested again. This may be because the vulnerability existed within more than one direct dependency, but not all of the affected dependencies could be upgraded.
Check the changes in this PR to ensure they won't cause issues with your project.

Note: You are seeing this because you or someone else with access to this repository has authorized Snyk to open fix PRs.
For more information:
🧐 View latest project report
🛠 Adjust project settings
📚 Read more about Snyk's upgrade and patch logic

Learn how to fix vulnerabilities with free interactive lessons:
🦉 Cross-site Scripting (XSS)

@caniszczyk could you please sign your commit? Otherwise I'll have to close your PR and manually make the change as myself.

In your local branch, run: git rebase HEAD~1 --signoff
Force push your changes to overwrite the branch: git push --force-with-lease origin snyk-fix-799147f133b5a9300fde88fe1ec75b15

I'll close this in favor of https://github.com/dapr/python-sdk/pull/698 which is more likely to get a response.
If necessary I will manually address it in the coming weeks.


Proper Ansible configuration for group vars

The playbook uses a role which has some dependencies including an nginx role. This needs a variable for which sites you want to enable on the nginx server. This should be put in group_vars, but for some reason ansible is not picking this up.

Fixed in 56b6788fd


pull request for e2e test at 11/25/2016 21:56:04

:white_check_mark: Validation status: passed
For more details, please refer to the build report.
Note: If you changed an existing file name or deleted a file, broken links in other files to the deleted or renamed file are listed only in the full build report.


Examples: fix GemPy notebook import failures

any updates here?

Have chased the GemPy guys but nothing yet

any news from gempy

any news from gempy

Still waiting on a new version. Have poked them again to get some kind of timeline for when we can expect that. The alternative would be to install GemPy from their latest master (since it's been fixed there for a while), but I'm not keen on that personally.

GemPY prepapred a pre-release
https://github.com/cgre-aachen/gempy/releases/tag/2023.2.0

closing as superseded by #2320


restart tedge mapper before tedge agent (#683)

Signed-off-by: initard<EMAIL_ADDRESS>Proposed changes
Ensuring that on restart the mapper is available when tedge_agent starts.
Types of changes
What types of changes does your code introduce to thin-edge.io?
Put an x in the boxes that apply

[ ] Bugfix (non-breaking change which fixes an issue)
[ ] New feature (non-breaking change which adds functionality)
[ ] Improvement (general improvements like code refactoring that doesn't explicitly fix a bug or add any new functionality)
[ ] Documentation Update (if none of the other choices apply)
[ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)

Paste Link to the issue

Checklist
Put an x in the boxes that apply. You can also fill these out after creating the PR. If you're unsure about any of them, don't hesitate to ask. We're here to help! This is simply a reminder of what we are going to look for before merging your code.

[x] I have read the CONTRIBUTING doc
[x] I have signed the CLA (in all commits with git commit -s)
[x] I ran cargo fmt as mentioned in CODING_GUIDELINES
[ ] I used cargo clippy as mentioned in CODING_GUIDELINES
[ ] I have added tests that prove my fix is effective or that my feature works
[ ] I have added necessary documentation (if appropriate)

Further comments
If this is a relatively large or complex change, kick off the discussion by explaining why you chose the solution you did and what alternatives you considered, etc...

I am afraid that this change will affect software-list report. Any opinions here?

This has definitely to be tested.

In this PR, we want to guarantee the order, 1) tedge-mapper-sm-c8y 2) tedge-agent. However, it's contradicting to tedge connect. tedge connect starts 1) tedge-agent 2) tedge-mapper-sm-c8y. https://github.com/thin-edge/thin-edge.io/blob/main/crates/core/tedge/src/cli/connect/command.rs#L490
For software management, we need to start agent first because sm-mapper publishes software-list request at the start-up.

Neither the sm-c8y not the agent should expect the other to start before. Both should be able to process messages that have been sent while not running (persistent session-id and subscriptions with QoS>0, no clean-session).
That said:

Unfortunately, the sm-c8y and the agent seem to miss some messages on start.
The current PR can only be a workaround - and can be merged only if not introducing an other issue.
One point is missing to guarantee that both sm-c8y and the agent receive all the messages at the very first start. Both subscriptions need to be created before any message is sent.

It really does seem to be fine :thinking:

Sorry, a little late to the discussion.
I suppose this actually introduces the above mentioned issue, however, we may not see it because the device is already created
and we have run at least once the mapper by tedge connect which sends the list at least once. Both Requires and After affect the boot up sequence and should not block force manual start/stop commands.


Error 500

Guzzle version(s) affected: x.y.z
**PHP version 7.3.25
**cURL version 7.29.0
Description
I am execute the Guzzle inside a PHP while (180 to 1000 records return), but I receive error 500.
I change the max-execution-time in my php.ini to 480, but this is not the problem.
Any idea?
$db = new Db();
$report= new Report();
$con = $db->connect();
$peoples = $report->activePeoples($con);

$client = new GuzzleHttp\Client(['verify' => false]);
	$url = 'https://<IP_ADDRESS>:3333/sendFile';

while ($p = pg_fetch_array($pessoas)) {
    $phone = "556199999999";
	$promises[] = $client->postAsync(
		$url,
		['json' => [
			"sessionName" => "session1",
			"number" => "$phone",
            "filePath" => "https://url.com/media/files/pdf.pdf",
            "fileName"=> "pdf.pdf",
	"caption" => "text caption"]
		]
	)->then(function ($response){
		echo $response->getBody()." ";
	});

}
$results = GuzzleHttp\Promise\unwrap($promises);
$results = GuzzleHttp\Promise\settle($promises)->wait();
print "ended." . PHP_EOL;`

500 is a server issue. The issue is not related to Guzzle. Also, it is impossible for me to run the reproducer script.


to_pyarrow_table does not deduce partition filters from filter list

Description
In the documentation for to_pyarrow_table it is stated that if filters are used, partitions do not need to be specified.
However, looking at the code here: https://github.com/delta-io/delta-rs/blob/bc9253c965c744a5cc1e1321555ec6b3f29f52b7/python/deltalake/table.py#L969
it seems that only partitions are used when creating the dataset. Then, filters are used when converting to a table.
Is this a bug or expected behavior? Seems that in a large Delta table, we will be scanning a lot of irrelevant files in the first stage.
Use Case
Specify filters list and expect Delta-rs to find the relevant partition filters and apply those to the Dataset.
Related Issue(s)

@zalmane according to the pyarrow docs, filter predicates in the .to_table uses partition information and file statistics to do the table scan, so it should skip files if they are not in the predicate

I also saw this in the to_table docs, but it seems in delta-rs it is a two step process - first calls to_pyarrow_dataset, then invokes to_table. So the to_pyarrow_dataset would scan these fragments and return a dataset that includes all files. Then, to_table will filter those.
I assume filtering the partitions in the to_pyarrow_dataset functions as an optimization? Otherwise, why filter the partitions there at all vs waiting for the to_table call?

Maybe @wjones127 knows that one.
I can only assume it doesn't matter per se

Did some more digging using plain vanilla pyarrow and strace. Definitely seems that filtering at the dataset levels allows to skip files, which will otherwise at least get scanned for the metadata or statistics if only referenced in to_table.
This can be meaningful in case of large Delta tables that have a lot of partitions and files.
Thoughts?

So the to_pyarrow_dataset would scan these fragments and return a dataset that includes all files

At this point, it doesn't scan the files. Their metadata are already known in the delta log. The partition values and file-level statistics are taken from the delta log and attached to each of the dataset fragments, then a dataset is made of those fragments. This all happens in this loop:
https://github.com/delta-io/delta-rs/blob/bc9253c965c744a5cc1e1321555ec6b3f29f52b7/python/deltalake/table.py#L945-L954
No IO should be happening here between the scanning of the delta log and creation of the PyArrow dataset. (If there is, that is a bug.)
The filters passed into Dataset.to_table() are first evaluated against the fragment metadata and used to prune them. If you want to see which fragments are pruned, you can see which fragments are left over after passing the same filter to Dataset.get_fragments().

Definitely seems that filtering at the dataset levels allows to skip files, which will otherwise at least get scanned for the metadata or statistics if only referenced in to_table.
This can be meaningful in case of large Delta tables that have a lot of partitions and files.

Do you have a repro here? Are you using FileFormat.make_fragment() like we do?

If this is still relevant, please ping me


Make source map generation configurable

Summary
This PR makes the formatter's source map generation optional.
Source mapping informatin is useful to implement range formatting or to move the cursor to the same position in the formatted document. But it comes at the cost of a much larger Document (one each at the start and end of every node) and a large source map created by writting source markers in the Printer (one marker at the start and end of every text).
This PR makes the source map generation option so that we don't pay the overhead when it isn't needed.
Test Plan
cargo test

Performance improves locally by about 16%

Current dependencies on/for this PR:

main

PR #6894   👈

This comment was auto-generated by Graphite.


[BUG] test_recovery_from_im_deletion cannot pass in particular environment

Describe the bug (🐛 if you encounter this issue)
test_recovery_from_im_deletion cannot pass in a k3s v1.27 cluster running on Rocky 9 with SELinux enabled.
With SELinux enabled, the container runtime recursively relabels all files in a volume with a unique security context after it is mounted. Relabeling fails when the container is restarted after an instance-manager failure due to I/O errors.
Warning  Failed     6m49s                  kubelet            Error: failed to generate container "2807a691d362d1a5da6f6ca3241efac5192b44cc7675e60cb6e00fc6da40314c" spec: failed to generate spec: relabel "/var/lib/kubelet/pods/09ae99ea-3cb0-40d1-9418-1b047e78570f/volumes/kubernetes.io~csi/pvc-b1019701-3dac-4a82-8881-f31aa1c1fd45/mount" with "system_u:object_r:container_file_t:s0:c402,c863" failed: readdirent /var/lib/kubelet/pods/09ae99ea-3cb0-40d1-9418-1b047e78570f/volumes/kubernetes.io~csi/pvc-b1019701-3dac-4a82-8881-f31aa1c1fd45/mount/lost+found: input/output error

To Reproduce
Steps to reproduce the behavior:

Deploy a cluster matching the spec using `longhorn-tests/test_framework/terraform/aws/rockylinux.
Run the test_recovery_from_im_deletion.
While the test is failing, observe the above error with kubectl describe pod.

Expected behavior
The test should pass.
Log or Support bundle
See initial analysis below.
Environment

Longhorn version: v1.5.0-rc2
Installation method (e.g. Rancher Catalog App/Helm/Kubectl): kubectl
Kubernetes distro (e.g. RKE/K3s/EKS/OpenShift) and version: v1.27.2+rke2r1

Number of management node in the cluster: 1
Number of worker node in the cluster: 3

Node config

OS type and version: Rocky 9.2
CPU per node:
Memory per node:
Disk type(e.g. SSD/NVMe):
Network bandwidth between the nodes:

Underlying Infrastructure (e.g. on AWS/GCE, EKS/GKE, VMWare/KVM, Baremetal): AWS
Number of Longhorn volumes in the cluster: 1

Additional context
The test passes when run using RKE2 on Jenkins: https://ci.longhorn.io/job/private/job/longhorn-tests-regression/4285.
Manual reproduce and analysis
Create a deployment like:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: recreate-pvc
  namespace: default
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: longhorn
  resources:
    requests:
      storage: 2Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: recreate
  labels:
    app: recreate
  namespace: default
spec:
  selector:
    matchLabels:
      app: recreate
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: recreate
    spec:
      restartPolicy: Always
      containers:
      - image: alpine:latest
        name: recreate
        command:
          - "/bin/sh"
          - "-ec"
          - |
            touch /data/test
            tail -f /data/test
        volumeMounts:
        - name: recreate-volume
          mountPath: /data
      volumes:
      - name: recreate-volume
        persistentVolumeClaim:
          claimName: recreate-pvc

Apply the deployment to a k3s cluster running Longhorn v1.5.0-rc2 with SELinux enabled.
eweber@laptop:~/longhorn/examples> kubectl apply -f recreate.yaml
persistentvolumeclaim/recreate-pvc created
deployment.apps/recreate created

Wait for the pod to be running.
eweber@laptop:~/longhorn/examples> kubectl get pod
NAME                        READY   STATUS    RESTARTS       AGE
...
recreate-6644d55ff4-9xtbv   1/1     Running   0              27s

SSH into the running node and look around. Nothing is strange.
[root@ip-10-0-2-202 rocky]# lsblk
NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
loop0     7:0    0    4G  0 loop
sda       8:0    0    2G  0 disk /var/lib/kubelet/pods/88ac0105-ef33-43c6-9601-95729874a5ea/volumes/kubernetes.io~csi/pvc-b1019701-3dac-4a82-8881-f31aa1c1fd45/mount
                                 /var/lib/kubelet/plugins/kubernetes.io/csi/driver.longhorn.io/5c807aebe48976668ff4659fc78ee5fd68364eb300bfefabc356a1f916e44d9a/globalmount
xvda    202:0    0   40G  0 disk
├─xvda1 202:1    0   99M  0 part /boot/efi
├─xvda2 202:2    0 1000M  0 part /boot
├─xvda3 202:3    0    4M  0 part
├─xvda4 202:4    0    1M  0 part
└─xvda5 202:5    0 38.9G  0 part /

[root@ip-10-0-2-202 rocky]# cd /var/lib/kubelet/plugins/kubernetes.io/csi/driver.longhorn.io/5c807aebe48976668ff4659fc78ee5fd68364eb300bfefabc356a1f916e44d9a/globalmount/
[root@ip-10-0-2-202 globalmount]# ls lost+found/
[root@ip-10-0-2-202 globalmount]# cat test
[root@ip-10-0-2-202 globalmount]# echo test2 > test2

Kill the instance-manager on the node.
eweber@laptop:~/longhorn/examples> kl delete pod instance-manager-3120071cd64b76791aac8f0e7a1694fd
pod "instance-manager-3120071cd64b76791aac8f0e7a1694fd" deleted

Observe that the problem is an I/O error while attempting to enter a directory to recursively relabel files.
eweber@laptop:~/longhorn/examples> k describe pod recreate-6644d55ff4-htf7t
...
Events:
  Type     Reason     Age                    From               Message
  ----     ------     ----                   ----               -------
  Normal   Scheduled  6m49s                  default-scheduler  Successfully assigned default/recreate-6644d55ff4-htf7t to ip-10-0-2-202.us-east-2.compute.internal
  Normal   Pulled     6m49s                  kubelet            Successfully pulled image "alpine:latest" in 185.515118ms (185.541174ms including waiting)
  Warning  Failed     6m49s                  kubelet            Error: failed to generate container "2807a691d362d1a5da6f6ca3241efac5192b44cc7675e60cb6e00fc6da40314c" spec: failed to generate spec: relabel "/var/lib/kubelet/pods/09ae99ea-3cb0-40d1-9418-1b047e78570f/volumes/kubernetes.io~csi/pvc-b1019701-3dac-4a82-8881-f31aa1c1fd45/mount" with "system_u:object_r:container_file_t:s0:c402,c863" failed: readdirent /var/lib/kubelet/pods/09ae99ea-3cb0-40d1-9418-1b047e78570f/volumes/kubernetes.io~csi/pvc-b1019701-3dac-4a82-8881-f31aa1c1fd45/mount/lost+found: input/output error

eweber@laptop:~/longhorn/examples> k get pod
NAME                        READY   STATUS                 RESTARTS       AGE
...
recreate-6644d55ff4-htf7t   0/1     CreateContainerError   0              67s

SSH into the running node and look around. The container appears to be trying to run against a read only file system backed by a device that is no longer available.
eweber@laptop:~/longhorn/examples> ssh<EMAIL_ADDRESS>Last login: Tue Jun 20 20:30:41 2023 from <IP_ADDRESS>
[rocky@ip-10-0-1-28 ~]$ ssh<EMAIL_ADDRESS>Last login: Tue Jun 20 20:30:55 2023 from <IP_ADDRESS>
[rocky@ip-10-0-2-202 ~]$ lsblk
NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
loop0     7:0    0    4G  0 loop
sdb       8:16   0    2G  0 disk
xvda    202:0    0   40G  0 disk
├─xvda1 202:1    0   99M  0 part /boot/efi
├─xvda2 202:2    0 1000M  0 part /boot
├─xvda3 202:3    0    4M  0 part
├─xvda4 202:4    0    1M  0 part
└─xvda5 202:5    0 38.9G  0 part /

[root@ip-10-0-2-202 rocky]# cd /var/lib/kubelet/plugins/kubernetes.io/csi/driver.longhorn.io/5c807aebe48976668ff4659fc78ee5fd68364eb300bfefabc356a1f916e44d9a/globalmount/
[root@ip-10-0-2-202 globalmount]# ls lost+found/
ls: reading directory 'lost+found/': Input/output error
[root@ip-10-0-2-202 globalmount]# cat test
[root@ip-10-0-2-202 globalmount]# cat test2
cat: test2: Input/output error
[root@ip-10-0-2-202 globalmount]# echo test3 > test3
bash: test3: Read-only file system

Output of dmesg:
[Tue Jun 20 20:29:19 2023] sd 2:0:0:1: Attached scsi generic sg1 type 0
[Tue Jun 20 20:29:19 2023] sd 2:0:0:1: Power-on or device reset occurred
[Tue Jun 20 20:29:19 2023] sd 2:0:0:1: [sda] 4194304 512-byte logical blocks: (2.15 GB/2.00 GiB)
[Tue Jun 20 20:29:19 2023] sd 2:0:0:1: [sda] Write Protect is off
[Tue Jun 20 20:29:19 2023] sd 2:0:0:1: [sda] Mode Sense: 69 00 10 08
[Tue Jun 20 20:29:19 2023] sd 2:0:0:1: [sda] Write cache: disabled, read cache: enabled, supports DPO and FUA
[Tue Jun 20 20:29:20 2023] sd 2:0:0:1: [sda] Attached SCSI disk
[Tue Jun 20 20:29:28 2023] EXT4-fs (sda): mounted filesystem with ordered data mode. Quota mode: none.

[Tue Jun 20 20:34:30 2023] Buffer I/O error on dev sda, logical block 262144, lost sync page write
[Tue Jun 20 20:34:30 2023] JBD2: I/O error when updating journal superblock for sda-8.
[Tue Jun 20 20:34:38 2023] EXT4-fs error (device sda): ext4_journal_check_start:83: comm containerd: Detected aborted journal
[Tue Jun 20 20:34:38 2023] EXT4-fs (sda): Remounting filesystem read-only

Now that https://github.com/longhorn/longhorn-tests/pull/1426 has merged and I can easily test this with new environments in Jenkins, I'm not seeing failures:

https://ci.longhorn.io/job/private/job/longhorn-tests-regression/4289/
https://ci.longhorn.io/job/private/job/longhorn-tests-regression/4287/

It looks like it may have been something specific to the environment I had up that was causing it. It may be best to leave this open for further investigation when time allows but it doesn't look like it should gate release.

From my understanding, test case https://ci.longhorn.io/job/private/job/longhorn-tests-regression/4182/ could randomly fail on our daily regression which is running sles and not related to selinux.
According to the following test result, the reproducibility is 37/100: https://ci.longhorn.io/job/private/job/longhorn-tests-regression/4182/

In my environment, the failure rate is 100% and the error is different (with SELinux specific wording in the pod error).
________________________ test_recovery_from_im_deletion ________________________

client = <longhorn.Client object at 0x7f20ad8b78b0>
core_api = <kubernetes.client.api.core_v1_api.CoreV1Api object at 0x7f20ad6ee730>
volume_name = 'longhorn-testvol-srnma9'
make_deployment_with_pvc = <function make_deployment_with_pvc.<locals>._generate_deployment_with_pvc_manifest at 0x7f20ad7abf70>
pvc = {'apiVersion': 'v1', 'kind': 'PersistentVolumeClaim', 'metadata': {'name': 'longhorn-testvol-cnbpm2'}, 'spec': {'accessModes': ['ReadWriteOnce'], 'resources': {'requests': {'storage': '3Gi'}}}}

    def test_recovery_from_im_deletion(client, core_api, volume_name, make_deployment_with_pvc, pvc): # NOQA
        """
        Related issue :
        https://github.com/longhorn/longhorn/issues/3070

        Steps:
        1. Create a volume and PV/PVC.
        2. Create a deployment with 1 pod having below in command section on node-1
           and attach to the volume.
           command:
              - "/bin/sh"
              - "-ec"
              - |
                touch /data/test
                tail -f /data/test
        3. Wait for the pod to become healthy.
        4. Write small(100MB) data.
        5. Kill the instance-manager-e on node-1.
        6. Wait for the instance-manager-e pod to become healthy.
        7. Wait for pod to get terminated and recreated.
        8. Read and write in the pod to verify the pod is accessible.

I ran 100 iterations of test_recovery_from_im_deletion on RockyLinux 9.2 with SELinux enforcing for both k3s and RKE2. Neither hit a single failure.

https://ci.longhorn.io/job/private/job/longhorn-tests-regression/4537/
https://ci.longhorn.io/job/private/job/longhorn-tests-regression/4538/

I must have had something strange going on in my environment when I originally hit this. Closing the issue directly.


page visit metrics

We need to be able to gather metrics on visits to Project Pythia. Ideally this would be done in a way that allows us to spot trends over time and the breadth of pythia content. I.e. tracking the number of visits to each page on a daily or weekly basis.

I was thinking the same thing. A simple way to do this is with Google analytics. Straightforward to add this to our sites, e.g.
https://jupyterbook.org/customize/config.html
shows how/where to set the google_analytics_id in our Foundations config

I think the GeoCAT team, cc'ing @erogluorhan, has experience with this.

@brian-rose @clyne
Ok.  So, it turns out that I already enabled Google Analytics to the Portal site.  It was done by simply adding a layout.html file to the /contents/_templates/ directory that added the correct HTML metadata tags and scripting to the site when Sphinx builds it.  The same thing would need to be done for the Foundations page.
When I created the new landing page (#115), though, I forgot about this.  So, I just opened PR #120 to fix this.

@clyne @dopplershift:  I have added both of your (using your UCAR Google addresses) to have access to the Pythia Portal Google Analytics page.  You should receive an email with instructions for access.
@brian-rose @ktyle:  I think I need to find your Google account email addresses to add the both of you.  I will try to find them and add them shortly.

Thanks @kmpaul

@brian-rose @ktyle:  For some reason, when I add the same email address that are on the Project Pythia Google Calendar events, the Google Analytics page says "Failed to register new users."  Do you both have separate Google accounts that are not ties to your Albany accounts that I can add to the Google Analytics project?  If so, send them to me in a separate email.

@ktyle:  Turns out that when I try to add your Albany email address, it changes it to a Gmail address saying that the Albany address was found as a "secondary address for another Google Account."  So, I hope that you get an email to your Gmail address (I won't post it here) and find you now have access to the Google Analytics account.
@brian-rose:  I think I will need a Google account to give you access.
@ProjectPythia/education @ProjectPythia/core @ProjectPythia/infrastructure:  Anyone else want access to the Google Analytics account?

@kmpaul I just emailed you my google account details

@kmpaul I got it!

@clyne @dopplershift @brian-rose @ktyle:  Ok.  You all have administrative privileges on the Project Pythia Google Analytics account.  So, you should be able to see all of the analytics data.
We need to do something similar for the Foundations page.

@kmpaul how do we access the analytics page (I did not receive an email)? Thanks.

https://analytics.google.com/ should get you there.


Manage deployment of services for the build

We have system services now and we need to make sure that these services are installed when the core is installed.
For that we have configurable variables in the configs
https://github.com/mesg-foundation/core/blob/e5383ab92c854c5716fe690d6a1a442bf27c59b6/config/services.go#L10-L13
We still need on the CI to upload these services and inject the url of the tarball during the compilation of the core.
The best thing would be to actually use the Marketplace commands to manage this deployment like that we download the service directly from the marketplace and we can test the marketplace

Do we have some details about how we want to do this? Adding service tars for release is easy, but how to pass url - we need to setup some server or pass file location via config, any other propositions?

What I was thinking is one of the two following solutions
Tar server

We setup a place to store the tar (s3 with public fetch for example)
Build the tar of the services in the CI
Upload the tar to this s3 (or equivalent)
Inject the url of this tar like we do for the version eg: LDFLAGS="-X 'github.com/mesg-foundation/core/config.Ethwallet=$walletURL'"
When the core is started it will fetch from the url (done already)

Using the MESG marketplace
This would be the best but requires a more work.

We publish the service on the marketplace from the CI
We set no offer on the marketplace (service free and accessible for anyone)
We inject the address of the service on the marketplace eg: LDFLAGS="-X 'github.com/mesg-foundation/core/config.Ethwallet=mesg://marketplace/service/xxx
We make sure that when the core starts it can deploy from mesg protocol (for now only the CLI does that and that should be done by the core anyway)

I would definitely go with the second option like that we use the marketplace and that's great. This can be done in 2 different dev: "support of mesg protocol in the core" and "publish service from the CI". If it's too complicated we can fallback on the s3 solution.

If we have marketplace let's use it!

I would go with the marketplace solution as well.
But why deploying from the CI right now?
We can, for now, deploy services manually and inject the service URL to the CI using env variables. There is an UI in circleci to manage env variables.

We set no offer on the marketplace (service free and accessible for anyone)

The marketplace currently requires an offer to be created for the isAuthorize function to work:
https://github.com/mesg-foundation/marketplace/blob/6f4602d150ef988a4051a329b793c769b761d1b4/contracts/Marketplace.sol#L449-L465

@NicolasMahe

how can the core deploy the marketplace service without using the marketplace service??

We could run it in dev first to publish the service and then inject the result in the actual build for production.
marketplace=$(./dev-cli marketplace publish systemservice/marketplace)
wallet=$(./dev-cli marketplace publish systemservice/ethwallet)
scripts/build-cli.sh --marketplace $marketplace --wallet $wallet

Basically something similar to this but that will be quite heavy...
Another solution would be to install the previous version of mesg-core and install it the same way with
mesg-core service deploy systemservice/marketplace
mesg-core service start marketplace
mesg-core service execute marketplace --task deployService --json generatedFile.json

We don't use the CLI here but the system service should handle most of the processing, we would still need to upload the sources on ipfs manually and in that case maybe just the upload and inject the tarball as build parameter but the service will not be on the marketplace.

We can, for now, deploy services manually

That's a bit ugly, what happen if we want to work on 2 different versions for the marketplace or some stuff like that, it's also really risky

@krhubert

If we have marketplace let's use it! But in that case we need working marketplace first.

As far as i know and I tested the marketplace works well

As far as i know and I tested the marketplace works well

Yes but do we have a version ready to set up on dev environment (local eth network etc...) to test this easily?

To test you can just use the one deployed already on ropsten, just use the system service that is already configured for that. If you want your own marketplace then you can redeploy the smart contract and update the mesg.yml of the systemservice/marketplace
- MARKETPLACE_ADDRESS=0x94F4cB92Fe9f547574Aec617B1594B13aBd47Ad3

But just use the one already here, everything is set up and everything works. We will anyway clean up the marketplace when we launch

For now we can do a simple workflow:

We deploy with a script the service on ipfs we can use UploadSource in marketplace_provider.go
We inject the url of ipfs gateway when we build the core
When we download the version of the core, it fetches the services from ipfs gateway, there is no marketplace yet
[optional] we publish the service on the marketplace

@krhubert can you implement this feature now please:
Todo:
Create new scripts that should be run in the CI:

Walk in systemservices folder, create tar (same as script dev-core).
Upload to IPFS using MESG IPFS node (there should be some easy to use cli tool)
Inject ipfs gateway URLs in core config (same as script dev-core).
Done


[Request] Wezterm support to image

Hi guys!
Wezterm has native support with your built-in program called imgcat.
Look:

You could to work on a new support to wezterm using your native image backend? Because w3m don't work correctly.
sixel work well, but it would be interesting to take advantage of wezterm's native backend.
This will be awesome! And if i could help, tell me what to do.

Note: wezterm will accept iterm2, sixel and kitty image protocols. wezterm imgcat will encode an image using the iterm2 protocol.

[Off-topic]
Is it going to be implemented?

See #986


Building without Docker

Welcome!

[X] Yes, I've searched similar issues on GitHub and didn't find any.
[X] Yes, I've searched similar issues on the Traefik community forum and didn't find any.

What did you do?
I tried to follow the docs here https://doc.traefik.io/traefik/contributing/building-testing/#method-2-using-go
from a fresh src download (git clone -b v2.8.1 https://github.com/traefik/traefik.git)
I wanted to build my own Docker image, so the steps using docker build/docker run were actually not working (although I'll probably use a dind build step and be done with it)
Only the webui steps seem to fail.
I tried using the IN_DOCKER env var to bypass the docker run but it didn't make a difference (the webui steps don't use it apparently)
What did you see instead?
494f4f1a6ee0:/src/traefik# IN_DOCKER=1 make binary
make build-webui-image
make[1]: Entering directory '/src/traefik'
docker build -t traefik-webui -f webui/Dockerfile webui
make[1]: docker: No such file or directory

What version of Traefik are you using?
2.8.1 source
What is your environment & configuration?
N/A
If applicable, please paste the log output in DEBUG level
N/A

Hello,
if you want to create your image, I guess it's related to https://github.com/go-acme/lego/pull/1687
I recommend using the target dedicated to creating of Docker image instead of trying to create a binary: make build-image

Indeed related, I've been caught/traced, seeing you there again :-)
I'll look at the build-image target, thanks.

I will close the issue


Just tested with Hubic and it doesn't work

When filing an issue, please include the following information if possible as well as a description of the problem.  Make sure you test with the latest beta of rclone.
https://beta.rclone.org/
https://rclone.org/downloads/

If you've just got a question or aren't sure if you've found a bug then please use the rclone forum instead of filing an issue.

What is your rclone version (eg output from rclone -V)
rclone v1.38

os/arch: linux/amd64
go version: go1.9

Which OS you are using and how many bits (eg Windows 7, 64 bit)
Ubuntu 17

Which cloud storage system are you using? (eg Google Drive)
Hubic

The command you were trying to run (eg rclone copy /tmp remote:tmp)
 rclone ls remote: 2017/10/08 18:10:25 ERROR : xxxx: error listing: bucket or container name is needed in remote

also nothing is being copied on
rclone copy /home/osboxes/temp remote:ooo

A log from the command with the -vv flag (eg output from rclone -vv copy /tmp remote:tmp)

osboxes@osboxes:~/temp$ rclone copy /home/osboxes/temp remote:ooo -vv
2017/10/08 18:19:56 DEBUG : Using config file from "/home/osboxes/.config/rclone/rclone.conf"
2017/10/08 18:19:56 DEBUG : rclone: Version "v1.38" starting with parameters ["rclone" "copy" "/home/osboxes/temp" "remote:ooo" "-vv"]
2017/10/08 18:19:57 DEBUG : Hubic: Got swift credentials (expiry 2017-10-09 17:03:14 +0200 +0200 in 23h43m16.461334562s)
2017/10/08 18:19:57 INFO  : Hubic Swift container ooo: Modify window is 1ns
2017/10/08 18:19:59 INFO  : Hubic Swift container ooo: Waiting for checks to finish
2017/10/08 18:19:59 DEBUG : 5MB.zip: Size and modification time the same (differ by 0s, within tolerance 1ns)
2017/10/08 18:19:59 DEBUG : 5MB.zip: Unchanged skipping
2017/10/08 18:19:59 INFO  : Hubic Swift container ooo: Waiting for transfers to finish
2017/10/08 18:19:59 INFO  :
Transferred:      0 Bytes (0 Bytes/s)
Errors:                 0
Checks:                 1
Transferred:            0
Elapsed time:        3.6s

2017/10/08 18:19:59 DEBUG : Go routines at exit 7
2017/10/08 18:19:59 DEBUG : rclone: Version "v1.38" finishing with parameters ["rclone" "copy" "/home/osboxes/temp" "remote:ooo" "-vv"]

I tried to use hubic some time ago, and in the end it was terrible, I would not recommend hubic, it seems like a beta-test project.

Note that you need rclone lsd to list the containers.
And your copy has worked - rclone has worked out that file is already uploaded.
Rclone and hubic shoukd work OK together, I regularly run the integration tests against Hubic.

may be it worked, but there are no files in my hubic account

ok i can copy there and back locally, only I don't see files via web Hubic UI. Any idea why?

You can only see files in the container called default in the Hubic UI.

thanks

No worries!  I'll close this now.


Adding macros to push pinning roots

Supporting pushing roots to the shadow stack that are not transitively pinned (only the root object is pinned), and therefore should enable moving more objects.
For backwards compatibility the original functions will be used to represent transitively pinned roots, whereas the *_RELAXED version will represent roots in which only the root object needs to be pinned. Therefore, to support moving move objects the goal is to replace as much as possible of the original functions with their _RELAXED counterpart.

I am wondering if we should merge this. We need the changes in this PR for the static analyser as well.  @udesou

I am wondering if we should merge this. We need the changes in this PR for the static analyser as well. @udesou

Sounds good to me. I've added a comment to explain how the bits work, in particular for transitively pinning roots. If you have no issues with the PR, then we can merge it.


Enhanced StatsManager utility

The major change is to make readAllValue() only return the matrix that specified at the registeration time

Storage PR is ready. https://github.com/vesoft-inc/nebula-storage/pull/342


Add missing base processors

For sake of completeness, all possible builder types should have a supporting processor class so we can build visitors for each builder.
Currently only the processors actually needed and most usefule (or most likely) are provided ... we should take an hour to implement all of them.

fixed with 689979bd75fe82b6897118af97b09a0d8be96aa4


Is there any limitations to make Effect.throttle public?

Is there any limitations to make Effect.throttle public? Could you please make it public, if not.
This's what I need for search in my application.

We mainly haven't given it thorough enough use to make sure it works exactly as we expect it to. We have some passing tests, though. Would you be up to copy and paste it into your project, give it a try, and let us know how it works out? We're definitely open to publicize if it's working well!

@stephencelis I very closely do so.
PS. I use reactiveswift-composable copy in my repo, since I stuck with CocoaPods and ReactiveSwift yet. But I wanted it to have on main composable repo for consistency.
Thanks for the answer!

Publicized in #654!


previewing Groovy files in developer file preview

Description of the new feature / enhancement
previewing .groovy files
Scenario when this would be used?
Fast preview these files before opening
Supporting information
I searched in monaco and got these files that may be useful
groovy.zip
cc: @Aaron-Junker
Thanks!
edofro
/Product-File_Explorer
Product-File Explorer

Are groovy files just java files?
And where did you get these language definizions from (so if I want to integrate problem we don't get license problems)?
/needinfo


Allow disabling the physics system

For most people, this isn't necessary... but given it takes 3/4 of the time compiling react physics I figured it was worth having the option. PR #176 should be applied before this one if I understand correctly.

I don't think I really love the way this is implemented? I'd prefer to see this approached as like a "passthrough physics backend" option, rather than erroring out when using physics APIs.
So for example, demo_basics.cpp and input_hand.cpp should still compile and run as they were, they just wouldn't do anything interesting.


Release 0.81.1

To pull fixes for the resource detection processor in 0.81.1 Splunk OTel Collector image

Tests are failing due to a regression in contrib. We need to pull https://github.com/open-telemetry/opentelemetry-collector-contrib/pull/24670 before making new release


pull request for e2e test at 01/27/2017 11:26:19

:white_check_mark: Validation status: passed
For more details, please refer to the build report.
Note: If you changed an existing file name or deleted a file, broken links in other files to the deleted or renamed file are listed only in the full build report.