Camera Output Modes, MSAA Writeback, and BlitPipeline

Objective
Alternative to #7490. I wrote all of the code in this PR, but I have added @robtfm as co-author on commits that build on ideas from #7490. I would not have been able to solve these problems on my own without much more time investment and I'm largely just rephrasing the ideas from that PR.
Fixes #7435
Fixes #7361
Fixes #5721
Solution
This implements the solution I outlined here.

Adds "msaa writeback" as an explicit "msaa camera feature" and default to msaa_writeback: true for each camera. If this is true, a camera has MSAA enabled, and it isn't the first camera for the target, add a writeback before the main pass for that camera.
Adds a CameraOutputMode, which can be used to configure if (and how) the results of a camera's rendering will be written to the final RenderTarget output texture (via the upscaling node). The blend_state and color_attachment_load_op are now configurable, giving much more control over how a camera will write to the output texture.
Made cameras with the same target share the same main_texture tracker by using Arc<AtomicUsize>, which ensures continuity across cameras. This was previously broken / could produce weird results in some cases. ViewTarget::main_texture() is now correct in every context.
Added a new generic / specializable BlitPipeline, which the new MsaaWritebackNode uses internally. The UpscalingPipelineNode now uses BlitPipeline instead of its own pipeline. We might ultimately need to fork this back out if we choose to add more configurability to the upscaling, but for now this will save on binary size by not embedding the same shader twice.
Moved the "camera sorting" logic from the camera driver node to its own system. The results are now stored in the SortedCameras resource, which can be used anywhere in the renderer. MSAA writeback makes use of this.

Changelog

Added Camera::msaa_writeback which can enable and disable msaa writeback.
Added specializable BlitPipeline and ported the upscaling node to use this.
Added SortedCameras, exposing information that was previously internal to the camera driver node.
Made cameras with the same target share the same main_texture tracker, which ensures continuity across cameras.

This might be a bit too advanced to have the example in the repo, but do you have a gist of how you would use this to fix https://github.com/bevyengine/bevy/issues/7435? I'm not entirely sure how I would need to use this to make it work correctly.

@IceSentry the msaa writeback (which is enabled by default in this pr) should fix #7435 automatically. When I made the changes to split_screen mentioned in that issue, bloom showed up on the left side as expected.

Ditto #7361

@rparrett this also works as expected by default for me.

@rparrett this also works as expected by default for me.

With the example in #7361, I would expect the hexagon to get bloom, but with this PR, the circle does.

@rparrett haha yup you're right.
First: I needed to re-add the bloom upsampling alpha blending from the other PR. (see latest commit).
From there, this camera setup works, which configures what amounts to the same setup from #7490:
    // No special config required here. This will write to the output texture by default
    commands.spawn((
        Camera2dBundle {
            camera: Camera {
                hdr: true,
                ..default()
            },
            ..default()
        },
        no_bloom_layer,
    ));

    commands.spawn((
        Camera2dBundle {
            camera_2d: Camera2d {
                // Transparent clear color to ensure this layers on top of the output correctly
                clear_color: ClearColorConfig::Custom(Color::NONE),
                ..default()
            },
            camera: Camera {
                hdr: true,
                // Disable MSAA writeback as we don't want the last camera's outputs it in our
                // intermediate multisampled textures
                msaa_writeback: false,
                order: 1,
               // Write to the output texture, but load the previous state + blend
                output_mode: CameraOutputMode::Write {
                    blend_state: Some(BlendState::ALPHA_BLENDING),
                    color_attachment_load_op: LoadOp::Load,
                },
                ..default()
            },
            ..default()
        },
        bloom_layer,
        BloomSettings {
            threshold: 0.5,
            intensity: 1.0,
            ..default()
        },
    ));

Also for completeness I will confirm that #5721 works out of the box now.

i think personally i'd prefer having the more intelligent defaults, definitely for writeback and maybe for the clear color, but this does expose everything needed as it stands.

I'm definitely down to explore something closer to the "smarts" of your previous impl for writeback (maybe in an opt-in, but enabled by default fashion). Feel free to follow this up if you're interested. (not for 0.10 though :smile: )

bors r+


X chromosome in r10 dysfunctional

variant page errors out: https://r10.finngen.fi/variant/23-153635030-C-T
and gene page associations never load.
https://r10.finngen.fi/gene/DUSP9
This will probably be fixed with the upcoming update to latest master?

Update to master probably will not fix this. It looks like it is connected to the long format file - it contains chromosome X instead of 23 in variant positions (R11 and R12 have 23 and work fine). R10 longformat file was generated with nextflow when the development for the longformat mode was ongoing whereas for later releases we used cromwell version of the pipeline incorporated to the import wdl. So there seem to be some differences with the later longformat releases. I will check more on that and fix the file!

ok great if its fixed by reimport with new data.


Appcivist Django app created

Models, views, serializers and a basic appicivist's api module created
URL callbacks on urls.py file

Pushed new commit with required changes for pull request


KeyboardEvent constructor args ignored

According to https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/KeyboardEvent, a KeyboardEvent object may be created and populated using its constructor:
event = new KeyboardEvent(typeArg, KeyboardEventInit);

HtmlUnit seems to ignore both constructor arguments, so the event object is basically empty.

Have fixed many of the EventXXX constructors some weeks ago - will be great if you can provide a PR for this.
And btw. all the best for 2021

Have fixed many of the EventXXX constructors some weeks ago - will be great if you can provide a PR for this.
And btw. all the best for 2021

Thanks, man! Hope 2021 will be a good year for you too.
Regarding the PR: Roger. Let's see what I can come up with during the next days. May need your help, though.

Thanks, man! Hope 2021 will be a good year for you too.
Regarding the PR: Roger. Let's see what I can come up with during the next days. May need your help, though.

As always many thanks for the PR.
Have to merge the latest Rhino changes over the weekend and will make a new snapshot build available afterwards.

As always many thanks for the PR.
Have to merge the latest Rhino changes over the weekend and will make a new snapshot build available afterwards.


NJ: CDC Prime: Error in Rhapsody Route in PRODUCTION

Name: Mike Firkser
Email<EMAIL_ADDRESS>Please note the ELR Error below in your ELR File: covid-19-aae290f5-2cc7-4149-9b69-d8b9b6d241a3-20220531134120.hl7
Order: 9bd72213-8db3-45c9-895f-c3aae935ab1b
ORC-23 is missing.  Please correct and resubmit.

Duplicate to 5537


Add RSS icon to job board

The job board page has a rss feed at /job/board/feed.xml but it is not currently displayed anywhere, so people wont know that option is available.
We would like to add an rss icon linked to the feed in the job board page.
We dont have any designs for that.

#69
Created a pull request for this, thanks!

