Getting an error demovfuscating

demov: node.cpp:76: void node::merge(): Assertion n != nodes.end()' failed.`
possibly movfuscated
Relocations:
sigaction at 804e2a4
strlen at 804e2a0
printf at 804e298
exit at 804e29c
Segments:
8048000 - 804d1e4 : R X
804e1e4 - 85f757c : RW
85f757c - 87f7590 : RW
The entry point is 804824c
parsing entry
dispatcher at 0x8048240
master_loop is at 0x80482c7
sel_on is at 83f73e0
on is at 83f73e8
alu_x@81f7280
alu_y@0
demov_equal@0x8051890
demov_SYM_ALU_INV16@0x81622e0
demov_SYM_ALU_FALSE@0x804e5a0
demov_SYM_ALU_B7@0x8050420
demov_SYM_ALU_TRUE@0x804e390
demov_SYM_ALU_MUL_SUMS@0x81f6e00
demov_xor@0x81a2d10
reached end
SYM_SEL_DATA@0x83f7400 : 0x11c
SYM_ON@0x83f73e8 : 0x9d
SYM_DATA@0x83f7404 : 0x11c
discard at 85f7590
demov_bool_and: 51
demov_bool_xor: 2
demov_SYM_ALU_TRUE: 24
demov_SYM_ALU_FALSE: 13
demov_SYM_ALU_B7: 24
demov_equal: 60
demov_add: 72
demov_SYM_ALU_INV16: 12
demov_xor: 4
demov_SYM_ALU_MUL_SUMS: 2
demov_sel_on: 30
analysing binary
Hit limit looking for 0x83f73e0
Hit limit looking for 0x83f73ec
[83f73ec]
Hit limit looking for 0x80621c0
Hit limit looking for 0x80621c0
Hit limit looking for 0x80621c0
Hit limit looking for 0x80621c0
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f73f0
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f73e0
Hit limit looking for 0x8051890
Hit limit looking for 0x8051890
Hit limit looking for 0x8051890
Hit limit looking for 0x8051890
Hit limit looking for 0x804e330
Hit limit looking for 0x804e330
Hit limit looking for 0x804e330
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f73e0
Hit limit looking for 0x83f73f8
Hit limit looking for 0x83f73f8
Hit limit looking for 0x83f73f8
Hit limit looking for 0x83f73f8
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x85f7458
Hit limit looking for 0x8051890
Hit limit looking for 0x8051890
Hit limit looking for 0x8051890
Hit limit looking for 0x8051890
Hit limit looking for 0x804e330
Hit limit looking for 0x804e330
Hit limit looking for 0x804e330
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f73e0
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x80621c0
Hit limit looking for 0x80621c0
Hit limit looking for 0x80621c0
Hit limit looking for 0x80621c0
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x85f7458
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x80621c0
Hit limit looking for 0x80621c0
Hit limit looking for 0x80621c0
Hit limit looking for 0x80621c0
Hit limit looking for 0x8050420
Hit limit looking for 0x8050420
Hit limit looking for 0x8050420
Hit limit looking for 0x8050420
Hit limit looking for 0x804e330
Hit limit looking for 0x83f73f0
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f73e0
Hit limit looking for 0x83f73f0
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f73e0
Hit limit looking for 0x8051890
Hit limit looking for 0x8051890
Hit limit looking for 0x8051890
Hit limit looking for 0x8051890
Hit limit looking for 0x804e330
Hit limit looking for 0x804e330
Hit limit looking for 0x804e330
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f73e0
Hit limit looking for 0x83f7400
Hit limit looking for 0x8051890
Hit limit looking for 0x8051890
Hit limit looking for 0x8051890
Hit limit looking for 0x8051890
Hit limit looking for 0x804e330
Hit limit looking for 0x804e330
Hit limit looking for 0x804e330
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f73e0
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x80621c0
Hit limit looking for 0x80621c0
Hit limit looking for 0x80621c0
Hit limit looking for 0x80621c0
Hit limit looking for 0x83f7400
Hit limit looking for 0x81f6e00
Hit limit looking for 0x81a2d10
Hit limit looking for 0x81a2d10
Hit limit looking for 0x81a2d10
Hit limit looking for 0x81a2d10
Hit limit looking for 0x83f7400
Hit limit looking for 0x8051890
Hit limit looking for 0x8051890
Hit limit looking for 0x8051890
Hit limit looking for 0x8051890
Hit limit looking for 0x804e330
Hit limit looking for 0x804e330
Hit limit looking for 0x804e330
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f73e0
Hit limit looking for 0x83f7400
Hit limit looking for 0x80621c0
Hit limit looking for 0x80621c0
Hit limit looking for 0x80621c0
Hit limit looking for 0x80621c0
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x80621c0
Hit limit looking for 0x80621c0
Hit limit looking for 0x80621c0
Hit limit looking for 0x80621c0
Hit limit looking for 0x8050420
Hit limit looking for 0x8050420
Hit limit looking for 0x8050420
Hit limit looking for 0x8050420
Hit limit looking for 0x804e350
Hit limit looking for 0x804e330
Hit limit looking for 0x83f73f0
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f73e0
Hit limit looking for 0x83f7400
Hit limit looking for 0x8051890
Hit limit looking for 0x8051890
Hit limit looking for 0x8051890
Hit limit looking for 0x8051890
Hit limit looking for 0x804e330
Hit limit looking for 0x804e330
Hit limit looking for 0x804e330
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f73e0
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x80621c0
Hit limit looking for 0x80621c0
Hit limit looking for 0x80621c0
Hit limit looking for 0x80621c0
Hit limit looking for 0x83f7400
Hit limit looking for 0x81f6e00
Hit limit looking for 0x80621c0
Hit limit looking for 0x80621c0
Hit limit looking for 0x80621c0
Hit limit looking for 0x80621c0
Hit limit looking for 0x83f7400
Hit limit looking for 0x8051890
Hit limit looking for 0x8051890
Hit limit looking for 0x8051890
Hit limit looking for 0x8051890
Hit limit looking for 0x804e330
Hit limit looking for 0x804e330
Hit limit looking for 0x804e330
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f73e0
Hit limit looking for 0x83f7400
Hit limit looking for 0x80621c0
Hit limit looking for 0x80621c0
Hit limit looking for 0x80621c0
Hit limit looking for 0x80621c0
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x80621c0
Hit limit looking for 0x80621c0
Hit limit looking for 0x80621c0
Hit limit looking for 0x80621c0
Hit limit looking for 0x8050420
Hit limit looking for 0x8050420
Hit limit looking for 0x8050420
Hit limit looking for 0x8050420
Hit limit looking for 0x804e350
Hit limit looking for 0x804e330
Hit limit looking for 0x83f73f0
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f73e0
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x80621c0
Hit limit looking for 0x80621c0
Hit limit looking for 0x80621c0
Hit limit looking for 0x80621c0
Hit limit looking for 0x80621c0
Hit limit looking for 0x80621c0
Hit limit looking for 0x80621c0
Hit limit looking for 0x80621c0
Hit limit looking for 0x8050420
Hit limit looking for 0x8050420
Hit limit looking for 0x8050420
Hit limit looking for 0x8050420
Hit limit looking for 0x804e5a0
Hit limit looking for 0x804e330
Hit limit looking for 0x83f73f0
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f73e0
Hit limit looking for 0x83f73f0
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f73e0
Hit limit looking for 0x8051890
Hit limit looking for 0x8051890
Hit limit looking for 0x8051890
Hit limit looking for 0x8051890
Hit limit looking for 0x804e330
Hit limit looking for 0x804e330
Hit limit looking for 0x804e330
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f73e0
Hit limit looking for 0x8051890
Hit limit looking for 0x8051890
Hit limit looking for 0x8051890
Hit limit looking for 0x8051890
Hit limit looking for 0x804e330
Hit limit looking for 0x804e330
Hit limit looking for 0x804e330
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f73e0
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f73f0
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f73e0
Hit limit looking for 0x8051890
Hit limit looking for 0x8051890
Hit limit looking for 0x8051890
Hit limit looking for 0x8051890
Hit limit looking for 0x804e330
Hit limit looking for 0x804e330
Hit limit looking for 0x804e330
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f73e0
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x80621c0
Hit limit looking for 0x80621c0
Hit limit looking for 0x80621c0
Hit limit looking for 0x80621c0
Hit limit looking for 0x8050420
Hit limit looking for 0x8050420
Hit limit looking for 0x8050420
Hit limit looking for 0x8050420
Hit limit looking for 0x804e330
Hit limit looking for 0x83f73f0
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f73e0
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x80621c0
Hit limit looking for 0x80621c0
Hit limit looking for 0x80621c0
Hit limit looking for 0x80621c0
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x85f7458
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f73f0
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f73e0
Hit limit looking for 0x8051890
Hit limit looking for 0x8051890
Hit limit looking for 0x8051890
Hit limit looking for 0x8051890
Hit limit looking for 0x804e330
Hit limit looking for 0x804e330
Hit limit looking for 0x804e330
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f73e0
Hit limit looking for 0x83f7400
Hit limit looking for 0x80621c0
Hit limit looking for 0x80621c0
Hit limit looking for 0x80621c0
Hit limit looking for 0x80621c0
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f73f0
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f73e0
Hit limit looking for 0x8051890
Hit limit looking for 0x8051890
Hit limit looking for 0x8051890
Hit limit looking for 0x8051890
Hit limit looking for 0x804e330
Hit limit looking for 0x804e330
Hit limit looking for 0x804e330
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f73e0
Hit limit looking for 0x83f7400
Hit limit looking for 0x80621c0
Hit limit looking for 0x80621c0
Hit limit looking for 0x80621c0
Hit limit looking for 0x80621c0
Hit limit looking for 0x8050420
Hit limit looking for 0x8050420
Hit limit looking for 0x8050420
Hit limit looking for 0x8050420
Hit limit looking for 0x804e330
Hit limit looking for 0x83f73f0
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f73e0
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x80621c0
Hit limit looking for 0x80621c0
Hit limit looking for 0x80621c0
Hit limit looking for 0x80621c0
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x85f7458
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f73f0
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f73e0
Hit limit looking for 0x8051890
Hit limit looking for 0x8051890
Hit limit looking for 0x8051890
Hit limit looking for 0x8051890
Hit limit looking for 0x804e330
Hit limit looking for 0x804e330
Hit limit looking for 0x804e330
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f73e0
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x80621c0
Hit limit looking for 0x80621c0
Hit limit looking for 0x80621c0
Hit limit looking for 0x80621c0
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x85f7458
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x8051890
Hit limit looking for 0x8051890
Hit limit looking for 0x8051890
Hit limit looking for 0x8051890
Hit limit looking for 0x804e330
Hit limit looking for 0x804e330
Hit limit looking for 0x804e330
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f73e0
Hit limit looking for 0x8051890
Hit limit looking for 0x8051890
Hit limit looking for 0x8051890
Hit limit looking for 0x8051890
Hit limit looking for 0x804e330
Hit limit looking for 0x804e330
Hit limit looking for 0x804e330
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f73e0
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f73f0
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f7400
Hit limit looking for 0x83f73e0
reached end
target register: 83f73f8
second pass:
third pass:
Hit limit looking for err
Hit limit looking for err
Basic blocks:
demov: node.cpp:76: void node::merge(): Assertion `n != nodes.end()' failed.
Aborted

Interesting. Would it be possible to provide the binary causing this problem?

I'm doing a CTF and the binary they provided is obfuscated with movfuscator. I got the same error demovfuscating it as above so I tried to create my own binary. Just a simple C program that returns 0. And it gave me the same error.
Test File
Obfuscated Test File's Binary
CTF Obfuscated Binary

Also just for reference I am running this on Kali Linux. I tried using the precompiled binary and compiling from source and got the same errors.

Alright so I have reinstalled on Ubuntu instead of Kali. The compiled version works however when examining the deobfuscated output its the same as the obfuscated one. However using the graph version produces some control flow. I am unsure what is going on...
possibly movfuscated
Relocations:
sigaction at 804e2a4
strlen at 804e2a0
printf at 804e298
exit at 804e29c
Segments:
8048000 - 804d1e4 : R X
804e1e4 - 85f757c : RW
85f757c - 87f7590 : RW
The entry point is 804824c
parsing entry
dispatcher at 0x8048240
master_loop is at 0x80482c7
sel_on is at 83f73e0
on is at 83f73e8
alu_x@81f7280
alu_y@0
equal@0x8051890
SYM_ALU_INV16@0x81622e0
SYM_ALU_FALSE@0x804e5a0
SYM_ALU_B7@0x8050420
SYM_ALU_TRUE@0x804e390
SYM_ALU_MUL_SUMS@0x81f6e00
xor@0x81a2d10
reached end
SYM_SEL_DATA@0x83f7400 : 0x11c
SYM_ON@0x83f73e8 : 0x9d
SYM_DATA@0x83f7404 : 0x11c
discard at 85f7590
bool_and: 51
bool_xor: 2
SYM_ALU_TRUE: 24
SYM_ALU_FALSE: 13
SYM_ALU_B7: 24
equal: 60
add: 72
SYM_ALU_INV16: 12
xor: 4
SYM_ALU_MUL_SUMS: 2
sel_on: 30
analysing binary
Hit limit looking for 0x83f73ec
[83f73ec]
Hit limit looking for 0x83f73f8
Hit limit looking for 0x83f73f8
Hit limit looking for 0x83f73f8
Hit limit looking for 0x83f73f8
reached end
target register: 83f73f8
second pass:
third pass:
Hit limit looking for err
Hit limit looking for err
Basic blocks:
8804b24d: 804b427 - 804b8c5
0: 804b8c5 - 804bc29
8804bc2f: 804be09 - 804c4da
8804ccee: 804cec8 - 804d1d4
0: 804c4da - 804c762
8804c768: 804c942 - 804cce4
8804cb0a: 804cce4 - 804cec8
88048774: 804894e - 804905f
0: 804905f - 8049129
8804912f: 8049309 - 8049512
8804ad61: 804af3b - 804b247
88049338: 8049512 - 8049d0f
88049d44: 8049f1e - 804a6fd
0: 8049d0f - 8049f1e
0: 804a6fd - 804aaad
0: 804aaad - 804ab77
8804ab7d: 804ad57 - 804af3b
resub block: << 0x804b427, length: 0x49e
resub block: << 0x804b8c5, length: 0x364
resub block: << 0x804be09, length: 0x6d1
resub block: << 0x804cec8, length: 0x30c
resub block: << 0x804c4da, length: 0x288
resub block: << 0x804c942, length: 0x3a2
resub block: << 0x804cce4, length: 0x1e4
resub block: << 0x804894e, length: 0x711
resub block: << 0x804905f, length: 0xca
resub block: << 0x8049309, length: 0x209
resub block: << 0x804af3b, length: 0x30c
resub block: << 0x8049512, length: 0x7fd
resub block: << 0x8049f1e, length: 0x7df
resub block: << 0x8049d0f, length: 0x20f
resub block: << 0x804a6fd, length: 0x3b0
resub block: << 0x804aaad, length: 0xca
resub block: << 0x804ad57, length: 0x1e4
getting rid of tables
Symbols:
sel_target@83f73f0
end@804c4ef
target_reg@83f73f8
DISCARD@85f7590
SYM_DATA@83f7404
SYM_SEL_DATA@83f7400
STACK_ADD4(pop)@ffffffffffdfffa0
add@80621c0
STACK_SUB4(push)@ffffffffffdfff98
on@83f73e8
xor@81a2d10
sel_on@83f73e0
equal@8051890
DISPATCH@8048240
esp@83f73c0
bool_and@804e330
SYM_ALU_B7@8050420
SYM_ALU_INV16@81622e0
SYM_ALU_TRUE@804e390
SYM_ALU_MUL_SUMS@81f6e00
SYM_ALU_FALSE@804e5a0
bool_xor@804e350
FAULT@85f7458
end@804d1e0
R0@804e2e0
R1@804e2e4
R2@804e2e8
R3@804e2ec
R4@804e2f0
R5@804e2f4
D0@804e300
D1@804e308

@nadroj-isk dude, we're in the same CTF ;)

@id01 were you the one person who solved it... uh if so you wanna message me on discord?


[PowerToys Run] run non-elevated when runner is elevated

Summary of the Pull Request
When PowerToys run elevated, run PowerToys Run non-elevated.

PR Checklist

[x] Applies to https://github.com/microsoft/PowerToys/issues/3215

Detailed Description of the Pull Request / Additional comments
This is a quick fix, far from "production quality", it will be improved and it will be possible to use it for any module, right now it only supports PowerToys Run.

Validation Steps Performed
Manual tests.

lets get this in!


Improve TiddlyWiki support

This fixes #236.
There seems to still be a hangup in tiddlywiki that requires a user to click twice on the <textarea> immediately after load, but this doesn't seem to be persisent, so I'm not all too worried about it.
I'm not very familiar with the browser extension APIs, so I'm not sure if running code inside iframes is supposed to be done differently, but this worked in both Firefox 111.0.1 and Chromium 112.0.5615.49 (with vim-GhostText).

Hm I can fix up those lint errors soon, but you're right about how hacky this is. Looks like there is a nicer approach mentioned on StackOverflow for web extensions API that I think I'll try to implement so as not to break CORS behavior, if this approach sounds reasonable to you.

That’s too complicated for now, let’s stick to this approach. The fix for #237, coming after Firefox supports it, could improve iframe support further.

Hi,
The lint changes should be fixed, and I also put in a thing to make the TiddlyWiki functionality not broken around the "Right click to run GhostText on this field" button (these are the changes in the object; hopefully, they're not too big/invasive).
Since TiddlyWiki is an offline platform that can show up on a lot of different websites (sort of like a JS framework like Vue or Angular), I use a meta tags to detect tiddlywiki instead of a domain. Hopefully, this makes sense.
Thanks for taking a look at this PR

Hey! I fixed the last bug I was talking about and it works pretty well in TiddlyWiki and the normal test-case now.
However, there are a few new changes that may make the app slightly less efficient in general. I haven't noticed any performance issues in my few use-cases, but if you want me to wrap more of my changes in conditional code, I can do that.
Thanks,
Holden

I have good news: https://github.com/fregante/GhostText/issues/236#issuecomment-1546720740
I have more good news: this is easily fixable. The user just needs to grant full permissions to the current domain. I'll send a PR.
Question: do you use this tool exclusively on tiddlywiki.com or can it appear on any website?

That's great news! But yes, TiddlyWiki can show up on any website. A manual (persistent) toggle would be plenty for my use case, but I also have a function in this PR that detects TiddlyWiki5 instances if you want that.

https://github.com/fregante/GhostText/pull/285 is the right solution for now. A solution for #273 would probably add a “Field not found? Go deeper” prompt that:

requests permission
looks for shadow DOM on the page


Bump Dependencies #3159729563

Bumps dependencies for product-is. Link : https://github.com/wso2/product-is/actions/runs/3159729563

 Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.jenkins-is-staging seems not to be a GitHub user. You need a GitHub account to be able to sign the CLA. If you have already a GitHub account, please add the email address used for this commit to your account.You have signed the CLA already but the status is still pending? Let us recheck it.


Exception building with a custom board

I am working on a project that compiles and runs fine on a Zephyr-defined board.
Now I want to flash it on my custom board and I have issues creating a build configuration for it. I've been following this tutorial https://www.youtube.com/watch?v=TXcTzyswBMQ. But get this error when selecting a board folder different from the zephyr one (When adding a build configuration):
Traceback (most recent call last):
  File "/home/jbozzo/.vscode/extensions/mylonics.zephyr-ide-1.5.2/scripts/get_board_list.py", line 51, in <module>
    get_boards(args)
  File "/home/jbozzo/.vscode/extensions/mylonics.zephyr-ide-1.5.2/scripts/get_board_list.py", line 36, in get_boards
    log.inf(args.format.format(name=board.name, arch='', dir=board.dir, hwm=board.hwm,
                                    ^^^^^^^^^^
AttributeError: 'str' object has no attribute 'name'

Steps to reproduce

Set up the python environment:

With pyenv install Python 3.12.7.
With pyenv create a new virtual enviroment.
Activate environment.
Run pip install west.
Open vscode in the environment.

Add an empty folder to the VSCode Workspace (folder name: example)
In Zephyr Ide Extension, initialize the workspace:

Extension Setup  ->
Initialize Workspace

Full Zephyr
Default version
No aditional arguments
Select every toolchain

Create a new project based on LoRaWAN class A

Zephyr IDE: Create project from template
Select class_a (subsys/lorawan/class_a)
Use class_a as folder name.

Create a "boards/atmel/sam0" folder nested on the "example" folder
Derive a new board from samr34 xplained pro.

Copy external/zephyr/boards/atmel/sam0/samr34_xpro into boards/atmel/sam0/samr34_xpro
Rename boards/atmel/sam0/samr34_xpro to boards/atmel/sam0/samr34_xpro2
Rename boards/atmel/sam0/samr34_xpro/Kconfig.samr34_xpro to boards/atmel/sam0/samr34_xpro2/Kconfig.samr34_xpro2
Rename boards/atmel/sam0/samr34_xpro/samr34_xpro_defconfig to boards/atmel/sam0/samr34_xpro2/samr34_xpro2_defconfig
Rename boards/atmel/sam0/samr34_xpro/samr34_xpro.yaml to boards/atmel/sam0/samr34_xpro2/samr34_xpro2.yaml
Rename boards/atmel/sam0/samr34_xpro/samr34_xpro.dts to boards/atmel/sam0/samr34_xpro2/samr34_xpro2.dts
Rename boards/atmel/sam0/samr34_xpro/samr34_xpro-pinctrl.dtsi to boards/atmel/sam0/samr34_xpro2/samr34_xpro2-pinctrl.dtsi
Change BOARD_SAMR34_XPRO to BOARD_SAMR34_XPRO2 in Kconfig.samr34_xpro2
Change board.name: samr34_xpro to board.name: samr34_xpro2 in Kconfig.samr34_xpro2
Change #include "samr34_xpro-pinctrl.dtsi" to #include "samr34_xpro2-pinctrl.dtsi" in samr34_xpro2.dts
Change identifier: samr34_xpro to identifier: samr34_xpro2 in samr34_xpro2.yaml

(Good case) Create a new Build with Zephyr board

Projects ->
class_a

Add Build
Pick board directory: .../external/zephyr/boards
Pick board: samr34_xpro
Name for build: build/samr34_xpro
Select Build Optimization: Debug
Additional arguments:
Modify CMake arguments:

Compiles, flashes and runs fine

(Bad case) Create a new Build with custom board

Projects ->
class_a

Add Build
Pick board directory: .../example/boards
Error notification
Open Output -> Zephyr IDE
Look at the error

Attachment
I've included my example/boards directory in case there is something obvious I am missing.
boards.zip
Environment
OS: Ubuntu 24.04.1 LTS
Zephyr extension: 1.5.2
Vscode: 1.93.1

Probably a duplicate of #90

Thanks for the detailed bug report. I will try to replicate the issue and issue a fix soon.

I have released a fix in v1.5.3, Can you let me know if the issue is resolved once that goes live.

I upgrade to v1.5.3. now boards from 2 folders show after choose boards folder in workspace folder. But I can choose "my board" and add.

Ok. That is the new behaviour. I was maintaining some custom scripts to only list boards from a single board directory. The latest version of zephyr now has that feature, but it seems buggy from my testing. Sometime in the future I may revisit it to get only a list from the current directory displayed.

I confirm this was solved for me too.


Azure Service Mesh - BYO CA and Egress Gateway

ARM API Information (Control Plane)
Changelog
Add a changelog entry for this PR by answering the following questions:

What's the purpose of the update?

[ ] new service onboarding
[ ] new API version
[x] update existing version for new feature
[ ] update existing version to fix swagger quality issue in s360
[ ] Other, please clarify

When are you targeting to deploy the new service/feature to public regions? Please provide the date or, if the date is not yet available, the month.
When do you expect to publish the swagger? Please provide date or, the the date is not yet available, the month.
By default, Azure SDKs of all languages (.NET/Python/Java/JavaScript for both management-plane SDK and data-plane SDK, Go for management-plane SDK only ) MUST be refreshed with/after swagger of new version is published. If you prefer NOT to refresh any specific SDK language upon swagger updates in the current PR, please leave details with justification here.

Contribution checklist (MS Employees Only):

[x] I commit to follow the Breaking Change Policy of "no breaking changes"
[x] I have reviewed the documentation for the workflow.
[x] Validation tools were run on swagger spec(s) and errors have all been fixed in this PR. How to fix?

If any further question about AME onboarding or validation tools, please view the FAQ.
ARM API Review Checklist

Applicability: :warning:
If your changes encompass only the following scenarios, you should SKIP this section, as these scenarios do not require ARM review.

Change to data plane APIs
Adding new properties
All removals

Otherwise your PR may be subject to ARM review requirements. Complete the following:

[ ] Check this box if any of the following apply to the PR so that the label "ARMReview" and "WaitForARMFeedback" will be added by bot to kick off ARM API Review.  Missing to check this box in the following scenario may result in delays to the ARM manifest review and deployment.

Adding a new service
Adding new API(s)
Adding a new API version
-[ ] To review changes efficiently, ensure you copy the existing version into the new directory structure for first commit and then push new changes, including version updates, in separate commits. You can use OpenAPIHub to initialize the PR for adding a new version. For more details refer to the wiki. Note that this doesn't apply if you are trying to merge a PR that was previously in the private repository.

[ ] Ensure you've reviewed following guidelines including ARM resource provider contract and REST guidelines. Estimated time (4 hours). This is required before you can request review from ARM API Review board.

[ ] If you are blocked on ARM review and want to get the PR merged with urgency, please get the ARM oncall for reviews (RP Manifest Approvers team under Azure Resource Manager service) from IcM and reach out to them.

Breaking Change Review Checklist
If you have any breaking changes as defined in the Breaking Change Policy, request approval from the Breaking Change Review Board.
Action: to initiate an evaluation of the breaking change, create a new intake using the template for breaking changes. Additional details on the process and office hours are on the Breaking Change Wiki.
NOTE: To update API(s) in public preview for over 1 year (refer to Retirement of Previews)
Please follow the link to find more details on PR review process.

Both of these features still need AKS PM API reviewer approvals too. Please hold off merging until a PM has approved both proposals.

Both of these features still need AKS PM API reviewer approvals too. Please hold off merging until a PM has approved both proposals.

We did receive needed approvals on both our reviews.
https://msazure.visualstudio.com/CloudNativeCompute/_wiki/wikis/CloudNativeCompute.wiki/504725/Azure-Service-Mesh-addon-Bring-Your-Own-CA
https://msazure.visualstudio.com/CloudNativeCompute/_wiki/wikis/CloudNativeCompute.wiki/506896/Azure-Service-Mesh-Egress-Gateway-Support


Add specs to test the attribute override for tar/7-zip

We should be testing the attribute override functionality that allows you to specify the binary location of tar or 7-zip.

I’m adding the Type: Jump In GitHub label to this issue. This is a great issue for someone to get their feet wet with and we’d love a PR to resolves the issue.


Two way compiled binding in "Run" element causing InvalidCastException when "StringFormat" is set

Describe the bug
I have a TextBlock containing several Runs. The first Run Text is binding a double and the StringFormat is set. I get the following exception unless I do one of:

Set Mode=OneWay
Replace the Run with TextBlock
Remove the StringFormat

Exception:
System.InvalidCastException: Unable to cast object of type 'System.String' to type 'System.Double'.
   at CompiledAvaloniaXaml.XamlIlHelpers.toolkit.avalonia.ViewModels.MyViewModel,toolkit.avalonia.MyDouble!Setter(Object, Object)
   at Avalonia.Data.Core.ClrPropertyInfo.Set(Object target, Object value)
   at Avalonia.Markup.Xaml.MarkupExtensions.CompiledBindings.InpcPropertyAccessor.SetValue(Object value, BindingPriority priority)
   at Avalonia.Data.Core.ExpressionNodes.PropertyAccessorNode.WriteValueToSource(Object value, IReadOnlyList`1 nodes)
   at Avalonia.Data.Core.BindingExpression.WriteValueToSource(Object value)

