nginx: [emerg] bind() to <IP_ADDRESS>:80 failed (13: Permission denied)

Checklist

Have you pulled and found the error with jc21/nginx-proxy-manager:latest docker image?

Yes

Are you sure you're not using someone else's docker image?

Yes

Have you searched for similar issues (both open and closed)?

Yes

Describe the bug

when I upgrade to the latest "2.10.0" I got
nginx: [emerg] bind() to <IP_ADDRESS>:80 failed (13: Permission denied)

Nginx Proxy Manager Version

To Reproduce
Run docker with option "network_mode: host"
Expected behavior

Screenshots

Operating System
QNAP NAS
Additional context

Can confirm I'm seeing the exact same issue with the same configuration. Have rolled back to 2.9.22 to temporarily resolve the issue.

Same on Unraid with Host network. Downgraded to 2.9.22 for now.

I've got the same problem since the update

Same. Using podman on Rocky Linux.

Same problem running docker on Synology, with portainer and watchtower.
Have been on bridge network without problems before this update.

Same issue running docker on Synology, DSM 7.1.1-42962

Yup, same: running with podman on RHEL9

Same here!!!!
[Synology DSM 7.1] npm docker log
nginx: [emerg] bind() to <IP_ADDRESS>:80 failed (13: Permission denied)

Same here, reverted to 2.9.22
Synology, docker, portainer, watchtower.
nginx: [emerg] bind() to <IP_ADDRESS>:80 failed (13: Permission denied)

I used
app:
  image: 'jc21/nginx-proxy-manager:2.9.22'

to revert to 2.9.22.

Please don't comment with just 'same here!'. I think it's clear that there is an issue with the latest release.

Same issue here running on Synology with bridge networking.  Unfortunately I spent a long time attempting to debug why it coudn’t bind to the port.  Stop the container and port 80 became free, start the container at the port is in use via docker-proxy but NPM fails to bind to it.
After deleting everything and attempting to start again, I realised it was still the same, permission denied when binding the port.  Checked and found there’d been a recent update,
Rolling back to 2.9.22 fixes the issue For the time being.

It seems that since v2.10.0 the nginx is ran by npmuser  rather than default (root maybe?), whom might don't have sufficient permissions to listen on lower ports like 80 & 443. Not sure if this is the cause. 🤔
See full changelogs here: https://github.com/NginxProxyManager/nginx-proxy-manager/compare/v2.9.22...v2.10.0

Same isue here;running inside proxmox lcx container. my docker compose:
version: "3"
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
network_mode: host
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
watchtower:
container_name: watchtower
image: containrrr/watchtower:latest
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock

Would be good to understand what causes the issue.
Same here with Synology DSM, running latest or 2 same issue.
But running image: 'jc21/nginx-proxy-manager:2.9.22' fixed the issue for now

I had this same issue when I tried to install the beta version of the 3.0.
But then I thought the is still development so.........
But now I have this same issue with version 2.10
I'm running nginx_pm on my Synology.

problem solved please let me know thanks.

Please don't comment with just 'same here!'. I think it's clear that there is an issue with the latest release.

Perhaps you or someone else can give us an update on what is going on to solve this issue instead of giving us Thumb's down's
Something like: " we see there is an error and we are looking into it. We expect to have a solutions in xx days"
And by the way: I think I added some extra information by telling the communicty that I see this exact same error in the new version 3 NGINX-PM

I tried to test on CentOS 7 and Debian 10/11, this problem only happens on CentOS 7 system, not on Debian.
Maybe because of npmuser permissions, just guessing.
source: docker/rootfs/etc/s6-overlay/s6-rc.d/prepare/10-npmuser.sh

I tried to test on CentOS 7 and Debian 10/11, this problem only happens on CentOS 7 system, not on Debian.

Are you talking about running directly inside the system without docker? Because i'm running debian + docker and still encountered the issue.

The release notes mention this:
Adds support to run processes as a user/group, defined with PUID and PGID environment variables

    Detects if image is run with a user in docker command and fails if so

Users running 2.10.0 won't be able to run this container rootless apparently (as I've been doint with podman). Otherwise this message appears:
[user]$ podman logs -f nginx-test
s6-rc: info: service s6rc-oneshot-runner: starting
s6-rc: info: service s6rc-oneshot-runner successfully started
s6-rc: info: service fix-attrs: starting
s6-rc: info: service fix-attrs successfully started
s6-rc: info: service legacy-cont-init: starting
s6-rc: info: service legacy-cont-init successfully started
s6-rc: info: service prepare: starting
--------------------------------------
ERROR: This docker container must be run as root, do not specify a user.
You can specify PUID and PGID env vars to run processes as that user and group after initialization.
--------------------------------------

And the container stops. Problem is, even when specifying PUID and PGID, the container shows the errors reported in this thread.
Maybe I don't understand well what the new configuration should be, based on the release notes. If running the container as root is now a requisite, that would be a shame for us rootless users.
Any pointers would be greatly appreciated.

Same problem running docker on Synology DSM 7.1.1 with Portainer.
Reverted back to 2.9.22 and problem resolved.

nginx: [emerg] bind() to <IP_ADDRESS>:80 failed (13: Permission denied)
same ubuntu 22.x

Same issue

Synology DS918+
DSM 7.1.1-42962 Update 4

This seems to be expected behavior.
Release notes for 2.9.22 state:
https://github.com/NginxProxyManager/nginx-proxy-manager/releases

v2.9.22
⚠ The next release v2.10.0 will have changes that may adversely affect you, please pin your docker tag to 2.9.22 and upgrade after you conduct a full backup.

and

v2.10.0
⚠ This release has changes that may adversely affect you, please pin your docker tag to the previous release 2.9.22 and upgrade after you conduct a full backup.

But I can't find anything about how to prevent this 'adverse affect'.
Copied my comment above from #2761 which appears to be the duplicate

Same issue with the new image 2.10.1
I've tested the same as my previous comment, with PUID and PGID, and without them. The issue persists.
I've also tried running the container with sudo, to no avail. So it doesn't seem to be only related to rootless containers.

Same issue with the new image 2.10.1 I've tested the same as my previous comment, with PUID and PGID, and without them. The issue persists. I've also tried running the container with sudo, to no avail. So it doesn't seem to be only related to rootless containers.

Right, I also tried to install 2.10.1 to Synology 7.1.1, the result was same as before. Only 2.9.22 is the best way to me.

Having the same issue with this. I suspect the issue is related to the s6 change and this line in nginx config https://github.com/NginxProxyManager/nginx-proxy-manager/compare/v2.9.22...v2.10.0#diff-45b340b2ff6f4d041ae1aad210aaa0cd31b41139574725ef971a38fab076caa4L4
The issue is not the NET_BIND_SERVICE capability missing from the docker run, its a simple issue with the container itself. A non-root user cannot bind to ports less than 1024. This docker file should give the new npmuser permissions to do this.
If you are seeing nginx: [emerg] bind() to <IP_ADDRESS>:80 failed (13: Permission denied) I have found the following to work...

Atach an interactive bash shell to you running nginx proxy manager container. In Synology if you go to Docker > Containers > double click the NPM container to view details > Terminal > Create > type bash > Ok
update apt: apt-update
install setcap via libcap2-bin:apt install libcap2-bin
allow non root users to bind to ports: setcap 'cap_net_bind_service=+ep' /usr/sbin/nginx

You should now see nginx proxy manager successfully start! No need to restart the container. The issue with this fix is that if you have something like watchtower running you will lose this until its fixed in the offical docker image.
Good hygine would also be to add the PUID and PGID flags to a non-root user that lives on your system.

This seems to be expected behavior. @maz1987in @Jojonintendo @Candinya @evanlabs
Release notes for 2.9.22 state: https://github.com/NginxProxyManager/nginx-proxy-manager/releases

v2.9.22
⚠ The next release v2.10.0 will have changes that may adversely affect you, please pin your docker tag to 2.9.22 and upgrade after you conduct a full backup.

and

v2.10.0
⚠ This release has changes that may adversely affect you, please pin your docker tag to the previous release 2.9.22 and upgrade after you conduct a full backup.

But I can't find anything about how to prevent this 'adverse affect'.
Copied my comment above from #2761 which appears to be the duplicate

If Semantic Versioning is respected, this shouldn't be expected behaviour as this is a minor version not a major therefor it shouldn't break compatibility.
Obviously backing up al configuration before changing versions is a good idea, as one could never have enough backups only too little hard drive space ;)
On Another note I see a bugfix version for 2.10 was issued 11 hours ago. But replies so far in this issue seem to indicate that is not the case

2.9.22 works for me too but I noticed the versions latest, 2, or 2.10 creates files with UID=GID=911 while  2.9.22 use root user

@florisdipt completely agree, and there should be release notes clearly showing how to correct it. I gave the installation instructions a glance and couldn't see updates there but in off on vacation today so couldn't dig in.

I generally create a basic user with no login via the control panel in the Synology NAS that only has access to a volume for my docker containers. I create a user for each domain set of containers say user docker-npm, I think give this user ownership permissions to a docker-npm folder in the NAS where I want to mount volumes in the container.

Thanks that's good advice I have taken, although its functioning OK I am getting:
[3/30/2023] [11:46:27 PM] [SSL      ] › ✖  error     Error: Command failed: certbot renew --non-interactive --quiet --config "/etc/letsencrypt.ini" --work-dir "/tmp/letsencrypt-lib" --logs-dir "/tmp/letsencrypt-log" --preferred-challenges "dns,http" --disable-hook-validation
The following error was encountered:
[Errno 13] Permission denied: '/tmp/letsencrypt-log/.certbot.lock'
Either run as root, or set --config-dir, --work-dir, and --logs-dir to writeable paths.
    at ChildProcess.exithandler (node:child_process:402:12)
    at ChildProcess.emit (node:events:513:28)
    at maybeClose (node:internal/child_process:1100:16)
    at Process.ChildProcess._handle.onexit (node:internal/child_process:304:5)

Didn't notice this error before do you know if there is a way to move the paths that cannot be accessed to within the writable docker folder for example?

This problem has been solved in the v2.10.2 version, and I tested the docker container on CentOS and Debian without any problems.
Thanks to the developer for fixing this issue quickly.

What do I need to change on a system that has been working fine up until this recent bug? I'm already on v2.10.2 but it's not working yet.
Still getting this:
s6-rc: info: service s6rc-oneshot-runner: starting s6-rc: info: service s6rc-oneshot-runner successfully started s6-rc: info: service fix-attrs: starting s6-rc: info: service fix-attrs successfully started s6-rc: info: service legacy-cont-init: starting s6-rc: info: service legacy-cont-init successfully started s6-rc: info: service prepare: starting ❯ Configuring npmuser ... id: 'npmuser': no such user ❯ Checking paths ... ❯ Setting ownership ... s6-rc: fatal: timed out /run/s6/basedir/scripts/rc.init: warning: s6-rc failed to properly bring all the services up! Check your logs (in /run/uncaught-logs/current if you have in-container logging) for more information. s6-sudoc: fatal: unable to get exit status from server: Operation timed out

I also have the same issue as @ituri  has.
Returned to v 2.9.22 again

I also have the same issue as @ituri has.
I running the nginx-pm on my Synology Returned to v 2.9.22 again

I've reinstall 2.10.2 to synology 7.1.1 without PUID/PGID and issue has been solved.
Are you using PUID/PGID?

Are you starting docker-compose as root user or as an other user??
I'm starting it as root user.

Are you starting docker-compose as root user or as an other user?? I'm starting it as root user.

root.
sudo -i
docker-compose up -d