Closing this issue as the pull request was already merged! :tada:
If you would like to autolink issues and pull request that can be done in the commit message, for example "Resolves vlctechhub/VLCTechHub-site#69 - Add rss icon to jobs" or with any other of the supported keywords (https://help.github.com/en/articles/closing-issues-using-keywords)


Show AST directives for fields in codemirror.

WIP – please ignore. Opening the PR to see what fails, and how much work this will require.

i see what you're doing here, looks like you're on the right track?
what do we do then about directives on field arguments?

@folone it seems this can be closed, now that the other PR has been merged?

@acao Thank you, closing this one!


feat!: drop support for Ruby 2.6

This'll be a draft until #411 is landed on master and then next is rebased.

Summary
This isn't to say we won't drop support for other versions of Ruby, but we should definitely drop support for 2.6.
I have realised CI isn't covering newer versions of Ruby, but I'll do a dedicated PR adding those.
Pull Request checklist

[x] Add/update test to cover these changes
[x] Update documentation
[x] Update CHANGELOG file

ready merge? I can't merge drafts.

We should rebase next on main, then we should be good to go


Added ca-Es (catalan) language

I've added the Catalan language, I will also like to add this language in the demo app, but the resx manager was giving me the following error:

If someone can point me to how to do it, I will appreciate a lot.

@mmasdivins  thank you for your pr
Uncheck the first option on the left (HandyControl_Net_GE45_HandyControl_Net_40)
Now you can add your own language again

@ghost1372  Thanks, the problem was that I didn't add
     <EmbeddedResource Include="..\..\Shared\HandyControlDemo_Shared\Properties\Langs\Lang.ca-ES.resx">       <Link>Properties\Langs\Lang.ca-ES.resx</Link>     </EmbeddedResource>
On HandyControlDemo_Net_GE45.csproj and HandyControlDemo_Net_40.proj

I closed to open a new one with the language added to the demo


bricked 9fus y25ga

hi. his this camara a paper weight?
[125]HELLO! BOOT0 is starting Nov 14 2019 20:01:31!
[130]BOOT0 commit : 81c18ee
[133]board init start
[135]set pll start
[138]set pll end
[139][pmu]: bus read error
[142]board init ok
[144]chip id check OK
[146]DRAM BOOT DRIVE INFO: V0.41
[149]DRAM CLK = 528 MHz
[152]DRAM Type = 2 (2:DDR2,3:DDR3)
[155]DRAMC read ODT  off.
[157]DRAM ODT off.
[160]DRAM SIZE =64 M
[167]DRAM simple test OK.
[169]rtc standby flag is 0x0, super standby flag is 0x0
[174]dram size =64
[177]spinor id is: 1c 70 18, read cmd: 03
[181]Succeed in reading toc file head.
[185]toc1 magic error
CCC
this appens after i try to flash the boot partition. thanks

Sorry but yes...
You can recover it "offline".
Desoldering the spi flash and programming it with an external programmer.
There are a lot of diy programmers.
Search for "SPIPGM" (parallel port) or FT232H (usb port).

hi roleoroleo, thanks for your prompt help.
i use a ftd1232 for flash, this one do the job or has to be the 32H?
this is a strange camera (at least for me) i bricked another one and i was able to restore just copy the files on backup folder to the root of sd card, after power the camera he start upgrade and start asking for connection ( how it was possible? don´t ask me)

Maybe your adapter could work.
https://www.flashrom.org/FT2232SPI_Programmer

just finish the voltage regulator, tomorrow i will desolder the ic and try to connect to the program

mer. thanks for your help

hi roleoroleo. everything is ready.

i received a new one and i have flash the y25ga_0.3.0. the camera is connected  but i can´t access them, neither in the official application nor in the ip. i won´t try anything or may will happens the same as the previous. i hope you can help. thank you
backup yi3 3a.zip

Did you restore the old cam?
If not, what kind of help do you need?
About new cam, is the cam connected to the wifi network?
Are you able to get the ip address?
Are you able to login with telnet?

Hi roleo. The old cam I'm trying to see how the flash it's done. Never done
this before. The 3rd camera didn't try with telnet. The led stay blue and
the camera shows connect on the router. Will try telnet in a hour. Thank
you
A sexta, 2/09/2022, 10:42, roleo @.***> escreveu:

Did you restore the old cam?
If not, what kind of help do you need?
About new cam, is the cam connected to the wifi network?
Are you able to get the ip address?
Are you able to login with telnet?
—
Reply to this email directly, view it on GitHub
https://github.com/roleoroleo/yi-hack-Allwinner/issues/365#issuecomment-1235291751,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ASR3U5CAMRLLAVNRHLR27RDV4HDXXANCNFSM57WMBJYA
.
You are receiving this because you authored the thread.Message ID:
@.***>

About the old cam, you could start following the page above:
https://www.flashrom.org/FT2232SPI_Programmer
First step is to make a backup copy of the flash.
If it works, make another copy and check if are identical.
Just to check if the interface is working properly.
2nd step is to erase the whole flash.
Finally, you need program the bootloader at the starting address of the flash.
If you restore only the bootloader, you will need to apply the unbrick guide to write the other partitions (from 1 to 6) using the sd card.
Otherwise you could prepare a full image of the flash (16MB = 16.777.216 B) but the write procedure is slow.

With another SD card, make a backup of the cam (after the hack).
I will check if the hack is ok.

backup1.zip
backup2.zip

The cam is correctly hacked.
The boot script /home/app/init.sh contains the following lines:
/usr/sbin/telnetd &
/home/yi-hack/script/system.sh

so it's ok.
You should be able to login with telnet.

hi. i have done everything from scratch with a different sd and flashed again. the same problem. i can ping the camera but i can´t login with putty or in the browser.

Please, check the following details:

Are you really pinging the cam or another device? What happens if you switch off the cam? Does ping still work?
When you start putty, do you select telnet or ssh?
When you try to connect to the web interface, are you using port 8080?

hi. its really the camera.
C:>ping <IP_ADDRESS>
Pinging <IP_ADDRESS> with 32 bytes of data:
Reply from <IP_ADDRESS>: bytes=32 time=175ms TTL=64
Reply from <IP_ADDRESS>: bytes=32 time=1ms TTL=64
Reply from <IP_ADDRESS>: bytes=32 time=1ms TTL=64
Reply from <IP_ADDRESS>: bytes=32 time=21ms TTL=64
Ping statistics for <IP_ADDRESS>:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 1ms, Maximum = 175ms, Average = 49ms
C:>ping <IP_ADDRESS>
Pinging <IP_ADDRESS> with 32 bytes of data:
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Ping statistics for <IP_ADDRESS>:
Packets: Sent = 4, Received = 0, Lost = 4 (100% loss),
C:>ping <IP_ADDRESS>
Pinging <IP_ADDRESS> with 32 bytes of data:
Reply from <IP_ADDRESS>: bytes=32 time=2ms TTL=64
Reply from <IP_ADDRESS>: bytes=32 time=8ms TTL=64
Reply from <IP_ADDRESS>: bytes=32 time=1ms TTL=64
Reply from <IP_ADDRESS>: bytes=32 time=1ms TTL=64
Ping statistics for <IP_ADDRESS>:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 1ms, Maximum = 8ms, Average = 3ms
my bad on putty i was connecting ssh instead telnet.
is request a user and password.
xiaoyi login:
on the browser:
http://<IP_ADDRESS>:8080/
ERR_CONNECTION_REFUSED

Default is "root" user and blank password.
Try the following command and post the output:
ps
mount
df

root@xiaoyi:~# ps
PID USER       VSZ STAT COMMAND
1 root       980 S    /sbin/init
2 root         0 SW   [kthreadd]
3 root         0 SW   [ksoftirqd/0]
4 root         0 SW   [kworker/0:0]
5 root         0 SW<  [kworker/0:0H]
6 root         0 SW   [kworker/u2:0]
7 root         0 SW   [rcu_preempt]
8 root         0 SW   [rcu_sched]
9 root         0 SW   [rcu_bh]
10 root         0 SW<  [lru-add-drain]
11 root         0 SW   [kdevtmpfs]
12 root         0 SW   [kworker/u2:1]
179 root         0 SW   [oom_reaper]
180 root         0 SW<  [writeback]
182 root         0 SW   [kcompactd0]
183 root         0 SW<  [crypto]
184 root         0 SW<  [bioset]
186 root         0 SW<  [kblockd]
224 root         0 SW   [sys_user]
231 root         0 SW   [kworker/0:1]
232 root         0 SW<  [cfg80211]
239 root         0 SW<  [watchdogd]
253 root         0 SW<  [spi0]
263 root         0 SW   [kswapd0]
348 root         0 SW<  [bioset]
353 root         0 SW<  [bioset]
358 root         0 SW<  [bioset]
363 root         0 SW<  [bioset]
368 root         0 SW<  [bioset]
373 root         0 SW<  [bioset]
378 root         0 SW<  [bioset]
383 root         0 SW<  [bioset]
402 root         0 SW   [irq/302-sunxi-m]
404 root         0 SW   [irq/166-sdc0 cd]
405 root         0 SW   [irq/303-sunxi-m]
408 root         0 SW   [kworker/0:2]
452 root         0 SW   [kworker/u2:2]
463 root         0 SW<  [kworker/0:1H]
464 root         0 SW   [kworker/0:3]
466 root         0 SW<  [bioset]
467 root         0 SW   [mmcqd/0]
482 root         0 SWN  [jffs2_gcd_mtd3]
487 root       980 S    -/bin/sh
528 root         0 SW   [ksdioirqd/mmc1]
531 root         0 DW   [RTW_XMIT_THREAD]
532 root         0 SW   [RTW_CMD_THREAD]
533 root         0 SW   [RTWHALXT]
534 root      1072 S    ./dispatch
537 root       988 S    /usr/sbin/telnetd
579 root      1400 S    /home/base/tools/wpa_supplicant -c/tmp/wpa_supplican
610 root       980 S    udhcpc -i wlan0 -b -s /home/app/script/default.scrip
743 root       980 S    -ash
796 root       980 R    ps
root@xiaoyi:~# mount
/dev/root on / type squashfs (ro,relatime)
devtmpfs on /dev type devtmpfs (rw,relatime,size=30528k,nr_inodes=7632,mode=755)
proc on /proc type proc (rw,nosuid,nodev,relatime)
sysfs on /sys type sysfs (rw,nosuid,nodev,relatime)
/dev/pts on /dev/pts type devpts (rw,relatime,mode=600,ptmxmode=000)
/dev/mtdblock3 on /home type jffs2 (rw,relatime)
none on /sys/kernel/debug type debugfs (rw,relatime)
none on /dev/mqueue type mqueue (rw,relatime)
tmpfs on /tmp type tmpfs (rw,relatime,size=32768k)
/dev/mmcblk0p1 on /tmp/sd type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro)
root@xiaoyi:~# df
Filesystem           1024-blocks    Used Available Use% Mounted on
/dev/root                 1536      1536         0 100% /
devtmpfs                 30528         0     30528   0% /dev
/dev/mtdblock3           11776      6344      5432  54% /home
tmpfs                    32768        28     32740   0% /tmp
/dev/mmcblk0p1          871696     19104    852592   2% /tmp/sd
root@xiaoyi:~#

hi again. i was able to read the bricked cam bios. i use a raspberry with this tutorial https://www.youtube.com/watch?v=KNy-_ZzMnG0 .
my ftd1232  was not recognized by the flashrom.
backup_2.zip

About the new cam, processes are not running.
Something is wrong on your /home directory, confirmed by your backup2.zip
I don't know why but the yi-hack folder is not present.
I checked the released archive and it's ok.
Decompress the archive and copy the file home_y25gam to your sd card.
Then reboot.

About the old cam.
The backup you made is good between 0x0 and 0x10000 but is blank (all zeroes) between 0x10000 and 0x80000.
You need to rewrite it with another file.
You could use the mtdblock0.bin from your new cam.

Good morning. New news, the new cam is working with version 2.9 I tried to online update but still on 2.9 later I will try manually extract all the files from the V3 and see if work. The cam with the bios, I dump the bios from the new one check the md5 a lot of time and a was able to get one file from all the reads with the same md5. I write that file in the old bios and I get the same md5 (all good it seems) I solder the booth bios in place the new cam is working and the old is blinking orange. I tried to reset but nothing. Any suggestions? Hardware fault or software bug? Thanks

Blinking orange is good.
It means that bootloader is ok.
Which partition did you restore?
The whole flash (16 MB)?

yes, the whole flash. after a min the led keeps fixed orange.
work7a.zip

Fixed orange means that bootloader is ok.
I don't know what is happening.
But you could try to restore the single partitions.
Starting with rootfs and home.
Check the unbrick guide: https://github.com/roleoroleo/yi-hack-Allwinner/tree/master/unbrick
Create the images (starting from your mtdblockX.bin) with these commands:
mkimage -A arm -O linux -T filesystem -C none -a 0x0 -e 0x0 -n "xiaoyi-rootfs" -d mtdblock2.bin rootfs_y25
mkimage -A arm -O linux -T filesystem -C none -a 0x0 -e 0x0 -n "xiaoyi-home" -d mtdblock3.bin home_25

Pay attention that if you cloned flash of your new cam in the old one, they share the same serial number and the same access key to the cloud. But at the moment we don't care about this problem.

U-Boot 2018.05-00002-g932b424-dirty (Dec 13 2019 - 18:21:53 +0800) Allwinner Technology
[00.249]CPU:   Allwinner Family
[00.252]Model: sun8iw19
I2C:   ready
[00.256]DRAM:  64 MiB
[00.259]Relocation Offset is: f9f6a000
[00.275]secure enable bit: 0
[00.277]pmu_axp2101_probe pmic_bus_read fail
[00.281]drivers/sunxi_power/pmu_axpnull.c pmu_axpnull_probe 26 axpdummy probe
[00.288]bmu_axp2101_probe pmic_bus_read fail
[00.292]BMU: AXPNULL
[00.295]CPU=816 MHz,PLL6=600 Mhz,AHB=200 Mhz, APB1=100Mhz  MBus=132Mhz
[00.301]gic: sec monitor mode
[00.304]flash init start
[00.306]workmode = 0,storage type = 3
SF: Detected en25qh128 with page size 256 Bytes, erase size 64 KiB, total 16 MiB
[00.316]sunxi flash init ok
[00.320]Loading Environment from SUNXI_FLASH... OK
[00.351]sprite_led_gpio start
[00.355]update dts
root_partition is rootfs
set root to /dev/mtdblock2
[00.365]update part info
[00.367]update bootcmd
[00.369]No ethernet found.
[00.371]get mem for descripter OK !
[00.597]Card did not respond to voltage select!
card0 init failed
No sd-card insert,will normal boot
Hit any key to stop autoboot:  0
Booting kernel from Legacy Image at 45000000 ...
 BOOT0 is starting Nov 14 2019 20:01:31!
[43]BOOT0 commit : 81c18ee
[46]board init start
[48]set pll start
[50]set pll end
[52][pmu]: bus read error
[54]board init ok
[56]chip id check OK
[58]DRAM BOOT DRIVE INFO: V0.41
[61]DRAM CLK = 528 MHz
[63]DRAM Type = 2 (2:DDR2,3:DDR3)
[67]DRAMC read ODT  off.
[69]DRAM ODT off.
[71]DRAM SIZE =64 M
[78]DRAM simple test OK.
[80]rtc standby flag is 0x0, super standby flag is 0x0
[86]dram size =64
[87]key press :
[90]spinor id is: 1c 70 18, read cmd: 03
[94]Succeed in reading toc file head.
[97]The size of toc is 6c000.
[171]Entry_name        = optee
[174]Entry_name        = u-boot
[179]Entry_name        = dtb
[182]Jump to secend Boot.
MESSAGE: [0x0] TEE-CORE: OP-TEE version: sun8iw19p1_v0.6.0-12-g97f2688 #1 2019年 11月 08日 星期五 08:26:51 UTC arm
ERROR:   [0x0] TEE-CORE:platform_standby_fdt_parse:126: no pmu node
ERROR:   [0x0] TEE-CORE:sunxi_twi_parse_from_dt:84: no pmu node

The problem is the kernel.
Use your mtdblock1.bin from the new cam and create the image file with this command:
mkimage -A arm -O linux -T filesystem -C none -a 0x0 -e 0x0 -n "xiaoyi-kernel" -d mtdblock1.bin kernel_25
Copy the file in your sd card and restart the cam.