To Reproduce
I'm not sure how re-producible this will be? My colleague does not have this issue in the same code base. We're both using the Rider IDE on Ubuntu 22.04. Compiled bindings are turned on by default.
This throws the exception:
...
<TextBlock Grid.Row="1" Grid.Column="1" Background="{DynamicResource OverlayBackground}">
  <Run Text="{Binding MyDouble, StringFormat='MyDouble: {0:N1} ', TargetNullValue='MyDouble: ***' , FallbackValue='error' }"/>
  <Run Text="{Binding Units, TargetNullValue=' units', FallbackValue='error' }" />
</TextBlock>
...

This does not:
...
<TextBlock Grid.Row="1" Grid.Column="1" Background="{DynamicResource OverlayBackground}">
  <Run Text="{Binding MyDouble, Mode=OneWay, StringFormat='MyDouble: {0:N1} ', TargetNullValue='MyDouble: ***' , FallbackValue='error' }"/>
  <Run Text="{Binding Units, TargetNullValue=' units', FallbackValue='error' }" />
</TextBlock>
...

This does not:
...
<TextBlock Grid.Row="1" Grid.Column="1" Background="{DynamicResource OverlayBackground}">
  <TextBlock Text="{Binding MyDouble, StringFormat='MyDouble: {0:N1} ', TargetNullValue='MyDouble: ***' , FallbackValue='error' }"/>
  <Run Text="{Binding Units, TargetNullValue=' units', FallbackValue='error' }" />