That's what I do. The only difference is that I use a macvlan configuration so I using the original ports 80 and 443.
I try to intall a seperate test nginx-pm the way you have.

Created a complete new nginx-pm container with corresponding DB.
Below my log

s6-rc: info: service s6rc-oneshot-runner: starting
s6-rc: info: service s6rc-oneshot-runner successfully started
s6-rc: info: service fix-attrs: starting
s6-rc: info: service fix-attrs successfully started
s6-rc: info: service legacy-cont-init: starting
s6-rc: info: service legacy-cont-init successfully started
s6-rc: info: service prepare: starting
❯ Configuring npmuser ...
id: 'npmuser': no such user
❯ Checking paths ...
❯ Setting ownership ...
❯ Dynamic resolvers ...
❯ IPv6 ...
Enabling IPV6 in hosts in: /etc/nginx/conf.d

/etc/nginx/conf.d/default.conf
/etc/nginx/conf.d/include/assets.conf
/etc/nginx/conf.d/include/block-exploits.conf
/etc/nginx/conf.d/include/force-ssl.conf
/etc/nginx/conf.d/include/ip_ranges.conf
/etc/nginx/conf.d/include/letsencrypt-acme-challenge.conf
/etc/nginx/conf.d/include/proxy.conf
/etc/nginx/conf.d/include/ssl-ciphers.conf
/etc/nginx/conf.d/include/resolvers.conf
/etc/nginx/conf.d/production.conf
Enabling IPV6 in hosts in: /data/nginx
❯ Docker secrets ...

| \ | |  _ |  /  |
|  | | |) | |/| |
| |\  |  __/| |  | |
|| _||   ||  |_|
User UID: 911
User GID: 911
s6-rc: info: service prepare successfully started
s6-rc: info: service nginx: starting
s6-rc: info: service frontend: starting
s6-rc: info: service backend: starting
s6-rc: info: service frontend successfully started
❯ Starting nginx ...
s6-rc: info: service backend successfully started
❯ Starting backend ...
s6-rc: info: service nginx successfully started
s6-rc: info: service legacy-services: starting
s6-rc: info: service legacy-services successfully started
nginx: [emerg] bind() to <IP_ADDRESS>:80 failed (13: Permission denied)
[3/31/2023] [10:15:27 AM] [Global   ] › ℹ  info      Using MySQL configuration
[3/31/2023] [10:15:27 AM] [Global   ] › ℹ  info      Creating a new JWT key pair...
❯ Starting nginx ...
nginx: [emerg] bind() to <IP_ADDRESS>:80 failed (13: Permission denied)
❯ Starting nginx ...
nginx: [emerg] bind() to <IP_ADDRESS>:80 failed (13: Permission denied)
❯ Starting nginx ...
nginx: [emerg] bind() to <IP_ADDRESS>:80 failed (13: Permission denied)
❯ Starting nginx ...
nginx: [emerg] bind() to <IP_ADDRESS>:80 failed (13: Permission denied)
❯ Starting nginx ...
nginx: [emerg] bind() to <IP_ADDRESS>:80 failed (13: Permission denied)
❯ Starting nginx ...
nginx: [emerg] bind() to <IP_ADDRESS>:80 failed (13: Permission denied)
❯ Starting nginx ...
nginx: [emerg] bind() to <IP_ADDRESS>:80 failed (13: Permission denied)
❯ Starting nginx ...
nginx: [emerg] bind() to <IP_ADDRESS>:80 failed (13: Permission denied)
[3/31/2023] [10:15:35 AM] [Global   ] › ℹ  info      Wrote JWT key pair to config file: /data/keys.json
❯ Starting nginx ...
nginx: [emerg] bind() to <IP_ADDRESS>:80 failed (13: Permission denied)
❯ Starting nginx ...
nginx: [emerg] bind() to <IP_ADDRESS>:80 failed (13: Permission denied)
❯ Starting nginx ...
nginx: [emerg] bind() to <IP_ADDRESS>:80 failed (13: Permission denied)
[3/31/2023] [10:15:38 AM] [Migrate  ] › ℹ  info      Current database version:<PHONE_NUMBER>5214
❯ Starting nginx ...
nginx: [emerg] bind() to <IP_ADDRESS>:80 failed (13: Permission denied)
[3/31/2023] [10:15:39 AM] [Setup    ] › ℹ  info      Logrotate Timer initialized
[3/31/2023] [10:15:39 AM] [Setup    ] › ℹ  info      Logrotate completed.
[3/31/2023] [10:15:39 AM] [IP Ranges] › ℹ  info      Fetching IP Ranges from online services...
[3/31/2023] [10:15:39 AM] [IP Ranges] › ℹ  info      Fetching https://ip-ranges.amazonaws.com/ip-ranges.json
[3/31/2023] [10:15:39 AM] [IP Ranges] › ℹ  info      Fetching https://www.cloudflare.com/ips-v4
[3/31/2023] [10:15:39 AM] [IP Ranges] › ℹ  info      Fetching https://www.cloudflare.com/ips-v6
[3/31/2023] [10:15:39 AM] [SSL      ] › ℹ  info      Let's Encrypt Renewal Timer initialized
[3/31/2023] [10:15:39 AM] [SSL      ] › ℹ  info      Renewing SSL certs close to expiry...
[3/31/2023] [10:15:39 AM] [IP Ranges] › ℹ  info      IP Ranges Renewal Timer initialized
[3/31/2023] [10:15:39 AM] [Global   ] › ℹ  info      Backend PID 128 listening on port 3000 ...
❯ Starting nginx ...
nginx: [emerg] bind() to <IP_ADDRESS>:80 failed (13: Permission denied)
❯ Starting nginx ...
nginx: [emerg] bind() to <IP_ADDRESS>:80 failed (13: Permission denied)
[3/31/2023] [10:15:41 AM] [SSL      ] › ✖  error     Error: Command failed: /usr/sbin/nginx -t -g "error_log off;"
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: [emerg] bind() to <IP_ADDRESS>:80 failed (13: Permission denied)
nginx: configuration file /etc/nginx/nginx.conf test failed
at ChildProcess.exithandler (node:child_process:402:12)
at ChildProcess.emit (node:events:513:28)
at maybeClose (node:internal/child_process:1100:16)
at Process.ChildProcess._handle.onexit (node:internal/child_process:304:5)

❯ Starting nginx ...
nginx: [emerg] bind() to <IP_ADDRESS>:80 failed (13: Permission denied)
❯ Starting nginx ...
nginx: [emerg] bind() to <IP_ADDRESS>:80 failed (13: Permission denied)
etc etc

User ID: 0
Group ID: 0

Created a complete new nginx-pm container with corresponding DB. Below my log

s6-rc: info: service s6rc-oneshot-runner: starting
s6-rc: info: service s6rc-oneshot-runner successfully started
s6-rc: info: service fix-attrs: starting
s6-rc: info: service fix-attrs successfully started
s6-rc: info: service legacy-cont-init: starting
s6-rc: info: service legacy-cont-init successfully started
s6-rc: info: service prepare: starting
❯ Configuring npmuser ...
id: 'npmuser': no such user
❯ Checking paths ...
❯ Setting ownership ...
❯ Dynamic resolvers ...
❯ IPv6 ...
Enabling IPV6 in hosts in: /etc/nginx/conf.d

/etc/nginx/conf.d/default.conf
/etc/nginx/conf.d/include/assets.conf
/etc/nginx/conf.d/include/block-exploits.conf
/etc/nginx/conf.d/include/force-ssl.conf
/etc/nginx/conf.d/include/ip_ranges.conf
/etc/nginx/conf.d/include/letsencrypt-acme-challenge.conf
/etc/nginx/conf.d/include/proxy.conf
/etc/nginx/conf.d/include/ssl-ciphers.conf
/etc/nginx/conf.d/include/resolvers.conf
/etc/nginx/conf.d/production.conf
Enabling IPV6 in hosts in: /data/nginx
❯ Docker secrets ...

| \ | | _ | / |
| | | |) | |/| | | |\ | __/| | | | || || || ||
User UID: 911
User GID: 911
s6-rc: info: service prepare successfully started s6-rc: info: service nginx: starting s6-rc: info: service frontend: starting s6-rc: info: service backend: starting s6-rc: info: service frontend successfully started ❯ Starting nginx ... s6-rc: info: service backend successfully started ❯ Starting backend ... s6-rc: info: service nginx successfully started s6-rc: info: service legacy-services: starting s6-rc: info: service legacy-services successfully started nginx: [emerg] bind() to <IP_ADDRESS>:80 failed (13: Permission denied) [3/31/2023] [10:15:27 AM] [Global ] › ℹ info Using MySQL configuration [3/31/2023] [10:15:27 AM] [Global ] › ℹ info Creating a new JWT key pair... ❯ Starting nginx ... nginx: [emerg] bind() to <IP_ADDRESS>:80 failed (13: Permission denied) ❯ Starting nginx ... nginx: [emerg] bind() to <IP_ADDRESS>:80 failed (13: Permission denied) ❯ Starting nginx ... nginx: [emerg] bind() to <IP_ADDRESS>:80 failed (13: Permission denied) ❯ Starting nginx ... nginx: [emerg] bind() to <IP_ADDRESS>:80 failed (13: Permission denied) ❯ Starting nginx ... nginx: [emerg] bind() to <IP_ADDRESS>:80 failed (13: Permission denied) ❯ Starting nginx ... nginx: [emerg] bind() to <IP_ADDRESS>:80 failed (13: Permission denied) ❯ Starting nginx ... nginx: [emerg] bind() to <IP_ADDRESS>:80 failed (13: Permission denied) ❯ Starting nginx ... nginx: [emerg] bind() to <IP_ADDRESS>:80 failed (13: Permission denied) [3/31/2023] [10:15:35 AM] [Global ] › ℹ info Wrote JWT key pair to config file: /data/keys.json ❯ Starting nginx ... nginx: [emerg] bind() to <IP_ADDRESS>:80 failed (13: Permission denied) ❯ Starting nginx ... nginx: [emerg] bind() to <IP_ADDRESS>:80 failed (13: Permission denied) ❯ Starting nginx ... nginx: [emerg] bind() to <IP_ADDRESS>:80 failed (13: Permission denied) [3/31/2023] [10:15:38 AM] [Migrate ] › ℹ info Current database version:<PHONE_NUMBER>5214 ❯ Starting nginx ... nginx: [emerg] bind() to <IP_ADDRESS>:80 failed (13: Permission denied) [3/31/2023] [10:15:39 AM] [Setup ] › ℹ info Logrotate Timer initialized [3/31/2023] [10:15:39 AM] [Setup ] › ℹ info Logrotate completed. [3/31/2023] [10:15:39 AM] [IP Ranges] › ℹ info Fetching IP Ranges from online services... [3/31/2023] [10:15:39 AM] [IP Ranges] › ℹ info Fetching https://ip-ranges.amazonaws.com/ip-ranges.json [3/31/2023] [10:15:39 AM] [IP Ranges] › ℹ info Fetching https://www.cloudflare.com/ips-v4 [3/31/2023] [10:15:39 AM] [IP Ranges] › ℹ info Fetching https://www.cloudflare.com/ips-v6 [3/31/2023] [10:15:39 AM] [SSL ] › ℹ info Let's Encrypt Renewal Timer initialized [3/31/2023] [10:15:39 AM] [SSL ] › ℹ info Renewing SSL certs close to expiry... [3/31/2023] [10:15:39 AM] [IP Ranges] › ℹ info IP Ranges Renewal Timer initialized [3/31/2023] [10:15:39 AM] [Global ] › ℹ info Backend PID 128 listening on port 3000 ... ❯ Starting nginx ... nginx: [emerg] bind() to <IP_ADDRESS>:80 failed (13: Permission denied) ❯ Starting nginx ... nginx: [emerg] bind() to <IP_ADDRESS>:80 failed (13: Permission denied) [3/31/2023] [10:15:41 AM] [SSL ] › ✖ error Error: Command failed: /usr/sbin/nginx -t -g "error_log off;" nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: [emerg] bind() to <IP_ADDRESS>:80 failed (13: Permission denied) nginx: configuration file /etc/nginx/nginx.conf test failed
at ChildProcess.exithandler (node:child_process:402:12)
at ChildProcess.emit (node:events:513:28)
at maybeClose (node:internal/child_process:1100:16)
at Process.ChildProcess._handle.onexit (node:internal/child_process:304:5)