i roleo, do not laugh.
card_caps:0x3000000a
host_caps:0x3000003f
** Unrecognized filesystem type **
(22.1 MiB/s)
image[/kernel_y25ga] wrong type
Nothing updated, start normal boot
Hit any key to stop autoboot:  0
=>
=> image[/kernel_y25ga] wrong type
Unknown command 'image[/kernel_y25ga]' - try 'help'
=> Nothing updated, start normal boot
this is why i have my first camera as y20ga after recover with some untrusted restore files that i found somewhere.

I can assure you that the partition you posted above comes from a y25ga.
At this point, I think that the only solution is the hard way:
https://github.com/roleoroleo/yi-hack-Allwinner/wiki/Unbrick-the-cam
But we need to change something to adapt the procedure to the kernel:
Step 1: ...
Step 2: ...
Step 3: fatload mmc 0 45000000 mtdblock1.bin
Step 4: ...
Step 5: starting address of the kernel is 0x00080000 and size should be 2359296, in hex 0x240000
Step 6: sf erase 80000 240000
Step 7: sf write 45000000 80000 240000

good morning. ## Booting kernel from Legacy Image at 45000000 ...
Image Name:   ARM OpenWrt Linux-4.9.118
Image Type:   ARM Linux Kernel Image (uncompressed)
Data Size:    2080440 Bytes = 2 MiB
Load Address: 40008000
Entry Point:  40008000
[02.257]Starting kernel ...
[    0.000000] ion_mem_reserve: err format for ion reserve list!
[    0.111891] ion_heap_create: Invalid heap type 4
[    0.119491] sunxi_i2c_probe()2209 - [i2c1] warning: failed to get regulator id
[    0.147167] uart uart0: get regulator failed
[    0.174809] sunxi-wlan wlan: request pincrtl handle for device [wlan] failed
[    0.183157] sunxi-wlan wlan: get gpio chip_en failed
[    0.205528] mtd: partition "UDISK" is out of reach -- disabled
[    0.216920] VE: get debugfs_mpp_root is NULL, please check mpp
[    0.216920]
[    0.491640] mmc:failed to get gpios
[    0.539964] sunxi-mmc sdc1: smc 1 p1 err, cmd 52, RTO !!
[    0.546857] sunxi-mmc sdc1: smc 1 p1 err, cmd 52, RTO !!
[    0.557369] sunxi-mmc sdc1: smc 1 p1 err, cmd 8, RTO !!
[    0.564144] sunxi-mmc sdc1: smc 1 p1 err, cmd 5, RTO !!
[    0.570928] sunxi-mmc sdc1: smc 1 p1 err, cmd 5, RTO !!
[    0.577698] sunxi-mmc sdc1: smc 1 p1 err, cmd 5, RTO !!
[    0.584476] sunxi-mmc sdc1: smc 1 p1 err, cmd 5, RTO !!
[    0.591268] sunxi-mmc sdc1: smc 1 p1 err, cmd 55, RTO !!
[    0.598168] sunxi-mmc sdc1: smc 1 p1 err, cmd 55, RTO !!
[    0.605070] sunxi-mmc sdc1: smc 1 p1 err, cmd 55, RTO !!
[    0.611975] sunxi-mmc sdc1: smc 1 p1 err, cmd 55, RTO !!
[    0.619012] sunxi-mmc sdc1: smc 1 p1 err, cmd 1, RTO !!
[    0.663939] SQUASHFS error: zlib decompression failed, data probably corrupt
[    0.671954] SQUASHFS error: squashfs_read_data failed to read block 0xe5eac
[    0.679813] SQUASHFS error: Unable to read fragment cache entry [e5eac]
[    0.687270] SQUASHFS error: Unable to read page, block e5eac, size 12ac2
[    0.695812] SQUASHFS error: zlib decompression failed, data probably corrupt
[    0.703775] SQUASHFS error: squashfs_read_data failed to read block 0xe5eac
[    0.711625] SQUASHFS error: Unable to read fragment cache entry [e5eac]
[    0.719081] SQUASHFS error: Unable to read page, block e5eac, size 12ac2
[    0.726698] Kernel panic - not syncing: Requested init /pseudo_init failed (error -5).
[    0.735533] CPU: 0 PID: 1 Comm: swapper Not tainted 4.9.118 #58
[    0.742192] Hardware name: sun8iw19
[    0.746148] [] (unwind_backtrace) from [] (show_stack+0xb/0xc)
[    0.754675] [] (show_stack) from [] (panic+0x71/0x1b4)
[    0.762421] [] (panic) from [] (kernel_init+0x49/0x9c)
[    0.770165] [] (kernel_init) from [] (ret_from_fork+0x11/0x30)
[    0.778688] ---[ end Kernel panic - not syncing: Requested init /pseudo_init failed (error -5).
[    0.788527] crashdump enter

Ok.
The cam is trying to load the squasfs file system.
Now you have to load the rootfs and home partition:
https://github.com/roleoroleo/yi-hack-Allwinner/issues/365#issuecomment-1242952232

Before rootfs and home you need env.

its normal have zeros on load and entry point?
-T filesystem -C none -a 0x0 -e 0x0 -n "xiaoyi-env" -d mtdblock4.bin env_25
Image Name:   xiaoyi-env
Created:      Tue Sep 13 09:27:43 2022
Image Type:   ARM Linux Filesystem Image (uncompressed)
Data Size:    131072 Bytes = 128.00 KiB = 0.12 MiB
Load Address: 00000000
Entry Point:  00000000

Yes.

the camera is working :) but now i have block the cloud. the new one dont connect.
this is the log from the bricked
p2p_tnp.c(state_statistics-6235)[08:48:51.684]:check_login fail 0

Yes, I don't know exactly how to fix this.
Because the mtd7 partition contains some information that is unique for each cam: cloud ID, serial number, ...
If you have not made a backup copy of the old cam, you cannot enter this data.
And if you clone them from the new cam, you can't access the cloud.
Are you sure the SD card does not contain backup files?

I have the backup of the 3 cameras.
A terça, 13/09/2022, 10:50, roleo @.***> escreveu:

Yes, I don't know exactly how to fix this.
Because the mtd7 partition contains some information that is unique for
each cam: cloud ID, serial number, ...
If you have not made a backup copy of the old cam, you cannot enter this
data.
And if you clone them from the new cam, you can't access the cloud.
Are you sure the SD card does not contain backup files?
—
Reply to this email directly, view it on GitHub
https://github.com/roleoroleo/yi-hack-Allwinner/issues/365#issuecomment-1245168382,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ASR3U5ED5KCQ3UARD6ECATLV6BE6LANCNFSM57WMBJYA
.
You are receiving this because you authored the thread.Message ID:
@.***>

The files that I restore today are from the original backup.
A terça, 13/09/2022, 11:58, Cândido Sá @.***> escreveu:

I have the backup of the 3 cameras.
A terça, 13/09/2022, 10:50, roleo @.***> escreveu:

Yes, I don't know exactly how to fix this.
Because the mtd7 partition contains some information that is unique for
each cam: cloud ID, serial number, ...
If you have not made a backup copy of the old cam, you cannot enter this
data.
And if you clone them from the new cam, you can't access the cloud.
Are you sure the SD card does not contain backup files?
—
Reply to this email directly, view it on GitHub
https://github.com/roleoroleo/yi-hack-Allwinner/issues/365#issuecomment-1245168382,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ASR3U5ED5KCQ3UARD6ECATLV6BE6LANCNFSM57WMBJYA
.
You are receiving this because you authored the thread.Message ID:
@.***>

Then restore mtd6 and mtd7 partitions and reboot.
You can do it directly from a console session with dd.

Hi roleo. How do I calculate to do the same for  mtd6 and 7? Thank you

I can assure you that the partition you posted above comes from a y25ga. At this point, I think that the only solution is the hard way: https://github.com/roleoroleo/yi-hack-Allwinner/wiki/Unbrick-the-cam But we need to change something to adapt the procedure to the kernel:
Step 1: ... Step 2: ... Step 3: fatload mmc 0 45000000 mtdblock1.bin Step 4: ... Step 5: starting address of the kernel is 0x00080000 and size should be 2359296, in hex 0x240000 Step 6: sf erase 80000 240000 Step 7: sf write 45000000 80000 240000

Hi roleo. How do I calculate to do the same for mtd6 and 7? Thank you

For mtd5:
Step 1: ...
Step 2: ...
Step 3: fatload mmc 0 45000000 mtdblock5.bin
Step 4: ...
Step 5: starting address of the kernel is 0x00FE0000 and size is 65536, in hex 0x10000
Step 6: sf erase FE0000 10000
Step 7: sf write 45000000 FE0000 10000
For mtd6:
Step 1: ...
Step 2: ...
Step 3: fatload mmc 0 45000000 mtdblock6.bin
Step 4: ...
Step 5: starting address of the kernel is 0x00FF0000 and size is 65536, in hex 0x10000
Step 6: sf erase FF0000 10000
Step 7: sf write 45000000 FF0000 10000

Who's the boss??? You @roleoroleo !!!
Thank you, is working fine. Now I understand the partition sizes 😇.

It was fun.
In one go we tried all the possible ways of restoring a partition.
I will add this issue in the wiki.

The time that we spent I could buy a few cameras. I appreciate your help, I did this because of the challenger, now o know how a bios is recovered and hope never use it again 😂.

I agree.

For me it was just for the challenger. The time that we spent ( I spent
hours on research.) Could buy at least 3 or 4 cameras😂. If it happens
again in less then an hour is all fixed.
It's a trick fix, extract the bios (in my case, I don't know if there's
any clamp that fits there or if the ic can be read in place), have another
camera to extract the file. Soldering booth bios in place restore
partitions  etc. 🤯. But at the end, it's wasn't about the camera but
learning something more.
Many thanks to you and all the people like you. The donation was made
before because your prompt help, i valorize that.

In one go we tried all the possible ways of restoring a partition.
I will add this issue in the wiki.
—
Reply to this email directly, view it on GitHub
https://github.com/roleoroleo/yi-hack-Allwinner/issues/365#issuecomment-1254995466,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ASR3U5CVPZPJPC572TK2KWLV7RKQTANCNFSM57WMBJYA
.
You are receiving this because you authored the thread.Message ID:
@.***>

It's the same for me.
I don't carry on these projects for money: probably with the time I spent, I could by a few thousand cameras.
And with the donations, 10-20 cams.
It's only a passion and it allows you to learn new things.


Index full mainnet blockchain

This is done for list, although not for find. Final pruned database size is 90 GiB.


Ask to create a new person if the person is not found while adding to the household

Resolved https://github.com/LiveChurchSolutions/ChumsApp/pull/208


outputDataset broken for TaskChains

@vlimant just reported that both the ReqMgr API [1] and a couch view [2] is broken when:

it's a TaskChain request with no AcquisitionEra (probably ProcessingString as well) in the main dict
the request is still not assigned.

These views are being used to check whether there will be dataset collision (different requests creating the same output dataset).
It's quite important, but since today is the last day of validation and we've lived with that since ever, I would push it only for HG1506.

and these are the views/apis
https://cmsweb.cern.ch/reqmgr/reqMgr/outputDatasetsByRequestName/vlimant_task_B2G-RunIIWinter15wmLHE-00013__v1_T_150430_120421_6714
https://cmsweb.cern.ch/couchdb/reqmgr_workload_cache/_design/ReqMgr/_view/byoutputdataset?key="/TprimeBToBW_M-1800_13TeV-madgraph/FAKE-v2/LHE"

the output curently is
['/TprimeBToBW_M-1800_13TeV-madgraph/FAKE-v2/LHE', '/TprimeBToBW_M-1800_TuneCUETP8M1_13TeV-madgraph-pythia8/FAKE-v2/GEN-SIM']
and
{"total_rows":166842,"offset":146174,"rows":[
{"id":"vlimant_task_B2G-RunIIWinter15wmLHE-00013__v1_T_150430_120421_6714","key":"/TprimeBToBW_M-1800_13TeV-madgraph/FAKE-v2/LHE","value":null}
]}
that request might get assigned soon