</TextBlock>
...

This does not:
...
<TextBlock Grid.Row="1" Grid.Column="1" Background="{DynamicResource OverlayBackground}">
  <Run Text="{Binding MyDouble, TargetNullValue='MyDouble: ***' , FallbackValue='error' }"/>
  <Run Text="{Binding Units, TargetNullValue=' units', FallbackValue='error' }" />
</TextBlock>
...

Expected behavior
Odd that this seems to be specific to the Run tag with StringFormat set? Is the default mode not OneWay in that case? Why is it different than using another TextBlock?
Avalonia version
11.1.3 and 11.1.4
OS
Linux
Additional context
we're also using CommunityToolkit 8.3.2 if that matters.

That's by design if the BindingMode is TwoWay. However it shouldn't be TwoWay for a Run, as the user can't manipulate it either 🤔
Can you please attach a minimal sample to reproduce?

Sure what do you need? axaml and view model? project file? solution file?

Alright. I wasn't able to reproduce this. Made a small example and couldn't get it to throw. Also tried the original repo on a different computer and it all seems normal. I'll try again in the original repo and original computer tomorrow...but like I said my co-worker didn't have this issue either. Must be something specific to that machine?

I have no idea, but it's really strange. Will move this into Q&A, we can make it an issue in case you have a way to reproduce.