❯ Starting nginx ... nginx: [emerg] bind() to <IP_ADDRESS>:80 failed (13: Permission denied) ❯ Starting nginx ... nginx: [emerg] bind() to <IP_ADDRESS>:80 failed (13: Permission denied) etc etc

BTW,  below ID is different from me.
User ID: 0
Group ID: 0

BTW, below ID is different from me.
User ID: 0 Group ID: 0

I know but with that same PUID and GUID version 2.9.22 is working as expected.
When I try to use PUID and GUID 0 (root)  docker-compose says it's not a unique UID and thus nginx-pm does not start correctly.
So if some one has an idea on how to get version 2.10.x working  that would be nice.  I'm getting a bit frustrated because if this issue will not be resolved I have to think about moving to an other reverse proxy because all future development won't work in my environment.

And when I use the version 2.9.22 for my fresh installed environment it's starting right away without an issue.
Very nice such an upgrade.

I've reinstall 2.10.2 to Synology 7.1.1 without PUID/PGID and issue has been solved.
Are you using PUID/PGID?

Looking at your config, it seems that you are not using Host Networking?
I have 2 instances running, and the one that does not use host networking works fine.
When using host networking, i get the same errors.
The only way so far to solve host networking was to allow access to privileged ports to non root users. (as SUggested by nemccarthy earlier)

I've reinstall 2.10.2 to Synology 7.1.1 without PUID/PGID and issue has been solved.
Are you using PUID/PGID?

Looking at your config, it seems that you are not using Host Networking? I have 2 instances running, and the one that does not use host networking works fine. When using host networking, i get the same errors.
The only way so far to solve host networking was to allow access to privileged ports to non root users. (as SUggested by nemccarthy earlier)

reinstall NPM 2.10.2 without PGID/PUID worked for me on Docker Synology DSM 7.1.1!

Tried 2.10.2 and got "No Reason Phrase" and rolling back to 2.9.22 doesn't work anymore. Now my system is down.

I've rolled back to 2.9.22, still left the PGID/PUID and this worked straight away for me.
Will pause my updates until this is resolved

v2.10.2  seems to be working again at least for me when using host network mode.

v2.10.2 is working for me with macvlan network!

Not here. Getting this error:
➜  nginx-proxy-manager sudo docker logs 3df258eb385e s6-rc: info: service s6rc-oneshot-runner: starting s6-rc: info: service s6rc-oneshot-runner successfully started s6-rc: info: service fix-attrs: starting s6-rc: info: service fix-attrs successfully started s6-rc: info: service legacy-cont-init: starting s6-rc: info: service legacy-cont-init successfully started s6-rc: info: service prepare: starting ❯ Configuring npmuser ... id: 'npmuser': no such user ❯ Checking paths ... ❯ Setting ownership ... s6-sudoc: fatal: unable to get exit status from server: Operation timed out s6-rc: fatal: timed out /run/s6/basedir/scripts/rc.init: warning: s6-rc failed to properly bring all the services up! Check your logs (in /run/uncaught-logs/current if you have in-container logging) for more information. ➜

To avoid the error s6-sudoc: fatal: unable to get exit status from server: Operation timed out I added the following line:
-e S6_CMD_WAIT_FOR_SERVICES_MAXTIME=60000 \

to my docker run command.

To avoid the error s6-sudoc: fatal: unable to get exit status from server: Operation timed out I added the line
-e S6_CMD_WAIT_FOR_SERVICES_MAXTIME=60000 \

to my docker run command.
With this line and without PUID and PGID it is working fine.

Same issue. For reference, here's my docker-compose.yml:
version: "3.8"
services:
  app:
    # image: 'jc21/nginx-proxy-manager:latest'
    # c.f.: https://github.com/NginxProxyManager/nginx-proxy-manager/issues/2750#ref-issue-1641490445
    #image: 'jc21/nginx-proxy-manager:2.9.22'
    image: 'jc21/nginx-proxy-manager:2.10.2'
    restart: unless-stopped
    ports:
      # These ports are in format <host-port>:<container-port>
      - '80:80' # Public HTTP Port
      - '443:443' # Public HTTPS Port
      - '81:81' # Admin Web Port
      # Add any other Stream port you want to expose
      # - '21:21' # FTP

    # Uncomment the next line if you uncomment anything in the section
    environment:
      - PUID=1000
      - PGID=1000
      # Uncomment this if you want to change the location of
      # the SQLite DB file within the container
      # DB_SQLITE_FILE: "/data/database.sqlite"

      # Uncomment this if IPv6 is not enabled on your host
      # DISABLE_IPV6: 'true'
      - S6_CMD_WAIT_FOR_SERVICES_MAXTIME = 60000

    volumes:
      - /mnt/docker/proxmox-nginx-proxy-manager-date:/data
      - /mnt/docker/proxmox-nginx-proxy-manager-letsencrypt:/etc/letsencrypt

To avoid the error s6-sudoc: fatal: unable to get exit status from server: Operation timed out I added the line
-e S6_CMD_WAIT_FOR_SERVICES_MAXTIME=60000 \

to my docker run command.
With this line and without PUID and PGID it is working fine.

Thanks this fix works for me on latest version with PUID and PGID.

Mine just stopped working today with the same error. PUID/GUID didn't work. Rolling back to 2.9.22 didn't work. They only way to fix it was to change ports:
ports:
  # These ports are in format <host-port>:<container-port>
  - '8080:80' # Public HTTP Port
  - '4343:443' # Public HTTPS Port
  - '81:81' # Admin Web Port

v2.10.3 adds an unlimited S6_CMD_WAIT_FOR_SERVICES_MAXTIME value so it should not timeout anymore.
That said, the reason for the startup taking a long time is probably because certbot doesn't cleanup old certs and there will be thousands upon thousands of files in your letsencrypt folder that are no longer required. The startup tries to change the ownership of that folder.
I'd recommend running cert-prune from within the docker container to clean them up.

v2.10.3 adds an unlimited S6_CMD_WAIT_FOR_SERVICES_MAXTIME value so it should not timeout anymore.
That said, the reason for the startup taking a long time is probably because certbot doesn't cleanup old certs and there will be thousands upon thousands of files in your letsencrypt folder that are no longer required. The startup tries to change the ownership of that folder.
I'd recommend running cert-prune from within the docker container to clean them up.

Does cert-prune work correctly now mate? At one point it didn’t/needed amended on owners end or something??

For those still struggling with the I have managed to resolve with the brilliant Marius help.  I followed these steps:

Stopped the nginx container
Renamed the container to npm_old
renamed the docker npm folder to npm_old
Followed the tutorial here: https://mariushosting.com/how-to-install-nginx-proxy-manager-on-your-synology-nas/
After the new container span up I stopped it.
I renamed the new docker npm folder (from the tutorial) to npm_working
Renamed the previous docker folder npm_old back to npm
Span up the container again, and its all working with my previous settings

Its likely not all those steps are needed and you can bypass the folder rename, but just saying what I did do with it confirmed working.
Note there is no GID and PID in the new version of the install.  So anyone having issues with this container on synology can follow the above and you should be back up and running.  Absolutely no errors on the log.

With v2.10.3, npm is now working perfectly again on my Synology. 🎉
I removed
- PUID=0
- PGID=0

from my env vars and that's it.
I tested a fresh install and several server reboots and npm didn't have any issues starting up anymore.
Thanks for the work on this @jc21 !

With v2.10.3, npm is now working perfectly again on my Synology. 🎉 I removed
- PUID=0
- PGID=0

from my env vars and that's it.
I tested a fresh install and several server reboots and npm didn't have any issues starting up anymore.
Thanks for the work on this @jc21 !

Can confirm this, updated to 2.10.3 from 2.9.22. At first, it again failed to bind to <IP_ADDRESS>:80 (permission denied), but after commenting out the PUID and PGID env vars for NPM in my Portainer stack and redeploying it, NPM started up no problem. Thanks!

@maz1987in  Hi, If it's corrected. Can you close the issue?

Problem still exists. Tried it with latest release on Ubuntu Server 18.04 LTS.

Problem still exists only when commenting out the PUID and PGID env vars it works!

Problem still exists. Tried it with latest release on RouterOS  7.10.1.
I have tried the following scenarios：

Don't set PUID and PGID
Set PUID and PGID to 0

- PUID=0
- PGID=0

Set PUID and PGID to 1000

- PUID=1000
- PGID=1000

Problem still exists only when commenting out the PUID and PGID env vars it works!

Never used OOUID or PGID env
app:
    image: 'jc21/nginx-proxy-manager:latest'
    depends_on:
      - db
    ports:
      - '80:80'
      - '81:81'
      - '443:443'
    environment:
      DB_MYSQL_HOST: "db"
      DB_MYSQL_PORT: 3306
      DB_MYSQL_USER: "**"
      DB_MYSQL_PASSWORD: "******"
      DB_MYSQL_NAME: "***"
    volumes:
      - npm-data:/data
      - npm-letsencrypt:/etc/letsencrypt
    restart: always
    links:
      - "db:db"

For people still experiencing this, here's how I got to the latest container without having to do a clean install or anything from version 2.9.22.

docker-compose up with this image: jc21/nginx-proxy-manager:github-uidgid
Then docker-compose up with the latest image: jc21/nginx-proxy-manager:latest

+1. have some issue

Still not working with latest, any update on this?

Same issue here:
##docker-compose.yaml:
version: '3.3'

services:
    app:
      image: 'jc21/nginx-proxy-manager:2.10.4'
      restart: unless-stopped
      # container_name: nginx_proxy
      ports:
         - '8081:80'
         - '81:81'
         - '443:443'
      volumes:
         - ./data:/data
         - ./letsencrypt:/etc/letsencrypt

I had removed all previously made files and started podman-compose up again.
Podman NPM output:
podman start -a nginx-proxy_app_1
❯ Configuring npm user ...
1001�����������������������������������������������������������
usermod: no changes��������������������������������������������
❯ Configuring npm group ...������������������������������������
❯ Checking paths ...�������������������������������������������
❯ Setting ownership ...����������������������������������������
❯ Dynamic resolvers ...����������������������������������������
❯ IPv6 ...�����������������������������������������������������
Enabling IPV6 in hosts in: /etc/nginx/conf.d�������������������
- /etc/nginx/conf.d/include/force-ssl.conf���������������������
- /etc/nginx/conf.d/include/proxy.conf�������������������������
- /etc/nginx/conf.d/include/letsencrypt-acme-challenge.conf����
- /etc/nginx/conf.d/include/block-exploits.conf����������������
- /etc/nginx/conf.d/include/assets.conf������������������������
- /etc/nginx/conf.d/include/ssl-ciphers.conf�������������������
- /etc/nginx/conf.d/include/ip_ranges.conf���������������������
- /etc/nginx/conf.d/include/resolvers.conf���������������������
- /etc/nginx/conf.d/production.conf����������������������������
- /etc/nginx/conf.d/default.conf�������������������������������
Enabling IPV6 in hosts in: /data/nginx�������������������������
❯ Docker secrets ...�������������������������������������������
���������������������������������������������������������������
-------------------------------------��������������������������
 _   _ ____  __  __��������������������������������������������
| \ | |  _ \|  \/  |�������������������������������������������
|  \| | |_) | |\/| |�������������������������������������������
| |\  |  __/| |  | |�������������������������������������������
|_| \_|_|   |_|  |_|�������������������������������������������
-------------------------------------��������������������������
User:  npm PUID:1001 ID:1001 GROUP:1001������������������������
Group: npm PGID:1001 ID:1001�����������������������������������
-------------------------------------��������������������������
���������������������������������������������������������������
❯ Starting nginx ...
❯ Starting backend ...
nginx: [warn] the "user" directive makes sense only if the mast
er process runs with super-user privileges, ignored in /etc/ngi
nx/nginx.conf:4
nginx: [emerg] bind() to <IP_ADDRESS>:80 failed (13: Permission deni
ed)
[11/2/2023] [2:34:14 PM] [Global   ] › ℹ  info      Using Sqlit
e: /data/database.sqlite
[11/2/2023] [2:34:14 PM

Same issue here:
##docker-compose.yaml:
version: '3.3'

services:
    app:
      image: 'jc21/nginx-proxy-manager:2.10.4'
      restart: unless-stopped
      # container_name: nginx_proxy
      ports:
         - '8081:80'
         - '81:81'
         - '443:443'
      volumes:
         - ./data:/data
         - ./letsencrypt:/etc/letsencrypt

I had removed all previously made files and started podman-compose up again.
Podman NPM output:
podman start -a nginx-proxy_app_1
❯ Configuring npm user ...
1001�����������������������������������������������������������
usermod: no changes��������������������������������������������
❯ Configuring npm group ...������������������������������������
❯ Checking paths ...�������������������������������������������
❯ Setting ownership ...����������������������������������������
❯ Dynamic resolvers ...����������������������������������������
❯ IPv6 ...�����������������������������������������������������
Enabling IPV6 in hosts in: /etc/nginx/conf.d�������������������
- /etc/nginx/conf.d/include/force-ssl.conf���������������������
- /etc/nginx/conf.d/include/proxy.conf�������������������������
- /etc/nginx/conf.d/include/letsencrypt-acme-challenge.conf����
- /etc/nginx/conf.d/include/block-exploits.conf����������������
- /etc/nginx/conf.d/include/assets.conf������������������������
- /etc/nginx/conf.d/include/ssl-ciphers.conf�������������������
- /etc/nginx/conf.d/include/ip_ranges.conf���������������������
- /etc/nginx/conf.d/include/resolvers.conf���������������������
- /etc/nginx/conf.d/production.conf����������������������������
- /etc/nginx/conf.d/default.conf�������������������������������
Enabling IPV6 in hosts in: /data/nginx�������������������������
❯ Docker secrets ...�������������������������������������������
���������������������������������������������������������������
-------------------------------------��������������������������
 _   _ ____  __  __��������������������������������������������
| \ | |  _ \|  \/  |�������������������������������������������
|  \| | |_) | |\/| |�������������������������������������������
| |\  |  __/| |  | |�������������������������������������������
|_| \_|_|   |_|  |_|�������������������������������������������
-------------------------------------��������������������������
User:  npm PUID:1001 ID:1001 GROUP:1001������������������������
Group: npm PGID:1001 ID:1001�����������������������������������
-------------------------------------��������������������������
���������������������������������������������������������������
❯ Starting nginx ...
❯ Starting backend ...
nginx: [warn] the "user" directive makes sense only if the mast
er process runs with super-user privileges, ignored in /etc/ngi
nx/nginx.conf:4
nginx: [emerg] bind() to <IP_ADDRESS>:80 failed (13: Permission deni
ed)
[11/2/2023] [2:34:14 PM] [Global   ] › ℹ  info      Using Sqlit
e: /data/database.sqlite
[11/2/2023] [2:34:14 PM

For those suggesting to comment out PUID and PGID, isn't this unwise since NPM will be running as root and if it gets compromised it spells trouble for the rest of the system? I thought it was safer to have PUID and PGID as a regular user. I get the same permission denied on port 80 when I have those variables set though.
If this is intended behavior, is it possible to run NPM on 8080 and 8443 to circumvent this issue? I don't know how exactly to do this. I've already tried specifying 8080:80 and 8443:443 in my docker compose but I still get permission denied.

Reason being for me to comment them out is shown here https://github.com/NginxProxyManager/nginx-proxy-manager/issues/3252#issuecomment-1782863322

For those suggesting to comment out PUID and PGID, isn't this unwise since NPM will be running as root and if it gets compromised it spells trouble for the rest of the system? I thought it was safer to have PUID and PGID as a regular user. I get the same permission denied on port 80 when I have those variables set though.
If this is intended behavior, is it possible to run NPM on 8080 and 8443 to circumvent this issue? I don't know how exactly to do this. I've already tried specifying 8080:80 and 8443:443 in my docker compose but I still get permission denied.

My reason for commenting out the PUID and PGID is shown above here

Hi,
I found the possible issue.
I had a container with the  bind() to <IP_ADDRESS>:80 failed (13: Permission denied) issue.
After that I made an new npm contaier wich runs without problems. After copying the old proxy and stream configuration teh new container also broke
After deleting the config files, the new container works again. If I make a new configuration, everything works.

For those running rootless podman without host network but want to keep your old config, there seems to be a few options:

Pin the version to 2.9.22
Use latest, remove env PUID=1000 and PGID=1000,  and do a GIDMap/RemapGid to 0:0:{{your_user}} instead


Superset single point problem

Make sure these boxes are checked before submitting your issue - thank you!

[ ] I have checked the superset logs for python stacktraces and included it here as text if there are any.
[ ] I have reproduced the issue with at least the latest released version of superset.
[ ] I have checked the issue tracker for the same issue and I haven't found one similar.

Superset version
0.28.1
Expected results
superser server
Actual results
Steps to reproduce
Superset  runserver single point problem。

@FelixJHuang Superset is a standard Python WSGI application, you can look for some distributed Python web application solution. eg: Nginx distribute request.

Issue is unclear, please reopen with a good description of what your issue is.


Extract Submove and PresetSubmove methods to a separate class

The list of methods to extract to separate classes:

updatedState() (GraphTransformation (Graph, Submove) --> Graph
crossPoint()
closestToTheEnd()

Idea: Pass Transformation and Search objects as a constructor argument to a special implementation of the Graph and Vertex interfaces?

Old
private static Vector2 crossPoint(
    final Set<CompoundEdge> face,
    final DirectedEdge move
) {
    Vector2 intersection = new Vector2();
    List<Vector2> movePoints = move.polyline().points();
    for (CompoundEdge edge : face) {
        // Check only red links!
        if (edge.direction().color() != Color.RED) {
            continue;
        }
        List<Vector2> edgePoints =
            new ExtendedEdge(
                edge.origin(),
                edge.direction()
            ).polyline().points();
        // Don't start comparing for an intersection too close to the
        // origin
        for (int i = 1; i < movePoints.size(); i++) {
            for (int j = 1; j < edgePoints.size(); j++) {
                boolean intersects =
                    Intersector.intersectSegments(
                        movePoints.get(i - 1),
                        movePoints.get(i),
                        edgePoints.get(j - 1),
                        edgePoints.get(j),
                        intersection
                    );
                if (intersects) {
                    return intersection;
                }
            }
        }
    }
    return null;
}

New
public Vertex result() {
    Vector2 intersection = new Vector2();
    for (CompoundEdge edge : face) {
        List<Vector2> edgePoints =
            new ExtendedEdge(
                false,
                edge.origin(),
                edge.direction()
            ).polyline().points();

        for (int j = 1; j < edgePoints.size(); j++) {
            boolean intersects =
                Intersector.intersectSegments(
                    p0,
                    p1,
                    edgePoints.get(j - 1),
                    edgePoints.get(j),
                    intersection
                );
            if (intersects) {
                return
                    new PresetVertex(
                        edge.direction().color(),
                        intersection,
                        (String) null
                    );
            }
        }
    }
    return new VoidVertex(null);
}

Improvements:

No null return value
Alightly shorter code
Extends the intersection test to edges of all colors (and not just the red ones as before). This will prove useful when detecting whether a move is invalid.
Removed the O(n^2) complexity: it is only necessary to test the intersection with the new line segment and not with the entire polyline

There is duplication in PresetSubmove. The following looks similar and should be extracted to a seperate class:
// *--*----*------*---x---*---*--*
// sublist 0 - p0  + crossPoint
List<Vector2> returnPoints =
    new ArrayList<Vector2>(strokePoints.subList(0, i));
returnPoints.add(crossPoint.position());
// reverse list
Collections.reverse(returnPoints);
// trimmed polyline, get the list
returnPoints =
    new TrimmedPolyline(
        new Polyline.WrappedList(returnPoints),
        vertexGlueRadius
    ).points();
// reverse list
Collections.reverse(returnPoints);
// add back crossPoint
returnPoints.add(crossPoint.position());
// return
Color toColor = crossPoint.color();
if (toColor.equals(Color.BLACK)) {
    toColor = Color.GRAY;
}
return
    new PolylineEdge(
        origin().color(),
        toColor,
        returnPoints
    );
}

and:
// *--*----*------*---x---*---*--*
// sublist 0 - p1  + v (nearestVertex)
List<Vector2> returnPoints =
    new ArrayList<Vector2>(strokePoints.subList(0, i + 1));
returnPoints.add(v.position());
// reverse list
Collections.reverse(returnPoints);
// trimmed polyline, get the list
returnPoints =
    new TrimmedPolyline(
        new Polyline.WrappedList(returnPoints),
        vertexGlueRadius
    ).points();
// reverse list
Collections.reverse(returnPoints);
// add back v (nearest vertex)
returnPoints.add(v.position());
// return
return
    new PolylineEdge(
        origin().color(),
        v.color(),
        returnPoints
    );

As of 657a0b7, Submoves that cross the cobweb no longer look aesthetic at the intersection point. No radius is used to cut off nearby stroke points.


Web Part Missing in Toolbox After Running Gulp Serve

Target SharePoint environment
SharePoint Online
What SharePoint development model, framework, SDK or API is this about?
💥 SharePoint Framework
Developer environment
Windows
What browser(s) / client(s) have you tested

[ ] 💥 Internet Explorer
[X] 💥 Microsoft Edge
[X] 💥 Google Chrome
[ ] 💥 FireFox
[ ] 💥 Safari
[ ] mobile (iOS/iPadOS)
[ ] mobile (Android)
[ ] not applicable
[ ] other (enter in the "Additional environment details" area below)

Additional environment details

SPFx version - 1.18.2
Browser version - latest

Describe the bug / error
After running the gulp serve command to launch an existing SPFx project locally, the web part is not appearing in the toolbox. It was functioning perfectly until December 11th, but the issue began on December 12th.

Steps to reproduce

Take a sample spfx project
give gulp serve in cmd

Expected behavior
Expected the webpart to be listed under local category.

Sharing screenshots of DevTools console errors.

@Sucharita993 - thank you for reporting the issue.
We have identified the problem and will be working on the fix.
In a meanwhile, as a workaround, copy all the generated files from temp to temp/build folder.
It should unblock you while we're working on the fix

Here is the gulptask you can add to your gulpfile.js to automatically copy the files:
// add these after const build = require('@microsoft/sp-build-web');
const fs = require('fs');
const path = require('path');

// Insert this code before build.initialize(require('gulp'));
const copyTask = build.subTask('copy-to-build', function (gulp, buildOptions, done) {
  const srcFolder = './temp';
  const destFolder = './temp/build';
  // Check if the destination folder exists, if not, create it
  if (!fs.existsSync(destFolder)) {
    fs.mkdirSync(destFolder, { recursive: true });
}

// Copy files from srcFolder to destFolder, excluding destFolder itself
return gulp.src([path.join(srcFolder, '**/*'), '!' + destFolder])
  .pipe(gulp.dest(destFolder));
});

build.rig.addPostBundleTask(copyTask);


".class" selector seems to be failing

A more detailed post: http://stackoverflow.com/questions/42322374/jsoup-basic-class-css-selectors-not-working-html-shows-elements-exist-an
The problem can be summarized like so:
Debugging code:
Elements as = doc.select("a");
for (Element e : as) {
    if (e.classNames().size() > 0)
        M.debug(e.classNames());
    if(e.classNames().contains("bigChar")) {
        M.debug("found!");
    }
}
as = doc.select(".bigChar");
M.debug("now: " + as);
for (Element e : as) {
    if (e.classNames().size() > 0)
        M.debug(e.classNames());
}

Output:
[logo]
[bigChar]
found!
[dotUnder]
[dotUnder]
[dotUnder]
[dotUnder]
[dotUnder]
now:

I've spent a while debugging this and I think the problem may have to do with malformed HTML. Attached is a sample input, and below is some simple code to run it:
    try {
        Document doc = Jsoup.parse(new File("blahblah.txt"), "UTF-8");
        System.out.println(doc.html());
        System.out.println("FINAL");
        System.out.println(doc.select(".bigChar"));
        System.exit(0);
    } catch (IOException e) {
        e.printStackTrace();
    }

blahblah.txt
You can see in the HTML output that the "bigChar" class is used, but the .bigChar selector doesn't seem to find it.
In my run of the above code, my output is
   </div>
   <script type="text/javascript">
         $('#footer').css('top', $(document).height() - $('#containerRoot').height());
     </script>
  </body>
 </html>
 FINAL

(i.e. nothing found for .bigChar)

Further debugging on the same blahblah.txt input:
        for (Element e : doc.getAllElements()) {
            if (e.hasClass("bigChar")) {
                M.debug("Found iteratively");
            } else {
                if (e.className().length() > 0)
                    M.debug(e.className());
            }
        }

Upon outputting all className()s in the Document, the bigChar is found in a className():
barTitle
barContent
arrow-general
bigChar
info
info
dotUnder
info

However, "Found iteratively" is never printed, so hasClass() is not finding it.
Adding e.className().contains("bigChar") to the same if statement, like so, does find it.
            if (e.hasClass("bigChar") || e.className().contains("bigChar")) {

Further debugging:
            if (e.hasClass("bigChar") || e.className().contains("bigChar")) {
                M.debug(e.attr("class").length());
                M.debug("bigChar".length());
                M.debug(e.hasClass("bigChar"));
                M.debug(e.className().equalsIgnoreCase("bigChar"));
                M.debug("Found iteratively");

Output:
7
7
false
true
Found iteratively
FINAL

Seems like something strange going on? Given that Element.hasClass() seems to first check by length.

After a lot more digging around, I found something strange - when I commented out my Jsoup 1.10.2 dependency, everything worked normally! I pulled up the dependency tree and realized that one of my other dependencies also has Jsoup as a dependency, but an older version:
[INFO] |  +- org.jsoup:jsoup:jar:1.9.2:compile
So it seems that the same issue does not occur on Jsoup 1.9.2.
I noticed that Element.hasClass() received a significant rewrite for "better performance" in this commit: https://github.com/jhy/jsoup/commit/d3c582598890d1e5e31e4f26e8452ad2dbf40b47
At the risk of incorrectly pointing fingers, perhaps the rewrite introduced some small bug? It is worth noting that the repo was at version 1.9.3 at the time of the commit, conveniently one patch after the version that works for me.

This is already fixed in master. See #814.
Please also keep in mind that people who watch this repository are notified for every post you make. So it's better to first gather all the information you can, then create one post containing only the most relevant bits.

Oh sorry, my mistake. I haven't used GitHub enough to know about that but now that I know I will keep it in mind in the future!
However I believe this is a different issue than the one in the issue you linked. That fix was simply for case sensitivity, and the version that the bug appeared for me (1.10.2) on included that commit (I checked the source just to be sure).

Thanks for the report and the sleuthing.
The problem is that the attribute name is now all lower case, and something's bugged in the case insensitivity of the attribute name.
You can see an e.g. here: http://try.jsoup.org/~l4ZA3QJ3p5WzWTD5y6v-tGu1Sh8 - change "Class" to "class" and it works. Will fix it up.

Actually this is the same as #814 as @cketti pointed out :) I just forgot that try.jsoup wasn't on 1.10.3.


[KOGITO-3350] CLI fails to download GitHub file properly

See: https://issues.redhat.com/browse/KOGITO-3350
This PR adds a helper function to convert a GitHub link to a file in a repo to its raw URL so that it can be downloaded correctly.
Testing
I wrote unit tests to check the conversion of a URL to a file in a specific branch and commit. I also ran an s2i build of a BPMN file which was able to deploy correctly.
Requirements
Many thanks for submiting your Pull Request :heart:!
Please make sure that your PR meets the following requirements:

[x] You have read the contributors' guide
[x] Pull Request title is properly formatted:
[x] Pull Request contains link to the JIRA issue
[x] Pull Request contains description of the issue
[x] Pull Request does not include fixes for issues other than the main ticket
[x] Your feature/bug fix has a unit test that verifies it
[x] You've tested the new feature/bug fix in an actual OpenShift cluster

Just renamed the helper function from convertGitHubFileURL to getRawGitHubFileURL for clarity.


Tracking issue: Threshold Custody

This tracks the features we want to implement for a basic threshold custody backend for pcli.

[x] https://github.com/penumbra-zone/penumbra/issues/3342
[x] https://github.com/penumbra-zone/penumbra/issues/3444
[x] https://github.com/penumbra-zone/penumbra/issues/3343
[x] https://github.com/penumbra-zone/penumbra/issues/3344
[x] https://github.com/penumbra-zone/penumbra/issues/3345
[x] https://github.com/penumbra-zone/penumbra/issues/3346
[x] https://github.com/penumbra-zone/penumbra/issues/3347

Closing as completed


id attribute is not assignable

Need to change 'id' to be native property to allow direct assignments.

fixed in f/optimized-set


sdl window.render is consuming tons of memory in a typical render loop

These particular lines:
const buffer = canvas.toBuffer('raw')
window.render(width, height, width * 4, 'bgra32', buffer)

(from https://github.com/kmamal/node-sdl/blob/master/examples/03-canvas-drawing/index.js#L17-L18 but present in most raw drawing examples)
When this is executed in a draw loop, within 20 minutes it exhausts all the memory in my system.  when I comment out only the window.render line the memory leak is gone
@kmamal  my uneducated theory is this call is holding a reference to the buffer object and not releasing it, preventing normal garbage collection

Very likely. I might have missed something during the big c++ rewrite I did. I'll have a look.

Should be fixed in v0.10.2. As you said, I forgot to free a texture.

confirmed fixed, thanks so much!!!


【Bug】Some special symbols cannot be processed

Information

OS: Win
Version: 0.49.1
Terminal: cmd

Describe the bug
Some special characters cannot be counted as 2, like ℃、℉
To Reproduce

using Spectre.Console;

var table = new Spectre.Console.Table();
table.AddColumns("Name", "Value", "Description");
table.AddRow("test", "中文", "中文 mix English");
table.AddRow("test", "中文", "使用特殊字符℃");
table.AddRow("test", "中文", "使用特殊字符℉");
table.AddRow("test", "中文", "使用特殊字符");

AnsiConsole.Write(table);

Expected behavior
Table alignment
Screenshots

Additional context
Add any other context about the problem here.

Please upvote :+1: this issue if you are interested in it.

This is not an urgent issue, I'll wait for Nuget to release it
I am wondering if I need to provide an event to correct the width, pass in the current character, return whether it has been processed, and customize the width

class Arg
{
    public bool Handle { get; set; }
    public int? Width { get; set; }
}

// the event like

void Fun(char c, Arg e)
{
    if(e.Handle) return;
    if (c == '℃')
    {
        e.handle = true;
        e.Width = 2;
    }

    // Other, handle by default
    // e.Handle = false;
    // e.Width = null;
}

Moving this issue over to the wcwidth repository, since it's a bug there.


[fury] base type 'InvalidCredentialsError' is not defined in the document

I'm getting the error: [fury] base type 'InvalidCredentialsError' is not defined in the document.
I'm including the InvalidCredentialsError via: :[Errors](resources/errors.apib). That file contains all the error types. I'm including all of these documents via the start apib file (blueprint.apib).
I'm guessing the plugin isn't checking if includes are used in the main file?

It seemed to fix itself when I started to add more text underneath it.
If you end the file with the following:
    + Attributes (object)
        + errors (array[InvalidCredentialsError])

It will complain as stated in my original post.

I think this is probably a parser problem not related to the extension itself.
Would it be possible to share the API Blueprint here (or a reproducible example)?

Hi, here is the code I'm using, I've put in the arrow to show where I'm getting the error:
Group User
User [/{username}]

Parameters

username (string) - User.

User [PUT]
Updates user.

Request Update user

Headers
  Content-Type: application/vnd.api+json

Attributes (User)

Response 200 (application/vnd.api+json)
Request.

Attributes (object)

success: true (string) true

Response 401 (application/vnd.api+json)
Response.

Attributes (object)

errors (array[Incorrect Credentials]) // <--- here is the error line!

Data Structures
User (object)

type: user (string)
attributes (object)

id: 1 (number) - Test id.

Thanks a lot - I'll look into!

This is parser related but it is expected. Since you don't have any data structure named Incorrect Credentials parser will produce an error.

@basickarl Does that answer your question?

Feel free to reopen if you need further clarifications.


[AMBARI-25583] The notes field in the config history page does not support UTF-8 characters for filtering

What changes were proposed in this pull request?
The filtering function on the current page does not support UTF-8 characters.
How was this patch tested?
manual tests

Thank you for your help. In addition to the URL you provided, I also refered from this:what-the-chinese-japanese-and-korean-characters-are-in-unicode.I have verified that Chinese, English, and Koreanm they are all running well.Please help review the following code .

By the way, CI check failed, the error message in build log shows like this:
[ERROR] warning<EMAIL_ADDRESS>The platform "linux" is incompatible with this module.
ERROR: 'assertion failed: name and fileName should be defined'
ERROR: 'Moment Timezone has no data for a/Aa. See http://momentjs.com/timezone/docs/#/data-loading/.'
ERROR: 'Subscription with default handler for foo already exists'

Do you know why the ci check failed? thanks.


Define a publish_rate for the diff_drive_controller

Is your feature request related to a problem? Please describe.
We want to limit the publication of the /odom and the /tf for the diff_drive_controller to a certain rate. This change is for foxy, galactic and master branch.
Describe the solution you'd like
Define a publish_rate parameter and only publish a message if the passed time since the last publishing is greater than 1 / publish_rate. I think it can simply be implemented as in the diff_drive_controller for ROS.
Describe alternatives you've considered
Any suggestion is welcomed.
Additional context
If the idea is accepted I will be happy to implement it!

@BenjaminHug8 you can implement this :) and we will accept it

As we want this feature for foxy, galactic and rolling, should I target a particular branch (foxy or master branch) and the feature will be ported to the other branches or should I make a PR for each branch?

Done in #278


Recommended text for no tracking information for the current branch

I believe the upstream tracking information text that outputs when you don't have anything configured is wrong. Below is what is outputted for the recommended settings.
If you wish to set tracking information for this branch you can do so with:

    git branch --set-upstream-to=origin/<branch> develop

However that throws and error when used. I believe it used to be:
git branch --set-upstream-to=origin/develop

As you can see in the issue template, this repository issue tracker should only be used to report problems found on the git-scm website (https://git-scm.com/).
Git specific issues should be raised with the community (https://git-scm.com/community).


Add clarification for getting started with Influx CLI page

User has installed InfluxDB but is having trouble getting started with Influx CLI.
Add the following to the top of this doc:
The influx CLI is packaged separately from InfluxDB, so installing InfluxDB doesn't automatically install the influx CLI. If you haven't aleady, download and install the influx CLI.
New user feedback!
Page: https://docs.influxdata.com/influxdb/v2.3/reference/cli/
Feedback: All of the reference documents I am looking at for integrating JMeter and InfluxDB show running the influxdb as a shell.  The version 2.3 does not seem to have this!  Also the samples I see do not seem to show any authorization tokens, but it looks like the version I installed requires them.  I am about to give up. I need this to  "just work" - not be a major undertaking to get JMeter data into influx

There is a note at the top of the page calling out that the CLI and and InfluxDB are separate packages:

I am not sure what is meant by "running the influxdb as a shell".  You run influx commands using the influx CLI.


server: implement json api layer

Instead of serving directly pre generated html documents, we want to serve the DB data as json and let the client web app build the pages.

cc @adria0

@sripwoud I think making new endpoints such as /api/v1/profile or whatever might be a better option. At some point we would have to turn of the front end ran by freedit and switch to our own front end, but at least in this way we could keep a separation between the two while the work is being done on it.
The new front end while its in alpha could be at forum.pse.dev/new or something like that.
Just some thoughts.

Oh yes you are right that is better!

transferred to https://github.com/privacy-scaling-explorations/pse-forums/issues/5


Scheduler: Remove ticker global variable

Fixes #2038.
To verify, run the unit tests and the blackbox tests.
Signed-off-by: Brandon Forster<EMAIL_ADDRESS>

Codecov Report

Merging #2176 into master will not change coverage.
The diff coverage is 0%.

@@           Coverage Diff           @@
##           master    #2176   +/-   ##
=======================================
  Coverage   39.22%   39.22%
=======================================
  Files         178      178
  Lines       12636    12636
=======================================
  Hits         4957     4957
  Misses       7409     7409
  Partials      270      270

Impacted Files
Coverage Δ

internal/support/scheduler/schedule.go
0% <0%> (ø)
:arrow_up:

internal/support/scheduler/init.go
0% <0%> (ø)
:arrow_up:

Continue to review full report at Codecov.

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


[Bug]: window exe can not view web

telegram_media_downloader version or commit
v.2.2.1
What OS are you seeing the problem on?
Windows
Python Version
No response
What happened?
window下解压缩发布版本，运行后无法访问网页
Expected Behavior
window下解压缩发布版本，运行后无法访问网页
Current Behavior
window下解压缩发布版本，运行后无法访问网页
Possible Solution
No response
Steps to Reproduce
No response
Relevant log output
No response

985eb224e8ab844790fbca16f4fe116539972052


Implement sort pushdown.

Hello,
This patch implements sort pushdown for multicorn.
As I'm not really familiar with C-Python API, there's probably some Py_DECREF() missing, or maybe some other issues. Let me know if I can help to fix any problem remaning.
Many thanks to Ronan Dunklau for helping with the general design and a lot of issues :)
Regards.

A few comments about this PR:

the patch reverts the requirements to python2.7, although work as recently been contributed to have compatibility with python2.6. Any reason for that ? Generally, it looks like some patches have been reverted. Could you please take a look at that, rebasing on the latest master ?
some code seem to have been modified for no good reason: eg, the processfdw module.
I know for a fact you wrote tests, why not include them in the PR ? :)

About the code itself:

the MulticornSortKey should be renamed to SortKey, since it already lives in a multicorn module.
the documentation in init.py refers to MulticornSortKey instances as MulticornDeparsedSortGroup instances, which is the C-struct name
the testfdw class is using convoluted string concatenations to dump the path_keys arguments. It should be better to implement that in a repr method of MulticornSortKey
the testfdw fails to account for when it returns list instead of dicts (see the test_type = 'sequence' code path).
the EXPLAIN code path should better either be left as it was, or implemented properly through a callback to the python API.
the path keys are not properly serialized / deserialized. This results in a SEGFAULT whenever the need for portals arise, eg:
DECLARE t1 SCROLL CURSOR FOR  SELECT * FROM testmulticorn order by test1 desc;
ERROR:  unrecognized node type:<PHONE_NUMBER>
I don't understand why no paths are generated for (sorted) parameterized pathes. Shouldn't it be beneficial, so as to allow mergejoin in certain cases ?

I'll check the reference counts later on, but this is a very promising patch, with minor issues to work on.

Yes, I just noticed that I didn't rebase the patch on the latest commit. I'll rebase it.
For the processfdw file, I noticed the file was in dos fileformat, and I changed it to unix. I'll exclude that from the PR.
I simply forgot to add the files for the new tests :) commit ba903c3 fixes that.
I'll work on the other issues as soon as I'll have a proper rebase. Thanks!

All the problems in the initial pull request should now be corrected. The collation is also now always specified (instead of a simple "default").

@rdunklau @rjuju: Great collaboration on this PR. Any chance on this getting merged/closed?

@jmealo thanks! The feature has been merged in a single commit (https://github.com/Kozea/Multicorn/commit/9dd1208f4a50573e4b3aee46e6628733745cb614) instead of this PR to keep history clean.  We should have mentioned it here :/
This is available since release 1.3.0

This should probably be closed now that it is merged.

Indeed, sorry I didn't do it earlier.
Merged in https://github.com/Kozea/Multicorn/commit/9dd1208f4a50573e4b3aee46e6628733745cb614


Exchange of data by more than one device

One device should be chosen as the master device. Data will be synced from other devices to that one device. The receiving app will be enabled in receiving mode i.e advertising mode.
The other devices(slaves) will discover the master device and connect to it. Data should be exchanged using either option 2-4 above for sending data from each slave to master.
There should be an option for sending data to the connected slaves once all the data has been sent to the master device.  This kind of broadcast  will involve sending data to the connected slaves one by one, or n slaves at a time.  This should be determined when implementing the library.

This can be implemented if there is time to implement because as its a nice to have.

Confirmed that ODK share supports only 2 devices exchange at a time for mspray


RoR project setup

Use the issue link to ask for a review. A code reviewer will leave you feedback in the issue's comment.

we are members of two in the group

https://github.com/fithamlak/Recipe-App/projects/1

Hi @fithamlak and @gealsanchez,
While you made a great effort in this project, unfortunately, I cannot proceed to review your code.
Invalid Code Review Request
The link to the Kanban board should be included in the issue you submitted.
Your Code Review Request will be marked as invalid in your Dashboard, so please submit a new one once you are ready 🙏
Cheers and Happy coding!👏👏👏
Feel free to leave any questions or comments in the PR thread if something is not 100% clear.
Please, do not open a new Pull Request for re-reviews. You should use the same Pull Request submitted for the first review, either valid or invalid unless it is requested otherwise.

Invalid Code Review Request does not count into the code reviews limit.

Hi @fithamlak @gealsanchez ,
Good job so far!
There are some issues that you still need to work on to go to the next project but you are almost there!

Required Changes ♻
Check the comments under the review.

currently, all the requirements have not been assigned a card please fix this 😄
the majority of your cards do not have proper descriptions of the task please add this 👍🏾

Optional suggestions
Every comment with the [OPTIONAL] prefix is not crucial enough to stop the approval of this PR. However, I strongly recommend you to take them into account as they can make your code better.
Cheers and Happy coding!👏👏👏
Feel free to leave any questions or comments in the PR thread if something is not 100% clear.
Please, remember to tag me in your question so I can receive the notification.
Please, do not open a new Pull Request for re-reviews. You should use the same Pull Request submitted for the first review, either valid or invalid unless it is requested otherwise.

As described in the Code reviews limits policy you have a limited number of reviews per project (check the exact number in your Dashboard). If you think that the code review was not fair, you can request a second opinion using this form.

Status: APPROVED 🟢
Hi @gealsanchez, and @fithamlak ✋
Your project is complete!  There is nothing else to say other than... it's time to merge it: ship it:
Congratulations! :tada: :clap: :clap: :100:
Optional suggestions
Every comment with the [OPTIONAL] prefix is not crucial enough to stop the approval of this PR. However, I strongly recommend considering them as they can improve your code.
Cheers, and Happy coding!👏👏👏
Feel free to leave any questions or comments in the PR thread and tag me @1GORDON if something is not 100% clear.
Please, do not open a new Pull Request for re-reviews. You should use the same Pull Request submitted for the first review, either valid or invalid unless it is requested otherwise.

As described in the Code reviews limits policy you have a limited number of reviews per project (check the exact number in your Dashboard). If you think the code review was unfair, request a second opinion using this form.


Use MaybeUninit while manipulating uninitialized data

Because there's no way to manipulate unitialized data to some data types
just through references.
Adding Arena::reserve_extend to allow a somewhat safer pattern how to
initialize the memory without risk of causing UB by panicking before
full initialization, causing the arena to call destructors on bad data.
Closes #38.
If the documentation need improving or some more tests are need, just point them out please. I'm sometimes blind to these things.
Also, I hope I've been careful enough. I kind of assume that Vec already assumes the buffer might contain some uninitialized values so it's fine to cast them to MaybeUninit and hand out pointers to such things.

Published 2.0.0-rc1 -- if we don't have any issues discovered or raised in the next week or so, then I'll publish 2.0.0 proper.

Thanks. I've noticed now that the docs are rendered on docs.rs that the links to methods don't work. I'll send a fix for that (I think I can make that one before the release).


Different input samples and target samples count from flow_from_directory

I tried to implement https://blog.keras.io/building-powerful-image-classification-models-using-very-little-data.html with slight modification because I need to make multi-class classification model. But, for some reason the input and target samples count returning different number.
datagen = ImageDataGenerator(rescale=1.0 / 255)

# Read images and labels from train directory and dump it to a file
generator = datagen.flow_from_directory(
    train_data_dir,
    target_size=(img_width, img_height),
    batch_size=batch_size,
    class_mode=None,
    shuffle=False)
bottleneck_features_train = model.predict_generator(
    generator, len(generator.filenames) // batch_size, verbose=1, workers=8)
pickle.dump(bottleneck_features_train, open('bottleneck_features_train.npy', 'wb'))

train_labels = generator.classes
num_classes = generator.class_indices
train_labels = pd.get_dummies(pd.Series(train_labels))

train_data = np.load('bottleneck_features_train.npy')

# for debugging purpose to show this issue
print(len(train_data), len(train_labels))

model = Sequential()
model.add(Flatten(input_shape=train_data.shape[1:]))
model.add(Dense(256, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(34, activation='sigmoid'))

model.compile(optimizer='rmsprop',
              loss='categorical_crossentropy', metrics=['accuracy'])

# It will fail here because the train_data and train_labels are not the same length for some reason
history = model.fit(
    train_data,
    train_labels,
    epochs=epochs,
    batch_size=batch_size)

Here's the console result:

What I've checked:

File formats, I've made sure all of them are JPGs
Corrupted files: I've tried to go through each file and open it using PIL and everything load just fine

In your code : len(generator.filenames) // batch_size
This will cut the last batch.
Closing since it's not a bug/feature request.


Blank screen when trying to access the dashboard

Description:

Hello, I ran into a problem when I deployed WSO2 Analytics with WSO2 APIM. The Publisher and Dev Portal were running just fine, and APIM was connected to the worker. But when I tried to access the dashboard, it just showed a blank screen and dashboard showed the following error in the console:

I also attached the auth.configs segment in the dashboard deployment.yaml
auth.configs:
  type: apim
  ssoEnabled: true
  properties:
    adminScope: apim_analytics:admin_carbon.super
    allScopes: apim_analytics:admin apim_analytics:product_manager apim_analytics:api_developer apim
_analytics:app_developer apim_analytics:devops_engineer apim_analytics:analytics_viewer apim_analyti
cs:everyone openid apim:api_view apim:subscribe
    adminServiceBaseUrl: https://<apim hostname>:9443
    adminUsername: admin
    adminPassword: admin
    kmDcrUrl: https://<apim hostname>:9443/client-registration/v0.16/register
    kmTokenUrlForRedirection: https://<apim hostname>:9443/oauth2
    kmTokenUrl: https://<apim hostname>:9443/oauth2
    kmUsername: admin
    kmPassword: admin
    portalAppContext: analytics-dashboard
    businessRulesAppContext : business-rules
    cacheTimeout: 30
    baseUrl: https://<apim hostname>:9643
    grantType: authorization_code
    publisherUrl: https://<apim hostname>:9443
    devPortalUrl: https://<apim hostname>:9443
    externalLogoutUrl: https://<apim hostname>:9443/oidc/logout

Everything is running on a same VM on the cloud. Any help will be appreciated!
Affected Product Version:
wso2-analytics-3.1.0
OS, DB, other environment details and versions:
Ubuntu 18.04 LTS
openjdk version "1.8.0_252"
OpenJDK Runtime Environment (build 1.8.0_252-8u252-b09-1~18.04-b09)
OpenJDK 64-Bit Server VM (build 25.252-b09, mixed mode)
Steps to reproduce:
Just try to access the dashboard after running WSO2 APIM and Analytics
Related Issues:

There's #906 but there is no followup on the poster

Turn out that was a firewall issue. Apparently my cloud instance couldn't access itself because of the firewall. I had changed the firewall and Analytics worked perfectly.

@tk-nguyen  my firewall is turned off but i still have blank screen, I am running it on my windows machine.
I really need a fix right now


Add DotsBoard interface

I'll explain later...

@rzrzr created an add-on called the DOTs Board, which has been used as an activity at Raspberry Pi's stands at various events like Maker Faire. It's a conductive paint dot-to-dot activity.

The way it works is by painting over a dot, you short a pin to ground. When implementing the GPIO code last year using RPI.GPIO, I found that pulling up an input on setup, then reading it at some point later did not work. I had to set each pin up as an input, leaving it floating (no pull-up/down), then at the moment I wanted to check it, pull up and read.
I'd like to create a GPIO Zero interface to the board to allow people to easily make their own games and applications with the board.
In order to incorporate this into gpiozero, I created a Dot class which does not currently inherit any GPIO device class, because I did not want to have to register the pull- up/down until reading. This means it does not currently register in the GPIO pin lock set.
I also created a DotsBoard class which just extends CompositeDevice. I did not extend SourceMixin due to the nature of the board using all available GPIO pins (even the special use GPIO 0 and 1) so there's no way of connecting more devices (without using a compute module, and the intersection of Dots Board users with compute module users... you get the idea). I guess source could be used by non-GPIO things, like on-screen stuff? But I'm not sure how to get source to work so I've left it out for now.
I'm not 100% happy with the implementation, nor the choice of method names, but it's working code and it seems useful. I hope to get something like this into the library soon.
Any thoughts, @waveform80?

Maybe there could also be e.g. :
    def all_specific_dots_selected(self, specific_dots, exact_match=False):
        return all(dot in self.selected_dots for dot in specific_dots) and (not exact_match or (len(self.selected_dots) == len(specific_dots)))

    def any_specific_dot_selected(self, specific_dots):
        return any(dot in self.selected_dots for dot in specific_dots)

Hang on ... pulling on setup didn't work, but pulling up and reading later on did? That's ... hmm ...
Otherwise this basically sounds like a ButtonBoard (if that were the equivalent of what LEDBoard is to LED) although I'd have to understand a bit more about GPIOs 0 and 1 - haven't used those yet. Anyway, I'll take a look at the code in a bit - sounds like a good thing to have in the library at any rate.

GPIOs 0 and 1 are 'reserved' for use by the HAT EEPROM ( https://github.com/raspberrypi/hats#new-add-on-boards-basic-requirements ) over i2c, and so (AFAIK) shouldn't normally be used by end-users. In most GPIO-breakout diagrams they're labelled as ID_SC and ID_SD, or DNC.

Pins 0 and 1 can be used as regular GPIO pins if you don't mind ignoring this:

The ID_SC and ID_SD pins must only be used for attaching a compatible ID EEPROM. Do not use ID_SC and ID_SD pins for anything except connecting an ID EEPROM, if unused these pins must be left unconnected

I believe they're reserved for reading a HAT's ID via EEPROM, though I'm not sure why using them is bad.
ButtonBoard would be good. I'll do some more testing on whether reading dots as if they're buttons really doesn't work...

Just been looking at this with @bennuttall this evening (first time I've seen a dotsboard IRL ;) )
It's really weird, but yeah it seems like if you treat the 'dots' as buttons (i.e. created with pull_up=True) then you don't get the values you expect, i.e. some of the dots report they're not connected to GND, when actually they are.
However going back to the 'original' way of doing it, by only turning on the pull-up just before reading the dot, and you get all the right values out :-/
My only conclusion is that there's something 'special' about the conductive paint, which means you can't just use it as an open-or-closed switch, and instead have to use a 'special' reading method :-S

Ok so it looks like we need the pull behaviour from this PR but the API from #340.
I wonder, could we allow OutputDevice to change its pull after init to make this functionality possible?

I wonder, could we allow OutputDevice to change its pull after init to make this functionality possible?

I think as the dotsboard is a special-case, then the special-case code should be restricted to dotsboard, rather than 'polluting' the base OutputDevice ?

My only conclusion is that there's something 'special' about the conductive paint, which means you can't just use it as an open-or-closed switch, and instead have to use a 'special' reading method :-S

Hmm, or maybe having all the pullups enabled at once, means each individual pullup effectively becomes weaker?  I'm not a hardware engineer... ;-)

Hmm, or maybe having all the pullups enabled at once, means each individual pullup effectively becomes weaker? I'm not a hardware engineer... ;-)

Reading through this I had a similar thought: no so much that the pull-ups become weaker but I have heard that, for example, trying to switch every single exposed GPIO on simultaneously is more or less impossible as there's an overall current limit that gets exceeded (can't remember the numbers though). If that's the case, then setting all GPIOs with pull-ups might have much the same effect - the GPIOs can no longer supply enough current to make them appear on when grounded.
Either way, this sounds like an electrical issue. Unfortunately, that also means there's no way we can do this with the regular Button class (with that, pull-up has to mean "always pulled up" rather than "pulled up when read" because people may be relying, electrically, on the GPIO being high when inactive.
That said, we could potentially make an alternate InputDevice descendent suitable for compositing into this, but it is more work.


No way to run a long running computation in a background thread

Does this issue occur when all extensions are disabled?: Yes/No

VS Code Version:
OS Version:

Steps to Reproduce:

Write a handler for OnDidSaveTextDocument that is cpu intensive and takes several seconds to run

Observe:
The UI thread is blocked during file save.
I've tried several approaches without success:

Can't use web workers (unsupported)
Can't use child_process (was unable to get this to work and saw no examples that use this so presume unsupported.)
Can't use worker_threads (unsupported)

Is there a way to run this task in the background? If not, please add one.
Note: This is a synchronous javascript method that invokes an external library synchronously via FFI.
If there is a way please provide a link to an example. I've spent several days on this.

The UI thread is blocked during file save.

This cannot be caused by your extension because all extensions run in a separate process, the extension host (EH).Tho, it is also recommended to spawn a separate process or thread for heavy operation (because all extensions share the one EH process). The EH process is normal nodejs process (desktop) or a webworker (vscode-web) and the defaults ways for spawning child processes and/or webworker apply. You can check their documentations or check out the LSP samples which  spawn a process/worker


Possible memory leak in arm64ddc?

Before opening the issue, have you...?

[X] Searched for existing issues
[X] Looked through the wiki
[X] Updated MonitorControl to the latest version (if applicable)

Describe the bug
In this file https://github.com/MonitorControl/MonitorControl/blob/main/MonitorControl/Support/Arm64DDC.swift (and possibly the intel version), I don't see any CFRelease/IOObjectRelease calls, despite the fact that the docs say you must release the iterator and any objects as you iterate through them. But I'm not 100% familiar with swift, does it wrap iokit to take care of these things for you?
Also you should consider using CFSTR macro instead of CFStringCreateWithCString for the string constants that are fixed, so that way you avoid any runtime allocation entirely
Note that I have not traced through instruments to see how big of an impact this is
Steps to reproduce

Read through code
Notice no cfrelease/ioobject release calls

Expected behavior

cfrelease/ioobjectrelease calls added as appropriate

Anything else?
No response
Environment Information (please complete the following information)
- macOS Version 12.4
- MacBook Pro (16-inch, 2021
- Apple Silicon: Yes
- Monitor Control versions: Should affect anything that supports m1?

HI @krackers - yes, all objects returned by IOKitLib should be released with this function when access to them is no longer needed.. I did not see any practical downside of skipping this in Arm64DDC even while running the app for prolonged time (the effect seems to be minimal), but still, it is proper to call IOObjectRelease on the iterators as advised. I don't think there is any special swift related mechanism is in place to do this with IOKit objects, so it's just an omission on my part (sorry about that). Thanks for pointing it out!
IntelDDC does this better, but that is thanks to @reitermarkus, not me, I just took most of his code and repurposed it for MonitorControl.
Please, feel free to contribute to the code or fix/improve whatever you feel must be improved! :)

Made the proposed changes: https://github.com/MonitorControl/MonitorControl/pull/1181


Wish list: F*'s normalizer supported operator

This thread records operators/features that we wish the normalizer to support.

[ ] shift operators for machine integers
[ ] logical operators (/\, \/, ==> etc.)
[ ] FStar.Seq ?

I would say that rather than having support (which kind ?) for logical operators in the normalizer, we would like to have support for arbitrary squashed value in the SMT encoding.

[ ] bitwise operator (&, |, ^, ~) on mathematical and machine integers

machine integer ops and logical operators are supported in the normalizer. Seq is not---it is intentionally abstract.


Remove unnecessary use of ProjectLayout.files from the snippet

@bot-gradle test PRF, BD

OK, I've already triggered the following builds for you:

PullRequestFeedback build
BuildDistributions build

the updated doc page

@bot-gradle test and merge

OK, I've already triggered a build for you.


[INFRA] LGTM warning: Duplication in regular expression character class

This regular expression includes duplicate character \w in a set of characters.
Fixes #852.
Or at least attempts to fix that issue. This patch should not modify the current behaviour of the program. Yet, please review it carefully as the duplication might hide a conceptual error - but then I suppose such an error would have been detected by now!

Yes, that's why I had asked for a careful review. I suspect that the [] classes might need to be changed into actual () groups or something like that. I will have a look at #596.

Yes, that's why I had asked for a careful review. I suspect that the [] classes might need to be changed into actual () groups or something like that. I will have a look at #596.

I know you are currently busy with two fresh PRs @DimitriPapadopoulos - but do you have news on this one? Or an expected timeline?

Not really. Perhaps a few weeks? I believe it's not an easy one, but maybe I haven't taken the time to find the right angle yet.

I also think it might be hard. So no rush, any work here is highly appreciated!


First look: RPi to Android

Checked Pi hardware and BTLE dongle with another app.  Updated bluez.  Ran advertise-url with the v switch.  Output looks as expected.
..
Encoded uri length: 16
Message: 1d 02 01 1a 03 03 aa fe 15 16 aa fe 10 ed 02 76 69 72 74 75 61 6c 2d 74 65 63 68 6e 6f 07 00 00
sudo hciconfig hci0 up
sudo hcitool -i hci0 cmd 0x08 0x000a 00
sudo hcitool -i hci0 cmd 0x08 0x0008 1d 02 01 1a 03 03 aa fe 15 16 aa fe 10 ed 02 76 69 72 74 75 61 6c 2d 74 65 63 68 6e 6f 07 00 00
sudo hcitool -i hci0 cmd 0x08 0x000a 01

Also checked that phone can see the RPi (but did not pair it of course)
Then fired up the Physical Web Andoid app from playstore and started it.
Shows "Nearby Beacons" but does not find any.
What are the next steps to find out why my beacon is not found?
Thx. Paul

Get a BLE sniffer on your phone/tablet and make sure you can see if there are any RPi ad packets being sent. I compared your bytes to the rfduino version and they seem to line up well. The only difference is the leading bytes you have in front, which may be required for hciconfig but I'd verify those leading bytes to be sure.

Thx Scott,
Yes, I thought someone might suggest getting a sniffer. The ones I've seen are hardware based. Is that what you meant or is there something available as a phone app?
 On Android I use nRFgo from Nordic.

Thx Scott,
I did not find that on the playstore but there are other Apps from Nordic and I found a low-cost dongle from Adafruit which is said to work with OS/X (my preferred dev platform).  Will try that.
Paul

Sorry, it is called nRF Master Control Panel
https://play.google.com/store/apps/details?id=no.nordicsemi.android.mcp
That would be MUCH easier than getting an Adafruit dongle on you laptop

Thx Scott. Looks good.
Will report back when I have examined the data. Paul

The Nordic sniffer App worked great.  It revealed that what I was telling hcitool was not being correctly actioned.  Completely rebuilding that did not have any effect.  Then I thought: why are we shelling out from python.  not nice.
As it happens, my language of choice on RPi is node.  The excellect @sandeepmistry comes to the rescue once again with a nice solution https://github.com/don/node-eddystone-beacon based on his bleno and eddystone-url-encoding.
So I am up and running with the Physical Web on RPi (and RFduino too).  Next I'll try the Redbear boards, Edison and anything else I have with BLE.
Paul

Excellent, great to hear. We too use node on our RPi and are a big fan of @sandeepmistry as his work as well.

@paultanner awesome!
@scottjenson is there a place where we can link to @don's node-eddystone-beacon repo?

Sure! We've got an implementations folder that you can link from.


chore(deps): upgrade configuration

Upgrades project dependencies. See details in workflow run.

Automatically created by projen via the "upgrade-configuration-k8s-29-main" workflow

⚪ Backport skipped
The pull request was not backported as there were no branches to backport to. If this is a mistake, please apply the desired version labels or run the backport tool manually.
Manual backport
To create the backport manually run:
backport --pr 4403

Questions ?
Please refer to the Backport tool documentation


add short-read-mngs end-to-end test to CI (using viral databases)

This first cut tests that the workflow runs successfully but doesn't include output correctness checks.

@morsecodist @katrinakalantar @cdebourcy With the viral databases, we can now run the mngs workflow from beginning to end in GitHub Action, which is great.
Since it takes only 10-15 minutes, I'm actually thinking of replacing the task-level unit tests from earlier in the summer, since the latter have a lot more maintenance overhead for test fixtures etc. A little further work is needed so that we can still write test assertions on intermediate results in the workflow.


Unable to replace existing device on Synology

I lost my volume on my Synology DS918+ and have had to rebuild it.
I've recreated with the following:
sudo docker run -d --name=crashplan-pro -e USER_ID=1024 -e GROUP_ID=101 -p 5800:5800 -v /volume1/docker/appdata/crashplan-pro:/config:rw -v /volume1:/volume1 jlesage/crashplan-pro:latest
Originally I had it working up to the point of being able to replace the existing device but had problems with permissions, hence the USER_ID & GROUP_ID environment variables.  After I added tthis I was able to restore 1 folder, after which the screen refreshed and I've not been able to restore anything since.  I have trashed the container a few times but to no avail.  When I start it, it let's me log in, replace existing device but when I get to choosing files it waits a while and then just errors with "Unknown error, contact your administrator or support for assistance" and never shows the file tree.  CrashPlan Support say to run the "restart" command but this just puts me in the same place.
Does anyone have any suggestions please?  Getting a little worried now to be honest not being able to restore anything.  Nothing jumps out in service.log.0, just INFO statements (I even see "BACKUP TARGET CONNECTED!").

Just to add, in ui.log I see:

2021-01-06T14:32:07.686Z - info Screens.Restore: Unable to find an interesting folder in root: No children in: "MyServerName" requesting children from the root of the archive
2021-01-06T14:35:07.702Z - warn RestAdapter: Error making service request to https://<IP_ADDRESS>:4244/v0/GetChildrenFileVersions : Server Error
2021-01-06T14:35:07.704Z - info Screens.Restore: Failed to get file versions:
{"readyState":4,"then":null,"responseText":"{"errors":[{"id":"TIMED_OUT","params":["Timed out waiting for expected messages,<PHONE_NUMBER>06900861, GetChildrenFileVersionsMessage[988506734323678077] \u003c- BackupQueryData[<PHONE_NUMBER>45219081\u003e983577570478671290, fileId\u003d00000000000000000000000000000000, timestamp\u003d0, date\u003d01/06/2021, includeDeleted\u003dfalse, batchSize\u003d10000 ], [class com.backup42.service.ui.message.GetChildrenFileVersionsResultMessage]"]}]}","responseJSON":{"errors":[{"id":"TIMED_OUT","params":["Timed out waiting for expected messages,<PHONE_NUMBER>06900861, GetChildrenFileVersionsMessage[988506734323678077] <- BackupQueryData[<PHONE_NUMBER>45219081>983577570478671290, fileId=00000000000000000000000000000000, timestamp=0, date=01/06/2021, includeDeleted=false, batchSize=10000 ], [class com.backup42.service.ui.message.GetChildrenFileVersionsResultMessage]"]}]},"status":500,"statusText":"Server Error","errorThrown":{}}

(replaced real server name to anonymise)

Just to add, in ui.log I see:

2021-01-06T14:32:07.686Z - info Screens.Restore: Unable to find an interesting folder in root: No children in: "MyServerName" requesting children from the root of the archive
2021-01-06T14:35:07.702Z - warn RestAdapter: Error making service request to https://<IP_ADDRESS>:4244/v0/GetChildrenFileVersions : Server Error
2021-01-06T14:35:07.704Z - info Screens.Restore: Failed to get file versions:
{"readyState":4,"then":null,"responseText":"{"errors":[{"id":"TIMED_OUT","params":["Timed out waiting for expected messages,<PHONE_NUMBER>06900861, GetChildrenFileVersionsMessage[988506734323678077] \u003c- BackupQueryData[<PHONE_NUMBER>45219081\u003e983577570478671290, fileId\u003d00000000000000000000000000000000, timestamp\u003d0, date\u003d01/06/2021, includeDeleted\u003dfalse, batchSize\u003d10000 ], [class com.backup42.service.ui.message.GetChildrenFileVersionsResultMessage]"]}]}","responseJSON":{"errors":[{"id":"TIMED_OUT","params":["Timed out waiting for expected messages,<PHONE_NUMBER>06900861, GetChildrenFileVersionsMessage[988506734323678077] <- BackupQueryData[<PHONE_NUMBER>45219081>983577570478671290, fileId=00000000000000000000000000000000, timestamp=0, date=01/06/2021, includeDeleted=false, batchSize=10000 ], [class com.backup42.service.ui.message.GetChildrenFileVersionsResultMessage]"]}]},"status":500,"statusText":"Server Error","errorThrown":{}}

(replaced real server name to anonymise)

The errors seem to show problems with CrashPlan's servers...
I guess you are restoring into /volume1 ?
Note that you also have the ability to restore by logging in to your account at www.crashplanpro.com.

The errors seem to show problems with CrashPlan's servers...
I guess you are restoring into /volume1 ?
Note that you also have the ability to restore by logging in to your account at www.crashplanpro.com.

Thanks for the feedback.  Yes, the plan is indeed to restore to /volume1 and that's where I originally had permissions issues.  It was so strange as after I switched the user and group I was able to restore 1 directory before hitting the issue I have now.  I've tried several times, even totally destroying the container config and now I always end up in the same place.  Now I never get as far as trying to restore, I can't even select the files & folders as is fails just before then.
Surprised if it's their end as I would have thought multiple people would be affected.  I have lots of large files meaning the web interface might not be an option.  I may try the Windows client instead as a test but once I make that decision it would be a lot of pain to move it back to Linux again as I do not want to re-backup everything again.

Thanks for the feedback.  Yes, the plan is indeed to restore to /volume1 and that's where I originally had permissions issues.  It was so strange as after I switched the user and group I was able to restore 1 directory before hitting the issue I have now.  I've tried several times, even totally destroying the container config and now I always end up in the same place.  Now I never get as far as trying to restore, I can't even select the files & folders as is fails just before then.
Surprised if it's their end as I would have thought multiple people would be affected.  I have lots of large files meaning the web interface might not be an option.  I may try the Windows client instead as a test but once I make that decision it would be a lot of pain to move it back to Linux again as I do not want to re-backup everything again.

To rule out any potential permission issue, you can try to run CP as root, by setting USER_ID and GROUP_ID environment variables to 0.

To rule out any potential permission issue, you can try to run CP as root, by setting USER_ID and GROUP_ID environment variables to 0.

That didn't worth either unfortunately.  Permissions were high up my list too, hence why I tried playing with the permissions for the config folder too to make them really open.  My only other ideas were comms (but it's all localhost within the container so can't see it being that) or a cert issue between the services.
It's weird as I still can't fathom why it worked for the first restore and then freaked out.  Now to try the Windows option. :-(

That didn't worth either unfortunately.  Permissions were high up my list too, hence why I tried playing with the permissions for the config folder too to make them really open.  My only other ideas were comms (but it's all localhost within the container so can't see it being that) or a cert issue between the services.
It's weird as I still can't fathom why it worked for the first restore and then freaked out.  Now to try the Windows option. :-(

Ok, let me know if it's working under Windows.
You could also try to chat with the CrashPlan support team (just don't tell you are running CP in Docker).  I've seen some cases where there was issues on CrashPlan side that were not affecting every users.
Note that you can switch between Windows and Linux without having to re-upload everything.  Even if the paths are the not same, if the data is the same, de-duplication will do its job.

Ok, let me know if it's working under Windows.
You could also try to chat with the CrashPlan support team (just don't tell you are running CP in Docker).  I've seen some cases where there was issues on CrashPlan side that were not affecting every users.
Note that you can switch between Windows and Linux without having to re-upload everything.  Even if the paths are the not same, if the data is the same, de-duplication will do its job.