@ticoann certainly a good bug to be closed by the next upgrade

Hi Alan, Jean-Roch,  Sorry for the late reply. Second part of output dataset name B in /A/B/C, is constructed by combining Acquistion  Era and version,  so unless that is specified you won't have correct output dataset name. (Currently that is set when workflow is assigned).
So are you asking that acquisition era need to be set in request creation stage?

Seangchan, B should be
AcquisitionEra + "-" + ProcessingString + "-" + ProcessingVersion
for most of the workflows, these parameters are set during request creation.
Since it's broken only for TaskChain, I believe WMStats (or something else) is not picking these values from the inner dicts (Task1, Task2, etc)

Alan, yes, you are right but ProcessingString is optional.
what do you mean by "broken"? Is that acquisiton era is not picked up when task chain workflow is created but picked up when other workflow is created?
One other question, can acquisition era be differ between the tasks in the same TaskChain?

Alan, yes, you are right but ProcessingString is optional.

Hmmm, I thought it was mandatory... Maybe it's mandatory only during assignment.
By broken I meant it gets the default value (FAKE) when there is no AcquisitionEra parameter defined in the main dict (during creation). It should get those from inside the tasks.

One other question, can acquisition era be differ between the tasks in the same TaskChain?

Yes, that's possible. The same happens for ProcessingString, they can differ among different tasks.


Encounter a problem when using get_polygons with (layer, datatype)

Dear Sir,
I just encountered a problem when trying to obtain all polygons with specific layer and datatype.
I tried to use get_polygons(by_spec=(x,y)) but the line 690 of library.py response an error message:
FlexPath doesn't have datatype property.
Then I tried to modify line #690 of library.py: "path.datatype" to "path.datatypes", then it solved the problem.

Thanks for the report!


Alan wants structured concurrency and parallel data processing

Brief summary
Alan wants to intermix data processing and he finds it difficult. He misses Kotlin's support for coroutines. Barbara laments the lack of structured concurrency or Rayon-like APIs.
Optional details

(Optional) Which character(s) would be the best fit and why?

[x] Alan: the experienced "GC'd language" developer, new to Rust
[ ] Grace: the systems programming expert, new to Rust
[ ] Niklaus: new programmer from an unconventional background
[x] Barbara: the experienced Rust developer

(Optional) Which project(s) would be the best fit and why?

Not sure.

(Optional) What are the key points or morals to emphasize?

Async libraries are very focused on I/O, but many folks mention wanting improved support for parallel tasks.

Two cents from the computational astrophysicist -- our work is indeed largely CPU-bound, not IO-bound. We have many compute tasks that run in parallel, but then must block waiting for the completion of "neighbor" tasks. Co-routines satisfy this, and the future / executor strategy I'm currently using "works", but it's sub-optimal:

none of my students can understand it
long compile times with async code
error propagation is awkward
compute closures must be 'static (see https://github.com/tokio-rs/tokio/issues/3162)

Here is an example of how we are currently using async blocks and the Tokio executor. Note how runtime.spawn(future).map(|f| f.unwrap()) is littered in with computations. Also note the excessive use of Arc and Clone due to 'static requirement. We cannot convince Tokio the borrowed data will outlive the task, even though we know it will.
I should also mention that we're only CPU-bound for single-node / multi-core calculations. On distributed-memory systems the "neighbor" tasks must be communicated across nodes, and it would be nice to treat upstream async tasks uniformly, whether it's a compute task or a network request.
In regards to Niko's effort to collect priorities from various user bases, here are ours:

code correctness, reproducibility
performance (< C will not do)
stupidness: I'm working with astronomy grad students and post-docs; we're not CS PhD's
portability: HPC sites typically have federalized module systems and Rust restores control to the scientist

A quick question about your specific case @jzrake -- what motivated you to use async for your code in the first place?  If it was just a single-node computation, I'm guessing that a non-async threadpool (or rayon) would have worked well.  Did async stem from the need to support multi-node computations (where async to talk over the network is useful)?  Or was it something else?

@eminence -- I've had the impression that an async executor would minimize core idling from blocking tasks. Since .await  signals the executor that a task is blocking, it can go look for tasks that could make progress. We do attain 60-70% core scaling with this approach, so it's at least viable, but the code's, well, kind of ugly. As I'm learning more, it seems like this compute pattern can be implemented with parallel iterators, and if so I much prefer the simplicity. That's why I got in touch with Niko ;)

As a data engineer who came to Rust from Scala and has worked extensively with Spark and Scala's fabulous async ecosystem, I'd like to offer some thoughts (and if I have time, could try writing up this story as well).
Points:

I find what I'm missing from Scala in Rust the most are the fabulous Future and async stream processing libraries.  Example is https://monix.io, with an extremely rich Observable API (this is like the Stream).    I'm aware of and have used Rust's streams, stream-ext, and stream-ext-try.  What I miss from Scala:  not having to worry about lifetimes, whether I need to use async or async move, cloning or making something Arc, etc;   not having to worry about Result and how that completely changes what operators I need to use in the backend to extract out the Results;   and the overall completeness and smoothness of the APIs.
It's not the easiest to figure out exactly what paradigm to use, and to debug error messages from that.  For example, let's say I want to start really simple.  I have this:

   let writes = batches.iter().map(|batch| self.serialize_batch_to_parquet(....) ).collect::<Vec<_>>();
   join_all(writes)

I just want to join a list of multiple futures.... this would be super easy pattern in Scala.  In Rust the above, if serialize_to_parquet is async and takes &mut self, this does not compile, because the compiler believes we cannot have multiple futures that mutate self I think.   In this case however I can guarantee that self is not really mutated at the same Time (actually self is not mutated at all, it is just mut because it is a "write" function that mutates data on disk)    Maybe this isn't a great example, but there are frictions like that to think through.  I'm not sure how to express it properly.
As an aside, concurrent processing is very different from the "data processing" that most people do.  Most data scientists and engineers aren't really distributed systems people, and use tools without understanding async.  They mostly come from Python (is there a character for the Python data scientist?  If there isn't, there should be, this is a very important category!  I guess Alan is that person, but JVM is very different from Python/Ruby).   They might use tools like Spark, or Ray, which enable parallelism and distribution, but without the user really having to understand it.  They write code that is almost always single threaded.   So keep that in mind - the key to making async work for these folks is likely to make async "disappear" effectively behind other APIs which "look blocking".

Up till now parallel processing is definitely very easy. Just change iter to iter_par but that won't work for sync rust. At least everything needs to change to async function. It is still easy (when not from scratch) but requires more effort than a single line change. Changes include:

figuring out which function and all code within it that blocks (it's like everything is unsafe and you need to audit everything to prevent getting deadlock)
if any issue with sync, need to change it to async counterpart, like sync lock to async lock
changing function signatures to async
adding await points for all async functions
use join to merge multiple futures together and await

I think only the first and second part is more troublesome such that a lot of stuff needs to be check one by one.

Some links WRT Structured Concurrency to consider:
https://vorpus.org/blog/notes-on-structured-concurrency-or-go-statement-considered-harmful/
https://en.wikipedia.org/wiki/Structured_concurrency
Frankly I consider SC to be essential.

What are the gaps in Rust today wrt structured concurrency?   One could argue that waiting for async work to finish and being able to return errors in a natural way that fits the language paradigm is what current async-await is designed to do already.

On Jul 11, 2021, at 11:31 PM, Matthias Urlichs @.***> wrote:
Some links WRT Structured Concurrency to consider:
https://vorpus.org/blog/notes-on-structured-concurrency-or-go-statement-considered-harmful/ https://vorpus.org/blog/notes-on-structured-concurrency-or-go-statement-considered-harmful/
https://en.wikipedia.org/wiki/Structured_concurrency https://en.wikipedia.org/wiki/Structured_concurrency
Frankly I consider SC to be essential.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub https://github.com/rust-lang/wg-async-foundations/issues/107#issuecomment-878009942, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAIDPW6NG5SJQJKREVVKLLLTXKD4HANCNFSM42AG43FQ.

There's also the ability to cancel other tasks seamlessly. You need them for a heap of reasons I could expound upon for the next ten pages; suffice it to say that SC with cancellation is what makes any nontrivial code using Python+asyncio (unstructured, abstraction: tasks+futures) a tedious and barely-debuggable mess while Python+trio (structured, has scoped cancellation, doesn't have/need user-visible Task nor Future classes) is the polar opposite IME.
I'd like async Rust to be the latter, and I'd go as far as to say that if Niklaus and Barbara want to keep their sanity they need it to be the latter.
https://rust-lang.github.io/async-book/01_getting_started/04_async_await_primer.html has these nonexisting chapters 6.3 thru 6.5 …

NB, it's possible to code up an SC-style library using Future/Task as low-level primitives. The Python anyio library does this, so writing the same thing in Rust is certainly possible.
Still needs decent cancellation support though.

Current cancellation system makes this impossible, as reminded here: https://www.reddit.com/r/rust/comments/wltcf8/announcing_rust_1630/ijwx3mz/

Can be leverage this from C++ community? https://github.com/kirkshoop/async_scope/blob/main/asyncscope.md


3.0.0: error on custom functions

First of all, great library, thanks for all of the great work.
There seems to be an error that started occurring in the 3.0.0 branch related to custom functions.
How to reproduce this issue:
1. create the tables, functions and populate the database
# A first table
create table public.foo (
    id serial not null primary key,
    name text
);

# A second table
create table public.bar (
    id serial not null primary key,
    created_at timestamp default now(),
    foo_id int not null references public.foo(id)
);

# A function that returns the last item of the second table
create function public.foo_last_bar(foo public.foo) returns bar as $$
    select *
    from bar
    where bar.foo_id = foo.id
    order by created_at desc
    limit 1
$$ language sql stable;

# Some data
insert into foo (name) values ('postgraphql');
insert into bar (foo_id) values (1);
insert into bar (foo_id) values (1);

2. Execute a query in GraphiQL:
fooById(id: 1) {
    lastBar{id}
}

3.A: The 3.0.0 branches' output:
{
  "data": {
    "fooById": {
      "lastBar": null
    }
  },
  "errors": [
    {
      "message": "value.get is not a function",
      "locations": [
        {
          "line": 2,
          "column": 14
        }
      ],
      "path": [
        "fooById",
        "lastBar",
        "id"
      ]
    }
  ]
}

3.B: The 2.6.0 branches' output:
{
  "data": {
    "fooById": {
      "lastBar": {
        "id": 2
      }
    }
  }
}

Any idea what might be causing this?

Thanks for reporting this, just ran into it today.  For others who stumble upon this issue, I'm currently working around it by returning a list of results with the "setof" modifier instead of a single row variable.

It is crashing at this line:
https://github.com/calebmer/postgraphql/blob/ade728ed8f8e3ecdc5fdad7d770c67aa573578eb/src/postgres/inventory/type/PgClassType.ts#L59
The value is not a Map and therefore does not have a .get() function.
I changed it to a simple
         getValue: value => return value[fieldName]

I guess that the value should be a map, but fails somewhere in the stack.
Stacktrace:
TypeError: value.get is not a function
    at Object.getValue (postgraphql/src/postgres/inventory/type/PgClassType.ts:60:26)
    at resolve (postgraphql/src/graphql/schema/collection/createCollectionGqlType.ts:53:70)
    at resolveOrError (postgraphql/node_modules/graphql/execution/execute.js:474:12)
    at resolveField (postgraphql/node_modules/graphql/execution/execute.js:460:16)
    at postgraphql/node_modules/graphql/execution/execute.js:274:18
    at Array.reduce (native)
    at executeFields (postgraphql/node_modules/graphql/execution/execute.js:271:42)
    at collectAndExecuteSubfields (postgraphql/node_modules/graphql/execution/execute.js:719:10)
    at completeObjectValue (postgraphql/node_modules/graphql/execution/execute.js:701:10)
    at completeValue (/Volumes/SMPL/postgraphql/node_modules/graphql/execution/execute.js:598:12)