Update DatagramPacket.recipient() to return the actual destination IP

Motivation:
DatagramPacket.recipient() doesn't return the actual destination IP, but the IP the app is bound to.
Modification:

IP_RECVORIGDSTADDR option is enabled for UDP sockets, which allows retrieval of ancillary information containing the original recipient.
_recvFrom(...) function from transport-native-unix-common/src/main/c/netty_unix_socket.c is modified such that if IP_RECVORIGDSTADDR is set, recvmsg is used instead of recvfrom; enabling the retrieval of the original recipient.
DatagramSocketAddress also contains a 'local' address, representing the recipient.
EpollDatagramChannel is updated to return the retrieved recipient address instead of the address the channel is bound to.

Result:
Fixes #4950.

@normanmaurer Testing this might be a bit difficult. As long we are not enabling TPROXY with IP_TRANSPARENT (which, AFAIK, requires either root privileges or CAP_NET_ADMIN capability) and capturing traffic that is not targeted to our socket, EpollDatagramChannel.localAddress() will be equal to DatagramPacket.recipient() anyway. I don't suppose modifying the iptables settings of an automated test environment is viable :smile:
The best available test I can come up with is setting IP_RECVORIGDSTADDR and verifying that EpollDatagramChannel.localAddress() is actually equal to DatagramPacket.recipient(), but that doesn't tell us much.

@trustin @carl-mastrangelo mind taking a look as well ?

@kubuzetto thanks a lot!

glad to help :)


Ngons with holes in them no supported

Maybe delete ngon and replace with polygons?

ngon support in blender is present, but unable to distinguish between a ngon with holes and without hole.  Initial fix is to triangulate any face with more than 4 vertices.
https://devtalk.blender.org/t/detect-an-ngon-with-a-hole-through-it/11594


Could not serialize object of type tuple error using tldextract library

import dask.bag as db
from tldextract import extract

def main():
    db.read_text(INPUT_PATH).map(json.loads).map(lambda x: extract(x['uri']).domain)).compute()

if __name__ == '__main__':
    main()

