MEETS_BASIC_INTEGRITY on Wear OS smartwatch dispite SafetyNet being BASIC,HARDWARE_BACKED (mobvoi TicWatch Pro (catfish))

This app works on fine on my Bold Like US, C5L 2020 (FWVGA) though, it is rooted but it passes MEETS_STRONG_INTEGRITY, and BASIC,HARDWARE_BACKED in the SafetyNet tab. It also wanted me on the watch to update google play when I uninstalled its updates, I even tried installing a mobile version with no luck. I heard online somewhere the app package name used has to support the wear os app market? I tried it also with all of https://github.com/chiteroman/PlayIntegrityFix https://github.com/osm0sis/PlayIntegrityFork https://github.com/daboynb/PlayIntegrityNEXT and I only use PlayIntegrityFork without a pif config on my C0070WW phone, otherwise I would get a MEETS_DEVICE_INTEGRITY only.
A video was made on the phone to prove that Magisk is installed and I am MEETS_STRONG_INTEGRITY since last night: http://CE1CECL.GitHub.io/ScreenCapture_20240703_153407_849.mp4 (I couldn't upload it here, it was 3MB too big for issues, 10MB max). Its also possible the PlayIntegrityFix (not the PlayIntegrityFork) worked but I had a config on it, so I didn't test it for MEETS_STRONG_INTEGRITY.
@osm0sis @herzhenr

Wow...
But isn't an issue with SPIC; that's an issue with OEM implementation of Keymaster/chain of trust from AVB... Also seen in Asus Rog phones... Quietly... 👀

Wow...
But isn't an issue with SPIC; that's an issue with OEM implementation of Keymaster/chain of trust from AVB... Also seen in Asus Rog phones... Quietly... 👀

Actually both bootloaders are still locked, the watch has no secure boot at all, and the phone I resigned the keys to lock the bootloader.
But isn't an issue with SPIC
The watch doesn't show results is the issue (Play Integrity Check only), I was trying to ask the app owner to enable support for real result reading on Wear OS devices, if possible.

Have you messed around with rebuilding TEE, framework patching to build a valid certificate chain etc? Used a root signed keybox?...
Because generally you shouldn't get STRONG with either yellow or orange boot state. Neither is "Verified"... So relocking should make no difference with custom keys...

Again, did you build ROM with OEM keys or spoof green by rebuilding TEE with a valid OEM signed keybox or otherwise applying one, eg systemlessly w/ root?
... Because locking with custom keys will only give yellow boot state and you shouldn't be able to spoof the hardware keys... Unless OEM messed up the Keymaster implementation... 🙃 😮

Again, did you build ROM with OEM keys or spoof green by rebuilding TEE with a valid OEM signed keybox or otherwise applying one, eg systemlessly w/ root?
... Because locking with custom keys will only give yellow boot state and you shouldn't be able to spoof the hardware keys... Unless OEM messed up the Keymaster implementation... 🙃 😮

I used the OEM's leaked key

I used the OEM's leaked key

Yup yup 😉

and I only use PlayIntegrityFork without a pif config on my C0070WW phone, otherwise I would get a MEETS_DEVICE_INTEGRITY only.
So this is pretty misleading...
Also, isn't the watch just correctly showing results for its own OS?... You do say:

the watch has no secure boot at all

Also,

The watch doesn't show results is the issue (Play Integrity Check only), I was trying to ask the app owner to enable support for real result reading on Wear OS devices, if possible.

So OP and title could be much clearer, but not sure why you want one device to display results for another... could lead to further confusion.

I used the OEM's leaked key

Yup yup 😉

and I only use PlayIntegrityFork without a pif config on my C0070WW phone, otherwise I would get a MEETS_DEVICE_INTEGRITY only.

So this is pretty misleading...
Also, isn't the watch just correctly showing results for its own OS?... You do say:

the watch has no secure boot at all

And

The watch doesn't show results is the issue (Play Integrity Check only), I was trying to ask the app owner to enable support for real result reading on Wear OS devices, if possible.

So OP and title could be much clearer, but not sure why you want one device to display results for another... could lead to further confusion.