Either it was never a Map or is just sometimes not a map (@calebmer ?), I am not sure. It's the first time I touched the PostGraphQL code and even TypeScript.
A quick and dirty workaround would be:
         getValue: value => {
            if(value instanceof Map) {
              return value.get(fieldName)
            } else {
              return value[fieldName];
            }
          }

There’s a fix for this here: https://github.com/postgraphql/postgraphql/pull/409
Let me know if that works 👍
@EyMaddis the value should always be a map. The issue was in a recent refactor that I did I forgot to convert the database value (an object) into a map 😣
The fix is in the PR.

Fixed in 3.1.0 🎉


📦 in SwiftPkgUpdates tweets seems to break twitter search

I cannot find any tweets of new packages. For instance:

But also searching for a known string in a "new package" tweet like the following

doesn't return any results:

I suspect this is due to the 📦 character.

Secretly, I've never been a fan of using these emojis in this way. Not enough to do anything about it, but if there's an excuse to remove them I'm all in! 😂

It's bizarre, it does work, sort of, just not with the "new package tweets":

I've tried searching for the "new" emoji 🆕 (to see if it'd be a valid replacement) and that just fails outright:

Options are:

replace 📦 with 🚀 - I've tested a search and that seems to work with 🚀 as the first character
leave 📦 and just live with the search issue
replace 📦 with NEW: (and ⬆ with UPDATE)
replace 📦 or New: (and ⬆ with Update:)

I dislike 3 and 4 because they take away available characters from the package info unnecessarily. If we went with New / Update, we should at least drop the just released and just added from the rest of the tweet.
I do prefer the emojis over plain text because makes the tweets a little less bland but mostly because I can very easily see at a glance if it's a new package or an update.
My order of preference would be: 1, 2, gap, 4, 3.

Secret option number 5... None of the above. All of the information is in the tweet already:

"Apple just released swift-nio-http2 v1.19.0 – HTTP/2 support for SwiftNIO"
"BrightDigit just added a new package, Swiftube"

That's hard to parse even with the bolding, which we won't have in tweets... Why make it so hard to digest? :)

I'll leave the choice to you then. My vote would be for just the plain tweet like I suggested but that's due to my dislike of using emojis in this way.

Door number 2 it is then. Boom, another one bites the dust 🤣


Buttons and links on panel won't work if integration wasn't done using a permanent token.

Plugin version:
1.2.0
PHPStorm Version:
PhpStorm 2021.1
Build #PS-211.6693.120, built on April 7, 2021
On the youtrack panel no buttons or links work (and no tasks are shown) if the integration wasn't done using a permanent token.
Since the buttons nor links will work you will have to use the menus Settings-Tasks-Server to insert a permanent token. After that the buttons in the panel will work and the tasks will appear.

Hi @AplouroVV,
Thank you for reporting it. Am I getting it right that you had login\password auth configured before?

Yes I did. Sorry for not being explicit.
It was a project that I hadn't opened in a while and still was using login\password.

Got it, thanks. It should definitely be possible to open the plugin settings dialog and reconfigure everything.
Will check it out.

Fixed in 1.2.1


setting parameters of openCV tracking API in python

I'm trying to use openCV tracking API in Python for object tracking. I tried the code in this link and don't have any problem running the code. But, looking at the openCV documentation here, I realized there are parameters for each of the tracking algorithms. How can I set these parameters in python?
Note, this question was asked on StackOverflow

This is a issue tracker, not a support forum. StackOverflow is the correct place for this kind of questions (or http://answers.opencv.org/questions/), no need to duplicate the same question here. If there's a bug related to OpenCV python bindings, report it to the upstream OpenCV repository https://github.com/opencv/opencv/issues.

So you say that this repo is not OpenCV - python binding? Then the name is confusing...

There's no OpenCV source code in this repo. This repository simply generates pre-built packages with OpenCV binding generators (https://docs.opencv.org/ref/master/da/d49/tutorial_py_bindings_basics.html).
The only Python code which ships with this package is in this file: https://github.com/skvark/opencv-python/blob/master/cv2/init.py

well, I was using this and install it throw pip so it was natural for me ask first here...


refactor: swap out cypress action for cache

Cache doesn't seem to be restoring, but gonna merge this in and see if the same behavior persists on main.


Add django-defender support

Add django-defender brute force protection
Add ability to customize JWT cred failure error message

Let me know if you want any tweaks.

I close PR https://github.com/flavors/django-graphql-jwt/issues/64#issuecomment-460763508.


Old kbs docker image in docker-compose.yml

When the kbs cluster is started by running 'docker compose up -d'  with the current docker-compose.yml file,  the kbs reports the following error message.
user@host:~/github/kbs$ docker compose up -d

user@host:~/github/kbs$ docker logs kbs-kbs-1
error: unexpected argument '--config-file' found

tip: a similar argument exists: '--config'

Usage: kbs <--socket <SOCKET>|--timeout <TIMEOUT>|--private-key <PRIVATE_KEY>|--certificate <CERTIFICATE>|--insecure-http|--config <CONFIG>|--auth-public-key <AUTH_PUBLIC_KEY>|--insecure-api>

For more information, try '--help'.

The bug was fixed as https://github.com/confidential-containers/kbs/blob/main/kbs/docker-compose.yml#L9-L11
I test locally and succeed to start.
Can this issue be closed? @niteeshkd

Yes, please go ahead and close it. It works for me too.


API1600 support for Volume

Description
[API1600 support for Volume]
Issues Resolved
[]
Check List

[ ] New functionality includes testing.

[x] All tests pass ($ rake test).

[ ] New functionality has been documented in the README if applicable.

[ ] New functionality has been thoroughly documented in the examples (please include helpful comments).

[x] New endpoints supported are updated in the endpoints-support.md file.
[x] Changes are documented in the CHANGELOG.

needs to correct the spec/unit/resource/api1600/synergy/volume_spec.rb file.

done


add logging and update ngrok-go

What
Pulls in the latest ngrok-go and plumb in the logger so that we can get
more debug info from it.

Current dependencies on/for this PR:

main

PR #271   👈

This comment was auto-generated by Graphite.


Support Zipkin v2

Schema: https://github.com/openzipkin/zipkin-api/blob/master/zipkin2-api.yaml

I'm working on this

I am transforming v2 to zipkin thrift and then storing it. Basically the same approach as for json.
I am wondering whether anybody knows a better solution.


Please support Apple M1/M2 GPU

++ How I can use it on m2 chip? Anybody know? Or it's doesn't support?


AMPQ-554: Namespace Additions

JIRA: https://jira.spring.io/browse/AMQP-554

ThreadFactory on connection factory
NamingStrategy on anonymous queues

Reverted parser; removed new factory bean; squashed; pushed.

Merged as https://github.com/spring-projects/spring-amqp/commit/a3412d554fd9c7eaa81fad0d5dcf934c3ec922aa after the Docs fix and What's New conflict fix.


Specify a recursivity depth

Hi !
Thanks for this great plugin for django rest framework. Is there any way to specify the depth of the recursion ?
I tried using the class Meta depth attribute but I don't think the field uses it. What would be the best approach to this ?
Best regards,

This is not currently supported. I would suggest pruning the dataset before you try to serialize it. If you are deserializing something, then you could deserialize it and then prune.

I'm using it on a ModelViewset so I don't know how I could prune it ?
There is no queryset or get_queryset method in the arguments of the field...

Can you set the queryset in the ModelViewSet?

No... My datastructure is really simple:
# models.py
class Node(models.Model):
    parent = models.ForeignKey('self', related_name='children')

# api.py
class NodeSerializer(serializers.HyperlinkedModelSerializer):

    parent = serializers.HyperlinkedRelatedField(
        view_name='api:parameter-detail',
        queryset=Node.objects.all(),
    )
    children = RecursiveField(many=True, allow_null=True)

    class Meta:
        model = Node
        fields = ('parent', 'children')
        depth = 2

class NodeViewSet(viewsets.ModelViewSet):
    queryset = Node.objects.all()

I cannot prune or filter the queryset. It will depend on which initial node is requested. I need to limit the depth of the RecursiveField only... Or maybe I'm missing something ?

You could look in to the django treebeard package for a tree with more features. Or  django mptt. I believe there are probably others as well.
Or I suppose you could extend the recursive field to add the functionality your desire

I'll just extend the recursive field to add the functionality I need. Both mptt and treabeard have limitations or defaults that don't work with my project.
Thanks.


Add "Open in External Program" option

This PR adds "Open in External Program" option to filesystem dock. By default it opens the file in the system's default program, but the program can be configured with editor settings for some file types:
filesystem/external_programs/raster_image_editor - for textures and images
filesystem/external_programs/vector_image_editor - same as above, but with svg/z extension
filesystem/external_programs/audio_editor - for audio streams
filesystem/external_programs/3d_model_editor  - for 3D model scenes
text_editor/external/exec_path - for script files
https://user-images.githubusercontent.com/2223172/201209760-1f33403f-dfe7-40d8-b443-c93e85537be4.mp4
Closes https://github.com/godotengine/godot-proposals/issues/328
Partially addresses https://github.com/godotengine/godot-proposals/issues/5759
Can be used as workaround for #63683
EDIT:
There is some issue when using the console mode editor on Windows. The opened program will be closed when console is closed.

Thanks!

This is great!
Having a customizable keyboard shortcut for this action would be really nice too.

Feel free to open a PR with the shortcut.

I don't know if this is intentional, but the buttons open the Directory picker instead of a File picker.


Optimize binary size

The compiled cloudflare_worker wasm is currently around 1.2MB. The opt-level and lto tricks didn't reduce that. It's clearly possible to make small wasm binaries. Investigate the easiest change possible to make this one smaller.
The twiggy command identified table[0] as the main culprit. I think that might have to do with the use of JS callbacks? Judging by the MDN article and Lin Clark's article.
Things I didn't try:

get rid of format!
abort on panic
no_main
no_std

Articles I didn't read:

https://rustwasm.github.io/book/reference/code-size.html
https://mender.io/blog/building-mender-rust-in-yocto-and-minimizing-the-binary-size
https://arusahni.net/blog/2020/03/optimizing-rust-binary-size.html

I was wrong about table[0]. Useful output is available in a dev build, e.g.:
(cd cloudflare_worker; ~/.cache/.wrangler/wasm-pack-0.10.0/wasm-pack build --target no-modules --dev) && twiggy dominators cloudflare_worker/pkg/cloudflare_worker_bg.wasm | less
or likewise twiggy top

The wasm is reduced from 1.2 MB to 993 KB by removing disabling the pem parsing code
 fn get_der(pem_text: &str, expected_tag: &str) -> Vec<u8> {
+    todo!();
-    for pem in ::pem::parse_many(pem_text) {
-        if pem.tag == expected_tag {
-            return pem.contents;
-        }
-    }
     panic!("The PEM file does not contains the expected block");
 }

We could find an alternative pem parser that takes less than 240 KB.


[QUESTION] Export multiple external images for each rows

Prerequisites

[X] Have read and understood: https://github.com/Maatwebsite/Laravel-Excel/blob/3.1/.github/SUPPORT.md
[X] Checked if your Laravel Excel version is still supported: https://docs.laravel-excel.com/3.1/getting-started/support.html#supported-versions
[X] Checked that your question isn't already asked before.
[X] Filled in the entire issue template

Versions

PHP version: 7.2.7
Laravel version: 6.1.0
Package version: 3.1.17

Description
Hello, i want to export multiple external images (max 4 images, can be empty) each row into excel. I already tried Export from View.
It show error :

But if i open the image, the image is exists. Please help me.
Additional Information
array data (as $data in controller) :

app\Exports\ExcelExports.php :

resources\views\po_pdf.blade.php :

function in controller :
return Excel::download(new ExcelExport($data), 'Purchase Orders.xlsx');

i've got the same issue, have got you got the solution yet?

i've got the same issue, have you got the solution yet?

same issue.. how to change setpath to setImageResource to get image from url?

PhpSpreadsheet doesn't allow external images, store the images on your disk first.


'SIGGRAPHGenerator' object has no attribute 'model'

when running on MAC（python3.5.4）,I encountered the following problem:'SIGGRAPHGenerator' object has no attribute 'model'
I wonder how to fix it?
Traceback (most recent call last):
File "test.py", line 40, in
model.setup(opt)
File "/Users/joanna/Desktop/colorization/colorization-pytorch-master/models/base_model.py", line 42, in setup
self.load_networks(opt.which_epoch)
File "/Users/joanna/Desktop/colorization/colorization-pytorch-master/models/base_model.py", line 136, in load_networks
self.__patch_instance_norm_state_dict(state_dict, net, key.split('.'))
File "/Users/joanna/Desktop/colorization/colorization-pytorch-master/models/base_model.py", line 116, in __patch_instance_norm_state_dict
self.__patch_instance_norm_state_dict(state_dict, getattr(module, key), keys, i + 1)
File "/Users/joanna/opt/anaconda3/envs/color/lib/python3.5/site-packages/torch/nn/modules/module.py", line 576, in getattr
type(self).name, name))
AttributeError: 'SIGGRAPHGenerator' object has no attribute 'model'