Using the extract method from tldextract inside of a Dask processing pipeline yields an error.
TypeError: ('Could not serialize object of type tuple.', "(<function reify at 0x109b0c430>,
Environment:

Dask version: 2.30.0
Python version: 3.8.5
Operating System: macOS
Install method (conda, pip, source): Source

Does that tuple contain non-serializable elements? You can try calling cloudpickle.dumps on the result locally.

Thanks


reverse ap interacts with case branches in weird way

after adding rev ap i get the below after inserting "|" which seems expected though maybe not ideal:

but if i then press space i get this:

not sure where the selection or the second "|" is coming from.
I added rev ap since it's in one of the study tasks but maybe we don't need to use it. in any case, i think it's worth thinking about sort-specific expansion in these kinds of situations.

this was caused by a bug that I fixed some commits ago where the molder wasn't prioritizing choices that were exact label matches. can no longer repro the above since then so the referencing commit above changes grammar back to correct syntax (and corrects the precedence)


VAX-490: Materialize transaction only when the cache has been updated up to global op id.

Fix in vx wal stream - previously global operation id check was always passing
if snapshot was stale. That has been fixed in vx_server application.

When receiving transactions from remote DCs global value of operation was not
updated, leading to non-monotonically increased values. Thus relying on that
value in vx_server was leading to errors. This was fixed, so that for remote dcs
operation number is combination of the monotonically increasing value within
local dc (global) and monotonically increasing value for transactions originated
in remote dc (local).

@bieniusa Adding you to the PR, as I'm not sure wherever or not I have overlooked something or not. Mainly - global operation id rational.


Unexpected warning when @main is used twice within a single object

Compiler version
3.4.2, 3.3.3, 3.6.0-RC1-bin-20240810-ba2c731-NIGHTLY
Minimized code
package baz

object Bar {
  @main def main(): Unit = println("main Bar")
  @main def bar(): Unit = println("bar Bar")
}

Output
[warn] ./repro.scala:3:8
[warn] object Bar differs only in case from class bar in package baz. Such classes will overwrite one another on case-insensitive filesystems.
[warn] object Bar {
[warn]        ^

Expectation
One of two:

a better warning about using the @main annotation twice, if needed
no warning, as this particular code is valid and both main methods (baz.bar & baz.main) can be accessed.

scala-cli run repro.scala --main-class-ls
# [warn] ./repro.scala:3:8
# [warn] Generated class baz.Bar differs only in case from baz.bar.
# [warn]   Such classes will overwrite one another on case-insensitive filesystems.
# [warn] object Bar {
# [warn]        ^
# baz.bar baz.main

Context
Extracted out of:

https://github.com/scala/scala3/issues/21348

This issue was picked for the Scala Issue Spree of tomorrow, August 13th. @EugeneFlesselle @bracevac @jan-pieter and @nmcb will be working on it. If you have any insight into the issue or guidance on how to fix it, please leave it here.

@EugeneFlesselle  @jan-pieter @nmcb we will use the following Zoom link for today:
https://epfl.zoom.us/j/63745061412

The issue has nothing to do with multiple @main annotations. As the warning correctly points out, the naming will cause issues with non-casesensitive filenames. So there is nothing to be done here.


XML Operations

Added read from file for all operations
Added read from URL for the validate operation
Included tests
Signed-off-by: Sorin Moldovan<EMAIL_ADDRESS>

@tethryus ... please deal with the comments...


Text only mode?

Love this addon. Was one of the first ones I looked for when transitioning from Unity. Do you think there could be an option for text only mode?

You mean showing scene names instead of icones? Fitting the labels might be tricky, but it's doable.

@peterpants2 If you are still interested in having this feature, please provide some mock-up or screenshot on how do you imagine it should look.


Plans for cppgraphqlgen 5.0

This is where I'm going to start tracking features for 5.0, the next major version of cppgraphqlgen. This will be a breaking change for existing consumers, so it's an opportunity to cleanup deprecated methods and simplify some of the APIs. I'm also going to adopt a few more C++20 and C++23 features if they are well enough supported on Windows, Linux, and macOS now.
This is using #172, the tracking issue for cppgraphqlgen 4.0, as a template and starting point.

[x] Stand up a branch for 5.0 and start making PRs against that: https://github.com/microsoft/cppgraphqlgen/tree/next.
[x] C++20: Modules.
[x] C++20: Ranges: Should modernize a lot of begin/end iterator usage.
[x] C++20: std::fmt instead of std::ostringstream.
[x] C++20: Co-routines/Awaitable interoperability: See #271, this may require a breaking change to the cppgraphqlgen Awaitable types.
[x] Sharing input/scalar/enum types between clientgen and schemagen: See #264 for more discussion.
[x] Build some alternate implementations of JSONResponse.* with other JSON libraries besides RapidJSON.
[ ] Update docs

I'll update this list as new features crop up and as I/we make progress on it. If there's something you'd like to see that I haven't included already, feel free to comment on this issue.

I'm planning on making a release candidate as soon as the CI build finishes. I haven't done any of the documentation updates yet, but if anyone wants to take it for a spin, 5.0.0 should be completely implemented in the next branch now.

Sorry,I am not qualified to demand anything, but let me share my personal feelings， We compared cpp ，Golang and Rust, and their grphql framework makes it easier for a novice to start from scratch. Would you consider generating something similar，

There are some of those samples out there for cppgraphqlgen, in particular the "Star Wars" learning sample is implemented here:  next/main. There are also some unrelated samples linked in the root README.
To be honest, I prefer working in Rust with async-graphql myself. In a situation where I'm just trying to implement a GraphQL service with the performance of a compiled native language, I'd reach for that first. What cppgraphqlgen is aimed at is more of a bridge to existing C++ projects. Similarly, I'd probably pick something else beside cppgraphqlgen or async-graphql if I were trying to connect logic in another language/stack.
The Boost.Beast HTTP server example serves a couple of purposes:

It keeps everything in this project in C++, no need for additional language toolchains.
It demonstrates using C++ coroutines from different libraries, including some of the rough edges.

I don't recommend using the Boost.Beast sample as a starting point for a new web service, though, unless you need to use 100% C++ in your project for some reason. Given my own preference for Rust, even if I needed to expose a cppgraphqlgen service through HTTP, I'd probably use a Rust web server and thinner GraphQL bindings to the cppgraphqlgen service, like in gqlmapi-rs.

Thank you for your reply， Actually, our project is 100% cpp, so I would prefer cpp to have a graphql framework similar to rust‘s async-graphql， But in reality, there is no decent GraphQL framework in the CPP ， Therefore, we ultimately chose to use Golang to implement the GraphQL server， But personally, But I sincerely hope that CPP also has a decent（simple + easy-to-use） GraphQL framework

Yeah, unfortunately C++ just can't do it as simply. I haven't used Golang or its GraphQL frameworks, but I am familiar with a couple of Rust GraphQL frameworks, and a lot of their ease-of-use comes from procedural macros. There are a few proposals out there for static reflection in C++ or meta-classes that could do something similar, but AFAIK those are many years away from becoming part of the standard.
I think static code generators are the closest we can get to hiding the ugly details from C++.

Yeah, unfortunately C++ just can't do it as simply. I haven't used Golang or its GraphQL frameworks, but I am familiar with a couple of Rust GraphQL frameworks, and a lot of their ease-of-use comes from procedural macros. There are a few proposals out there for static reflection in C++ or meta-classes that could do something similar, but AFAIK those are many years away from becoming part of the standard.
I think static code generators are the closest we can get to hiding the ugly details from C++.

In fact, cpp can generate code like Golang and finally expose something similar to a callback function. We only need to implement business logic in the callback function

like this
graphql_server.setAcallback([]() {
co_return;
});
graphql_server.setBcallback([]() {
co_return;
});
graphql_server.handler("/a", "POST");
graphql_server.handler("/b", "POST");
graphql_server.start("<IP_ADDRESS>:80");

I have been using cppgraphqlgen in production code for about 2 years. Here are some of my thouths:

cppgraphqlgen lacks extensibility. Concept similar to Apollo federation.
I think it seems viable to allow joining two graphql::service::Request services as follows:
Main schema

schema {
	query: Query
	mutation: Mutation
	subscription: Subscription
}

type Query
type Mutation
type Subscription

Extension schema
extend type Query{
	feature1: SomeFeature!
}
type SomeFeature{
	testValue: Int!
}

I my opinion it should be possible to generate two separate compilation units/libraries that could be literally added to each other at runtime. As in:
std::shared_ptr<graphql::service::Request> mainSchema=...;
std::shared_ptr<graphql::service::Request> feature1=...;
if(feature1active)
   *mainSchema+=*feature1;

Addition should expand TypeMap _operations and merge introspection infofmation.

The library is unnecessarily slow because of few reasons:
A. Response is held in graphql::response::Value which is DOM representation that ususally converted to json using additional library. This could be shortcut with service taking visitor instead of returning response. In fact default visitor could be  graphql::response::Value builder to keep backward compatibility, but it could be replaced by JsonBuilder based on for example RapidJSON.
B. There should be more fine grained control for subscriptions (especially NotifySubscribe and NotifyUnsubscribe). I think subscription should return a handle to allow external fine grained control.
Ex. In subscription that uses list field it may happen that list changes between NotifySubscribe and NotifyUnsubscribe. In such case NotifyUnsubscribe is useless in "cleaning up" Subscription event sources. I end up using external accounting of tracking the sources and removing then when subscription completes. I want to be able to skip NotifyUnsubscribe step and just remove from subscription list. I my use case I also always generate initial response for subscription (like in live queries) and thus i can use initial response generation to subscribe to all event sources (instead of NotifySubscribe).

C. The library always wraps objects and scalars in awaitable future (and then awaits them) even when result is returned by value. This causes ridiculous overhead when creating scalar arrays. So far i haven't found a use case for AwaitableObject/AwaitableScalar

Yeah, unfortunately C++ just can't do it as simply. I haven't used Golang or its GraphQL frameworks, but I am familiar with a couple of Rust GraphQL frameworks, and a lot of their ease-of-use comes from procedural macros. There are a few proposals out there for static reflection in C++ or meta-classes that could do something similar, but AFAIK those are many years away from becoming part of the standard.
I think static code generators are the closest we can get to hiding the ugly details from C++.

I agree. And also since all fields originate from schema there will always be a need for external tool to parse schema and generate fields. Static reflection can maybe used to reduce amount of generated code. I don't think there will ever be a compile time AST parser that does not kill the compiler.

Actually, I think cppgraphqlgen should be able to be packaged into something like this， But it may be necessary to write a code generation tool to generate the graphql_server class
graphql_server.setAcallback([]() ->asio::await{
co_return;
});
graphql_server.setBcallback([]() ->asio::await {
co_return;
});
graphql_server.handler("/graphql", "POST");

graphql_server.start("<IP_ADDRESS>:80");

What you're describing sounds more like a web framework than what cppgraphqlgen does. I haven't tried it myself, but Oat++ sounds like it fits. If you (or anyone else) wanted to try combining them, I think both projects would benefit. I'd be happy to add another link to the README. 😃

I have been using cppgraphqlgen in production code for about 2 years. Here are some of my thouths:

Great feedback below, thanks!

cppgraphqlgen lacks extensibility. Concept similar to Apollo federation.
I think it seems viable to allow joining two graphql::service::Request services as follows:
...
I my opinion it should be possible to generate two separate compilation units/libraries that could be literally added to each other at runtime.
...
Addition should expand TypeMap _operations and merge introspection infofmation.

Interesting, yeah. I'm not sure if having schema extensions be handled differently makes sense, but given 2 separate schemas, it should be possible to merge them at the schema level. The only tricky bit, I think, would be figuring out how to dispatch the resolvers to the correct implementation in the merged service at runtime. It might be better to treat this as a new type of service that multiplexes other static services dynamically, including building a merged schema for validation and introspection.

The library is unnecessarily slow because of few reasons:

A. Response is held in graphql::response::Value which is DOM representation that ususally converted to json using additional library. This could be shortcut with service taking visitor instead of returning response. In fact default visitor could be graphql::response::Value builder to keep backward compatibility, but it could be replaced by JsonBuilder based on for example RapidJSON.

As far as converting to JSON goes, there is a visitor pattern already when starting from a response::Value. The response::Writer does this. I'm imagining an API that takes a response::Writer (and maybe a separate visitor to accumulate errors) and passing that to the resolvers to recursively build the results in an alternate form that bypasses response::Value entirely. For instance, clientgen could generate a Writer for the expected Response types. Both of those have some interesting implications for a dynamic multiplexer.

B. There should be more fine grained control for subscriptions (especially NotifySubscribe and NotifyUnsubscribe). I think subscription should return a handle to allow external fine grained control. Ex. In subscription that uses list field it may happen that list changes between NotifySubscribe and NotifyUnsubscribe. In such case NotifyUnsubscribe is useless in "cleaning up" Subscription event sources. I end up using external accounting of tracking the sources and removing then when subscription completes. I want to be able to skip NotifyUnsubscribe step and just remove from subscription list. I my use case I also always generate initial response for subscription (like in live queries) and thus i can use initial response generation to subscribe to all event sources (instead of NotifySubscribe).

I think you're saying that the set of resources/listeners you are tracking to support the subscription might change dynamically, e.g., as items are added or removed from a collection. The approach I'd use for that would probably be to use external bookkeeping for those resources as you do now, but store a handle/ID to those external resources in the RequestState for the subscription. The handler for NotifySubscribe would initialize the external resources, when items are added or removed you can update it externally, and then on NotifyUnsubscribe you'd release everything using the handle to your external resources.

C. The library always wraps objects and scalars in awaitable future (and then awaits them) even when result is returned by value. This causes ridiculous overhead when creating scalar arrays. So far i haven't found a use case for AwaitableObject/AwaitableScalar

One of the changes in the next branch, https://github.com/microsoft/cppgraphqlgen/commit/fa15fb7527dc4d9b2b8a425e2ebb9824a25d2e4d, had a surprisingly big impact on the benchmark programs, at least when running in a debug build (about 20% more throughput using clang-18 or MSVC, coming from reduced time spent resolving requests). It would make sense if the benchmark used any fields with futures that report timeout, which would spawn another thread, but I don't think it does. I think everything should just be deferred rather than async, which should prevent it from suspending and resuming on another thread. My guess is that making it constexpr short-circuited more of the coroutine machinery at compile time.
I haven't checked a release build yet, but I'd be curious to know if this improves your scalar array scenario.

EDIT: 4. My need for extensibility has led me to move entire generated part of code to external dll. It was actually possible because graphql dictates return value type and it possible to create models implicitly. My working concept. The only problem is with variant types since we do not know which variant is supposed to be created. I worked this around with the use of additional traits. As a result my entire solution is rid of generated headers.

I'll have to dig into this some more, but I gather you specialize the GraphQLBuilder for your object types and create a dynamic service::Object implementation from that? Or have you modified other parts of GraphQLService.cpp or SchemaGenerator.cpp to do something more with expected return types, so they're no longer std::shared_ptr<object::Foo>?

All except XXXSchema.h because I still need enums and input types. Generating Enums and Input types into separate header(separate from what is below this line ) would be useful (also maybe for this).

Re: splitting the enums and input types into one or more separate headers, I figured I'd keep it simple for now and just include the ...Schema.h file. There's not that much other content in that header, and to use shared types you're almost certainly going to include it anyway.

Actually, I think cppgraphqlgen should be able to be packaged into something like this， But it may be necessary to write a code generation tool to generate the graphql_server class
graphql_server.setAcallback([]() ->asio::await{
co_return;
});
graphql_server.setBcallback([]() ->asio::await {
co_return;
});
graphql_server.handler("/graphql", "POST");

graphql_server.start("<IP_ADDRESS>:80");

What you're describing sounds more like a web framework than what cppgraphqlgen does. I haven't tried it myself, but Oat++ sounds like it fits. If you (or anyone else) wanted to try combining them, I think both projects would benefit. I'd be happy to add another link to the README. 😃

We actually need an easy-to-use graphql service, Both rust and golang are easy to integrate with http servers，What I mean is that cppgraphqlgen doesn't easily fit into the cppweb framework，If this project could be like rust aync-graphql, I think it would be more popular

Interesting, yeah. I'm not sure if having schema extensions be handled differently makes sense, but given 2 separate schemas, it should be possible to merge them at the schema level. The only tricky bit, I think, would be figuring out how to dispatch the resolvers to the correct implementation in the merged service at runtime. It might be better to treat this as a new type of service that multiplexes other static services dynamically, including building a merged schema for validation and introspection.

I think it is called Schema stitching. It seems like easiest route for runtime extensibility. It does not cover type extension but it can be emulated by replacing different static services dynamically.

As far as converting to JSON goes, there is a visitor pattern already when starting from a response::Value. The response::Writer does this.

yes and I reckon the response::Value building part can also be redesigned into visitor pattern.

I'm imagining an API that takes a response::Writer (and maybe a separate visitor to accumulate errors) and passing that to the resolvers to recursively build the results in an alternate form that bypasses response::Value entirely.

Exactly!

For instance, clientgen could generate a Writer for the expected Response types.

And the writer would build response::Value or JSON or even act directly on visited values depending on user provider visitor.

Both of those have some interesting implications for a dynamic multiplexer.

I think it all boils down to proper SAX style  writer API

One of the changes in the next branch, fa15fb7, had a surprisingly big impact on the benchmark programs, at least when running in a debug build (about 20% more throughput using clang-18 or MSVC, coming from reduced time spent resolving requests). It would make sense if the benchmark used any fields with futures that report timeout, which would spawn another thread, but I don't think it does. I think everything should just be deferred rather than async, which should prevent it from suspending and resuming on another thread. My guess is that making it constexpr short-circuited more of the coroutine machinery at compile time.

I will definitely check this out. With my custom changes i did nou have time to port them to newer library verion

I'll have to dig into this some more, but I gather you specialize the GraphQLBuilder for your object types and create a dynamic service::Object implementation from that? Or have you modified other parts of GraphQLService.cpp or SchemaGenerator.cpp to do something more with expected return types, so they're no longer std::shared_ptr<object::Foo>?

No there is no specialiation of GraphQLBuilder and no other changes AFAIR. The AwaitableObject contrustor handles 3 cases:
1. U&& value is the generated object model (just like in current library implementation)
2. U&& value is not generated model but can be used to create one. The type of the object model is known as T.
3. Nr 2 but future
The GraphQLBuilder handles building of the model T given U. It handles:

Nullable as optional and shared_ptr
All sorts of vectors  recursively
Unions - This is the tricky one because given T we can only know Union type not specific model type to create. This is where I use additional trait that maps user class Foo to object::Foo. Ex:
Graphql:

union UnionTypeAB = TypeA | TypeB

Custom mapping trait
template <>
struct GraphQLUnion<graphql::service::Union<TypeA, TypeB>, graphql::GQL::object::UnionTypeAB> : std::true_type
{
  using model_map = type_map<pair<TypeA, graphql::GQL::object::TypeA>,
                             pair<TypeB, graphql::GQL::object::TypeB>>;
};

I purposely decided to use external GraphQLUnion trait class instead of creating mapping inside TypeA/TypeB classes to be able to compile all user code without including any of generated class headers. That gives me the ability to generate multiple different schemas, reuse the objects and even adjust union mappings where necessary.
The only header that I use in user code is XXXSchema.h cause I need definitions of the inputs and enums. And the ugly part is that I also need the implementations of Input types in XXXSchema.cpp to link my user code. And due to XXXSchema.cpp implements also Operations it pulls in all the generated headers.
If input types and enums were in separate header i could reuse the same types header for multiple different schemas as long as they all use subset of "full schema" types.
At this moment my build flow looks like this:

generate schema with all features enabled
use fully featured XXXSchema.h in project build without any actual graphqlservice.
generate schema for every subset of features
for each subset feature schema build dll with graphqlservice using object implementations of 2. Each subset can have individual union mapping defined inn their compilation unit. Type mapping is handled by graphql and concepts are verified during dll compilation.

This solution would work nicely if only there we something equivalent to schemagen --shared-types and schemagen --only-types
This would allow to separately develop different features in separate schema files (assuming no naming collisions). Each feature would generate its own "types.h" header and use it.
Then as a final step merge all the schmea-parts that are desired and generate specialized service including desired feature-set.
My dream is to be able to do it in runtime, but for now it is next best thing.
It does not fully give extensibility but it is somewhere in between.

Re: splitting the enums and input types into one or more separate headers, I figured I'd keep it simple for now and just include the ...Schema.h file. There's not that much other content in that header, and to use shared types you're almost certainly going to include it anyway.

I am including it. The problem is it pulls all other headers from cpp file.

I very much like the work you did here. I need to migrate to next branch ASAP and test the changes in my use case.
I like how you managed to implement visitor and maintain asynchronous resolving. Maybe both visitors should be available in library and let user decide whether to use asynchronous visitor or sequencing one.
I think for real live situation the benchmark should include sample transport layer implementation(like conversion toJson and fromJson). My gut feeling is that in most cases serializing visitor building JSON directly will be faster than asynchronous.
I also like the new stitching ability. Can the same approach can be used to stitch nested fields? It now looks like only query/mutation/subscription can be stitched.

One more caveat about schema stitching: since the include guards will collide on types with the same name, the cleanest/simplest way to handle that is probably to import the generated C++20 modules instead of including the headers when creating the partial Object from each sub-schema.
When mixing includes and headers, always do all the includes first and then switch to imports in the main (i.e., .cpp) file. Don't try to import modules from a header because that easily breaks the ordering. The only way that can be safe is if it's the last header you include and it follows the rules about doing all of its own includes before it does the first import, which couples that header to the order it's included, and it makes it incompatible with any other headers that do this.

One more caveat about schema stitching: since the include guards will collide on types with the same name, the cleanest/simplest way to handle that is probably to import the generated C++20 modules instead of including the headers when creating the partial Object from each sub-schema.

I think relying on modules and imposing strict including rules will limit portability and ease of use. Can't we just add namespace to include guard? And maybe also to filenames to prevent confusing filename duplicates? Then only requirement for stitching will be to use different namespaces for stitching parts.

With stitching I see 3 fields that need individual care:

Object stitching
Proof of concept is already in samples. I think it should be allowed to stitch object at any level not only root. Maybe the library could accept type-erased resolver in place of any object?
Schema stitching
Schema should support addition of new types, as well as, type extensions. This may require adding some kind of type erased "extendObject" to be generated from schema.
I am talking about a case equivalent to current stitching sample with today schema define extend type Query... insted of type Query....
Enum Stitching
This is the most cumbersome part. I cannot think of any nice way to extend ENUM. For this reason I avoid extending enums. Maybe it should be allowed to return string in place of enum since they are stored as such later on? Plus maybe validate the string against schema?

With stitching I see 3 fields that need individual care:

Object stitching
Proof of concept is already in samples. I think it should be allowed to stitch object at any level not only root. Maybe the library could accept type-erased resolver in place of any object?

Since the type-erased objects are all inherited from Object, and the logic in GraphQLService.cpp is all written in terms of that base-type, it's fairly easy to combine type-erased objects in a resolver using Object::StichObject (same as Request::stitch does for the root objects).
The tricky part with nested resolvers is, where do you get the instance of a type-erased object from the other schema? Root objects are easy, they're fixed at service instantiation, but there's a path of resolvers (some of which may not exist in both schemas) leading to the returned object in a nested resolver. That's what I think blocks auto-stitching, e.g., somewhere in AwaitableObject. At some point while resolving a request and calling into the field resolvers, the service would need to somehow call the same resolver on both objects and stitch the results, assuming both are returned.

Schema stitching
Schema should support addition of new types, as well as, type extensions. This may require adding some kind of type erased "extendObject" to be generated from schema.
I am talking about a case equivalent to current stitching sample with today schema define extend type Query... insted of type Query....

Type extensions are parsed the same way as regular type declarations. Technically, it probably shouldn't accept an extension without a base declaration somewhere, but I don't remember if I ever tried that. So, if you want to use the extend type Query... syntax, it should be possible to just build a schema from the extension and stitch it together the same way. Of course, if you're using extension syntax, you could also work out a way to concatenate the schema definition files and parse them into a single static schema to begin with.

Enum Stitching
This is the most cumbersome part. I cannot think of any nice way to extend ENUM. For this reason I avoid extending enums. Maybe it should be allowed to return string in place of enum since they are stored as such later on? Plus maybe validate the string against schema?

The way it's meant to work currently is that the schema will merge the enum values, so it'll pass validation. When you call a resolver in either schema with the same enum type, it'll pass it through the ModifiedArgument/Argument types that were built with the shared types for the target resolver's sub-schema. If you use a value it didn't know about, it'll reject the argument with an error. When returning values, it'll use a string (with the ModifiedResult/Result from the sub-schema of the resolver) and it'll map the integer enum values from the sub-schema to the same string as before. Fields from each sub-schema should allow all of the values they knew about, mapped to their own integer values in case of overlap, as arguments, and they can return any of the values that they contributed or share in the merged enum.
Aside from introspection queries against the stitched sample, I haven't fully tested this, so LMK if you're seeing it break.

The tricky part with nested resolvers is, where do you get the instance of a type-erased object from the other schema? Root objects are easy, they're fixed at service instantiation, but there's a path of resolvers (some of which may not exist in both schemas) leading to the returned object in a nested resolver.

I was thinking some kind of extensible ObjectModel Factory with tag dispatch. Pseudocode sketch:
Base schema:
type Query{
  test: Test!
}

type Test{
  foo: Int!
}

Extend schema:
extend type Query{
  newType: NewType!
}
type NewType{
  baz: String!
}
extend type Test{
  bar: Float!
}

Generated from concatenation of all schema parts:
//Generate all input types, enums
//Generate tags for all types
struct Query{};
struct Test{};
struct NewType{};

Generated for Base:

namespace graphql::Base{
  template <typename Model_t>
  struct ModelFactory{
    template<typename Object_t> resolver Create(std::shared_ptr<Object_t> obj){
       return {}//empty resolver
    }
  }

 template <>
  struct ModelFactory<Test>{
    template<typename Object_t> resolver Create(std::shared_ptr<Object_t> obj){
       return {"foo"}//Resolver for base Test object
    }
  }

 template <>
  struct ModelFactory<Query>{
    template<typename Object_t> resolver Create(std::shared_ptr<Object_t> obj){
       return {"test"}//Resolver for base Query object
    }
  }
}

Generated for Extend:
namespace graphql::Extend{
  template <typename Model_t>
  struct ModelFactory{
    template<typename Object_t> resolver Create(std::shared_ptr<Object_t> obj){
       return {}//empty resolver
    }
  }

 template <>
  struct ModelFactory<Query>{
    template<typename Object_t> resolver Create(std::shared_ptr<Object_t> obj){
       return {"baz"}//Resolver for extend part of Query object
    }
  }

 template <>
  struct ModelFactory<NewType>{
    template<typename Object_t> resolver Create(std::shared_ptr<Object_t> obj){
       return {"baz"}//Resolver for NewType object
    }
  }

 template <>
  struct ModelFactory<Test>{
    template<typename Object_t> resolver Create(std::shared_ptr<Object_t> obj){
       return {"bar"}//Resolver for extend part of Test object
    }
  }
}

User implementation:
struct Test{
  int getFoo();
  float getBar();
}

struct Query{
  std::shared_ptr<Test> getTest();
}

An then add some template template magic:
  template <typename Model_t>
  struct StitchedFactory{
    template<typename Object_t> resolver Create(std::shared_ptr<Object_t> obj){
       return graphql::Base::ModelFactory::Create(obj).stitch(graphql::Extend::ModelFactory::Create(obj))
    }
  }

graphql::service<graphql::Base::ModelFactory> baseResover;
graphql::service<StitchedFactory> extendedResover;

The idea requires more work, but I think it shows the idea. Also I think tag dispatch would also elegantly solve Unions and their extension - user would return a std::variant<std::pair<TypeTag,std::shared_ptr<Object_t>,...> and resolver would Create adequate model. I am aware that following such an approach would be total table flip and library overhaul, but in my opinion It would substantially expand its capabilities. User could even overload StitchedFactory::Create on per Type basis and perform additional runtime logic when needed. Tell me what you think. If you find potential in such approach I am very willing to put some more work into it.

Of course, if you're using extension syntax, you could also work out a way to concatenate the schema definition files and parse them into a single static schema to begin with.

This what I am doing right now. Take example above. Given an "extension schema part" I create dll for Base schema and one dll for Base+Extend schema. Then at runtime I select desired dll and use it as my resolver. This however does not scale as I need to create every possible combination with multiple "extension schema part"s. Also to achieve that I had to modify the library to move all generated types into dlls - "user" code does not instantiate graphql::Base::Object::Test nor graphql::BaseExtended::Object::Test. User code returns std::shared_ptr<Test> and factory  within dll instantiates one depending on which dll is loaded.

I have concluded my transition to next branch. I am vary happy with the result. SharedTypes and value visitor simplified everything sybstantially. There are few additional changes that could be merged if you think they could be useful in general. Please have a look at:
https://github.com/microsoft/cppgraphqlgen/compare/next...gitmodimo:cppgraphqlgen:next
I can create PR for features you see fit.


refactor: removed AliasModule

fixes #310

Search for the following two reg-ex
import.*\{.*\n.*=>

import.*\{.*.*=>


testing on Amazon Linux

Successor to #230
Is there anything that you'd like me to do with regards to https://app.vagrantup.com/mvbcoding/boxes/awslinux/ ?

@clinty Back then when the dicussion about Amazon Linux was, I wasn't even able to enable SELinux with Amazon Linux manually (while running on EC2). Please provide steps howto enable selinux on Amazon Linux when running on EC2 (not some other VM).

@oranenj @clinty I don't think it makes sense to run Amazon Linux tests on a local hypervisor like Virtualbox. As AmazonLinux is not a normal distro there are IMHO significant differences between AmazonLinux on a local hypervisor and AmazonLInux on EC2.
beaker tests can be run on EC2 directly you only need to have an account. There is also the so called free tier available for anybody to run these tests.

Off the top of my head, you need to do some subset of: install the relevant selinux policy packages, tweak the linux command line in /boot/grub/menu.lst, futz with /etc/selinux, and relabel the filesystem(s)

As AmazonLinux is not a normal distro there are IMHO significant differences between AmazonLinux on a local hypervisor and AmazonLInux on EC2.

@vinzent It's a somewhat "normal" KVM based hypervisor these days.


Subscriptions, Warp and stream of events

I am trying to understand how a non-trivial subscription system should be handled.
The idea is pretty simple: multiple client can perform a subscription, and whenever a client performs a mutation, all subscribed clients should receive a message.
Initially, I just used a tokio::sync::broadcast::channel: whenever the subscription function is called (through graphql), a new tokio receiver is obtained using Sender::subscribe (the sender is stored in the  Context), then the receiver is transformed into a stream and, after some chaining, it is Box::pinned and returned.
Unfortunately this approach does not work as expected, multiple repeated messages are sent to the same stream. It looks like the number of "copies" are equal to the number of subscriptions.
Could you help me a bit to understand where the problem could be? I started thinking that I should use the Coordinator and/or the Connector, but I am not sure how. Maybe a slightly more complex example in the warp_subscription could help as well.
Thank you in advance!

@nWacky wrote the current implementation

@ccbrown just revamped some of this stuff and may be of help. You will likely want to check out and update to the latest master.

Check out this gist: https://gist.github.com/ccbrown/d2a3a26093c749e31338a944721b2e60
It's a modification of the "warp_subscriptions" example that I believe does what you're describing: When someone performs the "send" mutation, all subscribers get the message exactly once:

Thank you so much @LegNeato, @ccbrown and everyone else! I just tried to follow the new way of handling the subscription showed in the example, and it looks like the messages are perfect now! Indeed, the code I have is pretty similar to the gist provided by @ccbrown (tiny difference: I am using directly the tokio::Sender instead of an Arc because, AFAIK, Sender should be already reference counted).
I am still struggling a bit with the correct behavior because the toy I am implementing is using ReasonML, ReasonReact and reason-apollo, and I am pretty new with ReasonML and its ecosystem. I am quite convinced that, until WASM reaches a zero overhead when interacting with JS and DOM, ReasonML could be one of the best solution when working with web frontend. I wanted to share this information because, maybe, you can find it interesting as well.
Thank you again for all your efforts, your work is astonishing! :heart:


Error with local function, keyword args and sparse arrays

Hi, I stumbled across this wild behavior which I don't understand:
using Enzyme
using SparseArrays

function bar()
    init = [1.0]
    foo(; x, y) = x
    func = x -> foo(
        x=x,
        y=sparse(
            [1.0, 1.0],
            [1, 2],
            [1, 2]
        )
    )
    Enzyme.gradient(Forward, func, copy(init))
end

bar()

This returns an error but if I define fooglobally (move it out of bar) the error disappears.
julia> show(err)
1-element ExceptionStack:
LoadError: Enzyme execution failed.
Mismatched activity for:   store {} addrspace(10)* %unbox.i.fca.2.load, {} addrspace(10)* addrspace(10)* %.repack16.repack20, align 8, !dbg !22, !tbaa !63, !alias.scope !50, !noalias !51 const val:   %unbox.i.fca.2.load = load {} addrspace(10)*, {} addrspace(10)** %unbox.i.fca.2.gep, align 8, !dbg !53, !tbaa !55, !alias.scope !57, !noalias !58
Type tree: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Integer, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer}
You may be using a constant variable as temporary storage for active memory (https://enzyme.mit.edu/julia/stable/faq/#Activity-of-temporary-storage).
You have some non-differentiable data being captured by the closure you are creating when you define func. Here I would recommend to just have func be multi-argument and do something like (untested just writing on GH).
using Enzyme
using SparseArrays

function bar()
    init = [1.0]
    foo(x, y) = x
    func = (x, y) -> foo(
        x=x,
        y=y
    )
    dinit = Enzyme.make_zero(init)
    Enzyme.gradient(Reverse, foo, Duplicated(init, dinit), Const(sparse(
            [1.0, 1.0],
            [1, 2],
            [1, 2]
        )))
     return dinit
end

bar()

That does it, except that one needs Enzyme.autodiff instead of Enzyme.gradient, if I am not mistaken.


Hierarchical display of CLI help.

Currently the CLI -h --help command just dumps a fairly long list of commands. It would perhaps to have a more structured list of the commands. Perhaps, more commonly used commands could be listed first. it could also be possible to segment the help into sub help commands. so you could do something like
$ resin --help <topic>

for example heroku -h
Usage: heroku COMMAND [--app APP] [command-specific-options]

Primary help topics, type "heroku help TOPIC" for more details:

  addons    #  manage addon resources
  apps      #  manage apps (create, destroy)
  auth      #  authentication (login, logout)
  config    #  manage app config vars
  domains   #  manage domains
  logs      #  display logs for an app
  ps        #  manage dynos (dynos, workers)
  releases  #  manage app releases
  run       #  run one-off commands (console, rake)
  sharing   #  manage collaborators on an app

Additional topics:

  buildpacks   #  manage the buildpack for an app
  certs        #  manage ssl endpoints for an app
  drains       #  display drains for an app
  features     #  manage optional features
  fork         #  clone an existing app
  git          #  manage git for apps
  help         #  list commands and display help
  keys         #  manage authentication keys
  labs         #  manage optional features
  local        #  run heroku app locally
  maintenance  #  manage maintenance mode for an app
  members      #  manage membership in organization accounts
  orgs         #  manage organization accounts
  pg           #  manage heroku-postgresql databases
  pgbackups    #  manage backups of heroku postgresql databases
  plugins      #  manage plugins to the heroku gem
  redis        #  list redis databases for an app
  regions      #  list available regions
  stack        #  manage the stack for an app
  status       #  check status of heroku platform
  twofactor    #  manage two-factor authentication settings
  update       #  update the heroku client
  version      #  display version

The help commands were reduced a lot recently:
$ ./bin/resin help
Usage: resin [COMMAND] [OPTIONS]

Commands:

    version                             output the version number
    help [command...]                   show help
    quickstart [name]                   getting started with resin.io
    login [token]                       login to resin.io
    logout                              logout from resin.io
    signup                              signup to resin.io
    whoami                              get current username and email address
    app create <name>                   create an application
    apps                                list all applications
    app rm <name>                       remove an application
    app restart <name>                  restart an application
    app <name>                          list a single application
    devices                             list all devices
    device rename <uuid> [newName]      rename a resin device
    device init [device]                initialise a device with resin os
    device <uuid>                       list a single device
    device rm <uuid>                    remove a device
    device identify <uuid>              identify a device with a UUID
    note <|note>                        set a device note
    keys                                list all ssh keys
    key add <name> [path]               add a SSH key to resin.io
    key <id>                            list a single ssh key
    key rm <id>                         remove a ssh key
    envs                                list all environment variables
    env add <key> [value]               add an environment variable
    env rename <id> <value>             rename an environment variable
    env rm <id>                         remove an environment variable
    logs <uuid>                         show device logs

Do you think this is short enough to make this issue irrelevant?

I've sent a PR that only lists the most used commands, with the possibility of passing --verbose to list the rest:
$ resin help --verbose
Usage: resin [COMMAND] [OPTIONS]

Primary commands:

    help [command...]                   show help
    quickstart [name]                   getting started with resin.io
    login [token]                       login to resin.io
    app create <name>                   create an application
    apps                                list all applications
    app <name>                          list a single application
    devices                             list all devices
    device init                         initialise a device with resin os
    device <uuid>                       list a single device
    logs <uuid>                         show device logs

Additional commands:

    version                             output the version number
    logout                              logout from resin.io
    signup                              signup to resin.io
    whoami                              get current username and email address
    app rm <name>                       remove an application
    app restart <name>                  restart an application
    app associate <name>                associate a resin project
    device rename <uuid> [newName]      rename a resin device
    device rm <uuid>                    remove a device
    device identify <uuid>              identify a device with a UUID
    device register <application>       register a device
    note <|note>                        set a device note
    keys                                list all ssh keys
    key add <name> [path]               add a SSH key to resin.io
    key <id>                            list a single ssh key
    key rm <id>                         remove a ssh key
    envs                                list all environment variables
    env add <key> [value]               add an environment variable
    env rename <id> <value>             rename an environment variable
    env rm <id>                         remove an environment variable
    os download <type>                  download an unconfigured os image
    os configure <image> <uuid>         configure an os image
    os initialize <image> <type>        initialize an os image

Omitting --verbose shows:
$ resin help
Usage: resin [COMMAND] [OPTIONS]

Primary commands:

    help [command...]                   show help
    quickstart [name]                   getting started with resin.io
    login [token]                       login to resin.io
    app create <name>                   create an application
    apps                                list all applications
    app <name>                          list a single application
    devices                             list all devices
    device init                         initialise a device with resin os
    device <uuid>                       list a single device
    logs <uuid>                         show device logs

Run `resin help --verbose` to list additional commands

@shaunmulligan Happy to move commands between primary/additional as you like.

this looks awesome. I think for the moment it all looks good :+1:  Where would plugins be listed?

@shaunmulligan Ah, good question. The current approach means that a plugin can mark itself as primary or additional as it wants, however I could add a new section for them. What do you think?

yeah, might be cool to have "Pluggin Commands" listed under Primary Commands when --verbose ?

@shaunmulligan
$ resin help -v
Usage: resin [COMMAND] [OPTIONS]

Primary commands:

    help [command...]                   show help
    quickstart [name]                   getting started with resin.io
    login [token]                       login to resin.io
    app create <name>                   create an application
    apps                                list all applications
    app <name>                          list a single application
    devices                             list all devices
    device init                         initialise a device with resin os
    device <uuid>                       list a single device
    logs <uuid>                         show device logs

Plugins:

    sync <uuid> [source]                sync your changes with a device

Additional commands:

    version                             output the version number
    logout                              logout from resin.io
    signup                              signup to resin.io
    whoami                              get current username and email address
    app rm <name>                       remove an application
    app restart <name>                  restart an application
    app associate <name>                associate a resin project
    device rename <uuid> [newName]      rename a resin device
    device rm <uuid>                    remove a device
    device identify <uuid>              identify a device with a UUID
    device register <application>       register a device
    note <|note>                        set a device note
    keys                                list all ssh keys
    key add <name> [path]               add a SSH key to resin.io
    key <id>                            list a single ssh key
    key rm <id>                         remove a ssh key
    envs                                list all environment variables
    env add <key> [value]               add an environment variable
    env rename <id> <value>             rename an environment variable
    env rm <id>                         remove an environment variable
    os download <type>                  download an unconfigured os image
    os configure <image> <uuid>         configure an os image

Maybe Installed plugins: instead of just Plugins:?

Yup, Installed plugins: sounds good to me


conda install does not install the lates version

I am trying to install the latest version using conda install --channel=conda-forge physics-tenpy.
conda search tenpy yields physics-tenpy 0.8.4 as the latest version.
However, doing conda install --channel=conda-forge physics-tenpy, I'm getting
Collecting package metadata (current_repodata.json): done
Solving environment: failed with initial frozen solve. Retrying with flexible solve.
Solving environment: failed with repodata from current_repodata.json, will retry with next repodata source.
Collecting package metadata (repodata.json): done
Solving environment: done
## Package Plan ##
  environment location: /home/user/.anaconda3
  added / updated specs:
    - physics-tenpy
The following packages will be downloaded:
    package                    |            build
    ---------------------------|-----------------
    physics-tenpy-0.7.2        |   py38h82cb98a_2         879 KB  conda-forge
    ------------------------------------------------------------
                                           Total:         879 KB
The following NEW packages will be INSTALLED:
  physics-tenpy      conda-forge/linux-64::physics-tenpy-0.7.2-py38h82cb98a_2

I.e. only the 0.7.2 version is  offered.
Forcing an 0.8.4 install with conda install physics-tenpy=0.8.4 sends my machine into outer space, orbiting for ever, trying to solve environments without success.
How to get this
To make sure I'm (at least) not fooled by some screwed up (ana)conda environment I did

Take a linux machine (only have such at hand), hide away all previous anaconda / python installs
Install a completely fresh anaconda from www.anaconda.com
Add conda-forge channel and all dependencies from https://raw.githubusercontent.com/tenpy/tenpy/main/environment.yml to .condarc
Do conda update -n base -c defaults conda and conda update --all
Do conda install --channel=conda-forge physics-tenpy

This generates the described behavior.
Going for more verbosity with conda install -debug -c conda-forge physics-tenpy=0.8.4 returns a lot of additional blurb, which I'm happy to list in full, if that would be of any help to you. Most of it is of type  DEBUG conda.common._logic:_run_sat(607): Invoking SAT with clause count: 89902 and
DEBUG conda.resolve:generate_spec_constraints(926): generate_spec_constraints returning with clause count: 89901
Any help would be most appreciated.

Pls. remove the 'bug' label. I cannot. I'm not claiming this is a 'bug'.

Anyway, installation of 0.8.4 from source works for me. Still, it would helpful to know why conda install does not.

Hmm, I can reproduce the issue.
This is an issue about the required dependencies specified here.
Compared to 0.7.2, I bumped the required numpy/scipy versions to a little bit higher, and I tried to pin BLAS to using MKL following these instructions.
My hunch is that the latter is causing the issues. It also didn't "work" as I intended, because it still compiles with HAVE_MKL=0.
Let's regenerate the 0.8.4 package for now without pinning MKL

@xaverm can you please confirm that it works now?

@jhauschild oops. Yes. Confirmed. (Was happy ever after with my install from source.) For me tenpy.show_config() shows: compiled without HAVE_MKL. Don't know if that's what it should be, but anyway, both of my numpy and scipy use libraries = ['mkl_rt', 'pthread'] for all the lapack... and blas... stuff listed for them. So probably everything is fine now.


Travel Website

Make a website using flexbox and grids describing various Travel locations a tourist can visit to. On clicking the respective location tab, the tourist should be directed to a web-page of that location.
The navigation bar should remain fixed on top of every web-page.

Name- Vaibhavi Thakare
SY COMP
I'd like to work on this problem statement

Hello Vaibhavi, You can create a pull request for this issue on or before 23rd March. While creating the request, you need to add the issue number in the Title.
Assigning this issue to you.

Unassigning you this issue as you couldnt complete the problem statement in the required time.

I am Arti Tambade, TY IT
I would like to work on this issue, could you please assign this issue to me?


build  update dependencies

Description
Update dependencies:

build(dependencies): 🧱 update crates
build(dependencies): 🧱 update crates

Type of change

[X] Dependency update

How Has This Been Tested?

[X] cargo test run with all tests passing

Checklist:

[X] My code follows the style guidelines of this project
[X] I have performed a self-review of my own code
[X] I have commented my code, particularly in hard-to-understand areas
[X] I have made corresponding changes to the documentation
[X] My changes generate no new warnings
[X] I have added tests that prove my fix is effective or that my feature works
[X] New and existing unit tests pass locally with my changes
[X] Any dependent changes have been merged and published in downstream modules

:warning: Please install the  to ensure uploads and comments are reliably processed by Codecov.
Codecov Report
All modified and coverable lines are covered by tests :white_check_mark:

Project coverage is 35.52%. Comparing base (3d5fc53) to head (ce35583).
Report is 3 commits behind head on main.

:exclamation: Your organization needs to install the Codecov GitHub app to enable full functionality.
Additional details and impacted files
@@           Coverage Diff           @@
##             main     #149   +/-   ##
=======================================
  Coverage   35.52%   35.52%
=======================================
  Files           4        4
  Lines        1185     1185
=======================================
  Hits          421      421
  Misses        764      764

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


FontAwesome Icons issue

Thanks for the great package , I got a small problem when using FontAwesome icons are not centered within the circle, i tried changing the iconSize , but still not centered

Hi,
Okay let's fix it,
may I ask you share your code?
and which font awesome you are used?

font_awesome_flutter: ^8.4.0
I used the code in the example folder:
List tabItems = List.of([
new TabItem(FontAwesomeIcons.newspaper, "News", Colors.orange),
new TabItem(FontAwesomeIcons.calendarAlt, "Calendar", Colors.red),
new TabItem(FontAwesomeIcons.home, "Home", Colors.blue),
new TabItem(FontAwesomeIcons.bars, "Other", Colors.cyan),
]);

Okay dude,
I am busy a little, But I will check it ASAP.

ok thanks a lot

Hi,
I checked it but I think it's font awesome issue, not this library,
Check these images:

I set a background color for drawed images,
The first one is the Material Icons,
The second one is the FontAwesome icons, the fonts drawn outside the background with the bottomRight gravity,
I think you should open an issue on the FontAwesome library.