the watch has no secure boot at all
I meant the watch shipped without fuses in EDL mode, and there is not vbmeta partition on the watch, fastboot says (since I opened it up the box) "SECURE BOOT: disabled". The phone has vbmeta though. (of course, signed to root with that key)
and I only use PlayIntegrityFork without a pif config on my C0070WW phone, otherwise I would get a MEETS_DEVICE_INTEGRITY only.
I don't know why this is but its possible its setting a prop variable to make it that way. Even logcat says the config wasn't found. It would most likely work without PlayIntegrityFork anyways (haven't tested it yet, I only tested Play Integrity using the app when I used the pif config and always had the module when I used the app)
So OP and title could be much clearer, but not sure why you want one device to display results for another... could lead to further confusion.
I saw in another GitHub that the app has to be uploaded to Play Store to even be able to check integrity, but it was only added to the phone/tablet play store version, not the watch, which is why the result is ALWAYS the same.

Any app can use default responses, and for device integrity that only includes the MEETS_DEVICE_INTEGRITY label... If you're seeing MEETS_BASIC_INTEGRITY the app/SDK has 'opted in' for additional labels and must be set up for Play Integrity API integration in the Play Console or the Play SDK Console.

It does seem to be green (MEETS_STRONG_INTEGRITY) now as a flashed the stock boot partition. I even tried to unpack/repack the stock boot.img without any modifications, and it went back down to MEETS_BASIC_INTEGRITY, even though I still had the recovery, system, vendor, and splash partitons modified (I removed the OEM boot logo's).

I also noticed that it says "HARDWARE_BACKED,BASIC" under safetynet on my watch, but the phone says "BASIC,HARDWARE_BACKED" (backwards). I googled "HARDWARE_BACKED,BASIC" and didn't come up with much with that order but "BASIC,HARDWARE_BACKED" did (I googled in quotes)

Google is simply enforcing HARDWARE_BACKED evaluationType server side based on detected props/fields for the S/N API... Expected where no props/fields for bypassing that enforcement are spoofed except for older devices (launched with A7 and earlier) or those with broken Keymaster implementations (many OnePlus) where Google simply allows BASIC-only evaluations for MEETS_DEVICE_INTEGRITY.

I even tried to unpack/repack the stock boot.img without any modifications, and it went back down to MEETS_BASIC_INTEGRITY, even though I still had the recovery, system, vendor, and splash partitons modified (I removed the OEM boot logo's).

Update on I even tried to unpack/repack the stock boot.img without any modifications, and it went back down to MEETS_BASIC_INTEGRITY, even though I still had the recovery, system, vendor, and splash partitons modified (I removed the OEM boot logo's).:
I repacked the wrong image then, so thats why it went down, I re-repacked the real stock image, using AIK and flashed it and its still STRONG. Possible, something in Magisk is making Play detect it. (Another denylist needed?)

Hmm, maybe denylist isn't even working?
root@LenovoLegionT5:~# adb wait-for-device shell magisk --denylist exec /system/bin/uname -a
unshare failed with 1: Operation not permitted
root@LenovoLegionT5:~# adb wait-for-device shell su -c magisk --denylist exec /system/bin/uname -a
denylist: Unmounted (/sbin)
denylist: Unmounted (/system/etc/hosts)
denylist: Unmounted (/system/etc/permissions)
denylist: Unmounted (/system/lib)
denylist: Unmounted (/system/priv-app)
Linux localhost 3.18.120-perf-g1f300718b696-dirty #1 SMP PREEMPT Wed Jun 10 16:27:25 CST 2020 armv7l
root@LenovoLegionT5:~#

Almost been a month and nothing. It seems like the last comment also happens on my phone, the "Operation not permitted" anyways, yet the phone has strong integrity. Play Integrity checker does take a really long time on my watch, the watch is slow as of Android 9, but logcat shows that it gets killed from timeout, sometimes even making it show NO_INTEGIRTY (usually I tap twice to get my result, but only happens when rooted). Maybe the watch is just too slowed down, not to show the real result. After all, SafetyNet is 100% passing, so.


x/mobile: Go running much slower than CPP on ARM32 / ARM64

What version of Go are you using (go version)?

$ go version
go version go1.15.5 linux/amd64

Does this issue reproduce with the latest release?
Yes
What operating system and processor architecture are you using (go env)?
go env Output
$ go env
GO111MODULE=""
GOARCH="amd64"
GOBIN=""
GOCACHE="/home/leondgarse/.cache/go-build"
GOENV="/home/leondgarse/.config/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOINSECURE=""
GOMODCACHE="/home/leondgarse/go/pkg/mod"
GONOPROXY=""
GONOSUMDB=""
GOOS="linux"
GOPATH="/home/leondgarse/go"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/usr/local/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
GCCGO="gccgo"
AR="ar"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build417888568=/tmp/go-build -gno-record-gcc-switches"

What did you do?

I met this issue in multiple functions, like image resize / image warpaffine and many others, that Go runs much slower than CPP code on ARM32 / ARM64. Here I wrote two test functions in cpp and go to reproduce.

Edition 1 Separate L2Norm into two functions squareSum and multiplyWithNum.
Edition 2 Add two _range functions, and use GOARM=7 building ARM32.

package main

/*
float square_sum(float *src, int dim) {
    float ss = 0;
    for (int jj = 0; jj < dim; jj++) {
        ss += src[jj] * src[jj];
    }
    return ss;
}

void multiply_with_num(float *src, float num, int dim) {
    for (int jj = 0; jj < dim; jj++) {
        src[jj] *= num;
    }
}
*/
import "C"
import (
    "fmt"
    "runtime"
    "time"
    "unsafe"
)

type TestFunc func()

func main() {
    runtime.GOMAXPROCS(4) // Changing GOMAXPROCS makes no difference
    // Init
    dim := 10240
    src := make([]float32, dim)
    for jj := range src {
        src[jj] = float32(jj % 10)
    }

    repeats := 200
    basicTest(func() { squareSum(src, dim) }, "Go squareSum", repeats)
    basicTest(func() { squareSum_range(src) }, "Go squareSum_range", repeats)
    basicTest(func() { C.square_sum((*C.float)(unsafe.Pointer(&src[0])), C.int(dim)) }, "C square_sum", repeats)
    basicTest(func() { multiplyWithNum(src, 1, dim) }, "Go multiplyWithNum", repeats)
    basicTest(func() { multiplyWithNum_range(src, 1) }, "Go multiplyWithNum_range", repeats)
    basicTest(func() { C.multiply_with_num((*C.float)(unsafe.Pointer(&src[0])), 1, C.int(dim)) }, "C multiply_with_num", repeats)
}

func basicTest(testFunc TestFunc, name string, repeats int) {
    ss := time.Now()
    for ii := 0; ii < repeats; ii++ {
        testFunc()
    }
    tt := time.Since(ss)
    fmt.Printf("[%s] Repeat: [%d], Total: %s, Mean: %s\n", name, repeats, tt, tt/time.Duration(repeats))
}

func squareSum(aa []float32, dim int) float32 {
    var ss float32
    for jj := 0; jj < dim; jj++ {
        ss += aa[jj] * aa[jj]
    }
    return ss
}

func squareSum_range(aa []float32) float32 {
    var ss float32
    for jj := range aa {
        ss += aa[jj] * aa[jj]
    }
    return ss
}

func multiplyWithNum(aa []float32, num float32, dim int) {
    for jj := 0; jj < dim; jj++ {
        aa[jj] *= num
    }
}

func multiplyWithNum_range(aa []float32, num float32) {
    for ii := range aa {
        aa[ii] *= num
    }
}

Test on host x86_64 by go run.  The mean running times vary.$ go build -a test_cpp.go
$ ./test_cpp
[Go squareSum] Repeat: [200], Total: 2.180981ms, Mean: 10.904µs
[Go squareSum_range] Repeat: [200], Total: 1.925532ms, Mean: 9.627µs
[C square_sum] Repeat: [200], Total: 1.947857ms, Mean: 9.739µs
[Go multiplyWithNum] Repeat: [200], Total: 833.088µs, Mean: 4.165µs
[Go multiplyWithNum_range] Repeat: [200], Total: 602.318µs, Mean: 3.011µs
[C multiply_with_num] Repeat: [200], Total: 863.123µs, Mean: 4.315µs

$ ./test_cpp
[Go squareSum] Repeat: [200], Total: 10.55661ms, Mean: 52.783µs
[Go squareSum_range] Repeat: [200], Total: 10.226328ms, Mean: 51.131µs
[C square_sum] Repeat: [200], Total: 6.421496ms, Mean: 32.107µs
[Go multiplyWithNum] Repeat: [200], Total: 2.327771ms, Mean: 11.638µs
[Go multiplyWithNum_range] Repeat: [200], Total: 1.451907ms, Mean: 7.259µs
[C multiply_with_num] Repeat: [200], Total: 1.883815ms, Mean: 9.419µs

Test on ARM64. squareSum is similar, but multiplyWithNum is ~7 times slower.$ adb shell 'cat /proc/cpuinfo'
Processor       : AArch64 Processor rev 4 (aarch64)
CPU architecture: 8
Hardware        : Qualcomm Technologies, Inc SDM630

$ SDK_HOME="$HOME/Android/Sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/linux-x86_64"
$ ANDROID_CC="$SDK_HOME/bin/aarch64-linux-android29-clang -Wl,-rpath-link,$SDK_HOME/sysroot/usr/lib/aarch64-linux-android/29"
$ ANDROID_ARCH="arm64"

$ CGO_ENABLED=1 GOOS=android GOARCH=$ANDROID_ARCH CC=$ANDROID_CC go build -a test_cpp.go
$ adb push test_cpp /data/local/tmp
$ adb shell '/data/local/tmp/test_cpp'
[Go squareSum] Repeat: [200], Total: 8.596094ms, Mean: 42.98µs
[Go squareSum_range] Repeat: [200], Total: 7.548593ms, Mean: 37.742µs
[C square_sum] Repeat: [200], Total: 7.679844ms, Mean: 38.399µs
[Go multiplyWithNum] Repeat: [200], Total: 11.419532ms, Mean: 57.097µs
[Go multiplyWithNum_range] Repeat: [200], Total: 10.328698ms, Mean: 51.643µs
[C multiply_with_num] Repeat: [200], Total: 1.431354ms, Mean: 7.156µs

Test on ARM32. squareSum is similar, but multiplyWithNum is ~1.5 times slower after adding GOARM=7.$ adb shell 'cat /proc/cpuinfo'
model name      : ARMv7 Processor rev 1 (v7l)
CPU architecture: 7
Hardware        : Generic DT based system

$ SDK_HOME="$HOME/Android/Sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/linux-x86_64"
$ ANDROID_CC="$SDK_HOME/bin/armv7a-linux-androideabi29-clang -Wl,-rpath-link,$SDK_HOME/sysroot/usr/lib/arm-linux-androideabi/29"
$ ANDROID_ARCH="arm"

$ CGO_ENABLED=1 GOOS=android GOARCH=$ANDROID_ARCH GOARM=7 CC=$ANDROID_CC go build -a test_cpp.go
$ adb push test_cpp /data/local/tmp
$ adb shell '/data/local/tmp/test_cpp'
[Go squareSum] Repeat: [200], Total: 6.548209ms, Mean: 32.741µs
[Go squareSum_range] Repeat: [200], Total: 6.442917ms, Mean: 32.214µs
[C square_sum] Repeat: [200], Total: 5.458542ms, Mean: 27.292µs
[Go multiplyWithNum] Repeat: [200], Total: 5.886126ms, Mean: 29.43µs
[Go multiplyWithNum_range] Repeat: [200], Total: 5.243293ms, Mean: 26.216µs
[C multiply_with_num] Repeat: [200], Total: 3.371375ms, Mean: 16.856µs

So what did I do wrong here? How can I improve this?
What did you expect to see?
Expect to see Go has a similar performance on ARM32 / ARM64 platform.
What did you see instead?

Go  on X86_64 platform has a similar performance with cpp.
Go multiplyWithNum function on ARM64 platform is ~7 times slower than cpp.
Go multiplyWithNum function on ARM32 platform is ~1.5 times slower than cpp.

Your go code uses 64 bit sqrt while the c code uses 32 bit sqrt.
That is not exactly a fair comparasion.

@AlexRouSg ya, I edited the cpp part above, to use double sqrt, but makes no difference.

hmmm for ARM32 try setting the GOARM=7 env var to make sure it's using the armv7 calls. Might want to do a go build -a to force a rebuild. I'm not too sure whether the other numbers are expected so you'll have to wait for someone else to comment on them.
@gopherbot please add labels Performance, NeedsInvestigation

Both of the funcs have an extra bounds check that might be part of the reason. Compare https://go.godbolt.org/z/eGne9o.
func multiplyWithNum(xs []float32, num float32) {
    for i := range xs {
        xs[i] *= num
    }
}

Rest of the difference probably comes from different optimizations https://c.godbolt.org/z/dTdrfo.

I edited the code above according to your advises.

Add two _range functions. Seems it improves the performance, but still a gap for multiplyWithNum.
Use GOARM=7 on ARM32. It do works!
A basic_test function for testing, as it's getting large...
Updated executing results. It's mainly the ARM32 one.

The compiler do show something, I'm still trying to understand it.

Looking at gcc & clang output https://c.godbolt.org/z/vo7nhz, it seems they are unrolling the loop.

Here are manually unrolled Go versions https://play.golang.org/p/O3gUjWq4aMi.

I also did some assemble test on ARM64, here is my results:

Firstly, add a test_cpp.s file, so I can change asm code there directly. Including three functions:

scale_range_asm_1 is the original compiled one.
scale_range_asm_2 using R2*4 instead of LSL     $2, R2, R3, which is the x86_64 compiled method.
scale_range_asm_3 using ADD     $4, R2, R2 instead of R3.

#include "textflag.h"

TEXT    ·scale_range_asm_1(SB), NOSPLIT, $0-32
        MOVD    xs+8(FP), R0
        MOVD    xs(FP), R1
        FMOVS   scale+24(FP), F0
        MOVD    ZR, R2
        JMP     scale_range_asm_1_2
scale_range_asm_1_1:
        LSL     $2, R2, R3
        FMOVS   (R1)(R3), F1
        FMULS   F0, F1, F1
        FMOVS   F1, (R1)(R3)
        ADD     $1, R2, R2
scale_range_asm_1_2:
        CMP     R0, R2
        BLT     scale_range_asm_1_1
        RET     (R30)

TEXT    ·scale_range_asm_2(SB), NOSPLIT, $0-32
        MOVD    xs+8(FP), R0
        MOVD    xs(FP), R1
        FMOVS   scale+24(FP), F0
        MOVD    ZR, R2
        JMP     scale_range_asm_2_2
scale_range_asm_2_1:
        FMOVS   (R1)(R2*4), F1
        FMULS   F0, F1, F1
        FMOVS   F1, (R1)(R2*4)
        ADD     $1, R2, R2
scale_range_asm_2_2:
        CMP     R0, R2
        BLT     scale_range_asm_2_1
        RET     (R30)

TEXT    ·scale_range_asm_3(SB), NOSPLIT, $0-32
        MOVD    xs+8(FP), R0
        MOVD    xs(FP), R1
        FMOVS   scale+24(FP), F0
        MOVD    ZR, R2
        JMP     scale_range_asm_3_2
scale_range_asm_3_1:
        FMOVS   (R1)(R2), F1
        FMULS   F0, F1, F1
        FMOVS   F1, (R1)(R2)
        ADD     $4, R2, R2
scale_range_asm_3_2:
        CMP     R0, R2
        BLT     scale_range_asm_3_1
        RET     (R30)

Delete all C part from test_cpp.go.
Then add function definitions and test calls in go file test_cpp.go

...
func scale_range_asm_1(xs []float32, scale float32)
func scale_range_asm_2(xs []float32, scale float32)
func scale_range_asm_3(xs []float32, scale float32)
...
func main() {
    ...
    basicTest(func() { scale_range_asm_1(src, 1) }, "Go scale_range_asm_1", repeats)
    basicTest(func() { scale_range_asm_2(src, 1) }, "Go scale_range_asm_2", repeats)
    basicTest(func() { scale_range_asm_3(src, 1) }, "Go scale_range_asm_2", repeats)
    ...

I tested your code on ARM32, and it also improves performance under my environment!
[Go scale] Repeat: [200], Total: 6.441751ms, Mean: 32.208µs
[Go scale_range] Repeat: [200], Total: 5.249708ms, Mean: 26.248µs
[C scale] Repeat: [200], Total: 3.955ms, Mean: 19.775µs
[Go scale_unroll1] Repeat: [200], Total: 10.919709ms, Mean: 54.598µs
[Go scale_unroll2] Repeat: [200], Total: 3.766ms, Mean: 18.83µs
[Go scale_unroll3] Repeat: [200], Total: 3.391792ms, Mean: 16.958µs
[Go scale_unroll4] Repeat: [200], Total: 2.937959ms, Mean: 14.689µs

I also did some assemble test on ARM64, here is my results:

Firstly, add a test_cpp.s file, so I can change asm code there directly. Including three functions:

scale_range_asm_1 is the original compiled one.
scale_range_asm_2 using R2*4 instead of LSL     $2, R2, R3, which is the amd64 compiled method.

#include "textflag.h"

TEXT    ·scale_range_asm_1(SB), NOSPLIT, $0-32
        MOVD    xs+8(FP), R0
        MOVD    xs(FP), R1
        FMOVS   scale+24(FP), F0
        MOVD    ZR, R2
        JMP     scale_range_asm_1_2
scale_range_asm_1_1:
        LSL     $2, R2, R3
        FMOVS   (R1)(R3), F1
        FMULS   F0, F1, F1
        FMOVS   F1, (R1)(R3)
        ADD     $1, R2, R2
scale_range_asm_1_2:
        CMP     R0, R2
        BLT     scale_range_asm_1_1
        RET     (R30)

TEXT    ·scale_range_asm_2(SB), NOSPLIT, $0-32
        MOVD    xs+8(FP), R0
        MOVD    xs(FP), R1
        FMOVS   scale+24(FP), F0
        MOVD    ZR, R2
        JMP     scale_range_asm_2_2
scale_range_asm_2_1:
        FMOVS   (R1)(R2*4), F1
        FMULS   F0, F1, F1
        FMOVS   F1, (R1)(R2*4)
        ADD     $1, R2, R2
scale_range_asm_2_2:
        CMP     R0, R2
        BLT     scale_range_asm_2_1
        RET     (R30)

Delete all C part from test_cpp.go.
Then add function definitions and test calls in go file test_cpp.go...
func scale_range_asm_1(xs []float32, scale float32)
func scale_range_asm_2(xs []float32, scale float32)
...
func main() {
    ...
    basicTest(func() { scale_range_asm_1(src, 1) }, "Go scale_range_asm_1", repeats)
    basicTest(func() { scale_range_asm_2(src, 1) }, "Go scale_range_asm_2", repeats)
    ...

I guess the issue can be clarified to Go arm doesn't use indexed loads. https://go.godbolt.org/z/aovTe1

Maybe fmovs needs separate rules at  https://github.com/golang/go/blob/master/src/cmd/compile/internal/ssa/gen/ARM64.rules#L772
Indexed loads work properly for uint32.
package ex

func getUint32(xs []uint32, i int) uint32 {
    return xs[i]
}

func getFloat32(xs []float32, i int) float32 {
    return xs[i]
}

        text    "".getUint32(SB), LEAF|NOFRAME|ABIInternal, $0-40
        funcdata        ZR, gclocals·1a65e721a2ccc325b382662e7ffee780(SB)
        funcdata        $1, gclocals·69c1753bd5f81501d95132d08af04464(SB)
        movd    "".i+24(FP), R0
        movd    "".xs(FP), R1
        movwu   (R1)(R0<<2), R0
        movw    R0, "".~r2+32(FP)
        ret     (R30)

        text    "".getFloat32(SB), LEAF|NOFRAME|ABIInternal, $0-40
        funcdata        ZR, gclocals·1a65e721a2ccc325b382662e7ffee780(SB)
        funcdata        $1, gclocals·69c1753bd5f81501d95132d08af04464(SB)
        movd    "".i+24(FP), R0
        lsl     $2, R0, R0
        movd    "".xs(FP), R1
        fmovs   (R1)(R0), F0
        fmovs   F0, "".~r2+32(FP)
        ret     (R30)

@egonelbre I found something else on ARM64, that if we use double / float64 in scale, executing time for cpp will double, but almost no difference for go.

Result

$ CGO_ENABLED=1 GOOS=android GOARCH=$ANDROID_ARCH CC=$ANDROID_CC go build -a test_cpp_scale.go
$ adb push test_cpp_scale /data/local/tmp && adb shell '/data/local/tmp/test_cpp_scale'
test_cpp_scale: 1 file pushed, 0 skipped. 3590.1 MB/s (2374192 bytes in 0.001s)
[Go scale] Repeat: [200], Total: 10.604791ms, Mean: 53.023µs
[Go scale64] Repeat: [200], Total: 10.56849ms, Mean: 52.842µs
[C scale] Repeat: [200], Total: 1.54927ms, Mean: 7.746µs
[C scale64] Repeat: [200], Total: 2.954636ms, Mean: 14.773µs

Script

package main

/*
float scale(float *src, int dim, float scale) {
    for(int i = 0; i < dim; i++) {
        src[i] *= scale;
    }
    return src[dim-1];
}

double scale64(double *src, int dim, double scale) {
    for(int i = 0; i < dim; i++) {
        src[i] *= scale;
    }
    return src[dim-1];
}
*/
import "C"
import (
    "fmt"
    "time"
    "unsafe"
)

type TestFunc func()

func main() {
    dim := 10240
    src := make([]float32, dim)
    for jj := range src {
        src[jj] = float32(jj % 10)
    }
    src64 := make([]float64, dim)
    for jj := range src64 {
        src64[jj] = float64(jj % 10)
    }

    repeats := 200
    basicTest(func() { scale(src, 1) }, "Go scale", repeats)
    basicTest(func() { scale64(src64, 1) }, "Go scale64", repeats)
    basicTest(func() { C.scale((*C.float)(unsafe.Pointer(&src[0])), C.int(dim), 1) }, "C scale", repeats)
    basicTest(func() { C.scale64((*C.double)(unsafe.Pointer(&src64[0])), C.int(dim), 1) }, "C scale64", repeats)
}

func basicTest(testFunc TestFunc, name string, repeats int) {
    ss := time.Now()
    for ii := 0; ii < repeats; ii++ {
        testFunc()
    }
    tt := time.Since(ss)
    fmt.Printf("[%s] Repeat: [%d], Total: %s, Mean: %s\n", name, repeats, tt, tt/time.Duration(repeats))
}

func scale(xs []float32, scale float32) {
    for i := range xs {
        xs[i] *= scale
    }
}

func scale64(xs []float64, scale float64) {
    for i := range xs {
        xs[i] *= scale
    }
}

From cpp asm code scale / scale64, we can see scale is using s0 / s1, while scale64 using d0 / d1.
CPP scale on ARM64 is insanely fast, don't know if that's I'm missing any parameter here...

I tested the same code on Raspberry 4 (with the fix and using gcc), results:
[Go scale] Repeat: [200], Total: 3.264352ms, Mean: 16.321µs
[Go scale64] Repeat: [200], Total: 3.285981ms, Mean: 16.429µs
[C scale] Repeat: [200], Total: 2.910802ms, Mean: 14.554µs
[C scale64] Repeat: [200], Total: 3.032948ms, Mean: 15.164µs

Using clang:
ubuntu@cloudy:~/code/sandbox/floats$ CC=clang go run main.go
[Go scale] Repeat: [200], Total: 3.297851ms, Mean: 16.489µs
[Go scale64] Repeat: [200], Total: 4.368629ms, Mean: 21.843µs
[C scale] Repeat: [200], Total: 1.156703ms, Mean: 5.783µs
[C scale64] Repeat: [200], Total: 2.338682ms, Mean: 11.693µs

Looking at the C assembly, it seems clang is automatically vectorizing and interleaving. See https://llvm.org/docs/Vectorizers.html for more information. This explains the 2x difference.
After disabling vectorization and interleaving, I got:
ubuntu@cloudy:~/code/sandbox/floats$ CC=clang go run main.go
[Go scale] Repeat: [200], Total: 3.279888ms, Mean: 16.399µs
[Go scale64] Repeat: [200], Total: 3.266185ms, Mean: 16.33µs
[C scale] Repeat: [200], Total: 3.077429ms, Mean: 15.387µs
[C scale64] Repeat: [200], Total: 2.845988ms, Mean: 14.229µs

Ya, I think that can explain it. Thanks for your clarify.
$ CGO_ENABLED=1 GOOS=android GOARCH=$ANDROID_ARCH CC="$ANDROID_CC" CGO_CFLAGS="-O3 -fno-vectorize" go build -a test_cpp_scale.go
$ adb push test_cpp_scale /data/local/tmp && adb shell '/data/local/tmp/test_cpp_scale'
test_cpp_scale: 1 file pushed, 0 skipped. 3243.5 MB/s (2364312 bytes in 0.001s)
[Go scale] Repeat: [200], Total: 10.593854ms, Mean: 52.969µs
[Go scale64] Repeat: [200], Total: 10.506198ms, Mean: 52.53µs
[C scale] Repeat: [200], Total: 7.748177ms, Mean: 38.74µs
[C scale64] Repeat: [200], Total: 7.8475ms, Mean: 39.237µs


Valora cEUR Invites Showing a Large Number of Significant Digits

Issue
Sending an invite with cEUR to a new user shows a large amount of significant digits.
Current behavior
When a user receives an invite a large number of significant digits are displayed.
Desired behavior
Users receiving an invite should only see hundredths or thousandths e.g. '1.01' or '1.001'
Steps to Reproduce

Send a user an invite to use Valora with an '.5' cEUR
Observe SMS on recipient phone

Versions
v1.16.2
Screenshots

Hey @MuckT I have verified this issue using Test flight build V1.17.0 & Android internal build V1.17.0 & observed that issue is reproduced for us.
Verified On Devices: Redmi Note 8 (9.0), iPhone SE (14.2)
Attachment: LongAmountForcEUR

Hi @MuckT We have verified this issue on Latest Android internal build V1.18.0 and updated the status in test quality tool.
Test quality tool link:
Android (11):
https://valora.testquality.com/project/12128/plan/21657/run/149950/result/2469326
Verified on Devices: Google Pixel 4a (11.0)

Hi @MuckT We have verified this issue on Latest Android Internal build V1.18.0 and updated the status in test quality tool.
Test quality tool link:
Android (10.0):
https://valora.testquality.com/project/12128/plan/21657/run/149950/result/2469315
Verified on Devices: Redmi Note 8 (10.0)
Thanks..!!

Hi @MuckT We have verified this issue on Latest  Test Flight build V1.18.0 updated the status in test quality tool.
Test quality tool link:

https://valora.testquality.com/project/12128/plan/21657/run/149950/result/2469271

Verified on Devices: iPhone SE (13.6.1)
Thanks..!!


chore: bump deps

Signed-off-by: Jorge Turrado<EMAIL_ADDRESS>Checklist

[x] Commits are signed with Developer Certificate of Origin (DCO - learn more)

/run-e2e

/run-e2e predictkube*

/run-e2e predictkube*


Wrapping the emails on invitation confirm step if needed

Summary
Wrapping the emails on invitation confirm step if needed
Ticket Link
MM-17193

The changes looks good. This will be tested as part of 5.16 release Guest Accounts feature


Add json-minifer

@caspian-seagull It would be great if you can write gulp-task that will minify all *.json files in data/*locale*/.


Source extensions properly, fixes #148192

This PR fixes #148192
When a user presses the filter button in the Settings editor search widget and selects the "Extensions" option, it used to be that we would list all built-in extensions, even ones that didn't provide any settings. Another problem was we would not list any user-installed extensions. Now, we list built-in extensions and user-installed extensions, but only ones that contribute settings (i.e. have a contributes.configuration section).

LGTM


Can’t add to home app

Describe Your Problem:

All my omni accessories are showing up in the homebridge UI but the bridge for the omni devices doesn’t show up in the home app.  Iv’e tried rolling back versions of plugin, homebridge, omni automation, but can’t seem to get the bridge to show up.  There are no obvious errors in the logs.

Screenshots:

Environment:

Plugin Version:
1.5.14
Homebridge Version:
1.7
Node.js Version:
*20.09
NPM Version:
Operating System:
Ubuntu

Hi @btgh, the logs show the plugin is working correctly so it appears to be a connectivity issue between HomeKit and Homebridge.
The config shows you are using a child bridge so maybe try unpairing and then re-pairing. If that doesn't solve it try changing the bridge's username (e.g. add 1 to it:  0E:53:65:D9:47:24) and re-pairing again.

I should have mentioned that my other bridges are working correctly.  I’ve run this as both a child bridge and without.  I’ll try renaming.

renaming had no effect.  Is there a way to check the bridges homebridge is advertising to the network?

I'm not aware of way to do it within Homebridge.
Can you see the bridge in the Home app's settings? ( Home Settings > Home Hubs & Bridges)
If so try deleting it and then do the re-pairing again with a new username

My original issue was that my omni accessories stopped responding.  It seemed to be fine when I was at the house but once I Ieft the accessories were no longer working - a few days had passed.  I have remote access to the system so I tried reverting my latest updates etc.  When that didn’t work, I removed the omni bridge from the Home App.  After a variety of reboots etc., I tried to add it back in but it times out.  I also asked my wife to try to add it since she was home and that didn’t work either.  I’m not entirely sure how to debug this since there is a fair amount of Apple magic to make it all work.  I could do a packet capture - if I knew what I was looking for.  In short, the omni accessories work fine from the hombridge UI, but can’t be added to home app.  My other bridges (camera ffmpeg, ring, yolink, ambient) work fine.  The Omni plug in has always been rock solid for me - going on 2 yrs+

I've not seen this issue before but I would suggest doing a complete uninstall and re-install of the plugin. Do this from home - not remotely.
Before you start take a copy of the plugin's config then follow this procedure:

Ensure the bridge is deleted from all your devices (iPhones, iPads, Macs) and restart them all
Uninstall the plugin and restart Homebridge. Make sure the Omni config is completely removed
Go to the Homebridge folder and delete the OmnilinkPlatform subfolder (you can do this from Homebridge UI's terminal if you know a bit of Linux)
Go to the persist subfolder. In here are number of files with names like AccessoryInfo.xxxxxxxxxxxx.json and IdentifierCache.xxxxxxxxxxxx.json. The xxxxxxxxxxxx is the same as the bridge's username. You need to look at each of the AccessoryInfo.xxxxxxxxxxxx.json files and determine which ones relate to the Omni plugin. The contents of the file start like {"displayName": ... which should tell you which plugin they relate to. Once you've identified all of the Omni ones then delete the AccessoryInfo.xxxxxxxxxxxx.json and corresponding IdentifierCache.xxxxxxxxxxxx.json files for them.
Restart homebridge and install the plugin again using the config you saved before. I would recommend setting it up as a Child bridge but make sure the username & port are not used by any others (they must be unique).
Follow the pairing process with your iPhone (by scanning the QR code etc)

Good luck.

My original issue was that my omni accessories stopped responding. It seemed to be fine when I was at the house but once I Ieft the accessories were no longer working - a few days had passed. I have remote access to the system so I tried reverting my latest updates etc. When that didn’t work, I removed the omni bridge from the Home App. After a variety of reboots etc., I tried to add it back in but it times out. I also asked my wife to try to add it since she was home and that didn’t work either. I’m not entirely sure how to debug this since there is a fair amount of Apple magic to make it all work. I could do a packet capture - if I knew what I was looking for. In short, the omni accessories work fine from the hombridge UI, but can’t be added to home app. My other bridges (camera ffmpeg, ring, yolink, ambient) work fine. The Omni plug in has always been rock solid for me - going on 2 yrs+

I am a new Homebridge & Omnilink plugin user. Getting the plugin working was super simple. But a few weeks later, I too had the issue with all Omni devices becoming non-responsive. I removed the plugin and re-added it. I had to reconfigure all the Omni devices. Again, everything is non-responsive. I think we may be having the same issue in that regard. I am not sure why you can't get the Omnilink hub back into your Apple Home app. Have you tried turning off all your Apple Home Hubs (Apple TVs and HomePods) and iPhones/iPads. And then turning it all back on again? I heard some people clear up Apple Home issues by doing that.

I would install SnapLink or Myro:home on your Apple device, and confirm that you can control your OmniPro II with either of those apps. That way you know that you're talking to the controller successfully. I have a large Omni pro installation Using a Apple TV as my HomeKit hub and have not experienced similar issues .

It works fine from Myro or directly from the web ui of homebridge.  I just can’t get the apple home app to add it back in - it times out.  The omni link plug in has worked rock solid for a couple of years now and all my other plugins are fine.  Unfortunately I will not be back at the house for a couple of weeks to try local adding it or debugging.   On Jan 15, 2024, at 5:25 PM, Tesla-P100FX @.***> wrote:
My original issue was that my omni accessories stopped responding. It seemed to be fine when I was at the house but once I Ieft the accessories were no longer working - a few days had passed. I have remote access to the system so I tried reverting my latest updates etc. When that didn’t work, I removed the omni bridge from the Home App. After a variety of reboots etc., I tried to add it back in but it times out. I also asked my wife to try to add it since she was home and that didn’t work either. I’m not entirely sure how to debug this since there is a fair amount of Apple magic to make it all work. I could do a packet capture - if I knew what I was looking for. In short, the omni accessories work fine from the hombridge UI, but can’t be added to home app. My other bridges (camera ffmpeg, ring, yolink, ambient) work fine. The Omni plug in has always been rock solid for me - going on 2 yrs+
I am a new Homebridge & Omnilink plugin user. Getting the plugin working was super simple. But a few weeks later, I too had the issue with all Omni devices becoming non-responsive. I removed the plugin and re-added it. I had to reconfigure all the Omni devices. Again, everything is non-responsive. I think we may be having the same issue in that regard. I am not sure why you can't get the Omnilink hub back into your Apple Home app. Have you tried turning off all your Apple Home Hubs (Apple TVs and HomePods) and iPhones/iPads. And then turning it all back on again? I heard some people clear up Apple Home issues by doing that.
I would install SnapLink or Myro:home on your Apple device, and confirm that you can control your OmniPro II with either of those apps. That way you know that you're talking to the controller successfully. I have a large Omni pro installation Using a Apple TV as my HomeKit hub and have not experienced similar issues .
—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you were mentioned.Message ID: @.***>

I was googling a bit about this issue and found that restarting you router/access point and/or the device running homebridge may fix it.
Check out this reddit for other things to try: https://www.reddit.com/r/homebridge/comments/s4rl8l/homebridge_status_accessory_not_responding_in/

I was googling a bit about this issue and found that restarting your router/access point and/or the device running homebridge may fix it.
Check out this reddit for other things to try: https://www.reddit.com/r/homebridge/comments/s4rl8l/homebridge_status_accessory_not_responding_in/

That didn't work for me. I downgraded my Node.js from v20.10.0 to v18.18.0. I also removed plugins for Rachio, Ring, and Blink. They were nice to have but not critical like the Omnilink plugin. I wanted to remove potential conflicts. I still have Homebridge-dummy as my only other plugin. I removed and restarted the Omnilink plugin to reestablish connectivity with Apple Home. I will, of course, need to reconfigure all devices again. I'm hoping it will be more stable with these changes.

I reconfigured the Omnilink plugin again today and configured all Omni devices again in Apple Home today. I needed to make a small config change to the Homebridge-dummy plugin and then restarted Homebridge. As soon as I did, all my Omni devices are again non-responsive. ☹ The logs in Homebridge show all Omni activity, so I know the Omnilink plugin is communicating properly with my Omni panel. I am uncertain what to do now or how to troubleshoot the Homebridge/Apple Home integration.

What mDNS Advertiser are you using? Maybe try a different one

What mDNS Advertiser are you using? Maybe try a different one

It is configured for Avahi. I also tried changing it to Ciao, but everything is still unresponsive.

If all the above suggestions don't fix the issue I would recommend looking on the Discord Homebridge server. There's a lot of useful info there and you can post your issue to get help from others

@btgh @kctx, did either of you have any luck resolving your issue?
For what's its worth my Homebridge config is as follows:

Homebridge version: 1.7
OS: Ubuntu 22.04.3 LTS (running in a docker container on a QNAP NAS)
Node version: 18.18.2
npm version: 9.8.1
mDNS Advertiser: Ciao

Just got back to this.  In short I think something was just out of sync.  I did a reinstall and restated my hubs etc and it’s working properly again.


GH-39843: [C++][Parquet] Parquet binary length overflow exception should contain the length of binary

Rationale for this change

See https://github.com/apache/arrow/issues/39843
It will be great to contain a string length in decoder.
What changes are included in this PR?

change the logging of encoding
Are these changes tested?

no
Are there any user-facing changes?
more specific error logging?

Closes: #39843

comment fixed @pitrou

Don't know why CI continue fails. Rebase and run ci again

I've checked the CI, seems these test failed for a few days. I'll merge it firstly

Why do conbench has error =_=


Metric Worker.ActiveClients is not correct

Alluxio Version:
2.8
Describe the bug
Worker.ActiveClients reports more clients than there actually are.
To Reproduce
Perform I/O through Alluxio worker, and observe worker metrics.
Expected behavior
Worker.ActiveClients should reflect active clients that is currently reading or writing data on the worker.
Urgency
Normal
Are you planning to fix it
yes
Additional context
Add any other context about the problem here.

the metric is incremented twice when creating a block reader:
https://github.com/Alluxio/alluxio/blob/bf8841d0a1719e9c62735e77151015611e9ab3d9/core/server/worker/src/main/java/alluxio/worker/block/MonoBlockStore.java#L142
https://github.com/Alluxio/alluxio/blob/6bbc180b7871518cd6433e3d69fbbb953c9725a7/core/server/worker/src/main/java/alluxio/worker/block/DefaultBlockWorker.java#L417

Two other metrics that are potentially relevant:
    "Cluster.ActiveRpcReadCount" : {
      "count" : -1
    },

    "Cluster.ActiveRpcWriteCount" : {
      "count" : -559
    },

@dbw9580 may I know if there is a ETA for the PR to resolve this issue? Our clusters have very big values of "Worker.ActiveClients", and we have backported #14088.

@secfree I'm not actively working on this, so feel free to come up with a PR to fix any metric you find incorrect.
For Worker.ActiveClients specifically, I had a little investigation here, but I suspect there're more subtle places where this metric is not correctly updated.

@dbw9580 thanks for your information.


hide practice levels for junior

fix ENG-1061

If we click See Code/ Hide code on the practice levels multiple times, they just hide 😅 . Not a major bug but if it's an easy fix, can we just hide Show/Hide buttons from Practice level for now like for 1a, 1b, 1c?

good catch. hide/see code need to be fixed


[JS] Update nodejs dependencies ahead of schema 1.5 release

Description
Fix up outdated NPM package dependencies. Includes an update to the latest version of typedoc and a few attendant typedoc.json config file changes.
How Verified

local builds (Mac/Linux/Win) and site smoke testing

Microsoft Reviewers: Open in CodeFlow

For the dependency, do we need to run npm update? I saw a lot of vulnerabilities in current dependency
d:\repo\AdaptiveCards\source\nodejs>npm update --no-save
...
+<EMAIL_ADDRESS>added 698 packages from 136 contributors, removed 224 packages, updated 1398 packages and audited 2101 packages in 72.618s

88 packages are looking for funding
  run `npm fund` for details

found 445 vulnerabilities (296 moderate, 149 high)
  run `npm audit fix` to fix them, or `npm audit` for details

For the dependency, do we need to run npm update? I saw a lot of vulnerabilities in current dependency
d:\repo\AdaptiveCards\source\nodejs>npm update --no-save
...
+<EMAIL_ADDRESS>added 698 packages from 136 contributors, removed 224 packages, updated 1398 packages and audited 2101 packages in 72.618s

88 packages are looking for funding
  run `npm fund` for details

found 445 vulnerabilities (296 moderate, 149 high)
  run `npm audit fix` to fix them, or `npm audit` for details

looks like these are incorrectly-hoisted dependencies. I'll see if I can get them cleaned up...

For the dependency, do we need to run npm update? I saw a lot of vulnerabilities in current dependency
d:\repo\AdaptiveCards\source\nodejs>npm update --no-save
...
+<EMAIL_ADDRESS>added 698 packages from 136 contributors, removed 224 packages, updated 1398 packages and audited 2101 packages in 72.618s

88 packages are looking for funding
  run `npm fund` for details

found 445 vulnerabilities (296 moderate, 149 high)
  run `npm audit fix` to fix them, or `npm audit` for details

looks like these are incorrectly-hoisted dependencies. I'll see if I can get them cleaned up...

No worry. I'm working on the 2.10.0 npm version change, and I can do audit in my PR

For the dependency, do we need to run npm update? I saw a lot of vulnerabilities in current dependency
d:\repo\AdaptiveCards\source\nodejs>npm update --no-save
...
+<EMAIL_ADDRESS>added 698 packages from 136 contributors, removed 224 packages, updated 1398 packages and audited 2101 packages in 72.618s

88 packages are looking for funding
  run `npm fund` for details

found 445 vulnerabilities (296 moderate, 149 high)
  run `npm audit fix` to fix them, or `npm audit` for details

looks like these are incorrectly-hoisted dependencies. I'll see if I can get them cleaned up...

No worry. I'm working on the 2.10.0 npm version change, and I can do audit in my PR

@jonmill - we should schedule some MQ time to clean stuff up... I filed #6481 to track some of the things I noticed while getting these dependencies updated


Add rubygem-bundler Require

Build succeeded (check pipeline).

Build succeeded (check pipeline).

Build succeeded (gate pipeline).

https://checklist.intgdc.com/job/compliance/job/serverspec-core-merge-compliance-check/3/ : SUCCESS in 26s


pipe does not properly support rest parameters in some cases.

I encountered this while updating Angular CLI.
In particular, the update to the base.ts file in there, where I'm adding as any was necessary because the spreading of an array of operators into pipe was not working.
EDIT: It seems that we can't support rest params without breaking inference enforcement from operator to operator in the pipe. So here's a proposal:
Proposed Feature
Add an overload of pipe that accepts OperatorFunction<any, any>[] and returns Observable<R>:
pipe<R>(operations: OperationFunction<any, any>[]): Observable<R>;

// usage

const operations = [map(x => x + x), filter(x => x < 100), mergeMap(n => timer(n))];

of(42).pipe(operations)

My memory's not clear, but didn't we replace those signature into else for some reason? https://github.com/ReactiveX/rxjs/commit/872b0ec9f851616b8d5f12fec0d2b1d6d7d8509d#diff-eeb9d77f742ad0df7e932697062fc44e /cc @cartant

See #3841 - adding this signature essentially removes type checking. #3945 was the fix the problems that signature introduced.

@kwonoj ... I think the issue is that TypeScript is not honoring line 321 there. It needs to be added to the signature.

Regarding spreading, see #3989

Yup, I see the issue now. Adding a proposed change to the OP.

I'm probably missing something obvious, but over the weekend I had a play around with making the args to all the Observable pipe overloads optional, and as far as I could see that had the effect of restoring pipe spread arg typing that is at least as good as it was pre v6.3 (and not causing a regression on https://github.com/ReactiveX/rxjs/issues/3841 )
All the dtslint tests seemed to pass, and this wouldn't require special-casing an array argument to pipe, so for eg I believe that Angular ...sinks wouldn't need a change. If this does break typing in some way I'm not seeing, I'd be up for adding a PR for dtslint tests that cover this?
So it would look like
  pipe(): Observable<T>;
  pipe<A>(op1?: OperatorFunction<T, A>): Observable<A>;
  pipe<A, B>(op1?: OperatorFunction<T, A>, op2?: OperatorFunction<A, B>): Observable<B>;
  pipe<A, B, C>(op1?: OperatorFunction<T, A>, op2?: OperatorFunction<A, B>, op3?: OperatorFunction<B, C>): Observable<C>;
  pipe<A, B, C, D>(op1?: OperatorFunction<T, A>, op2?: OperatorFunction<A, B>, op3?: OperatorFunction<B, C>, op4?: OperatorFunction<C, D>): Observable<D>;
  pipe<A, B, C, D, E>(op1?: OperatorFunction<T, A>, op2?: OperatorFunction<A, B>, op3?: OperatorFunction<B, C>, op4?: OperatorFunction<C, D>, op5?: OperatorFunction<D, E>): Observable<E>;
// and so on

I didn't have time to turn this into a PR, and I didn't really test properly under TS 2.8 (only 3.0), but I got as far as making these notes:
import { of, Observable, OperatorFunction } from 'rxjs';
import { mapTo, map, switchMap, switchAll } from 'rxjs/operators';

const basic = of(0);

// Works same either way (type breaks down past 9 args, as expected)
const nonSpread = basic.pipe(
  mapTo('1'),
  mapTo(2),
  mapTo('3'),
  mapTo(4),
  mapTo('5'),
  mapTo(6),
  mapTo('7'),
  mapTo(8),
  mapTo('9'),
  // mapTo(10), // if uncommented, type of nonSpread becomes Observable<{}> as expected
  // mapTo('11'),
  // mapTo(12),
);

// Not allowed currently, allowed with optional args, and types correctly.
const maps = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12].map(x => map<number, number>(y => y * x));
const pipedByMaps = basic.pipe(...maps);

// Not allowed currently, allowed with optional args, and types as Observable<string | number>, which is about as good as you can expect
const maps2 = [1, '2', 3, '4', 5, '6', 7, '8', 9, '10', 11, '12'].map(x => map(y => x));
const pipedByMaps2 = basic.pipe(...maps2);

// In the general case, when spreading an array with various types of OperatorFunctions, the OperatorFunction type params can be
// the most specific common type, i.e. the best possible union type, that encompasses all input and output types.
// Obviously, this is less useful than the precise typing of pipe with less than 10 non-spread args.
interface WithId { id: number; }
type BestUnion = string | number | WithId;
const variousOperatorsArray: OperatorFunction<BestUnion, BestUnion>[] = [mapTo('1'), mapTo(2), mapTo({ id: 3 })];
const pipedByVariousArray = basic.pipe(...variousOperatorsArray);

// If the array is typed as a tuple, however, then the correct type will result (under TS 3.x)
const variousOperatorsTuple: [
  OperatorFunction<number, string>,
  OperatorFunction<string, number>,
  OperatorFunction<number, WithId>
] = [mapTo('1'), mapTo(2), mapTo({ id: 3 })];
const pipedByVariousTuple = basic.pipe(...variousOperatorsTuple);

// This is allowed with or without optional args with non-strict TS. Believe it is currently an error with strictNullChecks TS, and would
// not be with optional args, but it's not a mistake that seems worth worrying too much about.
const pipedByUndefined = basic.pipe(
  undefined,
);

// While the above is an unlikely mistake, the following is a semi-plausible mistake that would not error under strictNullChecks
// But it's not currently possible at all without optional args, so you don't really lose much
const arrayThatCameFromSomewhere = [map(x => x.toString()), switchMap(x => of(x), undefined)];
const pipedBySpreadWithUndefined = basic.pipe(...arrayThatCameFromSomewhere);

// From https://github.com/ReactiveX/rxjs/issues/3841
// Still has hoped-for error with or without optional args
const input: Observable<number> = of(1, 2, 3);
const output = input.pipe(switchAll()); // Has expected error: Type 'number' is not assignable to type 'ObservableInput<{}>'.
output.subscribe(value => console.log(value));

IMO, adding an array overload signature would be the preferred solution. It's simple and easy to understand and will effect errors for undefined values, etc.
And TypeScript 3.0 supports using the spread syntax in a fully TypeScript manner. So eventually this will be a non-issue.

Also, I'm not entirely sure why making them optional should effect such different behaviour. It's interesting, but I'd have some concerns that the behaviour could change. Especially, if the reason for it isn't easily explained.

I'm not entirely sure why making them optional should effect such different behaviour

It's
because TS sees a spread argument as an indeterminate number of optional arguments (caveat - if the spread array isn't typed as a tuple under TS 3.0+). It will only match a call with a spread arg to an overload with exactly the same number of non-optional arguments plus a rest arg.
With the current pipe overloads it will not match pipe(...array) to anything because it can't match to pipe(): Observable<T>; (no rest param), or the long one (pipe<A, B, C, D, E, F, G, H, I>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, etc,, ...operations: OperatorFunction<any, any>[]): Observable<{}>;) because there are a different number of non-optional args.
Making the args optional means there are no longer

Maybe
X.pipe(
  ...some_adapters,
  an_adapter(),
  ...some_more_adapters,
)

should be currently solved by
X.pipe(
  pipeFromArray(some_adapters),
  an_adapter(),
  pipeFromArray(some_more_adapters),
)

?
Would the performance be atrocious?

Bumping this. I would at least like an overload that supports an array of single type operators:
pipe<T extends UnaryFunction<any, any>>(...fns: Array<T>): T

and the same for Observable#pipe.


Improve URL comparison at urlSelector by ignoring prefixes

URL string comparison could fail even it's basically the same address cased by different prefixes like 'http', 'https', and 'www.'.
http://example.com/video/1234
https://example.com/video/1234
http://www.example.com/video/1234
https://www.example.com/video/1234
All four head to the same scene but the URL selector cannot match correctly with our Stash data when the website changes over the time.
We could ignore the prefixes, or do you have a better idea?

I guess it would be possible to hardcode some variants or a simple regex in the GraphQL query. But everything is moving to https and the www subdomain has been going out of fashion for a long time, so this should be rare.
Other variants like [not] including the title in the URL are more common. Most of the time only one or two possible ways are actually used though, so multiple static URLs (atm via multiple check() calls) are enough for me. I do want to refactor check in the future to accept multiple selectors of the same type, which would make this less janky.

Rare but happens. Several scenes have either 'www.' or bare url (or both) at Stashdb and ThePornDB. I don't wanna get a cross mark on the media pages although I got the scene because of a missing (or existing) 'www.' in the url in my Stash when I've added it.
Multiple URLs would be a charm especially for the page hobby.porn which contains the own url and pornhub url too.
I found another - for me - acceptable solution for the (naked) url issue:
Get the naked domain and compare with includes modifier instead of equals ... #41


Added AI and fixed open Issues

Added AI Collapsable sidebar chat interface
Added chat history in db
Ability to quote text from page to chat
Fixed open issues
Fixed before and after buttons
Updated Documentation

was thinking of creating an online version for it..! with courses in Google Drive or something.

@mumernisar google drive soln can be done using rclone fuse (linux)
Works well

@anilabhadatta not right now though...!
Actually python isn't my main gig..! This I was looking for a course... Then came across this..! So.. spent a day on it..!
If there are any issues with this code lemme know..!
It's not that clean but...! It works fine 🥂😅

@mumernisar reviewing code tough.. i will surely look into it.. currently working edu-scraper

@anilabhadatta got it..!
I'll see if I get the time to improve this by then 👍


Upgrade to Postgres 13 parser / pg_query_scan support

I split the Makefile into a shell script (flattens the source) and Makefile (builds the source) combo because the semantics around build systems (required because emscripten doesn't allow the use of -o with multiple source files anymore) and phony targets are weird.
Compatibility with the Postgres 10 parser is retained, although pg_query_scan support is disabled.
Credit goes out to @neighbaa, who documented many of the changes necessary to make this work in #7.
Same caveat applies though, EXPORT_ES6 implies / requires MODULARIZE.
Resolves #3, because emscripten embeds a WebAssembly blob within the .js file (base64 encoded).

@PhilipTrauner Thanks for the contribution!
A few preliminary thoughts:

Whilst I can see how the separate shell script makes it easier, the fact that one can't use make, but rather needs to call build.sh which then calls the Makefile, is a bit odd - is there a way we can either keep this in one Makefile, or have the Makefile call build.sh? (happy to look into this myself, if you'd like)

Does this mean the build now requires WebAssembly support? That's not necessarily a problem (since nowadays that is available pretty universally), but it would be good to know.

For the WebAssembly file, if I understand correctly this is now embedded into the output - I wonder if it wouldn't be better to keep it a separate file, since some people might prefer to ship this as a .wasm file instead of a base64-encoded .js file?

Whilst I can see how the separate shell script makes it easier, the fact that one can't use make, but rather needs to call build.sh which then calls the Makefile, is a bit odd - is there a way we can either keep this in one Makefile, or have the Makefile call build.sh? (happy to look into this myself, if you'd like)

I went with the second approach (as of 628e69d4).

Does this mean the build now requires WebAssembly support? That's not necessarily a problem (since nowadays that is available pretty universally), but it would be good to know.

As of 212077e JavaScript with embedded WebAssembly is emitted by default. By setting WASM=0 plain JavaScript is emitted instead. The plain JavaScript version is slightly bigger.

For the WebAssembly file, if I understand correctly this is now embedded into the output - I wonder if it wouldn't be better to keep it a separate file, since some people might prefer to ship this as a .wasm file instead of a base64-encoded .js file?

The default setting (WASM=1 is implied if left unspecified) embeds the WebAssembly binary into the JavaScript artifact. I'm not aware (although I certainly wouldn't call myself experienced with Emscripten) to change this behaviour.

Whilst I can see how the separate shell script makes it easier, the fact that one can't use make, but rather needs to call build.sh which then calls the Makefile, is a bit odd - is there a way we can either keep this in one Makefile, or have the Makefile call build.sh? (happy to look into this myself, if you'd like)

I can look into the first approach as well if you prefer 😇 (@lfittl)

Sorry to keep pestering you @lfittl, but I'd appreciate if you could take another look at this.

Sorry to keep pestering you @lfittl, but I'd appreciate if you could take another look at this.

No worries - I think the main thing to change here would be how the Makefile and build.sh interact - I'm not a fan of the two-way calling. Can we avoid having flatten.sh call the Makefile?

Sure, would a recursive make call be alright with you?
ARTIFACT := pg_query.js

.PHONY: flatten

all: flatten

flatten:
	# Flattening operations
    $(MAKE) $(ARTIFACT)

$(ARTIFACT):
    # Building of artifact

Is the recursive make approach close to what you had in mind (@lfittl)?

Did this (PR | project) die? That would be sad to see..

This fork ended up significantly diverging from master, therefor I'm not sure if merging is desirable at this point.
That being said, the fork did accomplish what it set out to do (parser upgrade / pg_query_scan support), so if those features are deemed necessary, one can just use the fork.

My apologies for not getting back to this a few years ago, and thanks for maintaining the fork!
Since the fork itself now has gotten outdated, and someone was interested in using this project recently, I figured we can merge this (done via #9) and update to Postgres 16. Since your work is merged now via that separate PR and released as 5.1.0 (matching libpg_query versioning), I'll close this one here.


example suggestion: several Task.loop examples

Task.loop can be intimidating, so we should have good examples for it with some explanation.
Inspiration:
https://roc.zulipchat.com/#narrow/stream/231634-beginners/topic/read.20.20file/near/392471155
https://github.com/search?q=repo%3Aroc-lang%2Froc "loop" path%3A*.roc&type=code
https://github.com/search?q=repo%3Aroc-lang%2Fbasic-cli loop path%3A*.roc&type=code

I would love to give this a try. @Anton-4, could you please assign it to me?
From the links you mentioned, I think the simplest base example is this one: https://github.com/roc-lang/basic-cli/blob/main/examples/piping.roc
My idea is to show how to process the input line by line, but show also the case with an error. It could be, for example, reading a series of numbers from stdin, one per text line, converting every line into a Num, and keeping (and printing) a cumulative sum of the numbers. If the line is not a number, the loop is supposed to return a Task.err.
What do you think?

Sounds good to me.

Would you add the example for Task.loop to https://www.roc-lang.org/examples/Tasks/README.html or should I create a new one?

I think we should create a new one. It is better to keep them smaller and focussed. That example is much larger to show how to bring things together, specifically for error handling and more of an introduction.


Is this project supported by the developer?

I looked that the last update was a year ago.
The page with the documentation disappeared. (https://higan.me/Meta.Vlc/api/index.html)
VlcMediaPlayer.VlcInstance.VlmGetLength returns integer value (in microseconds), if duration of video more 71 minutes, it will return an incorrect value.

Are you using VLM functions? Vlm* functions onlu work with VLM...
Ummm...This repo has some limited support(some Q&A and some advices), I think I will not add functions for it anymore. But if you want to create a PR for it, I will check and merge it. I am happy to see someone willing to take over and provide maintenance for the repo.
This repo is targeted for VLC 2.x, but it is easy to support 3.x I think.

yes, I checked on a 20 minute video, returns a positive result in microseconds. (should be in milliseconds)
I checked on a 2-hours video, and returned a negative result, there is an overflow of an integer value.
(the result is negative because the sign bit becomes 1)

Thank you for such a good project!
I just decided to report an error!

Check this, libvlc_vlm_get_media_instance_length
I found it return a int, if the result is just a int, microseconds is not a suitable unit.
I created those bindings from official‘s doc, no idea with wrong unit, maybe you can try another version of vlc, maybe it is a bug of libvlc.
In fact, in my dev experience of VLC, I don't think libvlc is a good lib for play a media, libvlc has many bad design as a media lib, but VLC is a good meida player. For lib, I'm more inclined to ffmpeg.

In addition, I think int is not a suitable type for time unit, even milliseconds, if I were developer of libvlc, I will use longlong for it.


Added async and await as C# keywords.

Is this safe to go into 3.0? Does this affect current uses of those words as non-keywords in potentially existing C# code?

@hpvb AFAIK this is only used by the editor for highlighting, it doesn't do anything special. We can't control what's a keyword or not in C#.

Yep, this is just for syntax highlighting in the built-in editor.

ok, going in 3.0.1!


chore(deps): upgrade dependencies

Upgrades project dependencies. See details in workflow run.

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

AWS CodeBuild CI Report

CodeBuild project: DDKIntegrationTestsD8472609-5SCHWjldmWcf
Commit ID: 7059855ba40264aafd7d81fb5499d5fbf5b11272
Result: SUCCEEDED
Build Logs (available for 30 days)

Powered by github-codebuild-logs, available on the AWS Serverless Application Repository

AWS CodeBuild CI Report

CodeBuild project: DDKIntegrationTestsD8472609-5SCHWjldmWcf
Commit ID: 84cbdee76958d03c1bb752e4c475fb821d9594ee
Result: FAILED
Build Logs (available for 30 days)

Powered by github-codebuild-logs, available on the AWS Serverless Application Repository


run example fail

OS: ubuntu 14.04
Node: v8.11.3
fail log:
(node:10399) UnhandledPromiseRejectionWarning: Error: Could not start Xvfb.
    at Xvfb.startSync (/home/test/puppetcam/node_modules/xvfb/index.js:84:17)
    at main (/home/test/puppetcam/export.js:20:10)
    at Object.<anonymous> (/home/test/puppetcam/export.js:45:1)
    at Module._compile (module.js:652:30)
    at Object.Module._extensions..js (module.js:663:10)
    at Module.load (module.js:565:32)
    at tryModuleLoad (module.js:505:12)
    at Function.Module._load (module.js:497:3)
    at Function.Module.runMain (module.js:693:10)
    at startup (bootstrap_node.js:191:16)
(node:10399) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:10399) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

have to
sudo apt-get install xvfb  -y

Yes, you are right. Had just mentioned it as dependency but did not include the command to install in the readme as it would be different for each OS.

But still with problem,
/puppetcam/node_modules/puppeteer/.local-chromium/linux-571375/chrome-linux/chrome: error while loading shared libraries: libXcomposite.so.1: cannot open shared object file: No such file or directory

TROUBLESHOOTING: https://github.com/GoogleChrome/puppeteer/blob/master/docs/troubleshooting.md

looks puppetteer, that is required dependency libs in different OS,
In ubuntu,
sudo apt-get install xvfb  -y
sudo apt-get install libatk-bridge2.0-0
sudo apt-get install libgtk-3.0

ref,
https://github.com/GoogleChrome/puppeteer/issues/1598
https://github.com/GoogleChrome/puppeteer/blob/master/docs/troubleshooting.md#chrome-headless-doesnt-launch


[Incubator][VC] allow the user to specify max number of reconcilers

allow the user to specify the max number of reconcilers
add the status condition that records the vc starting time

/lgtm
/approve


implement hardware awareness scheduling based on NFD

What would you like to be added:
kind/feature
Why is this needed:
Proposal https://clusternet.io/proposals/ha-nfd/

cc @lmxia @hle2

NFD installation doc: https://kubernetes-sigs.github.io/node-feature-discovery/v0.11/get-started/quick-start.html


Fix kafka on call tree view

Fix kafka on call tree view

Call tree view error
Multi child
Ignore WARN log

04-21 16:43:36.036 [o-19000-exec-10] WARN  c.n.p.w.m.SpanMapperV2                   : agentLevelCollision [SpanBo{version=1, agentId='...

Multi Child

After


Setup MPU for code relocated to SRAM

Create a static MPU map for code relocated to SRAM
Update the python script to provide proper alignment for the SRAM region
Setup the static MPU regions before PRE_KERNEL_1 and PRE_KERNEL_2 functions are invoked. This will setup the MPU for SRAM regions in case code relocated to SRAM and invoked from any of these functions.

I need to have a closer look into this. For now, I could only comment that the refactor you're doing seems to break the support in NXP MPU to start the MPU stuff at PRE KERNEL 2.
Also, for the whole thing to work efficiently, you probably need to have the RAM area for relocation inside the RAM_SECTIONS - is it the case?

RAM_SECTIONS

Relocation is done using zephyr_code_relocate(src/*.c SRAM) function which places the files in SRAM region. scripts/gen_relocate_app.py will generate the linker_relocate.ld and code_relocation.c files at build time.

Rebased

Any comments?

I need to have a closer look into this. For now, I could only comment that the refactor you're doing seems to break the support in NXP MPU to start the MPU stuff at PRE KERNEL 2.

I have ran userspaces tests on the FRDM_K64F board and the tests pass. The tests I ran were
tests/kernel/mem_protect/userspace
samples/userspace/shared_mem
samples/userspace/hello_world_user
samples/userspace/prod_consumer/

I need to have a closer look into this. For now, I could only comment that the refactor you're doing seems to break the support in NXP MPU to start the MPU stuff at PRE KERNEL 2.

I have ran userspaces tests on the FRDM_K64F board and the tests pass. The tests I ran were
tests/kernel/mem_protect/userspace
samples/userspace/shared_mem
samples/userspace/hello_world_user
samples/userspace/prod_consumer/

I am not saying that the tests are breaking. I only commented that there was no option any more for POST KERNEL initialization of the module. :)

I need to have a closer look into this. For now, I could only comment that the refactor you're doing seems to break the support in NXP MPU to start the MPU stuff at PRE KERNEL 2.

I have ran userspaces tests on the FRDM_K64F board and the tests pass. The tests I ran were
tests/kernel/mem_protect/userspace
samples/userspace/shared_mem
samples/userspace/hello_world_user
samples/userspace/prod_consumer/

I am not saying that the tests are breaking. I only commented that there was no option any more for POST KERNEL initialization of the module. :)

The NXP MPU driver was delaying the init to PRE_KERNEL2 for logging purposes. I think this was meant to help debugging during MPU driver init.

Any questions on this PR?

Any questions on this PR?

Apologies to keep asking about this PR, I would like to get this in before the merge window closes. Also a few other open PR's are dependent on this.


Fix the issue #170 of inability to wake up the body during application speed.

I made some minor modifications to this, and although the PR was not well received, I still submitted it

Addressed in #174


MVP polymorphic planned_process_set

also removing all slot_usages and these slots from Database

date_created
etl_software_version

remove directly asserted metaslot values from slots that mix in object_set? Try on biosample_set.

GOLD has some ..._type slots that we shouldn't mess with, in addition to the MIXS  ..._type slots
Most of these could be renamed following a ..._category pattern. They should all use enumerated ranges.

neon*type

analysis_type
compression_type
container_type
data_object_type
device_type
dna_cont_type
feature_type
library_type
omics_type
rna_cont_type
sample_type


add background-page

What would be the intention of this page? To provide background on how aim42 came to be i.e. why we created it (as an open-source project)?

Current situation: we have a decent documentation ... and examples /experiences might be more import that conceptual background... (which most likely nobody would read...)


Sensor in Starting phase ?

Hi, I like your app, but when I scan my sensor the app said: sensor in starting phase. A bit frustrating. Can you please remove the starting phase area ?

I suggested a simple workaround in https://github.com/creepymonster/GlucoseDirect/issues/486.

This has nothing to do with Glucose Direct and is a function/limitation of the CGM device itself. The same status is shown for 60 mins in the freestyle app, glucose data is not being transmitted during this time. The developers are just showing the current device status which they cannot control.


docs: new place for policy description manual

Why
Definition of policies is a complex work and right now it is described here:

Confluence which is not accesable for everybody and
in portal

both links are not correct and the description should be somewhere, where it its better, for example:

in the Connector Kit
the e2e Journey tutorial
or maybe in the different usecases

This still needs to be defined
Note: Also the POC, build by @wolf4ood could help to explain the policies and should maybe linked in a documentation
What

[ ] Define the correct place for the policy documentation
[ ] talk to the related POs (EDC, Portal)
[ ] Add the documentaion where it is needed
[ ] Delete the old references

Notice
This documentation might also help to get a better understanding about policies
Also in our matrix chat some questions about policies were raised. Maybe we can have a look at them while working on this issue:
Hi Everyone, I have also been trying to understand policies. There are some questions in my mind, after going through documentations -

In TractusX EDCs what constraint functions to evaluate a policy exist by default? For example BusinessPartnerNumber can be evaluated. What other leftOperand values already have constraint functions implemented?

What kind of action values are possible under permission/prohibitions/obligations? In the documents, I have seen action like "READ"/"DISTRIBUTE"/"DELETE" is being used. Do we have any documentation on what are the supported actions by TractusX EDC and what do they mean?

What is the difference between Access Policy and Contract Policy? In the Postman Collection we have been providing same policy id in both the fields when creating contract definition.

@BenediktSR are you still working on this or an the referenced PR? Do you need help? support?

@BenediktSR ? news on this feature?


Run object detection model on arduino-like board

How can I run an object detection model on an arduino-like board using tflite micro. I can convert it to a model.cc, but I don't know how to run it from there on the microcontroller?
Can you please help with beginners instructions to use a object detection model trained and converted to tflite on a Arduino like board?
Thanks in advance for your help.

Hi @Raunak-Singh-Inventor !
You can train the model  through custom image dataset and get the respective C++ files for including in the Arduino librarary using Edge impulse .
Thank you!

I want to use my custom model that I have trained in TensorFlow. You can't do that in edge impulse unless you have an corporate account. I'm just a 9th grader, I don't have that privilege. Please suggest a native method through TensorFlow Lite Micro (without using any 3rd party library).

Hi @Raunak-Singh-Inventor !
I was able to use edge-impulse with my personal account too.
You can also refer this document to write loading and inference code after getting .h file from lite using xxd converter in last step mentioned in this example.
Thank you!

But how can you import custom TensorFlow models into Edge Impulse. They don't have instructions for that.

Ok @Raunak-Singh-Inventor !
Thanks for clarifying your requirements. Importing an Tensorflow model does not seem to be part of feature yet in Edge impulse ( But the features like Data acquisition, testing etc seems to be  great and beginner friendly) .
But  If you have already evaluated your TFlite model in Colab, You can convert to c array file using xxd converter and import it with other dependencies as mentioned here in this document which includes the following steps.

convert your model to Tflite.
Convert it to c array using xxd converter.
Include Tflite library in Arduino
Create a new C++ program ( Please do refer this document which mentions all the steps starting from including the library header files to get the output step)

Thank you!


Improve tests

Codecov Report

Merging #2486 into master will not change coverage by %.
The diff coverage is n/a.

@@            Coverage Diff            @@
##             master    #2486   +/-   ##
=========================================
  Coverage     83.29%   83.29%
  Complexity     2196     2196
=========================================
  Files           360      360
  Lines          6225     6225
  Branches       1144     1144
=========================================
  Hits           5185     5185
  Misses          463      463
  Partials        577      577

Continue to review full report at Codecov.

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


http-port flag on cockroach start

Defines the port for the Admin UI and http requests in general.

Closed by PR #116.


feat: completed the integration of applicationView

Description
In this PR I have integrated ApplicationView from EDAVisualizer with vs-async-preview, this is the initial PR of integration of EDAVisualiser into vs-async-preview
Screencast from 15-10-24 11:04:11 PM IST.webm
Related issue(s)
Completed #234

Amazing, let me know if anything needs to happen in EDAVisualizer, happy to help review and merge PRs with priority :slightly_smiling_face:

/rtm

/rtm


feat: inject deck and go versions into User-Agent header

Before this change:
$ deck ping

<-- kong logs -->

<IP_ADDRESS> - "GET / HTTP/1.1" 200 17479 "-" "Go-http-client/1.1"

After this change:
$ deck ping

<-- kong logs -->

<IP_ADDRESS> - "GET / HTTP/1.1" 200 17479 "-" "decK/v1.11.0 (4235c73) go1.18"

Codecov Report

Merging #652 (fb32d61) into main (1fe60ed) will decrease coverage by 0.03%.
The diff coverage is 0.00%.

@@            Coverage Diff             @@
##             main     #652      +/-   ##
==========================================
- Coverage   44.39%   44.36%   -0.04%
==========================================
  Files          74       74
  Lines        8774     8780       +6
==========================================
  Hits         3895     3895
- Misses       4518     4524       +6
  Partials      361      361

Impacted Files
Coverage Δ

cmd/root.go
0.00% <0.00%> (ø)

Continue to review full report at Codecov.

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


Translate installation page

Source: https://github.com/laravel/docs/blob/5.2/installation.md

working on this.

Added via d817fbf1786a214f97855eeba366b46b308d4554


special page operand is treated as being in the zero page when traversing

should probably set sp_addr to the to 0xff00 | operands[0]
https://github.com/mnaberez/m740dasm/blob/b2e29bdbb1763f33934027ef359e9077a4e8e8f5/m740dasm/disasm.py#L114-L115
and adjust the formatting here (to simply 0x%04x)
https://github.com/mnaberez/m740dasm/blob/b2e29bdbb1763f33934027ef359e9077a4e8e8f5/m740dasm/disasm.py#L51

also, add sp_addr to the target_address list:
https://github.com/mnaberez/m740dasm/blob/b2e29bdbb1763f33934027ef359e9077a4e8e8f5/m740dasm/disasm.py#L65

also, add sp_addr to the target_address list:
https://github.com/mnaberez/m740dasm/blob/b2e29bdbb1763f33934027ef359e9077a4e8e8f5/m740dasm/disasm.py#L65

Thanks for reporting these issues related to the Special Page.  I believe I've fixed this in 0e245beb7d7efe18ed5d18ba9b1e96e8643a4b25.
Since I don't have a real firmware that uses Special Page, I added it to the end-to-end test program:
https://github.com/mnaberez/m740dasm/blob/0e245beb7d7efe18ed5d18ba9b1e96e8643a4b25/m740dasm/tests/end_to_end/testprog.asm#L40
The resulting disassembly now shows 0xff80 as code.

Thanks for reporting these issues related to the Special Page.  I believe I've fixed this in 0e245beb7d7efe18ed5d18ba9b1e96e8643a4b25.
Since I don't have a real firmware that uses Special Page, I added it to the end-to-end test program:
https://github.com/mnaberez/m740dasm/blob/0e245beb7d7efe18ed5d18ba9b1e96e8643a4b25/m740dasm/tests/end_to_end/testprog.asm#L40
The resulting disassembly now shows 0xff80 as code.


New features to the player

Hey @lijinke666 , here is the list of features that could be awesome for your player

On track list state change start auto-playing this list.
For the first case you have an 3 tracks that loaded to your list, when list changed, player automatically starts playing from first track of the list
Make some kind of flag in the request array which track to play.
You have array of tracks info, as for now they played from the first one, we need to add some flag to alert the player that tracks playlist should start from some index
Make track list bar customizible, I mean, we need to add some delete button for modifying this list if you want to drop this track from playing queue.
Ordering in play queue, need to add some kind of track position dragging, click on track, drag out it to the first position of the queue etc.

Thanks a lot!

@cudouny  What you're saying is that every song in this playlist can be pushed in an arbitrary way ?

Then you want add a new Feature
audio list  add a delete button , like click the button can remove current the audio ?
Let's say the second song is playing.  then redux update  or replace the audio lists .
Do you want to play the second song after the update?
or add a new api  like audioDelete trriger after the remove.
like this ?
const options = {
   audioDelete(audio,currentPlayerId){
       audio.play(YOUR_WANT_TO_PLAY_ID)
  }
}

Hi @lijinke666, sorry for long response.

@cudouny What you're saying is that every song in this playlist can be pushed in an arbitrary way ?

I mean if you try to hold down click button,  you can like,  swap tracks in the playing queue.
For the feature with delete button behavior.

For example, it's just a feature when you need to remove some track from playing queue. If track that you currently playing is clicked to delete, you just remove this track from the queue and start playing next track, or nothing in case of empty playing queue.
Please, ask me any questions about this.
Thank you!

I know what you mean, you want the list to drag and drop or can delete it
That sounds good and I'll try it on a new branch
Thank you for your advice ：）

@cudouny Hi~ The branch feat-4.0.0
You have completed the features you want and are expected to be released tomorrow
Looking forward to your feedback and use

have fun! 💯


Added C internals by Rajeev Kumar

C internals explains the translation of C code into Assembler code.
What does this PR do?
Add resource(s)
For resources
Description
This is a book that describes how a C code is translated into assembly language using gcc compiler on i386 platform.
Why is this valuable (or not)?
This helps anyone interested to learn more under the hood stuff of the C language. Specifically how the C code is translated into Assembly Code.
How do we know it's really free?
It is a book on a website with no restrictions. Completely free, no registration or anything required.
For book lists, is it a book? For course lists, is it a course? etc.
On the source, it says it is an article, but it is formatted like a book, with multiple pages, and a table of contents and a navigation at the bottom.
Checklist:

[x] Read our contributing guidelines
[x] Search for duplicates.
[x] Include author(s) and platform where appropriate.
[x] Put lists in alphabetical order, correct spacing.
[x] Add needed indications (PDF, access notes, under construction)

Follow-up

Check the status of GitHub Actions and resolve any reported warnings!

Duplicate of #6637


python

Hello, Can i work on this issue. Thers arent any PRs so if its possible can i try this one?


⚠ ClamAV has degraded performance

In 1674a7e, ClamAV (https://spamassassin.apache.org/) experienced degraded performance:

HTTP code: 200
Response time: 52 ms

Resolved: ClamAV performance has improved in 9bb76e7.


el-patch validates against macro-expanded version of function

Consider the following patch:
(el-patch-feature org-roam)
(with-eval-after-load 'org-roam
  (el-patch-defun org-roam-buffer-persistent-redisplay ()
    "Recompute contents of the persistent `org-roam-buffer'.
Has no effect when there's no `org-roam-node-at-point'."
    (when-let ((node (org-roam-node-at-point)))
      (unless (equal node org-roam-buffer-current-node)
        (setq org-roam-buffer-current-node node
              org-roam-buffer-current-directory org-roam-directory)
        (el-patch-remove (with-current-buffer (get-buffer-create org-roam-buffer)
                           (org-roam-buffer-render-contents)
                           (add-hook 'kill-buffer-hook #'org-roam-buffer--persistent-cleanup-h nil t)))
        (el-patch-add
          (if (get-buffer-window org-roam-buffer)
	      (delete-window (get-buffer-window org-roam-buffer)))
          (let ((buffer (get-buffer-create org-roam-buffer)))
	    (with-current-buffer buffer
	      (org-roam-buffer-render-contents)
	      (add-hook 'kill-buffer-hook #'org-roam-buffer--persistent-cleanup-h nil t))
	    (display-buffer buffer)))))))

Applying it at startup and validating the patch yields the following diff (in which macros are expanded in the expected buffer):

However, when commenting out the patch during startup and manually eval the el-patch-defun after startup completed, validation succeeds and the diff does not contain expanded macros:

~Could the problem be related to the emacs native compilation feature?~ Verified the issue persists after rebuilding emacs without native compilation support.
In GNU Emacs 29.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.29, cairo version 1.16.0)
 of 2021-11-05 built on leonard-xps13
Repository revision: 37632dae180e9d5196ef01343fefa9234c5f05b9
Repository branch: feature/pgtk
Repository: https://github.com/leezu/emacs
System Description: Gentoo/Linux

Configured using:
 'configure --with-cairo --with-x-toolkit=no --with-pgtk --with-modules --with-native-compilation'

Configured features:
ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG
JSON LCMS2 LIBOTF LIBSYSTEMD LIBXML2 MODULES NATIVE_COMP NOTIFY INOTIFY
PDUMPER PGTK PNG RSVG SECCOMP SOUND THREADS TIFF TOOLKIT_SCROLL_BARS XIM
GTK3 ZLIB

Important settings:
  value of $LC_COLLATE: C
  value of $LC_CTYPE: zh_CN.UTF-8
  value of $LANG: en_US.UTF-8
  locale-coding-system: utf-8-unix

I think typically this sort of issue results from el-patch not being loaded at compile time. Do you have (require 'el-patch) earlier in the init-file?

I just tested this and am unable to reproduce the issue; with the following code evaluated added to my init-file the patch is discovered by el-patch and validated successfully:
(use-package org-roam-mode
  :straight org-roam
  :init

  (el-patch-feature org-roam-mode)

  :config

  (el-patch-defun org-roam-buffer-persistent-redisplay ()
    "Recompute contents of the persistent `org-roam-buffer'.
Has no effect when there's no `org-roam-node-at-point'."
    (when-let ((node (org-roam-node-at-point)))
      (unless (equal node org-roam-buffer-current-node)
        (setq org-roam-buffer-current-node node
              org-roam-buffer-current-directory org-roam-directory)
        (el-patch-remove (with-current-buffer (get-buffer-create org-roam-buffer)
                           (org-roam-buffer-render-contents)
                           (add-hook 'kill-buffer-hook #'org-roam-buffer--persistent-cleanup-h nil t)))
        (el-patch-add
          (if (get-buffer-window org-roam-buffer)
	      (delete-window (get-buffer-window org-roam-buffer)))
          (let ((buffer (get-buffer-create org-roam-buffer)))
	    (with-current-buffer buffer
	      (org-roam-buffer-render-contents)
	      (add-hook 'kill-buffer-hook #'org-roam-buffer--persistent-cleanup-h nil t))
	    (display-buffer buffer)))))))

This thread is being closed automatically by Tidier because it is labeled with "waiting on response" and has not seen any activity for 90 days. But don't worry—if you have any information that might advance the discussion, leave a comment and I will be happy to reopen the thread :)


NEW Rename delete button to archive button. Update all references.

Renames delete button to archive button. This aligns with the designs:

For consistency the GraphQL mutation has been renamed as well.
In combination with b9d89f375f94a1d750a this resolves #299

@ScopeyNZ I don't like the non-alphabetical order either. But again, I went with the designs:

Perhaps something to discuss with @newleeland tomorrow.

I think it’s ok, the important actions (save and publish) should be first in the list (in my opinion)

@raissanorth can you fix the CI builds?


[release-1.20] Update Kubernetes to v1.20.10-k3s1

Proposed Changes
Update Kubernetes
Types of Changes
Kubernetes
Verification
kubectl version -o yaml
Linked Issues

#3780

User-Facing Change

Update Kubernetes to v1.20.10

Further Comments

Ready for re-review with final module locations.


Fix azure tests leaking disks

Previously, all resources were created with a certain tag. When the cleanup phase came, the Resources - List route[1] was used to get all resources with the tag. Then, they were deleted in the right order.
Sadly, the Resources - List API has issues with listing disks. Sometimes, it doesn't return the newly created disks for 15 minutes after they were created. As a result, the disks have been left behind quite often and our bill was higher than necessary.
This PR uses a different method - the Go code now knows all resource names, so it can delete all resources without listing them using the "broken" API route.
[1]: https://docs.microsoft.com/en-us/rest/api/resources/resources/list

This is now ready to be reviewed.

This is not connected with failing Schutzbot in any way (Azure code is not run there).


Default answers being saved on plan creation

If default answers exist (see for example NERC full plan which has tables to complete), these are autosaved on plan creation so a brand new plan shows as being partially complete

tested and now I have to click Save button to save default answers. can you confirm that this is the desired behavior @sjDCC? if so this issue can be closed.

@stephaniesimms, if we auto-save a question with the default text, the questions types that are just text (e.g. textfield, textarea) will count in the section and progress statuses and I think that was the reason @sjDCC raised the issue.
We could exclude questions that have default answer from the counts but I think that would be more confusing.

@jollopre I agree w/all you mentioned above and think the issue should be resolved now. I just wanted @sjDCC to confirm that she also agrees before closing the issue.

This is all working fine now. Previously it was saving on creation. Now if a question is answered in another section and autosaves, it doesn't save the default answers too so all good. Removing from board


Refused to load the font '' because it violates the following Content Security Policy directive: "font-src 'self'

When opening a trace the console log show errors as below. Some when using pixijs and chartjs.
For example in pixi.js:
Refused to load the font '<URL>' because it violates the following Content Security Policy directive: "font-src 'self' <URL>".

trace_panel.js:63685 Refused to load the font 'data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAABgoAAsAAAAALEgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAAmMAAAR2YfRkQU9TLzIAAANsAAAAQQAAAFZWUFLwY21hcAAAA7AAAAIMAAAFnGSNxkJnbHlmAAAFvAAADpIAABo4y6JNTGhlYWQAABRQAAAANAAAADZ2zcSBaGhlYQAAFIQAAAAaAAAAJAfQBDFobXR4AAAUoAAAABoAAAEgs7L//WxvY2EAABS8AAAAawAAAJJHu0GKbWF4cAAAFSgAAAAfAAAAIAFeAKpuYW1lAAAVSAAAATUAAAJG0OP3eXBvc3QAABaAAAABqAAAAm9qOX49eJx9lM1SE1EQhc8wAYFEoDQqRkRQ/IvKMD8Zk/CTkJBoWS5cWJYLN1hWWVZRrngOH8AnYOkT+AAufAIfwIVL15ZfdwaDLMitTO50n+4+fW7fKJA...IE6AE8vPdwvHu4a2201tFv/T/22KBNQkqHLj026TNgixOcZJshpxhxmjOcZYdznOcCF7nEZa5wlWtc5wY3ucVt7nCXe9znAQ95xGMynvCUZ4x5zgte8orXvOEt73jPBz7yic/s8oWvfOM7P/jJL36zx5/WQBSFU4UI2pqOcM4ufFt42ZHCSFWmciZcGMqZkvsTu8wOgcp3jgRtchWUq7QRQY2O5Mb8q9yStrQuq3UkrhtJUxnfl9YEJ2RQeSJtvUqls963pZ+n8WXjJFdepmoZDXQPczbuqWUt4qx8U61U5kvhZ+2IOlNdxvHpVDsfksLpOi2cbeokFoSkVNPQKbWJPrqlFbk2Ra8SS13pA5VUyjS96HvNjDVqYGzIRFnahcrTOjZQ7VqbtNZzG4YufrfZpAnBmsxOp9vHBZM6XcxC4sVc9X0Vu2S5XZjeGkZDIW5gFJxSx1fWa8zaIIIChyKgsRgWeCQlM/aZsIwnzqloqFkxZ8pBq/UXq/Gj5g==' because it violates the following Content Security Policy directive: "font-src 'self' https://*.vscode-cdn.net".

 Consider marking event handler as 'passive' to make the page more responsive. See https://www.chromestatus.com/feature/5745543795965952
componentDidUpdate @ abstract-xy-output-component.tsx:254
commitLayoutEffectOnFiber @ react-dom.development.js:23338
commitLayoutMountEffects_complete @ react-dom.development.js:24688
commitLayoutEffects_begin @ react-dom.development.js:24674
commitLayoutEffects @ react-dom.development.js:24612
commitRootImpl @ react-dom.development.js:26823
commitRoot @ react-dom.development.js:26682
performSyncWorkOnRoot @ react-dom.development.js:26117
flushSyncCallbacks @ react-dom.development.js:12042
commitRootImpl @ react-dom.development.js:26959
commitRoot @ react-dom.development.js:26682
finishConcurrentRender @ react-dom.development.js:25981
performConcurrentWorkOnRoot @ react-dom.development.js:25809
workLoop @ scheduler.development.js:266
flushWork @ scheduler.development.js:239
performWorkUntilDeadline @ scheduler.development.js:533

The CSP setting is done when creating the HTML for each webview, see image for the trace explorer:

Some related information that could help solve the problem:

https://csper.io/blog/csp-violates-the-content-security-policy-directive
https://github.com/microsoft/vscode/issues/102959#issuecomment-663340395

Another interesting piece of information: How MS configures different levels of CSP for its built-in MarkDown extension (the user can pick the level, from "insecure" to "strict"):
https://github.com/microsoft/vscode/blob/6aca75d9d09f7d9d32c18e58c836067f2d420495/extensions/markdown-language-features/src/preview/documentRenderer.ts#L234-L246


Remove-WmiObject fails on PowerShell Core

Test-MockSchema calls 'mofcomp’  which imports the Class into WMI with a temporary schema name, ie. ‘tmp6C92’.
https://github.com/PowerShell/xDSCResourceDesigner/blob/c55cba516774f23ce8d654df8b31382f9da6554d/xDSCResourceDesigner.psm1#L2467
The schema is tested by being loaded.
https://github.com/PowerShell/xDSCResourceDesigner/blob/c55cba516774f23ce8d654df8b31382f9da6554d/xDSCResourceDesigner.psm1#L2494
Then it is supposed to be remove (which fails).
https://github.com/PowerShell/xDSCResourceDesigner/blob/c55cba516774f23ce8d654df8b31382f9da6554d/xDSCResourceDesigner.psm1#L2541
It is easy to see the class have been imported but not removed
Get-CimClass -ClassName tmp* -Namespace root\microsoft\windows\DesiredStateConfiguration

We need a way to remove the class using CIM methods.

This can be reproduced by running Test-xDscSchema <path to schema.mof> in PowerShell Core.

Currently the only possible resolution to this issue is to call Remove-WmiObject from PowerShell Core using WMF, i.e. powershell.exe -Command Remove-WmiObject...


Possible to interactively expand Notebook figures + load default plugins?

Apologies if this has been covered before, but is it possible to resize a figure in Notebook (without doing a browser zoom)? Would be nice if there was a resize handle in one of the corners.
Also can I have certain plugins be enabled by default? I'm particularly interested in having a data cursor.

Hi – you can resize the figure using plt.figure(figsize=(width_inches, height_inches))
mpld3 cannot do a dynamic resize, because the figure layout logic is computed by matplotlib.


[WIP] feat(0.9.0-0.1.0 upgrade): adds a support to claim all block devices used by cStor pools

Signed-off-by: mittachaitu<EMAIL_ADDRESS>What this PR does / why we need it:
This PR adds a support to claim all block devices used by cStor pools by creating block device claim for each block device.

remove dependency on kubectl get bd

@vishnuitta removed PTAL


PostDeployment Error or Warning? "Enable Protection Operation failed"

Here is my output. In portal under backups, I show the vm's listed with Passed precheck status. Did the error below skip over anything important?
PS C:_GIT\RMW\azure\blueprint\fedramp-iaas-webapp> .\postdeploy\PostDeployment.ps1
AzureRM Module exists... Importing into session.
Azure Security and Compliance Blueprint - FedRAMP Web Applications Automation - Post-Deployment Script
This script can be used for running post-deployment tasks for a multi-tier web application architecture with pre-configured security controls to help customers achieve compliance with FedRAMP requirements. See https://aka.ms/fedrampblueprint for more information.
GENERATE VM BACKUP ITEMS
Generating Backup Items for the deployment.
The name of the Key Vault used in the deployment: VernWebApp-KV
Provide the name of the Resource Group deployed: VernWebApp
WorkloadName     Operation            Status               StartTime                 EndTime                   JobID

az-pdc-vm        ConfigureBackup      Completed            5/22/2018 2:36:31 PM      5/22/2018 2:37:03 PM      9f835...
az-bdc-vm        ConfigureBackup      Completed            5/22/2018 2:37:06 PM      5/22/2018 2:37:37 PM      2eb77...
az-web-vm0       ConfigureBackup      Completed            5/22/2018 2:37:41 PM      5/22/2018 2:38:12 PM      91418...
az-web-vm1       ConfigureBackup      Completed            5/22/2018 2:38:15 PM      5/22/2018 2:38:47 PM      3e542...
az-sql-vm0       ConfigureBackup      Completed            5/22/2018 2:38:50 PM      5/22/2018 2:39:21 PM      433d7...
Enable-AzureRmRecoveryServicesBackupProtection : Enable Protection Operation failed. Error Code:
UserErrorGuestAgentStatusUnavailable. Error Message: VM agent is unable to communicate with the Azure Backup Service.
At C:_GIT\RMW\azure\blueprint\fedramp-iaas-webapp\postdeploy\PostDeployment.ps1:78 char:9

    Enable-AzureRmRecoveryServicesBackupProtection -Policy $polic ...

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

CategoryInfo          : NotSpecified: (:) [Enable-AzureRmR...ackupProtection], Exception
FullyQualifiedErrorId : Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.EnableAzureRmRecoveryServicesBa
ckupProtection

az-mgt-vm        ConfigureBackup      Completed            5/22/2018 2:41:45 PM      5/22/2018 2:42:16 PM      a05dc...
Generation of VM Backup Items completed successfully.
CREATE INITIAL VM BACKUP
Starting Initial Backup for all VMs in the deployment
Initial Backup is starting for all VMs.
POST-DEPLOYMENT COMPLETE
Post-Deployment operations for this blueprint template are complete. Please proceed with validating the deployed resources through the Azure Portal. Additional information regarding this blueprint is accessible at https://aka.ms/fedrampblueprint.
PS C:_GIT\RMW\azure\blueprint\fedramp-iaas-webapp>

Looks like AZ-SQL-VM1 was unreachable for some reason when the script was run. You could try to re-run this script to initiate backup on that VM w/ the following edit:
$VMList = @("AZ-SQL-VM1")
We'll investigate why the error wasn't caught.

MY VM was offline, reran and works now.. thanks..