me too.
did you make it out in the end?


Fix bug, buffered hashes of different eth versions from same peer

upon filling request from buffer, only the eth version of the request being filled was checked, not of the buffered hash. this fix allows a peer to buffer hashes of different eth versions. closes https://github.com/paradigmxyz/reth/issues/6137#issuecomment-1901230718.

ah, I see.
separately, I the eth68_meta map is an unlimited lru map, should this just be a regular map? is there any difference to peek vs get, because we're mixing those for eth68_meta

in include_eth68_hash I call peek because I know that the hash I will lookup is among the last recently used entries in eth68_meta. that's good enough, I can save the computation of re-ordering eth68_meta. there are 2 entry points to include_eth68_hash 1) pack_eth68_hashes and 2) fill_request_for_peer.

in the calling context of pack_eth68_hashes, I store the size metadata of previously unseen hashes* in eth68_meta, so I know I find they are lru since access to eth68_meta is always synchronous.
in fill_request_for_peer I check wether a buffered hash is of type eth68 by calling get, which means that, if it is, it's reordered to lru already.

*should only store the size meta for previously unseen hashes, but noticed now I store them for all hashes in an announcement. will open pr with fix.


Black bar in IOS landscape app, after taking portait scan

Expected Behaviour
Orientation returns to normal.
Actual Behaviour
black bar is visible on right side of screen.
Reproduce Scenario (including but not limited to)
Steps to Reproduce

add <preference name="Orientation" value="landscape" /> to your config.xml
install phonegap-plugin-barcodescanner
launch application, begin scan barcode
switch to portrait mode.
scan barcode
When returned to app, black bar appears on right (landscape mode)

Platform and Version (eg. Android 5.0 or iOS 9.2.1)
IOS 9.3.4
Cordova CLI version and cordova platform version
cordova --version - 6.4.0
cordova platforms - IOS

Plugin version
phonegap-plugin-barcodescanner 6.0.5 "BarcodeScanner"

Sample Code that illustrates the problem
Logs taken while reproducing problem

We are also having this problem.

are you using cordova-plugin-statusbar?
Make sure you are using latest version

@jcesarmobile
Thanks for that tip. It is an issue with the statusbar plugin.
For anyone who came to this by google or w/e.
StatusBar.hide(); StatusBar.show();

resets the view so the black bar is gone.

You shouldn't need to do that, just updating the plugin to latest version should fix the issue

