Feature/containerize dashcam monitor

This is a huge commit, and a work in progress but I wanted to get the PR in so there can be an open discussion. Call this version 2.0. I also realize I've changed the direction of this product a little bit and if @milesburton does not agree with it I'm open to any/all feedback.
I'm currently running this in my car as it is stable so far.
Things done in this PR:

Switched to using docker containers instead of daemontools

Because of this the only thing the pi needs installed now is docker-ce

To allow for containers I've switched commands to be run via SSH transport.

This allows for the containers to connect to the host and run commands. I went with SSH here instead of a pipe so that it also makes remote development a breeze (we can now host the application on your dev PC or container and have it talk to the Pi in the car with no difference).

Added an rsync service
Added configuration via env variables
A few bugs squashed along the way, and I'm sure more created.
Added an interim file cleaner to delete RecentClips 5 older then 5 days.

Some work yet to be done

[ ] KNOWN ISSUE: I'm pretty sure I've broken Dropbox upload at this point, I do not use it but want to fix it before this PR is merged. Fixing it shouldn't be too hard.
[x] KNOWN ISSUE: File rotation is broken because it does not work as is under SSH. Need to convert it to use ssh instead of fs.
[x] Decide where to host the docker images (I've grabbed teslacam on docker hub) if that makes sense, will transfer ownership of course.)
[x] Elevate all configuration to env variables
[x] Finalize Documentation

What am I missing?
Fixes #7 as this will very much change the installation landscape.

As I work through the dropbox stuff more and more I'm thinking tooling like dropbox uploader or rsync are should not be in the mainline. They are very generic tools/containers.
In the end you just provide them a source and a target and they sync it up. Do they really need any integration with the overall dashcam product?

Fantastic!

I'm clicking done on file rotation. I've got a clean script that is simpler and instead of using drive space just uses time. By default it just targets the rolling current clips directory and does not touch SavedClips, but 2nd container could be fired up to hit saved clips on a different rule.
I've defaulted it to 2 days, this is about right for my 128mb card.

Just a thought, I wonder if this should be a second mainline branch?

Well I agree it's a large departure from the original project in how it runs. The intent is to keep functionality the same but run it containerize and make it much easier to install. The inclusion of the get-teslacam.sh script makes it so you just need a base install Pi Zero W and it'll take it from there.
Most folks with Tesla's are not super technical, my hope is to get the barrier of entry as low as possible.
If you wanted it as a split mainline what would the split be? Just how it is intended to be hosted? I have tried to maintain (although I'm sure I've screwed something up) the ability to run it not in a container.
I'm open for all input. It is your project @milesburton.

I worked on the cimryan teslausb project previously, and we definitely found that some of the getting started questions were extremely basic. So, if the Docker setup (which is something I considered, along with btrfs which ultimately was a failure because--while snapshotting worked GREAT--I couldn't figure out how to clean up blocks and always filled the filesystem :) ) is stable, it seems to make for a nice, fast install where if something breaks it is hopefully isolated to that container, not the whole system. My .02. Going to try this tonight! :)

Some notes...keep in mind that I had not a lot of time to test, and also a lot of caffeine this morning:

Docker install on Buster seems to be (ahem) busted at the moment, per: https://github.com/docker/for-linux/issues/709 . (As of last night anyway.) Seems like your workaround to specify the version sometimes/sorta works, but they're making changes constantly upstream. I couldn't (easily) find a Stretch image so I built a vanilla Lite image here if it's needed.
The install script didn't proceed beyond the Docker install; I had to run all of the additional steps manually. It threw a warning after the usermod but that seems normal.  ¯_(ツ)_/¯ . The docker-compose also didn't work the first time, locked up the Pi0.
After reboot and down/up the containers came up fine, but the virtual drive isn't loading. I couldn't quite trace down where in your setup you set the mount, etc. Maybe it's just not working at the moment? There's nothing in fstab, if there should be. I noticed the main repo references ~/teslacam/images but the dir on mine was ~/teslacam/.images/. Maybe by design.  All of this testing was on my laptop, not plugged into the car, if it matters.

More random notes:

With your containerization plans, it would probably not be difficult to just build the image most of the way up with Pi-gen and make it available for download . Something to consider. 😄 I was building images that already had the ssh and cmdline/config tweaks, and then (another ahem) stretch goals automatically dealt with wifi (using ENV vars and a script that would generate the file, or just providing a sample, as https://github.com/rtgoodwin/pi-gen/tree/master/stage7/00-teslausb-tweaks/files . Note at that time I went a little crazy, adding ability to flash LED's during headless install, all kinds of autodetect stuff. It worked, mind you, but if nothing else I'd focus on the minimum of "everything before the install script".
I'm getting flashbacks (seriously, last ahem) of my research into the hotspot goals...there was some good stuff out there for using BT to trigger config changes, and also I think a project or two for doing "hotspot by default on boot". Will have to find them.
Consider using bit.ly or similar to point to install script in instructions during testing/dev. I speak from just having to constantly remember to change my scripts or use ENV 😄 I pointed https://bit.ly/get-tcam to your feature branch script for now.
Consider pulling the compose file locally and keeping it, in case one needs to troubleshoot.

All in all, great stuff. I love the modularity and simplicity; as long as the complexity is managed so that the individual containers are rock solid and single purpose, seems like the way to go!

Some notes...keep in mind that I had not a lot of time to test, and also a lot of caffeine this morning:

Docker install on Buster seems to be (ahem) busted at the moment, per: docker/for-linux#709 . (As of last night anyway.) Seems like your workaround to specify the version sometimes/sorta works, but they're making changes constantly upstream. I couldn't (easily) find a Stretch image so I built a vanilla Lite image here if it's needed.
The install script didn't proceed beyond the Docker install; I had to run all of the additional steps manually. It threw a warning after the usermod but that seems normal.  ¯_(ツ)_/¯ . The docker-compose also didn't work the first time, locked up the Pi0.
After reboot and down/up the containers came up fine, but the virtual drive isn't loading. I couldn't quite trace down where in your setup you set the mount, etc. Maybe it's just not working at the moment? There's nothing in fstab, if there should be. I noticed the main repo references ~/teslacam/images but the dir on mine was ~/teslacam/.images/. Maybe by design.  All of this testing was on my laptop, not plugged into the car, if it matters.

More random notes:

With your containerization plans, it would probably not be difficult to just build the image most of the way up with Pi-gen and make it available for download . Something to consider. 😄 I was building images that already had the ssh and cmdline/config tweaks, and then (another ahem) stretch goals automatically dealt with wifi (using ENV vars and a script that would generate the file, or just providing a sample, as https://github.com/rtgoodwin/pi-gen/tree/master/stage7/00-teslausb-tweaks/files . Note at that time I went a little crazy, adding ability to flash LED's during headless install, all kinds of autodetect stuff. It worked, mind you, but if nothing else I'd focus on the minimum of "everything before the install script".
I'm getting flashbacks (seriously, last ahem) of my research into the hotspot goals...there was some good stuff out there for using BT to trigger config changes, and also I think a project or two for doing "hotspot by default on boot". Will have to find them.
Consider using bit.ly or similar to point to install script in instructions during testing/dev. I speak from just having to constantly remember to change my scripts or use ENV 😄 I pointed https://bit.ly/get-tcam to your feature branch script for now.
Consider pulling the compose file locally and keeping it, in case one needs to troubleshoot.

All in all, great stuff. I love the modularity and simplicity; as long as the complexity is managed so that the individual containers are rock solid and single purpose, seems like the way to go!

Thanks for the great feedback:
Initial response to your list:

Yah Docker install is broken on buster, I've kept things on stretch for that reason. Figured by the time I get this resolved either we we have to document around that or maybe they will get their ducks in a row.
Good to know on script. I think I have that all worked out on my local just haven't pushed yet, still WIP.
You're seeing artifactct right now of keeping things working with containers and not (doing some mapping to assumed paths to make things work, we'll get to this). The mounting happens with loopback up/down commands, there is no fstab on the local box involved. The image files are kept in your .images directory, I hid them there as they should be "hands off" by the end user.

--
I agree completely on compose file locally, if I end up sticking with compose my plan will be to download it into the teslacam directory and run off it there. That will allow users to run standard docker-compose commands like up/down/logs etc. However compose itself has been a not super great experience on the Pi0 box, I keep going back and fourth to just baking the run commands into our install script.
Good call on bit.ly link, I've done something similar on my local lab to link to the github raw of my branch for now. End game I figure we'll just point to the github raw on the main repo.
I've never used PiGen, that'd be new to me.  I like that idea as a phase 2 of this. My goal right now is just to get thru this initial conversion, I need to find time to finish the dropbox stuff.

Compose does have a lot of overhead on the Pi0, and lots of dependencies to install.
My Docker-fu is not that advanced, so I don't know how complicated the scripting would get. I could really see it going either way...some elegance by configuring the compose file and easy up/down (which can be priceless if you end up with issues), or simplicity by just spelling it all out in intermediate commands.
I guess all things being equal, I'd love to have one or two commands to just bring things up and down, but there's no saying that command can't just be its own self contained bash script. 😄 The Docker bit would still be valuable for all the previous reasons, plus no fooling around with systemd/init to kick off things on reboot.

Adding a note here so I don't forget about:
Our solution for hosting the install script should be https://git.io/ imo.

Would I be able to use this branch to write to my Synology NAS server when I park at home and it copy/rsync the TeslaCam contents to it?

Would I be able to use this branch to write to my Synology NAS server when I park at home and it copy/rsync the TeslaCam contents to it?

Yes, currently I'm running it for stability checks on my car but it's working great.
I do exactly what you want on my home network with the rsync container. When my car parks at home it syncs all the SavedClips over to my macOS machine.

Do you have any setup details I can use? I'm still running into issues with getting the Pi to mount anything on the Tesla or even my PC during testing.
Rasperian version, setup docs/steps etc?

Do you have any setup details I can use? I'm still running into issues with getting the Pi to mount anything on the Tesla or even my PC during testing.
Rasperian version, setup docs/steps etc?
In my Model 3 I'm also noticing my front USB ports stop working and I have to reset the touchscreen (also seems to reboot/fix the front USB ports)

Yes, the readme in that branch is updated. There is an install script you can run on a fresh STRETCH raspbian install. Right now docker is broken on Buster.
Currently my script is using docker-compose but I was having some issues with that. I plan on ripping compose out tonight or tomorrow and getting everything updated so I can set this thing as ready for review.

I'll give your branch a shot now as is and see if I can get things working. Flashing fresh STRETCH as we type ;)

To get around compose take a look at this commit: https://github.com/wurmr/teslacam/commit/38535a4b70eeb9f72099c7599e17a07febc3eba8#diff-3fe32ffcc0d5c3312db068a502168cae
Includes proper run commands to start stuff up instead of using compose.  I suspect the Pi0 really isn't fast enough for all the python-fu that compose does.

Installing TeslaCam
Executing docker install script, commit: 6bf300318ebaab958c4adc341a8c7bb9f3a54a1a

sudo -E sh -c apt-get update -qq >/dev/null
sudo -E sh -c apt-get install -y -qq apt-transport-https ca-certificates curl >/dev/null
sudo -E sh -c curl -fsSL "https://download.docker.com/linux/raspbian/gpg" | apt-key add -qq - >/dev/null
Warning: apt-key output should not be parsed (stdout is not a terminal)
sudo -E sh -c echo "deb [arch=armhf] https://download.docker.com/linux/raspbian stretch stable" > /etc/apt/sources.list.d/docker.list
sudo -E sh -c apt-get update -qq >/dev/null
INFO: Searching repository for VERSION '18.06.'
INFO: apt-cache madison 'docker-ce' | grep '18.06..*-0~raspbian' | head -1 | awk '{$1=$1};1' | cut -d' ' -f 3
[ -n  ]
sudo -E sh -c apt-get install -y -qq --no-install-recommends docker-ce=18.06.3~ce~3-0~raspbian >/dev/null
sudo -E sh -c docker version
Client:
Version:           18.06.3-ce
API version:       1.38
Go version:        go1.10.3
Git commit:        d7080c1
Built:             Wed Feb 20 02:42:54 2019
OS/Arch:           linux/arm
Experimental:      false

Server:
Engine:
Version:          18.06.3-ce
API version:      1.38 (minimum version 1.12)
Go version:       go1.10.3
Git commit:       d7080c1
Built:            Wed Feb 20 02:38:25 2019
OS/Arch:          linux/arm
Experimental:     false
If you would like to use Docker as a non-root user, you should now consider
adding your user to the "docker" group with something like:
sudo usermod -aG docker pi
Remember that you will have to log out and back in for this to take effect!
WARNING: Adding a user to the "docker" group will grant the ability to run
containers which can be used to obtain root privileges on the
docker host.
Refer to https://docs.docker.com/engine/security/security/#docker-daemon-attack-surface
for more information.
docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.38/containers/create: dial unix /var/run/docker.sock: connect: permission denied.
See 'docker run --help'.

Ok. I just tried and got some docker permission issues. I'll try a copy/paste of that commit script

pi@raspberrypi:~ $ sh get-teslcam.sh
Installing TeslaCam
sh: 0: Can't open ./get-docker.sh
Do I need to get this get-docker.sh script prior to executing the get-teslacam.sh script?

So good results so far. I'm only doing things on my PC currently. I currently have a 3GB TeslaCam USB Drive seen on my PC. Is there a way to increase the size of this so more data is able to be stored in the TeslaCam directory once I eventually connect it to my Tesla USB port?
Using the README, I also tried to grab the rsyc tool and this was the results when running it:
pi@raspberrypi:~ $ docker run \

--restart=always
-d
-v /home/pi/etc/ssh:/root/.ssh
-e "USE_SSH=true"
-e "BACKUP_DIR=~/teslacam/video"
-e "RSYNC_TARGET=user@server:~/TeslaCam/SavedClips"
--name rsync-upload
teslacam/dashcam-rsync-upload
docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.38/containers/create?name=rsync-upload: dial unix /var/run/docker.sock: connect: permission denied.
See 'docker run --help'.

If you didn't add your user to the docker group (script should do that but you have to log out and back in) you'll have to run docker with sudo. I'll get the documentation squared up shortly.
If you get it working feel free to update documentation and throw in a PR.

Ok manually ran sudo usermod -aG docker pi as the pi user and logged out/in and am able to run docker commands now without sudo as pi

How do I go about modifying the docker with my rsync credentials, etc? I tried to attach to the dashcam-rsync-upload container but it just seemed to run the rsync command. I haven't used docker much but I wasn't able to use CTRL+C or anything to exit the docker.

So I was able to record video to the pi! Yay!
I pulled it out of the car again and have it on my local PC. I realized I had placed the wrong RSYNC_TARGET path. When I do the following I can't seem to figure out how to break out of the shell to investigate more on changing the path, etc.
pi@teslacam:~/teslacam/video/SavedClips $ docker attach rsync-upload
Running ssh [rsync --remove-source-files -avhe ssh ~/teslacam/video/SavedClips user@server:/volume1/TeslaCam]
Host key verification failed.

I running into a wall:
I create the docker container for the rsync-upload container.
I run docker attach rsync-upload.
I can't exit out of this container with any key sequences and I always get this error:
pi@teslacam:~/.ssh $ docker attach rsync-upload
Running ssh [rsync --remove-source-files -avhe ssh ~/teslacam/video/SavedClips me@server:/volume1/Storage/TeslaCam]
Host key verification failed.
Failed: code [255]: Host key verification failed.
When I try to run the above command manually I get this:
pi@teslacam:~/teslacam/video/RecentClips $ rsync --remove-source-files -avhe ssh ~/teslacam/video/SavedClips me@server:/volume1/Storage/TeslaCam
Permission denied, please try again.
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(235) [sender=3.1.2]
I can do a manually SCP of the files just fine with no password as I've setup the SSH trust already

Documentation updated, docer-compose removed. It's just too slow on the Pi0.

Alright I think I have everything functional. I'll admit I've not done a good job of testing the dropbox script as I personally don't use dropbox. @milesburton could you give it a go?
@natrlhy I've updated the instructions on rsync as well as the containers/code to go along with it. Please try it out. I've got it running on my car by following those scripts.
@milesburton when you're comfortable with this please merge it, also feel free to squash it so my long chain of drunken commits isn't in the log. If you prefer I can squash it myself and resubmit a PR. I'd love to get this into the mainline so we/anyone else can focus on other features/bug fixes.

One possible breaking changes I can think of in this is the clip cleaner does not base deletion on % disk anymore, it does it by time. By default it keeps two days of RecentClips. This is set by an env variable on the container.
Moving back to % of disk space would be a solid future enhancement.

@milesburton Thoughts on what you'd like to do on this?

Hey it's a tricky one as the code has now diverged whilst I'm still iterating the original code base. I'm either wondering if this should be a top level branch that's linked on master, or a fully fledged fork.

@wurmr I tell a lie, we can merge cleanly. Are you confident nothing has been broken upstream? Ie, if you followed the existing steps you'd end up in the same place in the old school setup?

@milesburton Yes I believe that is the case, but I admit I do not run it in the old school way. The biggest change is in the common lib where I added a path to run in SSH mode.
That all being said. I think it would be wise to have a single way to run things for folks to avoid confusion. And that single way I would vote is containers, but I am uber-biased.

I'd agree a single route is the way forward, and containerisation makes sense. Issue I have is I'm stuck in the old world for the time being whilst I restore dashcam on my car(!!!).
From a purely selfish perspective, I knew the original version worked so I'm taking baby steps to diagnosing the issue.
I'm happy to merge in to master with the end goal to move to a single one hit approach. Thoughts?

Let's merge it and start opening issues if they come up.
I've been running my containerized version now since I started this fork.

Done, let's see if its picked up

Tried this morning, working from the Readme.

At first glance the short git URL is throwing a 404. (Still points to a feature branch)
Failed install using the current master script, with a reference to 18.04 and madison. Not sure about that; I'm rebuilding a Stretch image to try it with.

Some next morning observations...

the Zero is running quite slowly over SSH with the 3 containers (2 main, 1 Dropbox or 1 rsync) up. Stopping Dropbox seems to help a little, but not great, with Node seeming to be the bulk of it.
A couple of misc errors on installing rsync about regexe's, but...it works! Files are copying as we speak.
I seem to get consistent net/TLS timeouts once the first container is installed, which I am guessing is related to high CPU maybe? The fact that rsync works is interesting, but it's so resilient it's hard to say
Again this is a self-built Stretch lite, but it's directly built from pi-gen with no tweaks. If I can get it working on Buster I'll report back on that...


⚠ LPDM Handbook (hosted on Divio) has degraded performance

In 15a6b19, LPDM Handbook (hosted on Divio) (https://repohubdev.tk) experienced degraded performance:

HTTP code: 500
Response time: 5342 ms

Resolved: LPDM Handbook (hosted on Divio) performance has improved in 7eb1074.


CUDA Error: (null) FasterTransformer/3rdparty/trt_fused_multihead_attention/fused_multihead_attention.h 232

when I run the example code , here is the error message

commit: 83776ae7fefaabaf4fc75063d2a704fbeb84f2be
GPU: virtual gpu GRID T4-8C
driver: 450.102.04
cuda: 11.0
openmpi: 4.1.4 (https://download.open-mpi.org/release/open-mpi/v4.1/openmpi-4.1.4.tar.gz)
nccl: 2.10.3-1 (https://github.com/NVIDIA/nccl)
cudnn: <IP_ADDRESS>
docker: In my environment, I can not use the nvidia docker image, so I compiled these environment dependencies above
reproduced step is the example of opt-125m (https://github.com/NVIDIA/FasterTransformer/blob/main/docs/gpt_guide.md#run-meta-opt)
git lfs clone https://huggingface.co/facebook/opt-125m
python ../examples/pytorch/gpt/utils/huggingface_opt_convert.py \
      -i opt-125m/ \
      -o opt-125m/c-model/ \
      -i_g 1
python3 ../examples/pytorch/gpt/opt_summarization.py \
        --summarize \
        --test_hf \
        --max_ite 20 \
        --ft_model_location opt-125m/c-model \
        --hf_model_name opt-125m

Please follow the template of issue to provide the settings and reproduced steps.
Besides, please also try the main branch.

Please follow the template of issue to provide the settings and reproduced steps. Besides, please also try the main branch.

I've update my issue and use the main branch but still error

It may be because you use virtual gpu and fail to load the kernel.
You can try

Find a environment with real GPU to test first. Or
Set the is_fuse to be false at https://github.com/NVIDIA/FasterTransformer/blob/main/src/fastertransformer/th_op/multi_gpu_gpt/ParallelGptOp.h#L292 to disable the kernels.

It may be because you use virtual gpu and fail to load the kernel.
You can try

Find a environment with real GPU to test first. Or
Set the is_fuse to be false at https://github.com/NVIDIA/FasterTransformer/blob/main/src/fastertransformer/th_op/multi_gpu_gpt/ParallelGptOp.h#L292 to disable the kernels.

it works fine on read GPU, but still error when I set the is_fuse to be false and rebuild on virtual gpu

Does the error affect the program? It happens during initializing the fused mha wrapper, but will not use it if the is_fuse is set to false.
You can remove https://github.com/NVIDIA/FasterTransformer/blob/main/src/fastertransformer/layers/attention_layers/GptContextAttentionLayer.cc#L437 and https://github.com/NVIDIA/FasterTransformer/blob/main/src/fastertransformer/layers/attention_layers/GptContextAttentionLayer.cc#L470 to prevent the initialization.

Does the error affect the program? It happens during initializing the fused mha wrapper, but will not use it if the is_fuse is set to false. You can remove https://github.com/NVIDIA/FasterTransformer/blob/main/src/fastertransformer/layers/attention_layers/GptContextAttentionLayer.cc#L437 and https://github.com/NVIDIA/FasterTransformer/blob/main/src/fastertransformer/layers/attention_layers/GptContextAttentionLayer.cc#L470 to prevent the initialization.

It looks like solved the problem, but I found that the value with fp16 mode is not equal to the normal situation (real gpu and nvidia docker) with fp16 mode

Do you disable the kernels for both cases? The kernels are never used in fp32 mode.

Do you disable the kernels for both cases? The kernels are never used in fp32 mode.

no, the virtual gpu side have disabled the fused attention kernel, and the real gpu side didn't do that

Then they use different kernels and the different results are expected.

Then they use different kernels and the different results are expected.

Thank you for your answer, I found that the error I encountered may not be caused by vGPU, but caused by the environment dependencies I builded. Because I use my image also get this error on a real gpu, but using nvidia's docker image doesn't
nvidia's docker image I used is cuda 11.7, I don't know if cuda 11.0 works fine in your tests

cuda 11.0 should work, too. You can try different version of docker image. More details are showed in https://docs.nvidia.com/deeplearning/frameworks/support-matrix/index.html.


Failed to Write Coverage Reports:Cannot read property 'loc' of undefined

We are getting this error when trying to run a coverage report while jest --coverage --ci --coverageDirectory=output/coverage/jest is running in CI. We are trying to publish reports via cobertura in our CI and using yarn to install jest.

Error

 Failed to write coverage reports:
        ERROR: TypeError: Cannot read property 'loc' of undefined
        STACK: TypeError: Cannot read property 'loc' of undefined
    at /home/ubuntu/workspace/oneapihub-ui@2/node_modules/istanbul-reports/lib/lcovonly/index.js:52:27
    at Array.forEach (<anonymous>)
    at LcovOnlyReport.onDetail (/home/ubuntu/workspace/oneapihub-ui@2/node_modules/istanbul-reports/lib/lcovonly/index.js:49:27)

Below contains some part of package.json configuration.

{
	"name": "ui",
	"version": "1.0.0",
"scripts": {
		"dev": "webpack-dev-server --inline --config ui-build/webpack.dev.conf.js",
		"test:dev": "jest --coverage --ci --coverageDirectory=output/coverage/jest",
		"e2e": "node test/e2e/runner.js --startSelenium",
		"e2e-gitlab": "node test/e2e/runner.js",
		"e2e-localhost": "node test/e2e/runner.js --startSelenium --scheme http --target <IP_ADDRESS>:3000 --skiptags no-localhost"
	},
	"jest": {
		"collectCoverage": true,
		"testResultsProcessor": "./node_modules/jest-slack-reporter",
		"coverageReporters": [
		  "text",
		  "html",
		  "lcov",
		  "cobertura",
		  "json"
		]
	},
	"jestSlackReporter": {
		"webhookUrl": "https://hooks.slack.com/services/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"
	}
	"devDependencies": {
		"@applitools/eyes-images": "^4.12.20",
		"@testing-library/jest-dom": "^5.1.1",
		"@vue/test-utils": "^1.0.0-beta.29",
		"autoprefixer": "^8.0.0",
		"babel-core": "^6.26.0",
		"babel-eslint": "^8.1.2",
		"babel-jest": "^23.6.0",
		"babel-loader": "^7.1.5",
		"babel-plugin-dynamic-import-node": "^2.2.0",
		"babel-plugin-istanbul": "^4.1.5",
		"babel-plugin-module-resolver": "^3.1.1",
		"babel-plugin-transform-runtime": "^6.22.0",

We were able to display coverage reports as below in CI expectation is display or publish this report via cobertura.

File                                                                        |  % Stmts | % Branch |  % Funcs |  % Lines | Uncovered Line #s |
----------------------------------------------------------------------------|----------|----------|----------|----------|-------------------|
All files                                                                   |    78.37 |    74.32 |    78.93 |     82.2 |                   |
 root                                                                       |        0 |        0 |        0 |        0 |                   |
  unknown                                                                   |        0 |        0 |        0 |        0 |                   |
 root/home/ubuntu/workspace/oneapihub-ui@2/backend-mock/services            |      100 |      100 |      100 |      100 |                   |
  utils.js                                                                  |      100 |      100 |      100 |      100 |                   |
 root/home/ubuntu/workspace/oneapihub-ui@2/src/assets/img/icons             |        0 |        0 |        0 |        0 |                   |
  pointing-hand.svg                                                         |        0 |        0 |        0 |        0 |                   |
 root/home/ubuntu/workspace/oneapihub-ui@2/src/assets/swagger-ui-plugins    |      100 |       75 |      100 |      100 |                   |
  InfoBasePathPlugin.jsx                                                    |      100 |      100 |      100 |      100 |                   |
  InfoUrlPlugin.jsx                                                         |      100 |       75 |      100 |      100 |                 9 |
  UpdateBasePathPlugin.jsx                                                  |      100 |       75 |      100 |      100 |                22 |
 root/home/ubuntu/workspace/oneapihub-ui@2/src/components/api               |    86.74 |    76.74 |    84.33 |     86.9 |                   |
  ApiLabelDealer.vue                                                        |      100 |      100 |      100 |      100 |                   |
  ApiService.js                                                             |      100 |      100 |      100 |      100 |                   |
  Details.vue                                                               |    73.12 |    73.02 |    68.97 |    74.44 |... 33,355,356,400 |
  Overview.vue                                                              |      100 |      100 |      100 |      100 |                   |
  OverviewTableRow.vue                                                      |    38.24 |    21.05 |    22.22 |    36.36 |... 01,103,110,111 |
  ProductList.vue                                                           |    80.43 |    83.33 |    72.73 |    79.55 |... 13,114,118,119 |
  RatingAllUsers.vue                                                        |      100 |       75 |      100 |      100 |                64 |
  RatingPerStar.vue                                                         |      100 |      100 |      100 |      100 |                   |
  RatingSubmitDialog.vue                                                    |      100 |      100 |      100 |      100 |                   |
  RatingUserFlow.vue                                                        |      100 |      100 |      100 |      100 |                   |
  RatingUserListing.vue                                                     |      100 |       75 |      100 |      100 |                99 |
  RefreshDialog.vue                                                         |      100 |      100 |      100 |      100 |                   |
  SubscribeDialog.vue                                                       |    93.88 |    85.71 |       95 |    93.55 |... 23,325,334,335 |
  Tryout.vue                                                                |    91.67 |    85.71 |      100 |    93.48 |          70,75,76 |
  VersionSelection.vue                                                      |    86.49 |       70 |    90.91 |    87.88 |       92,93,98,99 |
 root/home/ubuntu/workspace/oneapihub-ui@2/src/components/app               |    88.85 |    78.08 |    87.21 |    88.44 |                   |
  ApikeyCredential.vue                                                      |       50 |      100 |        0 |       50 |       54,55,60,61 |
  AppCredential.vue                                                         |    90.48 |    85.71 |      100 |       90 |             85,86 |

Test Suites: 6 failed, 66 passed, 72 total
Tests:       15 failed, 522 passed, 537 total
Snapshots:   0 total
Time:        104.477s
Ran all test suites.
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

I had the same issue and worked around by changing the list of report formats. text and html was enough for my use case.
coverageReporters: [
    'text',
    'html'
  ]

I am getting this same error

Issue raised against istanbul here: https://github.com/istanbuljs/istanbuljs/issues/572
If anyone has a better idea of what's going on please add a comment on the ticket.

I'm getting it when I run jest with the --ci and --runInBand option (both locally and in CI). I do not get it when I don't use both of those. It's possible only one of those is causing the error, I haven't isolated the problem yet, but I know the combination is causing the error for me.

I'm getting it when I run jest with the --ci and --runInBand option (both locally and in CI). I do not get it when I don't use both of those. It's possible only one of those is causing the error, I haven't isolated the problem yet, but I know the combination is causing the error for me.


Latest visual studio code crashes on Ubuntu

Issue Type: Bug
Click File->Preferences
All default install. I'm a new user, clean machine
VS Code version: Code 1.27.1 (5944e81f3c46a3938a82c701f96d7a59b074cfdc, 2018-09-06T09:21:47.222Z)
OS version: Linux x64 4.15.0-34-generic

System Info

Item
Value

CPUs
Intel(R) Core(TM) i7-3630QM CPU @ 2.40GHz (8 x 1719)

GPU Status
2d_canvas: enabledchecker_imaging: disabled_offflash_3d: enabledflash_stage3d: enabledflash_stage3d_baseline: enabledgpu_compositing: enabledmultiple_raster_threads: enabled_onnative_gpu_memory_buffers: disabled_softwarerasterization: disabled_softwarevideo_decode: unavailable_softwarevideo_encode: unavailable_softwarewebgl: enabledwebgl2: enabled

Load (avg)
0, 1, 2

Memory (System)
15.55GB (1.27GB free)

Process Argv
/usr/share/code/code --unity-launch

Screen Reader
no

VM
0%

Extensions: none

crashes

Where is the crash? Screenshot? Log file? Screen recording? Please provide more info.

Does it include a crash dumper? It didn't output anything

install ubuntu LTS, with gnome classic desktop
install vs code latest
Click Applications->Programming->Visual Studio Code
Click File->Preferences
Observe the application closes (crashed right?)

How to make a log file? where does it dump them when it crashes?

Here is a checklist to find out more about the freeze/slow/crash

[ ] it reproduces with extensions disabled (code --disable-extensions from the command line - NOT the integrated terminal of Code)

if it does not reproduce with extensions disabled, you can stop testing and report this!

[ ] it was not happening in the previous stable release
[ ] it reproduces in insiders builds (get it from here)
[ ] there is no suspicious output when running from the command line (code --verbose)
[ ] there is no suspicious output in the window itself (Help | Toggle Developer Tools | Console)
[ ] it reproduces on Windows, Linux and Mac
[ ] it reproduces after deleting <appdata>/User/keybindings.json and <appdata>/User/settings.json (backup first! see below for paths)
[ ] it reproduces when opening empty (code -n from the command line)
[ ] it reproduces opening any folder
[ ] it reproduces opening any file
[ ] it reproduces when only having a single window open
[ ] it reproduces by just using Code without external tools running on the same folder
[ ] it reproduces from a workspace that is not under Git version control
[ ] it reproduces independently if a file is opened or not after startup
[ ] it reproduces when running with GPU disabled (code --disable-gpu)
[ ] it reproduces when being offline
[ ] it reproduces when disabling the file watching (set files.watcherExclude to "**/**": true)
[ ] it reproduces after uninstalling and reinstalling
[ ] it reproduces after deleting the application data directory (backup first! see below for paths)
[ ] I have not played around with permissions or ran Code as administrator
[ ] I am seeing a single CPU process spin high (please share the full command line arguments)
[ ] I am seeing Code consuming lots of memory in a short time

Application Data Directory for VS Code:

Windows: C:\Users\<user>\AppData\Roaming\Code
Mac: /Users/<user>/Library/Application Support/Code
Linux: /home/<user>/.config/Code

Application Data Directory for VS Code Insiders:

Windows: C:\Users\<user>\AppData\Roaming\Code - Insiders
Mac: /Users/<user>/Library/Application Support/Code - Insiders
Linux: /home/<user>/.config/Code - Insiders

Forgive me, but I don't work for Microsoft. It looks like you're not responding to my questions.
Did you read my message and try and reproduce?
"How to make a log file? where does it dump them when it crashes?£
Did anyone do as I asked, and add the missing automatic crash dumper?
If you're not willing to co-operate with me, better just close the ticket and we'll go back to other developer environment.

Did you read my message and try and reproduce?

Yes, it doesn't reproduce for me.
Check here to understand how to debug crashes: https://github.com/Microsoft/vscode/wiki/Native-Crash-Issues#linux

Any reason it doesn't generate the crash dump automatically like other Linux packages do?

cc @bpasero for answering that.
Anyway... did you figure anything out?

Waiting for the auto crash dumper

OK.


train not converge

Hello,i train by the train.py but not converge,the results is wrong.My environment is ubuntu16.04 and python3.6.2,tensorflow2.4,could you give me some  advice?
Epoch 000: Train Loss: 1.061, Accuracy: 30.17884%
2020-11-19 17:06:08
Epoch 001: Train Loss: 0.715, Accuracy: 23.60993%
2020-11-19 17:07:15
Epoch 002: Train Loss: 0.621, Accuracy: 20.01843%
2020-11-19 17:08:42
Epoch 003: Train Loss: 0.481, Accuracy: 13.48590%
2020-11-19 17:09:47
Epoch 004: Train Loss: 0.266, Accuracy: 5.80015%
Epoch 004, Validation accuracy: 2.96213%
2020-11-19 17:11:15
Epoch 005: Train Loss: 0.164, Accuracy: 1.45889%
2020-11-19 17:12:21
Epoch 006: Train Loss: 0.123, Accuracy: 1.06765%
2020-11-19 17:13:27
Epoch 007: Train Loss: 0.091, Accuracy: 1.22532%
2020-11-19 17:14:33
Epoch 008: Train Loss: 0.089, Accuracy: 1.19700%
2020-11-19 17:15:39
Epoch 009: Train Loss: 0.078, Accuracy: 0.89985%
Epoch 009, Validation accuracy: 0.81636%
2020-11-19 17:17:06
Epoch 010: Train Loss: 0.073, Accuracy: 0.73148%
2020-11-19 17:18:12
Epoch 011: Train Loss: 0.071, Accuracy: 0.69256%
2020-11-19 17:19:18
Epoch 012: Train Loss: 0.068, Accuracy: 0.71409%
2020-11-19 17:20:24
Epoch 013: Train Loss: 0.065, Accuracy: 0.70186%
2020-11-19 17:21:30
Epoch 014: Train Loss: 0.064, Accuracy: 0.67790%
Epoch 014, Validation accuracy: 0.67563%

From my point of view, BlazePose is a tiny network, so it does not matter if we train more epochs. Since the initialization is randomized, if the starting point is not ideal, you can terminate with Ctrl+C and run another time.
The following is part of my result. The platform is Ubuntu 20.10, CUDA 11.1, Cudnn 8.0, python 3.7.9, TensorFlow 2.5 nightly (compiled from source code to support RTX 3090 GPUs).

It may take approximately 300+ epochs to converge.
Once you see the training loss and accuracy drops but validation accuracy increases, modify config.py and set train_mode to fine-tune. Then, run the training code from where you just stopped.

thanks,i will try it

Hello，as you say，when training loss and accuracy drops but validation accuracy increases,i modify train_mode = 0 and continue_train = 44 ,then running the training code,But the result is wrong, the log like this:
2020-11-23 17:38:16  Start train.
WARNING:tensorflow:Layer blaze_pose is casting an input tensor from dtype float64 to the layer's dtype of float32, which is new behavior in TensorFlow 2.  The layer has dtype float32 because its dtype defaults to floatx.
If you intended to run this layer in float32, you can safely ignore this warning. If in doubt, this warning is likely only an issue if you are porting a TensorFlow 1.X model to TensorFlow 2.
To change all layers to have dtype float64 by default, call tf.keras.backend.set_floatx('float64'). To change just this layer, pass dtype='float64' to the layer constructor. If you are the author of this layer, you can disable autocasting by passing autocast=False to the base Layer constructor.
Initial Validation accuracy: 1429626.17188%
2020-11-23 17:39:42
Epoch 000: Train Loss: 6532.363, Accuracy:<PHONE_NUMBER>1%
2020-11-23 17:40:46
Epoch 001: Train Loss: 1922.987, Accuracy:<PHONE_NUMBER>0%
2020-11-23 17:41:50
Epoch 002: Train Loss: 1423.902, Accuracy:<PHONE_NUMBER>0%

Don't worry. It works well.
Take my training case as an example.
For pre-train, the optimal validation accuracy achieved here:
Epoch 432: Train Loss: 0.022, Accuracy: 0.22764%
2020-11-23 21:20:48
Epoch 433: Train Loss: 0.022, Accuracy: 0.22659%
2020-11-23 21:20:53
Epoch 434: Train Loss: 0.022, Accuracy: 0.22670%
Epoch 434, Validation accuracy: 0.25374%

For fine-tune, it looks like this:
2020-11-23 21:49:27  Start train.
2020-11-23 21:49:28.707345: I tensorflow/stream_executor/platform/default/dso_loader.cc:49]
Successfully opened dynamic library libcudnn.so.8
2020-11-23 21:49:30.408507: I tensorflow/stream_executor/cuda/cuda_dnn.cc:344]
Loaded cuDNN version 8005
2020-11-23 21:49:31.083267: I tensorflow/stream_executor/platform/default/dso_loader.cc:49]
Successfully opened dynamic library libcublas.so.11
2020-11-23 21:49:31.682031: I tensorflow/stream_executor/platform/default/dso_loader.cc:49]
Successfully opened dynamic library libcublasLt.so.11
2020-11-23 21:49:31.718689: I tensorflow/stream_executor/cuda/cuda_blas.cc:1838]
TensorFloat-32 will be used for the matrix multiplication. This will only be logged once.
 (This may be because I did not normalize the image size to the loss calculation.)
It is not a good idea if the loss (at fine-tune) becomes too small, since that will cause overfitting.

Thank you for your detailed explanation. I have two questions. First, how can we judge whether it is overfitting? Is it through the value of loss or something else? Second, LSP dataset is a small dataset, and the network structure is also very small. Can the training get the best performance? Why not train a pre-training model with a dataset similar to mscoco?

Thank you for your detailed explanation. I have two questions. First, how can we judge whether it is overfitting? Is it through the value of loss or something else? Second, LSP dataset is a small dataset, and the network structure is also very small. Can the training get the best performance? Why not train a pre-training model with a dataset similar to mscoco?

Yes. We can see the training and validation accuracy during training.

The performance of this network is of course not so high as those large networks.
My intention to employ BlazePose was because of its lightweight. We can easily put this network on an embedded device to work in real-time with low power cost.
I haven't tried this network on MPII or MS-COCO. If you would like to train on such a dataset, please let me know how it works.


x/build/devapp: hide WIP CLs

https://dev.golang.org/reviews shows WIP CLs.
Hide them.
(Example: the top "go" CL "cmd/compile: don't rematerialize thunk calls" is marked Work In Progress)
/cc @dmitshur @andybons

Deployed.


how to capture block events in real time and finalizedEvents for the same call?

Given
await signedExtrinsicRune
      .sent()
      .transactionStatuses((txStatus) => {
        console.log("txStatus")
        return false
      })
      .run()

I can capture block events in real time... but if I want to capture the finalizedEvents as well I don't think its possible.
const sentRune = await signedExtrinsicRune
      .sent()

sentRune
      .transactionStatuses((txStatus) => {
        console.log("txStatus")
        return false
      })
      .run()

console.log(sentRune.finalizedEvents().run()) // doesn't workk

These would have different run contexts. I could see us supporting the following though:
const [finalizedEvents] = await Rune.tuple([
  sent.finalizedEvents(),
  sent.transactionStatuses(cb),
])

I believe this will be addressed as part of #721


Add option to pass/filter filenames through an arbitrary external program

DO NOT REMOVE OR SKIP THE ISSUE TEMPLATE

[X] I understand that I will be blocked if I intentionally remove or skip any mandatory* field

Checklist

[X] I'm requesting a feature unrelated to a specific site
[X] I've looked through the README
[X] I've verified that I'm running yt-dlp version 2023.03.04 (update instructions) or later (specify commit)
[X] I've searched known issues and the bugtracker for similar issues including closed ones. DO NOT post duplicates
[X] I've read the guidelines for opening an issue

Provide a description that is worded well enough to be understood
Plenty of open (and resolved :)) yt-dlp issues deal with problems regarding filenames, and how yt-dlp should mangle them under specific, yet varying, circumstances.
To give users so inclined a universal escape hatch that can satisfy everyone's needs, a new option should be introduced that takes the path to another executable as its argument. If set, for each file that yt-dlp is going to write to disk, it should invoke that executable as a subprocess, feed yt-dlp's notion of the YoutubeDL object's filename into that process's standard input, and read the resulting, final filename it shall use to store the downloaded content in on that process's standard output.
With this mechanism, users could implement their own "filename policy engines", with conceivable implementations ranging from something as trivial as a one-line shell script to elaborate programs that are centrally coordinated by blockchain-backed AI voodoo. (As far as I understand the documentation of --exec, this would be similar in methodology, but cannot actually be achieved using --exec.)
If this seems like a worthwhile feature to have, I'd be wiling to try to provide patches implementing it.
Provide verbose output that clearly demonstrates the problem

[ ] Run your yt-dlp command with -vU flag added (yt-dlp -vU <your command line>)
[ ] If using API, add 'verbose': True to YoutubeDL params instead
[ ] Copy the WHOLE output (starting with [debug] Command-line config) and insert it below

Complete Verbose Output
No response

Can you give a concrete use-case? I don't think this is a useful enough feature. Instead of writing such a "filename engine", it'd be easier imo to --write-info, build the filename, and --load-info back with appropriate -o. Or, if u don't mind re-extraction, just do 2 passes. Unlike your proposal, both these methods get access to the full info-dict, not just the filename, making it much more powerful too.

Thanks for weighing in! :) My concrete use case is this: I use a command line like yt-dlp --trim-filenames=120 url1 url2 url3 to download a number of files that, despite the requested trimming, (in part) result in filenames that are too long for the Linux VFS layer to be able to be stored, with the download process failing because of that.
Now if I could do something like yt-dlp --filename-mangle-script=~/myNeatScript url1 url2 url3 that would work in the described way, and the script looking something (I am only making this up; the real thing would have to be more elaborate to be generally useful) like this:
#!/usr/bin/env
cut -c 1:120 | tr -d \\n; echo ".mp4"

... I would achieve pretty much the desired effect. And if someone were to come along with a much more sophisticated need to deal with the resulting filenames, that would also be possible.

IIRC, --trim-filenames only affect final output filename and not temp files whereas  -o option with e.g. -o "%(title).150B [%(id)s].%(ext)s" works on both, or something along that.

To give users so inclined a universal escape hatch that can satisfy everyone's needs,

I think it's just that people are frustrated by yt-dlp slamming the floor face first just because the filename just so happens to be just too long, and the needs is just that people just want it to just not happening, and it so seems that the author is proposing a way that is not .150B because that suggestion was not accepted previously.
btw, isn't it just a 5 byte addition to utils.py:3454 ?

frustrated by yt-dlp slamming the floor face first just because the filename just so happens to be just too long, and the needs is just that people just want it to just not happening

The 255 bytes / 255 (UTF-16, ASCII, ?) char filename limit is pretty common across platforms:

Windows: NTFS 255 char (UTF-16?) [also has directory fragment limitation but pretty high:
Mac OS: HFS+ 255 UTF-16;
Linux: ext4/Btrfs 255 Bytes

https://en.wikipedia.org/wiki/Comparison_of_file_systems#Limits
[Errno 36] File name too long: '/path/redacted/long_filename.....[id].mp4.ytdl'

I wonder if the an acceptable solution here would be to make --trim-filenames a little more smart by making it less likely to remove interesting stuff perhaps by removing the middle blindly:
    fs_limit = max_name_len - len(ext.encode()) - len("...") - 1
    if len(stem.encode()) > fs_limit:
        start = stem[: fs_limit // 2]
        end = stem[-fs_limit // 2 :]
        while len(start.encode()) > fs_limit // 2:
            start = start[:-1]
        while len(end.encode()) > fs_limit // 2:
            end = end[1:]
        stem = start + "..." + end

The length of the temporary extensions also needs to be considered...

When considering possible tactics to overcome filename limits, it may be helpful to review the T-shirt and related links.


[CH] Unexpected result from aggregate step with empty output

Describe the bug
The result of the following query is 0, which should be 3
select count(1) from(
  select b,c from values(1,2),(1,2) as data(b,c) group by b,c
  union
  all select a, b from values (1,2),(1,2),(2,3) as data(a,b) group by a, b
);

The physical plan is
CHNativeColumnarToRow
+- ^(33) HashAggregateTransformer(keys=[], functions=[count(1)], output=[count(1)#60L])
   +- ColumnarExchange SinglePartition, ENSURE_REQUIREMENTS, [plan_id=768], [id=#768], [OUTPUT] List(count:LongType), [OUTPUT] List(count:LongType)
      +- ^(32) HashAggregateTransformer(keys=[], functions=[partial_count(1)], output=[count#63L])
         +- UnionExecTransformer
            :- ^(29) HashAggregateTransformer(keys=[b#56, c#57], functions=[], output=[])
            :  +- ColumnarExchange hashpartitioning(b#56, c#57, 2), ENSURE_REQUIREMENTS, [plan_id=753], [id=#753], [OUTPUT] ArrayBuffer(b:IntegerType, c:IntegerType), [OUTPUT] ArrayBuffer(b:IntegerType, c:IntegerType)
            :     +- ^(28) HashAggregateTransformer(keys=[b#56, c#57], functions=[], output=[b#56, c#57])
            :        +- RowToCHNativeColumnar
            :           +- LocalTableScan [b#56, c#57]
            +- ^(31) HashAggregateTransformer(keys=[a#58, b#59], functions=[], output=[])
               +- ColumnarExchange hashpartitioning(a#58, b#59, 2), ENSURE_REQUIREMENTS, [plan_id=760], [id=#760], [OUTPUT] ArrayBuffer(a:IntegerType, b:IntegerType), [OUTPUT] ArrayBuffer(a:IntegerType, b:IntegerType)
                  +- ^(30) HashAggregateTransformer(keys=[a#58, b#59], functions=[], output=[a#58, b#59])
                     +- RowToCHNativeColumnar
                        +- LocalTableScan [a#58, b#59]

The cause of this is that there is a projection after the 2nd aggregate stage of the subquery which has empty output columns. This make LocalExecutor::nextColumnar return empty blocks when the union operator call BatchIterator::hasNextInternal to check whether there is pending blocks.


Daniel/responsive

mobile responsive
tidy up views, meta tags

thanks @kev-chien  for the suggested change, it def is better for the user


⚠ ClamAV has degraded performance

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

HTTP code: 200
Response time: 64 ms

Resolved: ClamAV performance has improved in 6285335.


Limit for encrypted values in credhub?

We need to save string and json values securely in credhub (bosh release 1.6.5) for a special bosh deployment use case.
For that we tested with different sizes of values and there was no problem to store strings/json with 233k bytes and more.
But in the credhub source code on the persistence layer there is a limit of 7000 + 12 bytes set for all types of encrypted values.
in the class EncryptedValue
 @Column(length = ENCRYPTED_BYTES + NONCE_SIZE, name = "encrypted_value", nullable = false)
 private byte[] encryptedValue;

with defined ENCRYPTED_BYTES = 7000 and NONCE_SIZE = 12 parameters.
Fortunately  it seems that this limit is ignored, because the column length parameter applies only on string values and not byte arrays.
From the javax.persistence.Column documentation (https://javaee.github.io/javaee-spec/javadocs/javax/persistence/Column.html):
(Optional) The column length. (Applies only if a string-valued column is used.)

Before we can implement our special bosh deployment, we must ensure from credhub, that we are able to save values larger than the (for json and some other use cases too low) 7012 bytes limit. Therefor we have some questions:

What was the origin reason for implementing such a 7012 size limit?
Do you plan to fix this “bug”, so the limit will be enforced or will you just remove that limit ?
If you plan a limit, which size will it be ?

One suggestion would be to allow virtually unlimited sized values, but use path/prefix based quota.
For example:

all values in /deployment1/* in total can't exceed 2Gb,
all values in /deployment2/* in total can't exceed 10Gb
...

Then we could use acl based restrictions on who is allowed to push into which path (See https://github.com/cloudfoundry-incubator/credhub/issues/20) in order to prevent a single user to overload credhub.

i think it would really useful to support limiting of size based on optional policy (as @jgf shows) instead of individual items.

The team investigated this issue and found that the size of the json field is limited by the underlying database: https://www.pivotaltracker.com/story/show/157408875 Closing based on the findings.


Insert two fields of same row in form

Hi, guys, it's me again
My problem is as follows: I need to enter two information in the App form, Key and Value. Both are part of AppExtraRow. I don't know how to make each field fetch the right values. My attempt was to enter the Key field as NameField, but then Value would also have the Key values.
The fields of interest are the last two:

Here is how I made the code for both:

And here they are in AppExtraRow:

By the way, both are byte array, and I imagine that to display this in Form there is some problem. In Grid I can create a Formatter as it is done in the tutorial.
Thanks in advance

Hi @leovamos ,
now I don't understand. Are these two fields similar like the hash field - I mean by that: Are these additional fields meant to pull their lookup data from the same "key/value source table" - one should have the key and the other should have the value? Sounds a bit strange to me. Can you quickly make a database diagram within SQL server and show us the relations between all these tables in graphical form?
With kind regards,
John

Here it is, John
For App and AppExtra:

A portion of the schema:

Hmm,
what I don't understand with your request: The appExtra key and value belongs together (are in the same AppExtra record). So it would only make sense to choose one record of the AppExtra table within a dropdown (LookupEditor) on AppDialog.
So the logic would be that you let choose the user on the AppDialog only the desired App Extra record (set the key field as your NameField within AppExtra table so that the key is automatically displayed within the dropdown. And then in the onChange-Event of the corresponding form field on AppDialog (the one with the AppExtra key), you will then query the AppExtra Lookup to get the value of the value field which you have tagged with [LookupInclude] in the AppExtraRow.cs - by using the AppExtraId value from the AppExtra Key field on the AppDialog.
And when you have so retrieved the value of the value field from the record, you just set this value to the value field (which must be a pure in-memory field tagged with [notMapped] in the AppRow.cs).
Then when your user within AppDialog chose a key from the AppExtra table, it also displays the corresponding value.
Regards,
John

Hi @JohnRanger
I tried your approach, what is similar with @luongnv6 in #4616, but I must admit, I am confused,
not with your explanation but with the way how to do. What I tried is here:
The form is showing the key, with the NameField as KeyStr (a field that convert Key to String), but not showing Value:

Here are the codes for AppRow with the fields of interest:

My doubt is if Value Field should be maintained like it is now or I should change it... Because I'm showing it in the grid too
Then ExtraLookup.cs and AppDialog.ts, respectively:

Hi @leovamos ,
either I don't understand fully what you want to achieve with the relation between App and AppExtra table and the 2 fields (Key and Value) - or you have a basic misconception of how these 2 SQL tables have to be related with each other :-)
Also I would not recommend using fields with the names "key" and "value" as these words do have special meanings either in SQL (Key) or within Serenity Framework (value) and thus can lead to confusion.
Rename them to something like AppExtraKey, AppExtraValue.

But the key concept is: You must only have one reference within the App record to the AppExtra table - and this must not be the key field but the Primary key of the AppExtra table - and this is AppId.
Actually it is bad practice to name the primary key field not similar like the table where it resides in. In your case this would be: AppExtraId.
And then you would put an AppExtraId field as the foreign key field within your App table - and then you set the correct relationship between these to tables via the AppExtraID field - depending on your need.
Either a 1:n or 1:1 relationship.

You should remove the [notmapped] tag from your AppExtra key field as you will need to store the AppId (or better AppExtraId) from AppExtra table within App table's "key" field (but you must change this field to be the AppExtraId field) - otherwise you don't have any reference between these two tables - and you should not store the key's value but just the AppExtraId.
No lookupeditor on valuefield is required. This stays a simple text field. You will fetch the value with something like this directly from the lookup:
let AppExtraEntity = <yourNameSpace>.AppExtraRow.getLookup().items.filter(x => x.AppId.toString() === this.form.AppExtra.value)[0];

and then you simply update the value of the "value" field on AppDialog like this
this.form.value.value = AppExtraEntity.value;

If you don't understand my explanation, please ask your colleague which has already suggested to you the thing with the expression field. He surely can help you with a proper conception of how these 2 SQL tables must relate to each other. :-)

Kind regards,

John


Typescript Port

This was moved from being a PR against master.  It has also been squashed down a bit

lgtm aside from one necessary squash remaining, and that one comment i made, which could be a non issue
:shipit:

@kosz I think I addressed all your concerns.

I don't have time to make a deep code review currently, but this looks really good!


remove trust.jks for multiple agents setup

Setting up multiple agents of Windows starts but raises SSL exception. Need to remove previous trust.jks to get it right; it get regenerated.

Hi, @abhishekkr  - would you mind signing the CLA it's a one time requirement.
Thanks for helping out!

it's alright, I don't care whose commit updates it... can anyone who already has it signed (and agrees with this change) update it

Sorry, did not provide you a link.
http://www.go.cd/contribute/cla.html
If you don't want to sign that's ok we'll modify it ourselves. However we love contributions.

I love contributing, just don't like SLA driven OSS. Thus stayed away from Canonical as well.
To each their own.


Make property DateRangePicker::_template protected instead private

It's necessary because private property can not use in classes which extends DateRangePicker.
For example, it may come in handy to redefine template without redefining of method DateRangePicker::run().

Do you have time for a PR?

tonydspaniard, what do you mean by "PR"?

Done. https://github.com/2amigos/yii2-date-picker-widget/pull/34

Thanks!


Making User Guide info in bold and adding it as top right link in github.io [skip ci]

Closes #9598

build

build


Visual clue of presence of tab overflow menu is hidden

When you have many tabs opened, a contextual menu listing additional tabs is available near the right end of the tab bar.
Before transition to SPM (#1375), there was a visual clue of the existence of this overflow menu.

Currently, the visual clue is missing. The menu is still present and usable, though, but you have to guess that it exists somewhere in the tab…

MMTabBarView Demo does not have a similar problem.

Maybe a problem with the asset catalog then. Is just this image missing?
Have you built the demo app against the same master branch of MMTabBarView?

Please check ViennaRSS/MMTabBarView#33.

Resolved by #1384


check expire year

Perfect project,
Please add a function to check if the expire-cc-year < 2016
for example : if I put 03/2015 (this is not correct year beacause we have 2016 today)
Why we have a jQuery post function with url https://cardjs.co.uk/beacon in your card-js.min.js
Best regards

Feature added as of v1.0.12 1ae89db
You can also validate a card expiry date using the CardJs static function CardJs.isExpiryValid
var valid = CardJs.isExpiryValid(month, year);

Beacon is part of an upcoming feature - temporarily removed as not in use yet.


Using CreatedAtActionResult result in routing error

I know this has been reported before, but I believe it may still be happening with the latest release.
I added the following controller to the BasicSample project for aspnet core:
namespace Microsoft.Examples.Controllers
{
    using Microsoft.AspNetCore.Mvc;

    [Route( "api/v{version:apiVersion}/[controller]" )]
    [ApiVersion( "1.0" )]
    [ApiController]
    public class Values3Controller : ControllerBase
    {
        [HttpGet( "{value}" )]
        public ActionResult<string> Get( string value ) => value;

        [HttpPost]
        public ActionResult Post()
        {
            return this.CreatedAtAction( nameof(this.Get), new { value = "string" }, "string" );
        }
    }
}

Running the Post endpoint:
POST http://localhost:5000/api/v1/values3 HTTP/1.1
Content-Type: application/json
cache-control: no-cache
Postman-Token: 2d13a6ef-cde3-47f0-8488-a7ae1327869d
User-Agent: PostmanRuntime/7.6.1
Accept: */*
Host: localhost:5000
accept-encoding: gzip, deflate
content-length: 0
Connection: keep-alive

Results in a 500 error response:
HTTP/1.1 500 Internal Server Error
Date: Tue, 12 Mar 2019 18:46:18 GMT
Server: Kestrel
Content-Length: 011

With a log from the console as:
Hosting environment: Development
Content root path: C:\code\learning\aspnet-api-versioning\samples\aspnetcore\BasicSample
Now listening on: https://localhost:5001
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.
fail: Microsoft.AspNetCore.Server.Kestrel[13]
      Connection id "0HLL73B7IKL2U", Request id "0HLL73B7IKL2U:00000001": An unhandled exception was thrown by the application.
System.InvalidOperationException: No route matches the supplied values.
   at Microsoft.AspNetCore.Mvc.CreatedAtActionResult.OnFormatting(ActionContext context)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ObjectResultExecutor.ExecuteAsync(ActionContext context, ObjectResult result)
   at Microsoft.AspNetCore.Mvc.ObjectResult.ExecuteResultAsync(ActionContext context)
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeResultAsync(IActionResult result)
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextResultFilterAsync[TFilter,TFilterAsync]()
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResultExecutedContext context)
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.ResultNext[TFilter,TFilterAsync](State& next, Scope& scope, Object& state, Boolean& isCompleted)
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeResultFilters()
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextResourceFilter()
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResourceExecutedContext context)
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeFilterPipelineAsync()
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeAsync()
   at Microsoft.AspNetCore.Routing.EndpointMiddleware.Invoke(HttpContext httpContext)
   at Microsoft.AspNetCore.Routing.EndpointRoutingMiddleware.Invoke(HttpContext httpContext)
   at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.ProcessRequests[TContext](IHttpApplication`1 application)

I know this has been reported before, and the workaround is to use the legacy routing:
services.AddMvc( options => options.EnableEndpointRouting = false).SetCompatibilityVersion( Latest );
But I thought I saw a merge request saying that the new routing should work with the latest 3.1 version.

When you choose to version by URL path segment, the route parameter value is required. I think there may be some scenarios where the routing system auto-magically figures it out, but I'm not 100% sure what those are. Things are guaranteed to work if you supply all the route values.
The following should do the trick:
namespace Microsoft.Examples.Controllers
{
    using Microsoft.AspNetCore.Mvc;

    [Route( "api/v{version:apiVersion}/[controller]" )]
    [ApiVersion( "1.0" )]
    [ApiController]
    public class Values3Controller : ControllerBase
    {
        [HttpGet( "{value}" )]
        public ActionResult<string> Get( string value ) => value;

        [HttpPost]
        public ActionResult Post(ApiVersion apiVersion)
        {
            return this.CreatedAtAction( nameof(this.Get), new { value = "string", version = apiVersion.ToString() }, "string" );
        }
    }
}

This same setup can be seen in this example. I hope that helps.

Makes sense... it used to be that the controller had the context of the current route values, so if there was a missing key from a response it would pull it from the current request route values.... So the incoming request had apiResult then in the response route it was optional when passing route values.
I would assume it still worked the same.  I will whack together a test and post results here to here to see if it works in 2.2 passing a "known" parameter value from a POST via a CreatedAtAction without mentioning it in the route values...  I'll post the conclusion here.

@ghorsey were you able to come to a conclusion? I assume specifying the API version was sufficient to make things work as expected - yes?

It seems that this issue was resolved. If that somehow is not the case, feel free to come back and/or reopen the issue. Thanks.


Changes to syncing process

Closes #1630
In this issue, we spelled out the sequential way syncing should happen. In this PR:
When a user lands on MyObservations, syncing automatically starts. Syncing involves:

Fetching deletions from the server (logged in users)
Handling local deletions (logged in/out users)
Fetching remote observations from the server (logged in users)

During this process, the toolbar UI does not alert the user that syncing is in progress. Right now, the sync button is temporarily disabled while the automatic syncing happens. I don't think we'll want this long term, but for now, I wanted to make sure the sync button process and the automatic process aren't interfering with each other.
The one UI exception here is when a user navigates to ObsEdit, deletes an observation, and returns to MyObservations. They will then see "1 observation deleted" in the toolbar. This message should time out after a few seconds.
When a user taps the sync button, a new syncing process starts. This involves:

Fetching deletions from the server (logged in users)
Handling local deletions (logged in/out users)
Fetching remote observations from the server (logged in users)
Uploading all unuploaded observations (logged in users)

During this process, the toolbar UI says "Syncing..." until uploads start, then the toolbar displays the uploading UI.
I still need to get tests passing, but I think it would be helpful to get a review on this in the meantime since there are a lot of moving parts.

Alright, tried to clean up my convoluted code and rewrite in a way that's easier to understand (though I'm still using a useSyncObservations hook). Added some useSyncObservations tests to make sure the right functions are getting called when a user is logged in / out and when there's a manual vs. automatic sync. I removed the code related to disabling the button and the UI is currently the same whether a user is manually or automatically syncing -- I think we can tweak this part later if it's not what @abhasinat wants, but for now, it seems easier to test and to show the user what's happening if we use the same UI.

sounds good, happy to keep an eye on this in testing next round to see how it feels.


Possibility to assert invoked Uris?

Hi,
I'm using your library to author some tests and I got myself in the situation where my API client is forming a URL by adding many components both in the path and the querystring.
My test is targeting only a subsection of the requested URI and I would like to "test" it. Ideally on the used option.
To make a concrete example
var option = new HttpMessageOptions
{
    HttpMethod = HttpMethod.Get,
    HttpResponseMessage = new HttpResponseMessage(HttpStatusCode.OK)
    {
        Content = new StringContent(JsonConvert.SerializeObject(contact))
    },
    RequestUri = null
};

var sut = CreateSystemUnderTest(option);

var response = await sut.GetByIdAsync(contactId);

Assert.That(option.InvokedUri, Contains.SubString($"/contacts/v1/contact/vid/{contactId}"));

Right now I am forced to do:
var options = new HttpMessageOptions
{
    HttpMethod = HttpMethod.Get,
    HttpResponseMessage = new HttpResponseMessage(HttpStatusCode.OK)
    {
        Content = new StringContent(JsonConvert.SerializeObject(contact))
    },
    RequestUri = new Uri($"https://api.hubapi.com/contacts/v1/contact/vid/{contactId}/profile?formSubmissionMode=all&propertyMode=value_and_history&showListMemberships=true")
};

which is really outside of the scope of my unit test.

Hi again @Kralizek 👋
Hmm .. lets see here ...I first added this way back in #12 over here.
I just need to add some documentation to show how to do this.
In the mean time, here's an example using your code-example, above:
// Act.
var response = await sut.GetByIdAsync(contactId);

// Assert.
Assert.That(option.NumberOfTimesCalled, 1);

So what is happening is that we check that all the conditions of the Options was met and passed and the number of times it was met.
Does this help?

I'm not sure it would help my case (although I barely remember what I was working on back then).
I guess this would go in hand with the default registration we are discussing in #32.
Let RequestUri be optional and allow the test on the actual call.
Back to the first snippet, you could read its assertion as "I will receive a GET request whose URI will contain a subscring matching this pattern".

Currently, options.RequestUri is optional. 👍

"I will receive a GET request whose URI will contain a substring matching this pattern".

kewl! to do that, then you do exactly as you did, above ... and make then test that the option you just made, was called :)
which is the code I did above. Kewl!

Thanks! I'll check later :)


Error when download keysign via ipv6

Error Message:
"gpg: keyserver receive failed: Cannot assign requested address"
Root Cause:
When you try to make release keys.gnupg.net may be resolved to an IPv6 address. Under some circumstances (e.g. an internet connection that does not support IPv6) the build sistematically fail with message:
"gpg: keyserver receive failed: Cannot assign requested address"
Solution:
I created a fallback to an IPv4 version of keyserver.

thanks! @gianluca-mascolo
LGTM


Project: Search for word(s) in many Entity Types

Project name
Find Needle in Haystack
Description
Search for a specific term (the needle) in your messages, chats, events, and other supported entity types (haystack)
Repo URL
https://github.com/abdkayali/needle-in-haystack
Team members
abdkayali

Cool idea @abdkayali! Would you be willing to record a short video to demonstrate the app? It's not required for the hackathon but it would help us showcase your work internally at Microsoft and publicly in the community 😊

Thanks @waldekmastykarz
Sure, I will prepare the video, and put the link here as a comment

https://youtu.be/CmYhvlecCRE (no sound)
The same video edited, with sound and (unfortunately with watermark):
https://youtu.be/MCKC2v_szEo


Do not directly depend on Tink Keyset proto

Instead of storing AuthorizedKeys as a Tink Keyset proto, you should store a binary representation of the proto.

Remove all references to tinkpb.Keyset


[musicBERT] encoding_to_MIDI has a problem?

Hello, I am trying to use the wonderful octupleMIDI representation.
First, I get encoding by MIDI_to_encoding. Then, I restore it to midi by encoding_to_MIDI. But, there is a problem with the duration of some notes, like this.
I find the restored midi file will be right, if filtering out the notes whose duration is 0 in encoding_to_MIDI function.
Maybe there is a bug in miditoolkit(0.1.14, 0.1.15)?

This is my solution(in preprocess.py):

Thanks very much for your bug report. Discarding zero-duration notes may result in a significant loss of musical information. This issue can be efficiently fixed by changing zero durations to the smallest possible non-zero durations.


move under /datalad org and upload release on pypi please

it seems to be the "core" part of datalad-metalad, so probably should reside under datalad organization.
ATM I had to RTFM to get devel environment setup since it is not present on pypi at all (thus pip install -e . doesn't provide working installation of datalad-metalad) and needs installation using custom requirements-devel.txt.

datalad-metadata-model is uploaded as pypi-package.

moved to datalad.
Sorry for the delay, somehow lost track of this issue


Meta Priority

hey,
is there currently a way to set a priority for meta entries like you can do for prefix/suffix? If not any chance this could get added?
I tried to workaround this by creating a group with the meta and setting a higher weight but this weight seems to be ignored if you add the group as parent to a group with a lower weight.

No meta nodes don't have a priority - and I think adding a weight property would be beyond what they should be used for.
The full accumulated ListMultimap is exposed in the API - with values in the order they were inherited.
https://github.com/lucko/LuckPerms/blob/f8d34d7f467594bc5d8cc1c050db4bdad23d91d3/api/src/main/java/me/lucko/luckperms/api/caching/MetaData.java#L53-L66

This is how the meta looks like:

home-count 8 is at the top but I can only use 3.

@lucko is the meta list (/perm user ... meta info) ordered by weight?

Uhh, no, I don't think so

Hm, any idea how I could solve that without creating a new plugin and using the LP api?

Hm, you mean sorting the output in the meta info command?

No, I'm trying to get nucleus to use the home-count 8 (which comes from the inherited group perms_home8 which has a higher weight then tier2) instead of the home-count 3 (which comes from tier2  group).
The tier2 group is directly added to the user while perms_homes8 is a tempgroup which the user inherits from the default group.

I've re-opened this to remind myself to reply - and will leave it open until we can work out a solution :)
I'm quite tired at the moment so can't really give this issue my full thought - I'll try look into this a bit more / work out a reply sometime tomorrow - if that's okay. 😄

Alright thanks, I appreciate your help :)

Ok, that ^ commit will make the meta info command output in values in inheritance order - which is the same order used by the getOption method in the LP sponge implementation.

Yup it's all at the bottom :/

That's simply because tier2 and tier1 are being inherited before perms_homes8 and perms_homes5

Any idea how I could solve this?

They already have that

Are they inherited via something else though?

Yes, perms_homes is inherited from default.

You also need to consider the weights of the groups they're inherited through.
Those will be considered first

Unfortunately I can't change that for the default group. I guess there is no other way in giving the group to everyone and overwriting their existing groups?

Uhh nope, that's the nature of how the system works.
You might be able to change the inheritance order mode to achieve what you want - but beyond that, there's not much I can do, this is intended behaviour of the system.
https://github.com/lucko/LuckPerms/wiki/Configuration#inheritance-traversal-algorithm

Hm, I don't see that option in my config with LuckPerms-Sponge-4.1.68. Is that not in the version I'm using or do I need to manually add it?
Also is there currently any way to give a player a permission until he logs out?

You'll need to manually add it, the config doesn't update automatically.
It is possible, but not using commands.
You can do it via the Sponge API or the LP API using "transient" permissions.


drafts: Darken background in drafts overlay.

Looks good to me in manual testing! I didn't attempt to validate the box shadow changes, since I'm not sure how to check visually.

Looks good to me, merged, thanks @evykassirer!

(Do we want to try to do something with the informational overlays aka ? menu too? That's the other place that has rendered markdown that's pretty visible)


Kotlin

I wrote this because I needed it, and I assume others will likely want/need it as iot becomes more popular, and BLE is soooo good for it. I read the contrib file and I am not 100% sure how to proceed with tests, or if you even want this code. But I figured I would let whomever maintains know its out there.

The issue is you just converted from Java to Kotlin using the conversion tool. Which is a bad way of converting the project.

Why, what is missing? It builds and functions, so what is missing? I don't mind improving it, but I am coming from a mostly python/arduino background and am unaware of the obviousness of your statement.


Fixed styles for AppToolbar and CourseToolbar

[x]  Centered the AppToolBar component on the "My courses" page
[x]  Edited margin for an even space between autocompletes and a divider

link to Figma.
Before:

After:

✅


rzg2l-sbc: Codec porting to Yocto Styhead

Add vspm, vspmif, mmngr, mmngrbuf kernel modules and user libraries run on Linux 6.10
Add Gstreamer 1.24 and gstramer-omx 1.18 to Image

@tiennguyenuh , I think this needs a rebase after previous merges.

The PR has been rebased on the main branch, so it's ready for review and merging.


Feature Request- Time in range picker

Range picker of flat pickr is too simple and beautiful. It will more useful if you add following features
1. Time
Time is very useful when its used to create reports, charts etc
2. Maximum difference of the range in days
Its very useful when creating large reports.

Hello,
The time picker can be activated by enableTime: true option, including in range mode.
Usability is a different aspect, and still somewhat work-in-progress


update obslocalization test

Description
Update obs localization test to keep up with changes in oops/ioda
Dependencies
waiting on

https://github.com/JCSDA-internal/oops/pull/1141
https://github.com/JCSDA-internal/ioda/pull/188

OOPS and IODA PRs have been merged.


dart2js: createRuntimeType not correctly inferred in mirrors test

Patch in https://chromiumcodereview.appspot.com/1355873003/ (if not committed)

These tests fail because createRuntimeType as [empty] as the argument type. The failing call is from the constants section.

DART_VM_OPTIONS=-Dunreachable-throw=true  tools/test.py -mrelease -cdart2js -rd8 dart2js_extra/deferred/deferred_mirrors1_test
DART_VM_OPTIONS=-Dunreachable-throw=true  tools/test.py -mrelease -cdart2js -rd8 dart2js_extra/mirrors_used_warning2_test

The type objects are only reachable from init.metadata, and indirectly via a TypeVariable.
  C.Type_c4R = H.createRuntimeType("ListQueue");
  C.TypeVariable_4S7 = new H.TypeVariable(C.Type_c4R, "E", 2);
  // ^^ This is used by init.metadata

Fixed in https://chromiumcodereview.appspot.com/1355873003/


Tested working Yi home 1080p SN/IFUS

Tested on 4 pack yi home 1080p with serial number starting on IFUSXXXXXX.
Working with Qnap QVRpro over RTSP protocol.

Thank you for your feedback.
Did you try onvif also with qnap?

Onvif works as alocating service, But need to re-set as generic camera and rtsp h264.
I Can't setup Onvif, but not spent much time setting up devices. Maybe could try next week, but it's new for me, not understand yet.


Fix publish:github action not adding users as repository collaborators

Hey, I just made a Pull Request!
This PR aims to fix issue #9943. Since we are not 100% sure on the approach we've taken, we'd like to get some feedback before finalizing the PR, adding the changeset etc..
Since GitHub provides different APIs for adding a user versus adding a team as a collaborator, we've decided to change the shape of the collaborator objects that are passed to the action, in order to distinguish between usernames and team slugs.
collaborators can now have either a username or a team field: in the former case they are treated as users, whereas in the latter as teams.
This is a breaking change for users of the action, given that currently you can only add teams as collaborators by specifying their name in the username field.
We are open to any other idea to distinguish users from teams in a less disruptive way.
Co-authored-by: @fabuloso<EMAIL_ADDRESS>:heavy_check_mark: Checklist

[x] A changeset describing the change and affected packages. (more info)
[ ] Added or updated documentation (no need to)
[x] Tests for new functionality and regression tests for bug fixes
[ ] Screenshots attached (for UI changes) (no need to)
[x] All your commits have a Signed-off-by line in the message. (more info)

This looks pretty reasonable, do you want to fix up the api-reports and add a changeset for this change/

Then it's not a breaking change yet at least, we can group some more of these breaking changes together.

passing username would console.warn saying it's deprecated

Ok, so passing username should use the org api and warn the user to replace it with team, right?

Think the api report needs updating again, but this is starting to look nearly ready!

Sorry accidentally marked this as ready for review, but let us know when you're ready for review my marking it as so.

Thanks for this! :tada:


perf(clustering): use privileged agent for control plane connection

Summary
Data plane's connection to control plane is moved to a privileged agent worker process, including:

maintaining websocket (wrpc) connection and data transfer
decompression of received data
json decoding of the received data
validation and flattening of received data
inserting data to lmdb

(so that these won't affect latencies / rps on proxy workers)
This time behind configuration flag, and disabled by default.
See previous attempts:
#9432
#8971

TODO: try to optimize memory usage of privileged worker to minimum.

This is so amazing, I will look forward to Kong offloading all no proxy-related logic to privileged worker, And I have another concern, Is there any need for us to consider the downgrade permissions of privileged workers, Some control plane logic doesn't need root privileged, Using root user to do these things maybe have some security issues?

Some control plane logic doesn't need root privileged, Using root user to do these things maybe have some security issues?

That is the case currently that none of the logic needs (root) privileges (obviously because we have not had it before). Though we might need it later, and it certainly opens new possibilities to have those privileges. For example we have been discussing about auto-updating data planes and stuff like that. Perhaps multiple processes as side cars. Also there seems to not be a way to run privileged agent in non-privileged way or there is not non-privileged agent. But as the tasks that we put there are fairly isolated (mostly internal logistics and background tasks), I don't see that as a huge problem. We already run some of our code in init phase (which is a privileged phase, even without privileged worker).

I managed to reduce memory usage a lot.
Without plugins and vaults:

With bundled vaults and plugins:


Add a get_changelist_form hook in ConstanceAdmin

This method is used in the changelist_view to get the changelist form.
You may want to override this method to serve different forms depending
on the user that make the request. For example:
class MyConstanceAdmin(ConstanceAdmin):
    def get_changelist_form(self, request):
        if request.user.is_superuser:
            return SuperuserForm:
        else:
            return super(MyConstanceAdmin, self).get_changelist_form(request)

Django's ModelAdmin has similar hooks which are pretty useful when you need to allow different groups of users with different privileges to access the admin site.

Thank you

Thank your for your quick answer :)


Add ability to save column sizes

When using the stateSave Datatables functionality would like the column sizes saved so when the user expands or shrinks the column size it will remember those settings the next time the table is initialized.

This feature would be really appreciated.

@PatrickHarriss I don't think there will be plans to alter the default save state mechanism to accommodate the plugin. A possibility would be to get and save the widths of the columns on stateSaveCallback in a separate object and read and set the widths during stateLoadCallback again.

Thanks for looking at this, and thanks for the plugin. I'll look into the suggestions you gave. I was going to mention that the ColReorder plugin saves the state of the column order but realized that is an extension and not a plugin so might not be apples to apples.

Solved with latest release v2.6.0

@PatrickHarriss @konuch did the latest release solve the issue?

It did. Thank you.


link strength function should have access to the count object

The default link strength function uses an object called count to make the attractive strength between two nodes connected by an edge inversely proportional to the degrees of those nodes.
https://github.com/d3/d3-force/blob/00268ddf6a85be7fa21795e8fca06b76ac612bac/src/link.js#L27-L29
There's the option to set the strength of the force on the links, such that we might be able to change it on the fly. This function is supplied the link, the index, and the array of links:
https://github.com/d3/d3-force/blob/00268ddf6a85be7fa21795e8fca06b76ac612bac/src/link.js#L77
But not the count object. So if I wanted to set the strength as some scalar multiple of the default formula, I need to recompute counts, which is a shame.
Would it be reasonable to pass the counts object across to the link strength callback?

This would probably also apply to link.distance() as well?
https://github.com/d3/d3-force#link_distance

I'm closing this in order to keep the API simple. The count object is just a private optimization of the function given in the documentation.


New Feat: Passing results from OpenAI moderation call

This is very useful for handling non-english language moderation inputs, as OpenAI moderation can sometimes result in false negatives but still detects the usage of some sort of abusive language. So this pull request allows users to set the boundary themselves by filtering by category_scores (see OpenAI moderation doc).

Looks good to me, thank you!


Expose emptyCache() function for nodejs+HMR support

When using cheap-module-eval-source-map or equivalent in Webpack, the sourcemap is embbeded in the eval() statement generated by Webpack... thus, source-map-support cannot access the actual source and perform the mapping.
... and given that i'm using HMR on my nodejs server which is a huge codebase, using source-map is not an option if I dont want to wait forever on each file change.
Thus, I've developped for myself a small webpack plugin that mitigates this issue. But it requires source-map-support to expose an emptyCache() method.

@LinusU Any chance of this PR making it into the next release? I'm currently facing a problem where a part of the my system that I don't have control over is generating a lot of source maps that are blowing out my memory usage. Having a simple way to clear the cache would be a neat solve for my use case. Thanks 🙏


Zoom editor by mousewheel, can not know zoom level, can not Reset!

Please improve this.

VSCode Version: Code 1.11.2 (6eaebe3b9c70406d67c97779468c324a7a95db0e, 2017-04-13T08:03:11.395Z)
OS Version: Windows_NT ia32 6.1.7601
Extensions:

Extension
Author
Version

auto-close-tag
formulahendry
0.3.11

auto-complete-tag
formulahendry
0.0.1

auto-rename-tag
formulahendry
0.0.11

code-runner
formulahendry
0.6.16

docomment
k--kato
0.0.14

csharp
ms-vscode
1.8.1

PowerShell
ms-vscode
0.12.2

vscode-icons
robertohuertasm
7.5.1

code-settings-sync
Shan
2.6.2

colonize
vmsynkov
2.2.2

Steps to Reproduce:

Setting  "window.zoomLevel": 0 should reset the zoom.
You should also be able to use the keyboard shortcuts for zooming to zoom in and out
If this does not help, please provide more information about the problem you are seeing such a set of repo steps and/or a screenshot of the issue

Zooming by MouseWheel way (not Ctrl+=/-), I don't know how to Reset without restart vscode. is this hard to understand? please give me this, VS editor:

Adding UI for zoom control is tracked by #12318

@mjbvz While the OP seemed to want UI for zoom, they were correct that there is indeed no way to reset current zoom level after zooming with mouse wheel except by restarting the editor.
The issue stems from this: ctrl+scrolling with "editor.mouseWheelZoom": true changes the font size independent from the UI zoom level, and "Zoom In/Zoom Out/Reset Zoom" actions change the UI zoom level but not the font size.
Here's a recording of me (using a fresh VS Code Insiders 1.17.0 build) ctrl+scrolling then changing the UI zoom level then ctrl+scrolling again. You can see that the changes to font size are impossible to reset.

Could you reopen this issue, or should I open a new one? The title of this issue fits quite well.

@monk-time thanks for you support.


Adds velocity control to JointPositionController.

🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸
🎉 New feature
Closes #
Summary
There are times when we don't nessecarily want to tune a PID for each joint. Often we
may assume that the physical robot already has a well tuned controller. This
was true in the case of the mbari LRAUV.
Hence, there should be a way to set position without the use of a PID
controller.  This commit adds a use_velocity_commands option which when set to true bypasses the force
based PID giving a very predictable position. The use_velocity_command mode has a cmd_max which in turn
can be used to set a maximum velocity which the joint can move at.
Signed-off-by: Arjo Chakravarty<EMAIL_ADDRESS>Test it

TODO:

Add unit test.
The current implementation was developed for a prismatic joint. We need to add angle wrapping for a prismatic joint otherwise the controller may take the long way around. For now we maynot actually need this.

Checklist

[x] Signed all commits for DCO
[x] Added tests
[ ] Added example and/or tutorial
[x] Updated documentation (as needed)
[ ] Updated migration guide (as needed)
[x] codecheck passed (See contributing)
[ ] All tests passed (See test coverage)
[ ] While waiting for a review on your PR, please help review another open pull request to support the maintainers

Note to maintainers: Remember to use Squash-Merge

@chapulina This is ready for another round of review.