Unfortunately updating to the latest version did not fix the issue, I tried
downgrading a couple versions as well. :(
On Mon, Jan 9, 2017 at 3:15 PM jcesarmobile<EMAIL_ADDRESS>wrote:

You shouldn't need to do that, just updating the plugin to latest version
should fix the issue
—
You are receiving this because you modified the open/close state.
Reply to this email directly, view it on GitHub
https://github.com/phonegap/phonegap-plugin-barcodescanner/issues/398#issuecomment-271438392,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AB1z80MEZqP0ZZYV-WVrQV9ft6PA3TDtks5rQr-GgaJpZM4LdNHy
.

--
Cheers,
Eric Wooley

Yeah, sorry, I thought it was released.


tesseract from git crashes with particular file & language data

Environment

Tesseract Open Source OCR Engine v4.00.00alpha with Leptonica
eba0ae3b88a46a93e981770caa0b148d65cc4468
*11.1-STABLE FreeBSD 11.1-STABLE #0 994fc1be1(freenas/11-stable): Sun Aug 27 05:02:31 UTC 2017
64 bit

-rw-r--r--  1 root  wheel  20193615 Nov 11 16:19 /usr/local/share/tessdata/deu.traineddata
-rw-r--r--  1 root  wheel  15400601 Nov 11 16:19 /usr/local/share/tessdata/eng.traineddata
MD5 (/usr/local/share/tessdata/eng.traineddata) = 4be3f51b55c0074d8c6b1ee5b5100f95
MD5 (/usr/local/share/tessdata/deu.traineddata) = 1c809fc10ef1f6e561978ddb33e7a1b0
Current Behavior:
LD_LIBRARY_PATH=api/.libs:/usr/local/lib/gcc7 api/tesseract ~thilo/outa.png   out -l deu
Tesseract Open Source OCR Engine v4.00.00alpha with Leptonica
Warning. Invalid resolution 0 dpi. Using 70 instead.
Estimating resolution as 381
Detected 190 diacritics
contains_unichar_id(unichar_id):Error:Assert failed:in file ../ccutil/unicharset.h, line 513
Segmentation fault
without -l deu, it does not crash
Expected Behavior:
no assertation error
Suggested Fix:

https://github.com/tesseract-ocr/tesseract/issues?utf8=✓&q=is%3Aissue+is%3Aopen+contains_unichar_id
Make sure you have tessdata for deu from the best/fast repo.


Add an annotation making arguments final

Migrated from Google Code (issue 621)

Years later, I ran over this idea again and I'd like you to have one more look.

assigning parameters is sometimes the best solution, but sometimes a mistake
having a way to get a warning or an error on doing this could be helpful
AFAIK no static tool can handle this properly (an unconditional warning is useless)
Lombok is the only tool offering @NonFinal

I don't want the annotation anymore, all I'd like to have is a configuration like
lombok.finalArgs=true
which makes all args final, except for those marked by @NonFinal. I find this perfect, as it allows me to do everything, but forces me to be explicit about it. As parameter assignment is not very common, the visual clutter is no problem.


Fixes from peer review feedback

We made all changes/fixes based on the feedback on our peer review before we got our automated CI/CD to work so we are listing the changes made in an issue.
Here we will list the changes we all did:

fix: Feedback addressed by Lily, add defensive programming to arrange function (https://github.com/UBC-MDS/TidyverseToPandas/pull/78)

Fixes by Farrandi Hernando:

fix: Feedback addressed by farrandi, add badges to readme #79
fix: Feedback addressed by farrandi, remove Pyarrow deprecation/ pytest warning by adding dependency in poetry #71

Fixes by Sophia Zhao:

fix: Feedback addressed by Sophia, add pyptest coverage report to readme #82
fix: Feedback addressed by Sophia, fix select function column str #94

Fixes by Thomas Jian:

uploaded to PyPi and test Pypi so pip install works #81


Fix option tag on ie9 and ie8

Fix #583

I think you forgot to push something in your pull request. the optionInnerHTML function gets never called

... and please add some tests as well so we will be sure nobody will destroy your patch in future ;)

Yeh. i forget to add it on mkdom, already fix and create the test.

I have merged this into the dev branch thanks


typo

@KCCross  I see that the changes have been merged, but the online documentation has not been updated


Norwegian, Swedish and Danish translations for validation messages

Norwegian, Swedish and Danish translations for validation messages - courtesy of our client.

Thanks - I finally got to them!

I've just added batch files to build nuget packages for these satellite assemblies.
Maybe @girtsl can make a pull request with translated nuspec files? I'm thinking that the description tag should be in the target language. The nuspec files are located subfolders of the NuGet folder

Sorry, I don't speak in any of the languages above - they were provided by our client.
Also I'm not sure about the value of providing localized package metadata, but that's just my thoughts.

OK no problem girtsl. I agree myself that it might be not that valuable to localize the description of these satellite nuget packages.
I know Microsoft does it, so was thinking it would be nice if MembershipReboot followed suite.
@brockallen, do you think it's worth localizing the nuget metadata?

I'd skip it -- devs speak English (typically).


Add Additional Styling To Form

These are slightly opinionated changes but I added some extra styling that makes the form closer to other forms / sites we have... thoughts?

lgtm!


Cannot access image properties

I would like to access the image properties, such as the title, description (and possibly other properties, such as the date, tags, etc.). If I set a custom title via the GUI, the image title remains the file name (for example, if the file name is 2014_01.jpg, the title will be 2014_01).
Is it possible to get access to these properties?

Update: the title works (it's just a matter of emptying the cache).
However, is there a way of accessing the image properties - description, date?

There shouldn't be any caching when changing the photo title.
You can edit other properties using the info-box. Just press the "i"-Symbol on the top right when viewing a photo. Values like the date aren't editable at the moment.

I want to access the data from each photo using the Jekyll plugin. However, the data retrieved from Lychee does not contain the 'description' property. This is what I mean by accessing the image properties.
[Enhancement] Furthermore, it would be awesome if each image could receive additional properties created by the user.

The API of Lychee returns the description. I recommend to contact @tobru, the developer of the Jekyll plugin.
Custom information per photo would be a nice addition. It would be great if you could open a new issue for this feature request.

Managed it with the Jekyll plugin, thanks!


ability to install aegis when there is an existing spire rollout already

This is already doable I guess.
Just don’t run the makefile targets but without spire.
Adding a separate script should be sufficient for this (assuming the SPIRE has other components that Aegis needs installed already).

Done.


Preparing for 3.8 release.

Signed-off-by: Jon Morrow<EMAIL_ADDRESS>Check List

[X] New functionality includes tests
[X] All tests pass
[X] RELEASE_NOTES.md has been updated if required (not required for bugfixes, required for API changes)
[X] All commits have been signed-off for the Developer Certificate of Origin. See https://github.com/chef/chef/blob/master/CONTRIBUTING.md#developer-certification-of-origin-dco

The addition of ed25519 gems should get called out since that allows that with knife ssh.

:shipit:


REF: factor out dataset and layer creation for ogr_write

This just moves the setting up of the ogr dataset and layer objects for writing into a separate helper function, which should help with https://github.com/geopandas/pyogrio/pull/346

There is one failing build with GDAL main, but that's being addressed in https://github.com/geopandas/pyogrio/pull/353

Thanks!


Is there a limit to the size of the data to be encrypted/decrypted with Secure Cell, Seal Mode?

I have read the following sections of the docs but I couldn't find information on whether or not there is a size limit to the Uint8Array to be passed for a Secure Cell to encrypt/decrypt.

https://docs.cossacklabs.com/themis/languages/wasm/features/#seal-mode
https://docs.cossacklabs.com/themis/crypto-theory/cryptosystems/secure-cell/

Is there a limit? What is it?
Also, is there a limit for the size of the password? What is it?
Thank you very much!

The data format of Secure Cell allows up to 4 GB of data in a single cell. Other cryptosystems typically have the same theoretical restrictions due to their data formats and protocols using unsigned 32-bit integers for sizes.
There is no theoretical upper limit on the size of the key or the password. (There is a lower one: neither the data, the key, nor the password can be empty.)
Usually this doesn't come into play as practical limits are lower. This is why it's not documented explicitly.
As for WasmThemis, WebAssembly currently has 32-bit addresses so it could – theoretically – squeeze up to 4 GB in a single UintArray. However, you have to take into account that you need an equal amount of storage for the result to be returned, that there is other stuff in Wasm memory besides Themis, that the browsers puts limits on how much a single module can allocate, etc. The practical limit is lower. Effectively, you are unlikely to reach the limit of Themis before something else breaks.

Awesome, thank you very much for the fast and detailed response! :smiley:

Thank you @papb! I believe the question was answered, and we added improving docs task on our board.
I'm closing the issues, feel free to open new one if you have questions!


Add possibility to convert entries to input types if possible

Hello,
I'm using Joi and I try to migrate to valibot but it is one important feature I don't see in Valibot : Possibility to coerce directly all input part, not only for primitive or specific object.
I explain : In API validation, we have queryString : all value are seen as string but we use a schema declaring the types actually expected, even if everything is in string at the input. For example this is a type of schema :
const paginationSchema = Joi.object().keys({
    page     : Joi.number().integer().min(1).description('Current page'),
    pageSize : Joi.number().integer().min(5).description('Elements per pages'),
    search   : Joi.string().optional().description('Search criteria'),
    order    : Joi.array().items(Joi.array().items(Joi.string())).optional().description('ordering result'),
    lite     : Joi.boolean().default(false).description('False : return complete objects. True : return lite version'),
}).meta({ className : 'pagination' });

And queryString return this like :
{
    page : '0',
    pageSize: '25',
    lite: 'true'
}

for Boolean we have '1', '0', 'true', 'false',
for number we have '123'

I saw the coerse function but I want one thing made it automatically if we pass our schema in queryString part in our code: for example one schema can be used in query part, or other validation part, and for this, coerse is not required.
To make this with Joi, we just have to add option { convert : true } to schema validation.
It is possible to made this ? If not maybe in the future ?

Thanks for creating this issue! No, Valibot does not provide an option to automatically coerce or transform string values into other data types. With Valibot you have to use coerce to transform a value before validation or transform to do the same afterwards.

@fabian-hiller Would you consider adding such functionality, though? Not having it severely limits usefullness of valibot for validating REST API requests.

How would you design the API for this? Feel free to share sample code (how you want to write the schema) with me. Keep in mind that this library follows a modular design.

all coercedX types first attempt the coercion based on the hardcoded rules, then validate the coercion result, then apply any more granular rules defined.

We've implemented a bunch of coercion rules in TS back in the day when zod didn't have any, feel free to reuse any of the code if it helps:
https://github.com/lokalise/zod-extras/tree/main/src/utils

This is already possible with coerce. Do you prefer your solution for DX reasons? Read more here: https://valibot.dev/guides/methods/#coerce
const UserSchema = object({
  age: v.coerce(v.number([toMinValue(8)]), Number),
  isEmployed: v.coerce(v.boolean(), Boolean),
  // ...
});

Note: I plan to remove coerce when merging #502. The reason for this is that coerce is insecure because the input can be anything. This can lead to bugs and security risks, especially when used by less experienced developers. The new API to accomplish the same goal will look like this:
const UserSchema = v.object({
  age: v.pipe(v.unknown(), v.transform(Number), v.toMinValue(8)),
  isEmployed: v.pipe(v.unknown(), v.transform(Boolean)),
  // ...
});

This approach requires that the input type be explicitly defined. If you know you will always expect a string, you should change the scheme to the following
const UserSchema = v.object({
  age: v.pipe(v.string(), v.transform(Number), v.toMinValue(8)),
  isEmployed: v.pipe(v.string(), v.transform(Boolean)),
  // ...
});

@fabian-hiller This is neat, thanks!
One use-case which this doesn't seem to cover is array coercing. When you are dealing with request params, and you receive an array of strings consisting of a single elements, frameworks will parse that as just string. In that case you can't define a string schema, your input might be a string (which you want to convert to an array with one element) or an array with 2+ elements (in which case you just accept it as-is.
Would it be possible to either skip first validation step or have a check for XorArrayOfX? And to have a transform for arrays which does nothing if already correct type?

Would groups: v.pipe(v.unknown(), v.transform(Array) work correctly for both arrays and strings?

@fabian-hiller coerce works fine but I agree with you, it's insecure because it accept all possible value. I create functions toBoolean, toNumber to convert correctly only if source is string. Otherwise, I return the passed value to avoid unwanted conversion of type : For example, Number(null) return 0 and Number(undefined) return NaN


Force track/sector/byte geometry and fill missing/bad blocks with provided value

Sometimes, a raw flux dump will have bad or missing sectors. This leads to output from disk-analyse that will have missing blocks, which can lead to an unusable, truncated image.
Example of a standard IBM 3740 8" disk (77 tracks of 26 128-byte sectors) with this issue:
$ disk-analyse -v -i --format=ibm --ss=0 --end-cyl=76 unk02.hfe unk02.img
T0.0-61.0: IBM-FM DD (26 128-byte sectors, 3328 bytes)
T62.0-63.0: IBM-FM DD (25 128-byte sectors, 3200 bytes)
T64.0-67.0: IBM-FM DD (26 128-byte sectors, 3328 bytes)
T68.0: IBM-FM DD (25 128-byte sectors, 3200 bytes)
T69.0-75.0: IBM-FM DD (26 128-byte sectors, 3328 bytes)
T76.0: IBM-FM DD (25 128-byte sectors, 3200 bytes)
$ ls -la unk02.img
-rw-r--r-- 1 1001 1001 255744 Nov 29 16:49 unk02.img
$ dc
26 128 * 77 * p
256256
255744 - p
512
128 / p
4

In this case, the OS knew there are 4 bad blocks and mapped around them, but the truncated image produced by disk-analyse cannot be used by the system (or its emulation).
It would be nice in these cases to replace the bad or missing blocks with a static byte - for instance, e5 or 00. Otherwise, hex editing of the file is required to produce a usable sector dump.

I'd be happy to contribute a fix for this, but I'd like some guidance on whether this is desired, and what shape the CLI  should take to support this option - as both the C/H/S format and fill value would need to be specified. The former may be best as an extension of the already-provided format functionality, but I'm not sure.

Yes there are two options. One is to allow specification of C/H/S/R/N etc on command line (or probably more likely within the formats file) and plumb that through to ibm.c. Another easier but less morally righteous approach would be to extend ibm_img.c to support FM. You will see this latter analyser has the track structure described in an extended struct track_handler.

A disadvantage to only using formats is that it could be painful to override for unusual disks - but if we adopted a simple mnemonic, or allowed multiple options per format, that might work well. As an example, you have ibm_pc_dd right now, but that can be 1- or 2-sided, 8 or 9 sectors per track, etc. Do you split ibm_pc_dd out into all of the subtypes? Or do you have the code make a best guess - which it might get wrong, and you'd need to override on the cli anyway?
That said I see how big formats has gotten with special cases for video game copy protection special cases, so maybe that's the best approach in the long run. It'd require a large effort (read: more than I could do myself) to retrofit that file with all of the information.
In C/H/S/R/N what are R and N?

The specific handler such as ibm_pc_dd don't really guess at all. That one is hardcoded to 9spt. However single- vs double-sided can be specified on the command line, and that should work.
The original purpose of the analyser was specifically for copy protections. Hence lots of single-purpose analysers. The IBM stuff got added later and the more flexible parameterisation that would make sense for IBM was missing and never got added.
CHRN is the 4-tuple in every IBM sector header, Cyl, Head, Sector ID (called R for some reason), Sector Size (N = log_2(Size/128)). S is another name for R or N, I suppose that's why the proper docs don't use S!


[DUBBO-4982] add the no-arguments construct for TypeDefinition #4982

What is the purpose of the change
fix #4982

Codecov Report

Merging #4983 into master will decrease coverage by 0.1%.
The diff coverage is 100%.

@@             Coverage Diff              @@
##             master    #4983      +/-   ##
============================================
- Coverage     64.02%   63.91%   -0.11%
+ Complexity      452      451       -1
============================================
  Files           769      769
  Lines         33163    33165       +2
  Branches       5230     5230
============================================
- Hits          21231    21198      -33
- Misses         9512     9546      +34
- Partials       2420     2421       +1

Impacted Files
Coverage Δ
Complexity Δ

...ubbo/metadata/definition/model/TypeDefinition.java
42.22% <100%> (+2.68%)
0 <0> (ø)
:arrow_down:

.../apache/dubbo/qos/protocol/QosProtocolWrapper.java
65.85% <0%> (-17.08%)
0% <0%> (ø)

...ache/dubbo/remoting/transport/AbstractChannel.java
75% <0%> (-12.5%)
0% <0%> (ø)

.../remoting/transport/netty4/NettyServerHandler.java
61.9% <0%> (-9.53%)
0% <0%> (ø)

.../remoting/transport/netty4/NettyClientHandler.java
61.4% <0%> (-7.02%)
0% <0%> (ø)

...ng/transport/dispatcher/all/AllChannelHandler.java
51.42% <0%> (-5.72%)
0% <0%> (ø)

...ng/exchange/support/header/HeartbeatTimerTask.java
73.68% <0%> (-5.27%)
0% <0%> (ø)

.../org/apache/dubbo/remoting/ExecutionException.java
15.78% <0%> (-5.27%)
0% <0%> (ø)

...onfig/spring/extension/SpringExtensionFactory.java
80.48% <0%> (-4.88%)
0% <0%> (ø)

...e/dubbo/remoting/transport/netty/NettyChannel.java
57.64% <0%> (-4.71%)
20% <0%> (-1%)

... and 8 more

Continue to review full report at Codecov.

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


SignUp is not permitted for this user pool

I tried to make myself a new user.

We actually don't want to allow this - at least not at this time. I think there is a vue prop that will disable the sign up option.

Sounds good.

Let me find the Vue Prop to disable creating new users.
I can see how this could be a security issue if a non admin user created other users for their friends.

This is closed from this pull request.
https://github.com/aws-samples/aws-efs-simple-file-manager/pull/48


Do you know how to convert line height to relative units?

In text editor you set line spacing as relative units -- 1, 1.5, 2, etc but in caracal the only option is to set line height in twips. I assume it should some how depends on font size (in half points).
Do you know how to convert font size to line hight if I know font size and relative line spacing?

I know, it's not exactly intuitive.  It's covered in the README here.  Note the apology in the text! :)

@jdugan I've seen this section and understand what are twips and half points. But the question is in what units measured line spacing? As I understand, line spacing is not line height, right?
I have to convert business requirement (make line spacing 1.5) to line height in twips. Any idea?

Ah, sorry.  I misunderstood your question.
Right now, line height isn't adjustable on individual text runs, only at the custom style level via the line attribute.  If you want the line spacing to be a certain value by default, the easiest thing to do is to override the default styles accordingly.  If you create a custom style with the same ID as a default style, you'll override it.
In terms of calculation, you'd set line to font_size_pts * 20 * factor.  So, if the current font size is 12pt and you want 1.5 spacing, you'd do 12 * 20 * 1.5 to yield a line value of 360 (twips).
Note: I presume OOXML allows line settings at the run level, so that might be easy to patch into the library by adding a new attribute to the paragraph and text models and the corresponding XML attribute to the document renderer.

That was my first thought. But unfortunately font_size_pts * 20 * factor formula does not work.  For example if you set line height to 1.5 this way font_size_pts * 20 * 1.5 the actual line spacing in document will be 1.3, not 1.5.
I've done some calculations and the formula should be font_size_phs * 24 * factor
This document demonstrates relation between line hight and line spacing.
@jdugan thanks for support, I really appreciate your work!

It looks like  I was wrong. Line spacing doesn't depend on font size at all. I dug into "ECMA-376, Second Edition, Part 1 - Fundamentals And Markup Language Reference" and it states the following about <w:spacing w:line="xxx" /> element.

This attribute specifies the amount of vertical spacing between lines of text within this paragraph.
If this element is omitted on a given paragraph, its value is determined by the setting previously set at any level of the style hierarchy (i.e. that previous setting remains unchanged). If this setting is never specified in the style hierarchy, then no line spacing shall be applied to lines within this paragraph.
If the value of the lineRule attribute is either atLeast or exactly, then the value of this attribute shall be interpreted as twentieths of a point. When the value of the lineRule attribute is either exactly, the text shall be positioned as follows within that line height:

When the line height is too small, the text shall be positioned at the bottom of the line (i.e. clipped from the top down)
When the line height is too large, the text shall be centered in the available space.

If the value of the lineRule attribute is auto, then the value of the line attribute shall be interpreted as 240ths of a line, in the manner described by the simple type's values.
[Example: Consider the following WordprocessingML paragraph which should have an inter-line spacing of 1.15 times the line height. This constraint would be specified using the following WordprocessingML:
<w:pPr>
   <w:spacing w:line="276" w:lineRule="auto" />
</w:pPr>

The lineRule attribute value of auto specifies that the value of the line attribute is to be interpreted in 240ths of a single line height, which means that the net spacing is 276/240ths of a line or 1.15 lines tall. end example]

Thus, since our default paragraph style has w:lineRule="auto" set:
<w:docDefaults>
    <w:pPrDefault>
      <w:pPr>
        <w:spacing w:lineRule="auto" w:before="0" w:after="0" w:line="320"/>
      </w:pPr>
    </w:pPrDefault>
</w:docDefaults>

and this value inherited by all styles, to calculate relative line spacing you have to use the following equation: line_height = 240ths * factor.

Line spacing 1 is 240ths
Line spacing 1.5 is 360ths
Line spacing 2 is 482ths
etc.


Fix 215(Product grid cut-off on small screens)

Description of changes
This PR resolves #215 by reducing the tab title length and makes the grid height dependent on the number of entries in the grid.
Technical details
This is a dirty fix, since it forces the tab title specification according to the layout and not the other way around.
There should be a better solution with navigatable tabs akin to the example tabsheet but this navigation seems to be broken in this tabsheet.
Additional context
Adaption to smaller screens should be set in future via specific Media breakpoints in the responsible CSS sections

 Fix issue #215 (Product grid cut-off on small screens)

 Fix issue #215 (Product grid cut-off on small screens)

As previously discussed I'm unsure how to proceed here since it's a time consuming trial and error process with little reward.

As previously discussed I'm unsure how to proceed here since it's a time consuming trial and error process with little reward.

This PR is outdated and will be closed


[deep-link][v2] onOpenUrl Listener is being triggered when mounting even if the even was already processed

Hey there, I am trying to setup the onOpenUrl listener on my Tauri app, which is using React and React Router on the FE.
I have setup a single hook to hear on the frontend for the deep links event and generate a redirect based on the information.
What I see is that when the redirect is triggered, a new listener will be mounted and I will get the deep link event again.
I have already checked that the issue is not the double mounting React does on dev builds.
Is this a bug? Or I am missing something?
Including a small snippet of the hook:
import { onOpenUrl } from "@tauri-apps/plugin-deep-link";
import { useEffect, useRef } from "react";
import { useNavigate } from "react-router-dom";

export const UseDeepLinkUrl = () => {
  const navigate = useNavigate();
  const isListenerRegistered = useRef(false);

  useEffect(() => {
    if (isListenerRegistered.current) {
      return;
    }

    const unlisten = onOpenUrl((url: string[]) => {
      console.log("url", url);
      const path: string = url[0].split("://")[1];
      console.log("Setting link to:", path);
      navigate(path);
    });
    isListenerRegistered.current = true;

    return () => {
      unlisten.then((f) => {
        console.log("unlisten", f);
        isListenerRegistered.current = false;
        return f();
      });
    };
  }, []);

  return null;
};
export default UseDeepLinkUrl;

Taking a glance at the code and now I understand why this is happening:
export async function onOpenUrl(
  handler: (urls: string[]) => void
): Promise<UnlistenFn> {
  const current = await getCurrent()
  if (current) {
    handler(current)
  }

  return await listen<string[]>('deep-link://new-url', (event) => {
    handler(event.payload)
  })
}

I understand that the getCurrent() may be be useful if the deep link is used to start new instances, but if you are using a single instance and navigation then this causes issues. For me just using the listen event without the getCurrent call did the trick for me

I think I am running into the same thing you were. When you say that you got rid of the getCurrent, was it something like this? It tried this but the onOpenUrl_ doesn't seem to be firing.
export async function onOpenUrl_(handler: (urls: string[]) => void): Promise<UnlistenFn> {
  return await listen<string[]>('deep-link://new-url', (event) => {
    handler(event.payload)
  })
}

@lempira what I meant was that I just avoided using the onOpenUrl interface and did the following instead:
import { listen } from '@tauri-apps/api/event';

const unlisten = listen<string[]>('deep-link://new-url', (event) => {
            const url = event.payload;
            console.log('url', url);
        });

Thanks @nicolaspapp. I tried using just the listen and it doesn't seem to be working. Here is the implementation. It's essentially the same thing but with some logic around the redirect and some temporary logging. The code is getting to the useffect but not to the deeplink callback. You'll also see the onOpenUrl in there but commented out. That works, but with the remounting issue you described. I don't see why it's not working with the listen alone. Did you have to change anything to the lib.rs file to emit something?

Haven't tested this, but tried to wrap this functionality in a hook that i could just call from my layout component:
import { useState, useEffect } from "react";
import { onOpenUrl } from "@tauri-apps/plugin-deep-link";

function useDeepLink() {
  const [unlisten, setUnlisten] = useState<() => void>();
  const [urls, setUrls] = useState<string[]>([]);

  useEffect(() => {
    if (!unlisten) {
      onOpenUrl(setUrls).then(setUnlisten).catch(console.error);
    }

    return unlisten;
  }, [unlisten]);

  return urls;
}

If the type definitions are correct, I think this should remove the event listener whenever the component is unmounted.
But I think this is part of a larger issue with Tauri's APIs....many of these are implemented using promises, which are kinda hard to deal with in React components due to the way it handles state management/propagation. I understand that the APIs probably need a promise in order to do what they can do, but it seems kinda weird that we'd all have to implement hooks on our own just to use Tauri with React.
I guess you could genericize the above hook into something that just calls listen() directly...
function useTauriEvent(name, handler, onError = (error) => console.error(error)) {
  const [unlisten, setUnlisten] = useState();
  const [value, setValue] = useState();

  useEffect(() => {
    if (!unlisten) {
      listen(handler).then(setUnlisten).catch(onError);
    }

    return unlisten;
  }, [unlisten]);

  return value;
}

...but I'm just not sure if this is the best approach going forward.

Yeah, no way around Promises in the apis as the IPC (the bridge to the rust side) is async itself.
That said, when we're talking about events we have to compare them to native browser events as well imo. If you ask me, Tauri's events are easier but at least equivalent:
// assuming we're in a normal component and want to register on mount
// because o never really went for custom hooks

const nativeHandler = (event) => {};

useEffect(() => {
  const unlisten = onOpenUrl(handler);

  document.addEventListener('someevent', nativeHandler);

  return () => {
    unlisten.then(f => f());
    document.removeEventListener('someevent', nativeHandler);
  };
}, [])

So keeping in mind that you actually don't need to care about the Promise until you want to unlisten to the event i don't think it's right to blame the use of Promises in this context. Of course, take that with a grain of salt, i'm not used to custom hooks so that may indeed be the deciding factor i'm missing here :)

Just for refrence, this is the hook I am using and seems to work well on my particular case
import { listen } from '@tauri-apps/api/event';
import { useEffect } from 'react';
import { useNavigate } from 'react-router-dom';

export const UseDeepLinkUrl = () => {
    const navigate = useNavigate();

    useEffect(() => {
        const unlisten = listen<string[]>('deep-link://new-url', (event) => {
            const url = event.payload;
            const path: string = url[0].split('://')[1];
            navigate(path);
        });

        return () => {
            unlisten.then((f) => {
                console.log('unlisten', f);
                return f();
            });
        };
    }, []);

    return null;
};
export default UseDeepLinkUrl;

well, that's what getCurrent was for. Now you have to call it yourself on app start. The event won't wait for your frontend to register the listener.

Ok, I ended up doing something like this. Getting the getCurrent to run only the first time while registering the listener was a challenge since the navigate unmounts the component. This implementation is working for me.
function useDeepLink() {
  const navigate = useNavigate()
  const [currentUrl, setCurrentUrl] = useState<string | null>(null)
  const networkConfigs = useNetworkConfigs()
  const [selectedNetwork] = useSelectedNetwork()
  const networks = Object.keys(networkConfigs)

  const setSelectedNetwork = useSetSelectedNetwork()

  const onDeepLink = useCallback(
    (urls: string[]) => {
      const url = urls[0]
     // url-processing-logic here
      const newUrl = <results-from-url-processing-logic>
      setCurrentUrl(newUrl)
      navigate(newUrl)
    },
    [navigate]
  )

  useEffect(() => {
   // Only run if you're in TAURI
    if (!window.__TAURI_INTERNALS__) return
    // If currentUrl is empty then the app has just been opened.
    if (!currentUrl) {
      getCurrent().then((current) => {
        if (current) {
          onDeepLink(current)
        }
      })
    }
    // register listener
    const unlisten = onOpenUrl((urls) => {
      onDeepLink(urls)
    })

    // clean up listener
    return () => {
      unlisten.then((f) => f())
    }
  }, [currentUrl, onDeepLink])
}


Proposal for Local type class

Proposal for:
https://github.com/monix/monix/pull/977

Note that something is screwed about the tests in monix-eval — possibly some test related to Local in combination with Task or Coeval meant for the JVM, but without a short timeout.

The changes ...
Now if you do this:
local := 100

val task = local.bind(200) {
  Task(local.get)
}

val coeval = local.bind(300) {
  Coeval(local.get)
}

task.runToFuture // == 200

coeval.value() // == 300

The binding in this case is going to be lazy and it will work, because Task and Coeval get their own type class instances. Behaves similarly for isolate.

TODO: needs some tests I guess.

ALSO, I reintroduced all the deprecated symbols and removed the Mima exceptions.
We should not introduce any binary backwards incompatible changes.


Upgrade dependencies in compatible ranges

Coverage remained the same at 97.126% when pulling 5eb0a6df85c4b2158075c3861c87b0cd3fe01f0f on Throne3d:upgrade/deps-2019-12-14 into 97b0bf8669adb32dcef431a570d9cce1a9e72f7b on reactiflux:master.


unique_id and version are broken if I'm not much mistaken

Sweet, looks like I missed initialDelay as well :stuck_out_tongue_closed_eyes:

Yeah, I missed that one too :+1: