builder error on recent update

I'm getting an error on builds I haven't seen before, I see there was a new release 17 days ago, wondering if that has something to do with it.
FROM abiosoft/caddy:builder as caddy
ENV ENABLE_TELEMETRY=false
ARG CADDY_VERSION="1.0.3"
ARG CADDY_PLUGINS="cors"
RUN VERSION=${CADDY_VERSION} PLUGINS=${CADDY_PLUGINS} /bin/sh /usr/bin/builder.sh
COPY ./Caddyfile /install/Caddyfile

On that note, it would be awesome if you could tag releases with a version or an sha.  I just built a new container out of a previous build of mine for now.  But, it would be nice to pin automated builds to a release.
PS: Thanks for this project!

@abiosoft
I get this error as well.
I can't even build the basic image. docker build github.com/abiosoft/caddy-docker.git
Even if I remove my local builder image. docker rmi abiosoft/caddy:builder


lxc init: Fix usage line in the help output

The usage is currently given as lxc init [[<remote>:]<image>] [<remote>:][<name>] [< config [flags]
This aligns it with what we have for lxc launch.
No idea if there's anything else needed for the PR. ;)

@ru-fu @stgraber I wonder if it would be better to leave this as is and then add < config to lxc init and lxc launch instead (as they do support config from stdin).

@ru-fu @stgraber I wonder if it would be better to leave this as is and then add < config to lxc init and lxc launch instead (as they do support config from stdin).

But that would then probably come after the flags?
And also, the brackets don't match up, so something is definitely wrong here.

Yeah agreed, but perhaps we keep the < config part somehow?

Yeah agreed, but perhaps we keep the < config part somehow?

It's in the examples.
No idea if we can get it to show up at the end of the usage line somehow ...

@ru-fu does make static-analysis work for you locally?

No ... :( make: golangci-lint: Command not found
I tried running make i18n as well, but then one just gives me /bin/sh: 1: xgettext-go: not found

Testsuite passed

I think make i18n was missed, but I added it to https://github.com/lxc/lxd/pull/11059


Enable downloading receipts for platform tips on /opencollective/transactions

As an admin, I want to be able to download platform tip receipts here (sometimes we need to support users who can't work out how to find it in their own transactions menu). They are available for other kinds of transactions, but not tips.

PDF receipts are already available on this page, but we indeed don't show the "View details" link for platform tips - only contributions, added funds, and expenses: https://github.com/opencollective/opencollective-frontend/blob/009e04903f6671e387b598d1b738c27bd920fa22/components/transactions/TransactionItem.js#L310. @znarf any blocker about adding platform tips in there?


chore: Adding neuroglancer utility

Relates to

Description
Provides ability to view the neuroglancer changes in staging before syncing it to prod.
For example, renders the neurglancer config for the run 16731 with staging resources:
python neuroglancer_util.py translate-env --run-id 16731

python neuroglancer_util.py translate-env -rn TS_026 -ds-id 10000

I suspect @uermel wanted a markdown file in the docs directory?

@jgadling  Instead of merging this, what are your thoughts on implementing the translation in the db-import as we had discussed offline?


GEODE-10085: Don't start JmxManager if already running

This adds support for multiple locators in the new .NET test framework.

Converting to Draft until fix also implemented in new cppcache test framework.


Changing the AIC Updater and the Project to contain these new AIC nam…

…es, and work with them:
Unknown000 (WallDecoration)
Unknown040 (AiRequestDelay)
Unknown124 (RaidRetargetDelay)
Unknown130 (AttAssaultDelay)
AttUnit2 (AttUnitVanguard)
AttUnit2Max (AttUnitVanguardMax)

needs testing!


Are you adding Kd_loss to the Total_loss

I have seen your code; you are not adding your kd_loss to your loss. You are just giving new entry for kd_loss just to show the difference; you are not doing it this way += , loss_kd is losses['loss_kd'] = kd_loss. and in your detectors file point_rcnn you just update it losses.update({'kd_loss': kd_loss}). you are just adding and updating the dictionary.
Maybe I didn't understand it right from what i have seen from your code.
Thanks @RunpeiDong

Because that's how mmdet3d calculates losses, please read the code carefully. Once the dict is updated, the loss will be backpropagated.
Read the mmdet3d and mmdet codebase first and understand how they work, then you will see.
Please Take time and read the code.

@RunpeiDong sorry to say I cannot see any of the logic or code in pointrcnn or train.py you are adding the kd_loss Can you point out the file name that i have missed from what i am seeing you are getting the kd_loss but their is no implementation to add it to total_loss.


feat: add field-label component

Purpose
Add FieldLabel component.
Approach
Implements FieldLabel component.
This closes issue #4.
Testing
On Storybook preview.
Risks
N/A

LGTM


Add ability to customize SearchResult children via SidebarSearchModal component

Hey, I just made a Pull Request!
Adding ability to customize the children of the SearchResult component via the SidebarSearchModal component.

:heavy_check_mark: Checklist

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

Thank you for working on this! I have been trying to implement a custom SearchResultLinkItem in the SearchModal, and went as far as trying to make a custom SearchModal as well, but it was way too complicated due to all the React hooks being used.
Your solution is much simpler - would love to see this accepted!

@benjdlambert @freben Not sure why this PR not get someone assigned to review it!

@joshjung oh yep this got missed for some reason. Could have been that GitHub was having a wobble at the time as it didn’t add anyone of the code owners at all. Added the correct groups manually, will take a look!

@camilaibs Base branch does not allow updates, merging is blocked?

@camilaibs Base branch does not allow updates, merging is blocked?

Yes, the master branch is blocked until we get the todays release out.


Clicking on an element by image hangs the bot. How to debug? - pending log

Hello,
first of all, thank you very much for your effort to create tagui.
I have a simple bot:
https://www.wikipedia.org

click foo.png

foo.png is an image of a link on that site. The page is loaded in seconds. The bot hangs on the click command. After waiting for 5 minutes, I used ctr-c to shutdown the bot.
I used the bot with $tagui mybot.tag from a terminal. I'm running on macOS BigSur with ARM architecture tag v6.46 . I gave permissions to control screen and control. I tried running it with x86 and arch64 java. Same result. I think some of the dependencies are messed up. But I have no idea where to start debugging (php, shell, casper, sikuli, php). According to the docs  just jvm and php are required. So i assume, that other dependencies are installed by tagui automatically. Is this right?
Can you give me a list of tagui dependencies? So that I can make a "clean install"?
Or can you tell me which process(es) are called in this bot? So that I get a hint where to look for the deadlock?

Hi @HLevering thanks for all these details! Can you check the folder tagui/src/tagui.sikuli, there will be tagui.log file to track the communication messages between TagUI and the computer vision engine provided by SikuliX.
Since the automation can progress until that step, the only weak link to check further is there.
After checking this, you may also want to see if your display is Retina display. If it is, all the image snapshots taken are actually at double resolution. So there is a need to either downsize manually, or tell TagUI to downsize automatically before matching, by using
vision Settings.AlwaysResize = 0.5

Hi @kensoh, thank you very much for your reply. The logfile in tagui/src/tagui.sikuli gave the missing hint. sikulix.jar was missing. I think I deleted it accidentally while I was trying the resolution trouble of the retina display in the first place. Anyway it works now. This gave me so much headaches.
The `vision' setting is super useful. Maybe you could add this to the documentation (retina display resolution and how to solve it). I think that would also very useful for onboarding other mac users.

Ok I did some further testing. It works when I use a x86 compiled java (with rosetta). If I use a native aarch64 java, then it hangs.  tagui/src/tagui.sikuli clearly shows the error:

...
[error] RunTimeAPI: Problematic lib: /Users/hendrik/Library/Application Support/Sikulix/SikulixLibs/libopencv_java342.dylib (...TEMP...)
[error] RunTimeAPI: libopencv_java342.dylib loaded, but it might be a problem with needed dependent libraries
ERROR: ...TEMP...: dlopen(...TEMP..., 1): no suitable image found.  Did find:
	...TEMP...: mach-o, but wrong architecture
	...TEMP...: mach-o, but wrong architecture
[error] script [ tagui ] stopped with error in line 584
[error] java.lang.ExceptionInInitializerError ( java.lang.ExceptionInInitializerError )
...

I think it is related to .
I can use x86 java. However, this information could be useful to others.


Restart retransmit timer on new data ACK

This is an attempt to address the issue described in #949, inspired by the patch and discussion in #953.
I don't want to step on anybody's toes - if you want to continue working on the original PR I don't mind :slightly_smiling_face:.
Basically, what I've tried to do is to implement rfc6298 5.3 based on my understanding of that and how the code works. I added a test for the retransmission timer restart but I'm not sure if it is enough.
For testing I simulated a high latency link with 1000ms RTT and wrote a simple smoltcp client that sends a single byte every 100ms with Nagle disabled so that there is always outstanding data. Without the patch retransmissions keep happening, while the patched version only has a few initial retransmissions before they stop occurring. I don't have access to a real setup like the one in the original issue so I can't say for sure how much it helps in such situations.

If you want to test it you can use mininet. It can simulate networks with various host and switches, connected with links with custom delay and bandwidth. I can share my mininet config if you are interested.

If you want to test it you can use mininet. It can simulate networks with various host and switches, connected with links with custom delay and bandwidth. I can share my mininet config if you are interested.

That would be really helpful, thank you :)

As @Dirbaio mentioned in the matrix channel, the removal of delay: delay * 2, looks a bit suspicious.
From what I gather, mostly from the RFC-based comments in the code, this part (line 2527) should double the delay:
        if !self.seq_to_transmit(cx) && repr.segment_len() > 0 && !self.timer.is_retransmit() {
            // RFC 6298: (5.1) If we've transmitted all data we could (and there was
            // something at all, data or flag, to transmit, not just an ACK), start the
            // retransmit timer if it is not already running.
            self.timer
                .set_for_retransmit(cx.now(), self.rtte.retransmission_timeout());
        }

While this part (line 1838) should not, as it specifically calls for restarting the timer on retransmission:
            // RFC 6298: (5.2) ACK of all outstanding data turn off the retransmit timer.
            // (5.3) ACK of new data in ESTABLISHED state restart the retransmit timer.
            (State::Established, TcpControl::None) => {
                if ack_all {
                    self.timer.set_for_idle(cx.now(), self.keep_alive);
                } else if ack_len > 0 {
                    self.timer
                        .set_for_retransmit(cx.now(), self.rtte.retransmission_timeout());
                }
            }

If I am correct, it should be an easy fix (maybe an reset_retransmission: bool parameter)
I don't have a setup to test that this still fixes the issue, @simonborje / @HKalbasi if you could post here / create a repository of a test that would be great

I was a bit unsure about the delay: delay * 2 part and initially thought it might be responsible for something like exponential backoff, however when testing it I couldn't see that it actually did anything useful.
I see that there is now a new PR #1020 for fixing exponential backoff that modifies the same parts as this PR, so perhaps I should wait for that to land and then rebase this PR.

Here is my mininet config:
import subprocess

from mininet.cli import CLI
from mininet.link import TCLink
from mininet.net import Mininet
from mininet.node import OVSController
from mininet.topo import Topo

LEFT_HOST_NAME: str = 'left_h'
RIGHT_HOST_NAME: str = 'right_h'

class HostInTheMiddleTopo(Topo):

    def build(self):

        left_host = self.addHost(LEFT_HOST_NAME)
        right_host = self.addHost(RIGHT_HOST_NAME)

        self.addLink(left_host, right_host, bw=100, delay="1ms")

def get_interface(host: str, index: int):
    return f"{host}-eth{index}"

def disable_offload(host, offload: str, index: int):
    host.cmd(f"ethtool -K {get_interface(host.name, index)} {offload} off")

def run():
    net = Mininet(topo=HostInTheMiddleTopo(),
                  controller=OVSController, link=TCLink)

    left_host = net[LEFT_HOST_NAME]
    right_host = net[RIGHT_HOST_NAME]

    for host in [left_host, right_host, middle_host]:
        for name in ["tx", "rx"]:
            disable_offload(host, name, 0)

    left_host.cmd("tcpdump -w left.pcap &")
    right_host.cmd("tcpdump -w right.pcap &")

    # left_host.cmd(f"nc -l <IP_ADDRESS> 8000 > /dev/null &")
    # left_host.cmd(f"yes | nc -l <IP_ADDRESS> 8000 &")
    # right_host.cmd("ifstat -i right_h-eth0 > speedd.txt &")
    # left_host.cmd(f"sudo RUST_LOG=trace ./target/release/smol-speed > out.txt 2> err.txt &")

    net.start()
    CLI(net)
    net.stop()

if __name__ == "__main__":
    run()

You can run it by python3 net.py. It will give you a cli that have access to two machines connected with a link with bandwidth 100 Mbit/s and delay 1ms. You can run bash commands on each machine, for example left_h ip a or right_h ./run_my_program_in_background &. To test smoltcp with it, you should use a smoltcp::phy::RawSocket("left_h-eth0, Medium::Ethernet) and you can connect to it from right host using netcat, both from the python code and in the cli. You can also add more hosts and switches to make more complex network topologies.


Could you publish the training log for 'Novel Fine-tuning'?

Thanks for your project. We were unable to achieve the average results in the paper as per your experimental parameters and configurations, and would like to see the magnitude of the fluctuations in the results over multiple times against the training log files.

Thanks for your attention to our work.
Please refer to our supplementary_material for complete results of FSOD/FSIS and gFSOD/gFSIS (Tables 7, 8, 9, 10 and 11). In this supplementary material, we report the average AP/AP50 metric with 95% confidence interval over
10 seeds for FSOD/FSIS and gFSOD/gFSIS.
Furthermore, I would like to see the gap between your reproduced results and the reported ones in our paper. If you have any other questions, further discussion is welcome.


Crash after setting the shop in 1.18.1

When i right click the sign to set the shop the game crashes.

crash log please

crash-2022-01-25_23.22.55-server.txt
crashes on server after right clicking the sign to set the shop.

Also having the same issue with a pebblehost server. after right clicking the sign the server crashes but client minecraft is fine.

I have exactly the same issue on serve
crash-2022-01-25_23.11.11-server.txt

Looks like Mojang did some refactoring between 1.18 and 1.18.1, so I'll need to make a special update for that. Thank you all for bringing this to my attention.

Thank you so much

this has been fixed and released on CF
https://www.curseforge.com/minecraft/mc-mods/dicemc-money-mod/files/3624987
Also, the old files have been properly updated to not include 1.18.1 as a valid version


Flav/new conversation UI

Description

This PR does not implement the new action rendering, stay tune!
This PR introduces the new conversation UI (Figma design). The ultimate goal is to have most of the conversation components integrated into Sparkle. However, given the current setup where all rendering parts reside in a single large file, this PR restructures the code by splitting it into proper components while also implementing the new conversation UI.
Key highlights include the new logic for grouping content fragments with the closest user message, enabling them to be rendered alongside the user message. Pagination is handled correctly – content fragments are hidden if the page does not include the user message, and they will appear once the subsequent page is fetched.
This new UI includes both a normal and a compact version. The compact version is used whenever the conversation is displayed in a modal. Additional work is required to update the background in the assistant builder, which will be addressed in an upcoming dedicated PR. Note that this PR does not implement the new action rendering – stay tuned for that!
Before

After

Before

After

Risk

Worst case it breaks the conversation view. Pretty well tested locally. Safe to rollback.
Deploy Plan

Tested it and LGTM 💪🏼
Random nit question though: even though all components are centered, the messages are slightly larger than the input bar, is that on purpose? (e.g. on my monitor messages are 896px and input bar is 864px)

Tested it and LGTM 💪🏼
Random nit question though: even though all components are centered, the messages are slightly larger than the input bar, is that on purpose? (e.g. on my monitor messages are 896px and input bar is 864px)

Good catch, fixed in https://github.com/dust-tt/dust/pull/5281/commits/1b6c8bb7465e221486b09be096f948c69a5541a4.

How does the content fragment work with slack thread attachement ?

How does the content fragment work with slack thread attachement ?

Yes, it's displayed below like a regular file that the user uploads. This raises some questions about how we should display content fragments based on their types (user uploads vs slack threads). I'll check with @Duncid to see if we have any ideas.


Unable to get or set Colour_Key

The routines SDL.Video.Surfaces.Colour_Key (calls SDL_GetColorKey)
and SDL.Video.Surfaces.Set_Colour_Key (calls SDL_SetColorKey) both crash with an exception Surface_Error.
I need the Set_Colour_Key  in order to make my image (bmp) transparent.
To test these functions, I added some calls to the load_image.adb example (just after Window_Surface := W.Get_Surface) :
declare
Color_Key        : SDL.Video.Palettes.Colour;
begin
Color_Key := SDL.Video.Surfaces.Colour_Key (Window_Surface);
end;
I noticed that the Set_Colour_Key procedure was missing a parameter for flags, but fixing this did not help.
Any help is greatly appreciated :-)

What message is printed with the exception? All the exceptions should call SDL_GetError in the raise statement.

I just added an exception handler with an occurrence variable 'e'.
Printing 'e' in the debugger gives me:
(gdb) print e
$1 = (id => 0x460a18 <sdl.video.surfaces.surface_error>, machine_occurrence => (system.address) 0x0, msg_length => 0, msg => "["e6"] .......
So there is no extra info from SDL.

Also, do you have a quick test program you can upload and i'll try it here? Ta.

What OS are you on?

If you are on Windows, can you do what it says in #4 and come back to me? I've only just set up windows 10 on a VM, I'm yet to get a compiler and SDLAda compiling on it.

I'm on Win7

Ok, might be issue #4 then. If that works for you, I'll modify the calls and push.

I just made the change to SDL-log.adb as described in #4 but the message is still empty.

Ok, can you upload a simple test that fails and i'll try it here?

I'll use the load_surface example with my modification.
My company machine has no internet connection, so I'll take it home and upload it to my website later.

It's ok, I've just tried it here.

ok, according to SDL_GetColorKey it should return -1 if there is no colour key, which it does, but libSDL doesn't set an error message.

In fact, it's actually returning a string containing null, "\0"!

Ok, pull the latest. It's an error with SDL_GetColorKey

Ok, I understand that this was indeed the problem for getting the ColorKey.
However the problem with setting the ColorKey still exists.
Running a program that calls Set_Colour_Key (SDL_SetColorKey) raises an Exception_Access_Violation exception.
I have added the extra ´Flag' parameter and created a simple pixel value, but to no avail.
Sorry for the confusion.


i18n support

Description

Testing

Additional context

Modified to allow receiving response messages in the specified language by setting the RESPONSE_LANG environment variable.
(ex.Japanese, French, Chinese...)

@microsoft-github-policy-service agree


Is it possible to change the composition of a layer

Is it possible to programmatically change the composition used for a particular layer. For example you have a layer that is used for colour grading and you want to set a whole different preset. In AE you would drag the new comp onto the existing one while holding Alt.

You should check if that is possible to do using jsx scripting. If it is, it should be possible to do in nexrender as well, using script asset types.


Why is awswrangler always loading so many packages?

Hey,
is there a specific reason why in awswrangler/__init__.py so many modules and external packages are getting loaded?
My problem:
I only want to read data from Athena. Therefore, I need the function from awswrangler.athena import read_sql_query. But If I load that function, awswrangler loads many other things and external packages. For example pyodbc. For pyodbc I need to install libodbc1. And if I'm not mistaken, pyodbc is not needed for Athena, right?
It's not a big problem to install libodbc1 but I was wondering why awswrangler loads so many things it doesn't need.

Hi there,
pyodbc is optional - you don't have to install it unless you intend to use ODBC. However, If it is installed in your env, the library will attempt to load it and that's where you'll need libodbc1. If you'd like to avoid that just remove pyodbc from your env.


Update Virtual Network Description

Confusing wording on that you cannot "remove" a nic on an Azure vm with the portal. However you can "detach" and then delete a NIC as I have tested today on the ms portal.

This seems like a small (but important) contribution, so no Contribution License Agreement is required at this point. We will now review your pull request.
Thanks,
Microsoft Pull Request Bot

@cameronmotenMSFT : Thanks for your contribution to the Azure documentation! The author, @jimdial, has been notified to review your proposed change.

I have noticed that this feature works intermittently @jimdial  is this in beta?
Latest attempt to use the "detach" feature gives me an error. (When machine is offline)

@cameronmotenMSFT  I just checked this and it's still not working. Engineering is looking into it, but haven't resolved it yet. I'm going to close this PR for now.  #please-close


Update Grafana documentation, Agent-->Alloy

### Tasks
- [ ] Identify the topics that reference or document using Agent with Alloy
- [ ] Assess the contents for minor update, rewrite, or remove.

@clayton-cornell
When I search "Agent" in the Grafana docs, I get 26 results in 8 files.
When I search "agent", I get 59 results in 19 files.
I suspect the reality falls somewhere in the middle.
I can open a PR to work on some of the ones that seem obvious and leave it for you to review, but some of these you'd probably need to look at. I can generate a list of them for you (with some context) so you can figure out if you need to look at it. Does that work as a strategy?

Yes, happy to review/suggest on the changes.  Some instances of "agent" aren't always Grafana Agent... there's other agents too.. it's a bit of an overloaded term.  A list of what you found is a perfect starting point.

Okay good stuff. I'll get started next week.


Function missing?

Hey! where is the file that contains the actual profanity checker function?

Hi @DewOnTheGrass ,
I am sorry for such a late reply.
./index.js contains a function named - containsProfanity , that checks for the profanity.


docs: add comments about inherited options on SPIFFE validator

add comments for https://github.com/envoyproxy/envoy/pull/15509 and https://github.com/envoyproxy/envoy/pull/15426

@lizan PTAL!


Intuitive Error when showSnackBar is called During Build

Adds an intuitive error message for when showSnackBar is called during build. This PR adds the error for both ScaffoldMessenger and the legacy API for consistency.
Fixes #66789
Pre-launch Checklist

[x] I read the Contributor Guide and followed the process outlined there for submitting PRs.
[x] I read the Tree Hygiene wiki page, which explains my responsibilities.
[x] I read and followed the Flutter Style Guide, including Features we expect every widget to implement.
[x] I signed the CLA.
[x] I listed at least one issue that this PR fixes in the description above.
[x] I updated/added relevant documentation (doc comments with ///).
[x] I added new tests to check the change I am making or feature I am adding, or Hixie said the PR is test-exempt.
[x] All existing and new tests are passing.

If you need help, consider asking for advice on the #hackers-new channel on Discord.

If you would like to try a different approach to detecting this error and providing a helpful error message, I recommend opening a new PR. I would be happy to take a look and run it through internal testing. :) I am going to close this in its latest state so it is easy to access the last test run and the failure it triggered. Thank you for contributing!

@Piinks This is not helpful at all, however. You are telling me to fix an error I cannot see. You would at least need to state what intended way of usage I am breaking.
One way you could do this is by adding a failing test case to my PR.


Testing Flake: iptables chain already exists

/kind bug
Description
Occasionally, automated testing fails due to a race-condition involving CNI iptables (though others CNI tools could also race).  Since firewalld is intended to mitigate this, but use is forbidden, synchronization either needs to happen within CNI or within libpod.
Steps to reproduce the issue:

Run CI tests hundreds of billion times under slightly varying conditions.

Describe the results you received:
Multiple tests fail with error from CNI claiming "iptables chain FOO already exists"
Describe the results you expected:
Testing continuously passes despite slightly varying conditions.
Additional information you deem important (e.g. issue happens only occasionally):
containernetworking-plugins-0.7.5-1.fc30.x86_64
Output of podman version:
Version:            1.4.2
RemoteAPI Version:  1
Go Version:         go1.12.5
OS/Arch:            linux/amd64

Output of podman info --debug:
debug:
  compiler: gc
  git commit: ""
  go version: go1.12.5
  podman version: 1.4.2
host:
  BuildahVersion: 1.9.0
  Conmon:
    package: podman-1.4.2-1.fc30.x86_64
    path: /usr/libexec/podman/conmon
    version: 'conmon version 0.2.0, commit: d7234dc01ae2ef08c42e3591e876723ad1c914c9'
  Distribution:
    distribution: fedora
    version: "30"
  MemFree:<PHONE_NUMBER>
  MemTotal:<PHONE_NUMBER>
  OCIRuntime:
    package: runc-1.0.0-93.dev.gitb9b6cc6.fc30.x86_64
    path: /usr/bin/runc
    version: |-
      runc version 1.0.0-rc8+dev
      commit: e3b4c1108f7d1bf0d09ab612ea09927d9b59b4e3
      spec: 1.0.1-dev
  SwapFree: 0
  SwapTotal: 0
  arch: amd64
  cpus: 2
  hostname: cevich-fedora-30-libpod-5081463649730560
  kernel: 5.1.12-300.fc30.x86_64
  os: linux
  rootless: false
  uptime: 5m 23.78s
registries:
  blocked: null
  insecure: null
  search:
  - docker.io
  - quay.io
  - registry.fedoraproject.org
store:
  ConfigFile: /etc/containers/storage.conf
  ContainerStore:
    number: 0
  GraphDriverName: overlay
  GraphOptions:
  - overlay.mountopt=nodev,metacopy=on
  GraphRoot: /var/lib/containers/storage
  GraphStatus:
    Backing Filesystem: extfs
    Native Overlay Diff: "false"
    Supports d_type: "true"
    Using metacopy: "true"
  ImageStore:
    number: 0
  RunRoot: /var/run/containers/storage
  VolumePath: /var/lib/containers/storage/volumes

Additional environment details (AWS, VirtualBox, physical, etc.):
Fedora 30 VM running in GCE
/etc/cni/net.d/87-podman-bridge.conflist:
{
    "cniVersion": "0.3.0",
    "name": "podman",
    "plugins": [
      {
        "type": "bridge",
        "bridge": "cni0",
        "isGateway": true,
        "ipMasq": true,
        "ipam": {
            "type": "host-local",
            "subnet": "<IP_ADDRESS>/16",
            "routes": [
                { "dst": "<IP_ADDRESS>/0" }
            ]
        }
      },
      {
        "type": "portmap",
        "capabilities": {
          "portMappings": true
        }
      }
    ]
}

@mheon @baude either of you seen errors coming from CNI iptables that complain about CHAIN ALREADY EXISTS?

I've heard of this mostly through Ed's tests. I have not personally seen these errors.

Though, I will note Ed has a consistent reproducer.

Ohhh, that's good to hear.  @edsantiago would it be possible to use a fresh(er) build of CNI to see if the problem is fixed? (see the CNI issue I opened for details)  I only see it very inconsistently in libpod CI :disappointed:

would it be possible to use a fresh(er) build of CNI

I only see the problem on RHEL8, and I have no idea how to get a new CNI there

From the two RHEL8 VMs I have I see this one of them always and on the other one never.

@edsantiago darn, I was afraid you'd say that.  I'd guesstimate I was seeing this hit maybe 1/10 CI jobs here (when I opened the issues).  Across all distros IIRC.  Now it seems much reduced, but I dislike leaving that up to chance.
I remember matt saying it would be really really expensive if podman did the locking for iptables.
The crappy thing is, CNI can literally just ignore this error.  I can't imagine why anything should ever care about a chain existing on create, since that was the intention.  There's no other data tied to existence or absence  that I know of.
(AFAIK, the up suspected "fix" in golang doesn't ignore the error, it does something else)

Feel free to follow along at rhbz1627561

That BZ is private, but I will share that it's tracking the same issue, and fix I reported upstream in https://github.com/containernetworking/plugins/issues/335  So I think we can be fairly confident when that finalizes for RHEL, we can close all these issues also.

Dangit...saw this happen again on master:
[+0422s] Podman run
[+0422s]   podman run a container based on a complex local image name
[+0422s]   /var/tmp/go/src/github.com/containers/libpod/test/e2e/run_test.go:53
[+0422s]
[+0422s] [BeforeEach] Podman run
[+0422s]   /var/tmp/go/src/github.com/containers/libpod/test/e2e/run_test.go:30
[+0422s] [It] podman run a container based on a complex local image name
[+0422s]   /var/tmp/go/src/github.com/containers/libpod/test/e2e/run_test.go:53
[+0422s] Running: /usr/bin/podman --storage-opt vfs.imagestore=/tmp/podman/imagecachedir --root /tmp/podman_test990930550/crio --runroot /tmp/podman_test990930550/crio-run --runtime /usr/bin/runc --conmon /usr/libexec/podman/conmon --cni-config-dir /etc/cni/net.d --cgroup-manager cgroupfs --tmpdir /tmp/podman_test990930550 --storage-driver=vfs run libpod/alpine_nginx:latest ls
[+0422s] time="2019-07-24T11:07:42Z" level=error msg="unable to write system event: \"write unixgram @0014d->/run/systemd/journal/socket: sendmsg: no such file or directory\""
[+0422s] time="2019-07-24T11:07:42Z" level=error msg="unable to write pod event: \"write unixgram @0014d->/run/systemd/journal/socket: sendmsg: no such file or directory\""
[+0422s] Error: error adding firewall rules for container 4656cd271c0f45affe8868176783bd733c22c6b210e6fcc7e8337498f9dc3fa9: running [/usr/sbin/iptables -t filter -N CNI-FORWARD --wait]: exit status 1: iptables: Chain already exists.

We need a fixed release of containernetworking-plugins vendoring the patched go-iptables.

@mheon did that happen?

We are still waiting on a plugins tag

We're carrying a patch for RHEL/Cent 8.1. We should look into doing the same for Fedora.

Note to me:  We have fresh images for all platforms in master.  I will check and verify the version of CNI plugins that are present.

fedora-30-libpod-5664838702858240: containernetworking-plugins-0.8.1-1.fc30.x86_64
fedora-29-libpod-5664838702858240: containernetworking-plugins-0.8.1-1.fc29.x86_64

Problem is def. not fixed in fedora :  https://api.cirrus-ci.com/v1/task/6382599951351808/logs/integration_test.log

@lsm5 can we please get new containernetworking-plugins packages that are built with vendor go-iptables 1.8.1 or later?  I believe latest upstream should already specify that.

Looks like this is still happening:
[+0103s] [It] podman run add dns server
[+0103s]   /var/tmp/go/src/github.com/containers/libpod/test/e2e/run_dns_test.go:57
[+0103s] Running: podman [options] --events-backend file --storage-driver vfs run --dns=<IP_ADDRESS> docker.io/library/alpine:latest cat /etc/resolv.conf
[+0103s] time="2020-02-20T14:42:34-05:00" level=error msg="Error adding network: running [/usr/sbin/iptables -t filter -N CNI-FORWARD --wait]: exit status 1: iptables: Chain already exists.\n"
[+0103s] time="2020-02-20T14:42:34-05:00" level=error msg="Error while adding pod to CNI network \"podman\": running [/usr/sbin/iptables -t filter -N CNI-FORWARD --wait]: exit status 1: iptables: Chain already exists.\n"
[+0103s] Error: error configuring network namespace for container e499a0072ca242a431b101da81b2484008e4d6f970deb9915c2ce5044ac00e3d: running [/usr/sbin/iptables -t filter -N CNI-FORWARD --wait]: exit status 1: iptables: Chain already exists.

Cirrus says this is fedora-30 but I have no way of knowing which version of containernetworking-plugins is installed.

UPDATE: package_versions.log shows:
containernetworking-plugins-0.8.2-2.git485be65.fc30-x86_64

@rhvgoyal was just showing some similar errors to this.  We had to do a podman system reset to clear them up.


Some functions should not have default Options like SetAccessPolicy

https://github.com/Azure/azure-sdk-for-cpp/blob/836a8a591a87ee8664475011a6bb88ed9a98e93d/sdk/storage/azure-storage-blobs/inc/azure/storage/blobs/blob_container_client.hpp#L243

Hi @JeffreyRichter
I want to remove the default options from functions like
SetAccessPolicy(const SetBlobContainerAccessPolicyOptions& options = SetBlobContainerAccessPolicyOptions())

so it will be changed to
SetAccessPolicy(const SetBlobContainerAccessPolicyOptions& options)

because for this kind of functions, customer has to specify one or more fields in options to make this operation meaningful. Or it will just clear the properties (access policies etc.) from server side, which is not the behavior the function name suggests.
What do you think?

Hi @JeffreyRichter
I want to remove the default options from functions like
SetAccessPolicy(const SetBlobContainerAccessPolicyOptions& options = SetBlobContainerAccessPolicyOptions())

so it will be changed to
SetAccessPolicy(const SetBlobContainerAccessPolicyOptions& options)

because for this kind of functions, customer has to specify one or more fields in options to make this operation meaningful. Or it will just clear the properties (access policies etc.) from server side, which is not the behavior the function name suggests.
What do you think?

Yes, I agree.

Yes, I agree.

Yes, I agree.

Source: Set Container ACL

x-ms-blob-public-access : If this header is not included in the request, container data is private to the account owner.

I'm afraid I cannot agree with this approach. For this exact API, set acl with default option means resetting to the service's default behavior. It is also the case for many other APIs with only the default option in the parameter list.
For some APIs, the default behavior means nothing is changed for an API call. However, it is not impossible for those APIs to be having a default behavior just like the Set Container ACL API in the future. Making the option for these API required now will cause it a breaking change to change it back to its current state.
Also, this does not prevent customers from writing code like below. I don't see an improvement here.
myContainer.SetAccessPolicy(SetBlobContainerAccessPolicyOptions());

At last, I think it would be a more unified experience for the customer to know that options are always not mandatory in this SDK.
@JeffreyRichter, please consider my input and I don't have further push back if you insist on this design. In that case, please also confirm that this design applies to all PUT/POST APIs with only one parameter being the options parameter.

Yes, I agree.

Source: Set Container ACL

x-ms-blob-public-access : If this header is not included in the request, container data is private to the account owner.

I'm afraid I cannot agree with this approach. For this exact API, set acl with default option means resetting to the service's default behavior. It is also the case for many other APIs with only the default option in the parameter list.
For some APIs, the default behavior means nothing is changed for an API call. However, it is not impossible for those APIs to be having a default behavior just like the Set Container ACL API in the future. Making the option for these API required now will cause it a breaking change to change it back to its current state.
Also, this does not prevent customers from writing code like below. I don't see an improvement here.
myContainer.SetAccessPolicy(SetBlobContainerAccessPolicyOptions());

At last, I think it would be a more unified experience for the customer to know that options are always not mandatory in this SDK.
@JeffreyRichter, please consider my input and I don't have further push back if you insist on this design. In that case, please also confirm that this design applies to all PUT/POST APIs with only one parameter being the options parameter.

BTW, The example of an API change to have a default behavior even if no useful headers are set after an API version upgrade:
https://docs.microsoft.com/en-us/rest/api/storageservices/set-share-properties
x-ms-root-squash: <NoRootSquash | RootSquash | AllSquash> | Optional. Supported in version 2020-02-10 and above. Specifies the root squashing behavior on the share when NFS is enabled. If not specified, the default is NoRootSquash.

BTW, The example of an API change to have a default behavior even if no useful headers are set after an API version upgrade:
https://docs.microsoft.com/en-us/rest/api/storageservices/set-share-properties
x-ms-root-squash: <NoRootSquash | RootSquash | AllSquash> | Optional. Supported in version 2020-02-10 and above. Specifies the root squashing behavior on the share when NFS is enabled. If not specified, the default is NoRootSquash.

For this exact API, set acl with default option means resetting to the service's default behavior.

Well, I don't think it's a good idea to allow our users to reset properties with some function like client.SetAccessPolicy(). Why is a reasonable person expected to know that to set properties without any input would just reset everything? At lease to me this is not intuitive, so I don't think it's good API design.
But things would be different if we force our users to do so
SetAccessPolicyOptions options;
client.SetAccessPolicy(options);

because the user explicitly initializes an options and then passes it into the API we provide. So it's safe for us to assume what's in the options struct is the user's real intention. If he just leaves all those fields in options to be default value, he should expect those default values to be set to server side, which is exactly the effect of reset.

For this exact API, set acl with default option means resetting to the service's default behavior.

Well, I don't think it's a good idea to allow our users to reset properties with some function like client.SetAccessPolicy(). Why is a reasonable person expected to know that to set properties without any input would just reset everything? At lease to me this is not intuitive, so I don't think it's good API design.
But things would be different if we force our users to do so
SetAccessPolicyOptions options;
client.SetAccessPolicy(options);

because the user explicitly initializes an options and then passes it into the API we provide. So it's safe for us to assume what's in the options struct is the user's real intention. If he just leaves all those fields in options to be default value, he should expect those default values to be set to server side, which is exactly the effect of reset.

BTW, The example of an API changed to have a default behavior even if no useful headers are set after an API version upgrade:
https://docs.microsoft.com/en-us/rest/api/storageservices/set-share-properties
x-ms-root-squash: <NoRootSquash | RootSquash | AllSquash> | Optional. Supported in version 2020-02-10 and above. Specifies the root squashing behavior on the share when NFS is enabled. If not specified, the default is NoRootSquash.

I do believe this should be a mandatory parameter rather than optional. So it's not relevant to this topic.

BTW, The example of an API changed to have a default behavior even if no useful headers are set after an API version upgrade:
https://docs.microsoft.com/en-us/rest/api/storageservices/set-share-properties
x-ms-root-squash: <NoRootSquash | RootSquash | AllSquash> | Optional. Supported in version 2020-02-10 and above. Specifies the root squashing behavior on the share when NFS is enabled. If not specified, the default is NoRootSquash.

I do believe this should be a mandatory parameter rather than optional. So it's not relevant to this topic.

Well, I don't think it's a good idea to allow our users to reset properties with some function like client.SetAccessPolicy(). Why is a reasonable person expected to know that to set properties without any input would just reset everything?

.NET's SetAccessPolicy
.NET is making client.SetAccessPolicy() a valid call to the customer, so it is at least agreed by the devs of .NET SDK and the arch board to be a reasonable enough design.

Well, I don't think it's a good idea to allow our users to reset properties with some function like client.SetAccessPolicy(). Why is a reasonable person expected to know that to set properties without any input would just reset everything?

.NET's SetAccessPolicy
.NET is making client.SetAccessPolicy() a valid call to the customer, so it is at least agreed by the devs of .NET SDK and the arch board to be a reasonable enough design.

Well, I don't think it's a good idea to allow our users to reset properties with some function like client.SetAccessPolicy(). Why is a reasonable person expected to know that to set properties without any input would just reset everything?

.NET's SetAccessPolicy
.NET is making client.SetAccessPolicy() a valid call to the customer, so it is at least agreed by the devs of .NET SDK and the arch board to be a reasonable enough design.

Things are very different for .Net from C++, because .Net doesn't support options bag. Who's to say they don't want to forbid client.SetAccessPolicy()? Maybe they also want, but they can't. I think this is an advantage of options bag design in C++.

Well, I don't think it's a good idea to allow our users to reset properties with some function like client.SetAccessPolicy(). Why is a reasonable person expected to know that to set properties without any input would just reset everything?

.NET's SetAccessPolicy
.NET is making client.SetAccessPolicy() a valid call to the customer, so it is at least agreed by the devs of .NET SDK and the arch board to be a reasonable enough design.

Things are very different for .Net from C++, because .Net doesn't support options bag. Who's to say they don't want to forbid client.SetAccessPolicy()? Maybe they also want, but they can't. I think this is an advantage of options bag design in C++.

At last, I think it would be a more unified experience for the customer to know that options are always not mandatory in this SDK.

I'm not sure I can agree with this. From users' perspective, the unified experience is that they have to provide things that is necessary to make a function call clear and actionable, and can leave out things without which the function call is still meaningful. So in upload function
blobClient.upload(stream);

the stream is what's gonna be uploaded, without which this function is just meaningless, so they have to provide it in parameter list. Other options like metadata, properties and tier stuff are not necessary, so they can omit these. Another example is create function, by
appendBlobClient.Create()

users have clearly conveyed a message that they want to create an append blob. This action is operable without any other information. So all other information should be optional and go into options bag.
But function
client.SetAccessPolicy()

I don't think this message is clear enough for us to know the user wants to reset properties on server side.

At last, I think it would be a more unified experience for the customer to know that options are always not mandatory in this SDK.

I'm not sure I can agree with this. From users' perspective, the unified experience is that they have to provide things that is necessary to make a function call clear and actionable, and can leave out things without which the function call is still meaningful. So in upload function
blobClient.upload(stream);

the stream is what's gonna be uploaded, without which this function is just meaningless, so they have to provide it in parameter list. Other options like metadata, properties and tier stuff are not necessary, so they can omit these. Another example is create function, by
appendBlobClient.Create()

users have clearly conveyed a message that they want to create an append blob. This action is operable without any other information. So all other information should be optional and go into options bag.
But function
client.SetAccessPolicy()

I don't think this message is clear enough for us to know the user wants to reset properties on server side.

Well, I don't think it's a good idea to allow our users to reset properties with some function like client.SetAccessPolicy(). Why is a reasonable person expected to know that to set properties without any input would just reset everything?

.NET's SetAccessPolicy
.NET is making client.SetAccessPolicy() a valid call to the customer, so it is at least agreed by the devs of .NET SDK and the arch board to be a reasonable enough design.

Things are very different for .Net from C++, because .Net doesn't support options bag. Who's to say they don't want to forbid client.SetAccessPolicy()? Maybe they also want, but they can't. I think this is an advantage of options bag design in C++.

I don't believe what you claim here is true. below is the approach they can achieve what you proposed without an option bag. But they clearly did not choose to do this.
/// overload 1, sets access type.
        public virtual Response<BlobContainerInfo> SetAccessPolicy(
            PublicAccessType accessType,
            BlobRequestConditions conditions = default,
            CancellationToken cancellationToken = default)
/// overload 2, sets permission.
        public virtual Response<BlobContainerInfo> SetAccessPolicy(
            IEnumerable<BlobSignedIdentifier> permissions,
            PublicAccessType accessType = PublicAccessType.None,
            BlobRequestConditions conditions = default,
            CancellationToken cancellationToken = default)

Who's to say they don't want to forbid client.SetAccessPolicy()? Maybe they also want, but they can't. I think this is an advantage of options bag design in C++.

Please confirm that it is their actual thought before you make this assumption based on your personal opinion.

When you say unified experience, I tend to think it's actually make our, storage sdk developers' experience unified, rather than our customers. Because apparently sticking to an established practice can cut down our research and maintenence effort. But this sdk is written for our customers to use. Our experience means nothing to them, their experience means everything to us. So I think we should really consider from their perspective when making decisions of API design.

This again assumes my thought on my behalf and this assumption is far from correct. The unified experience I was referring to is all about not requesting our customer to learn each API's uniqueness or developer's personal preference when using this SDK.
In your own example you mentioned, the appendBlobClient.Create() API. This API also resets the existing state of the destination blob according to what the server defines it to do, just as what SetAccessPolicy's behavior is. Why would we assume that one behavior is very obvious and the other is implicit?

Well, I don't think it's a good idea to allow our users to reset properties with some function like client.SetAccessPolicy(). Why is a reasonable person expected to know that to set properties without any input would just reset everything?

.NET's SetAccessPolicy
.NET is making client.SetAccessPolicy() a valid call to the customer, so it is at least agreed by the devs of .NET SDK and the arch board to be a reasonable enough design.

Things are very different for .Net from C++, because .Net doesn't support options bag. Who's to say they don't want to forbid client.SetAccessPolicy()? Maybe they also want, but they can't. I think this is an advantage of options bag design in C++.

I don't believe what you claim here is true. below is the approach they can achieve what you proposed without an option bag. But they clearly did not choose to do this.
/// overload 1, sets access type.
        public virtual Response<BlobContainerInfo> SetAccessPolicy(
            PublicAccessType accessType,
            BlobRequestConditions conditions = default,
            CancellationToken cancellationToken = default)
/// overload 2, sets permission.
        public virtual Response<BlobContainerInfo> SetAccessPolicy(
            IEnumerable<BlobSignedIdentifier> permissions,
            PublicAccessType accessType = PublicAccessType.None,
            BlobRequestConditions conditions = default,
            CancellationToken cancellationToken = default)

Who's to say they don't want to forbid client.SetAccessPolicy()? Maybe they also want, but they can't. I think this is an advantage of options bag design in C++.

Please confirm that it is their actual thought before you make this assumption based on your personal opinion.

When you say unified experience, I tend to think it's actually make our, storage sdk developers' experience unified, rather than our customers. Because apparently sticking to an established practice can cut down our research and maintenence effort. But this sdk is written for our customers to use. Our experience means nothing to them, their experience means everything to us. So I think we should really consider from their perspective when making decisions of API design.

This again assumes my thought on my behalf and this assumption is far from correct. The unified experience I was referring to is all about not requesting our customer to learn each API's uniqueness or developer's personal preference when using this SDK.
In your own example you mentioned, the appendBlobClient.Create() API. This API also resets the existing state of the destination blob according to what the server defines it to do, just as what SetAccessPolicy's behavior is. Why would we assume that one behavior is very obvious and the other is implicit?

whatever man, you win, I quit. Not that i'm convinced by you. I'm tired of fighting with you


✨ feat: don't force 55 peer deps on eslint consumers

Upgrading our eslint config package to depend on improved eslint module resolution to avoid consuming apps from having to maintain an explosion of eslint plugins in their package.json.

testing it with<EMAIL_ADDRESS>for now


Node-gyp error while installing python binding related repo

I was trying to install from that repo

It's calling pytorch(fastai)/pythob models from nodejs

Node Version:
v12.16.1 and 6.13.4
Platform: Linux pardus 4.19.0-6-amd64 #1 SMP Debian 4.19.67-2+deb10u2 (2019-11-11) x86_64 GNU/Linux
-->
Compiler:  gcc version 8.3.0 (Debian 8.3.0-6)
-->
Module:

Verbose output (from npm or node-gyp):
><EMAIL_ADDRESS>install /home/emrah/Code/node-python/node_modules/zmq
> node-gyp rebuild

make: Entering directory '/home/emrah/Code/node-python/node_modules/zmq/build'
  CXX(target) Release/obj.target/zmq/binding.o
In file included from ../node_modules/nan/nan.h:190,
                 from ../binding.cc:38:
../node_modules/nan/nan_maybe_43_inl.h: In function ‘Nan::Maybe<bool> Nan::ForceSet(v8::Local<v8::Object>, v8::Local<v8::Value>, v8::Local<v8::Value>, v8::PropertyAttribute)’:
../node_modules/nan/nan_maybe_43_inl.h:88:15: error: ‘class v8::Object’ has no member named ‘ForceSet’
   return obj->ForceSet(GetCurrentContext(), key, value, attribs);
               ^~~~~~~~
In file included from ../node_modules/nan/nan_converters.h:59,
                 from ../node_modules/nan/nan.h:195,
                 from ../binding.cc:38:
../node_modules/nan/nan_converters_43_inl.h: In static member function ‘static Nan::imp::ToFactoryBase<v8::Boolean>::return_t Nan::imp::ToFactory<v8::Boolean>::convert(v8::Local<v8::Value>)’:
../node_modules/nan/nan_converters_43_inl.h:15:45: warning: ‘v8::MaybeLocal<v8::Boolean> v8::Value::ToBoolean(v8::Local<v8::Context>) const’ is deprecated: ToBoolean can never throw. Use Local version. [-Wdeprecated-declarations]
   return val->To ## TYPE(GetCurrentContext());                                 \
                                             ^
../node_modules/nan/nan_converters_43_inl.h:18:1: note: in expansion of macro ‘X’
 X(Boolean)
 ^
In file included from /home/emrah/.cache/node-gyp/12.16.1/include/node/v8-internal.h:14,
                 from /home/emrah/.cache/node-gyp/12.16.1/include/node/v8.h:27,
                 from ../binding.cc:24:
/home/emrah/.cache/node-gyp/12.16.1/include/node/v8.h:2664:59: note: declared here
                 V8_WARN_UNUSED_RESULT MaybeLocal<Boolean> ToBoolean(
                                                           ^~~~~~~~~
/home/emrah/.cache/node-gyp/12.16.1/include/node/v8config.h:328:3: note: in definition of macro ‘V8_DEPRECATED’
   declarator __attribute__((deprecated(message)))
   ^~~~~~~~~~
In file included from ../node_modules/nan/nan_converters.h:59,
                 from ../node_modules/nan/nan.h:195,
                 from ../binding.cc:38:
../node_modules/nan/nan_converters_43_inl.h: In static member function ‘static Nan::imp::ValueFactoryBase<bool>::return_t Nan::imp::ToFactory<bool>::convert(v8::Local<v8::Value>)’:
../node_modules/nan/nan_converters_43_inl.h:31:48: warning: ‘v8::Maybe<bool> v8::Value::BooleanValue(v8::Local<v8::Context>) const’ is deprecated: BooleanValue can never throw. Use Isolate version. [-Wdeprecated-declarations]
   return val->NAME ## Value(GetCurrentContext());                              \
                                                ^
../node_modules/nan/nan_converters_43_inl.h:34:1: note: in expansion of macro ‘X’
 X(bool, Boolean)
 ^
In file included from /home/emrah/.cache/node-gyp/12.16.1/include/node/v8-internal.h:14,
                 from /home/emrah/.cache/node-gyp/12.16.1/include/node/v8.h:27,
                 from ../binding.cc:24:
/home/emrah/.cache/node-gyp/12.16.1/include/node/v8.h:2702:51: note: declared here
                 V8_WARN_UNUSED_RESULT Maybe<bool> BooleanValue(
                                                   ^~~~~~~~~~~~
/home/emrah/.cache/node-gyp/12.16.1/include/node/v8config.h:328:3: note: in definition of macro ‘V8_DEPRECATED’
   declarator __attribute__((deprecated(message)))
   ^~~~~~~~~~
In file included from ../node_modules/nan/nan_new.h:189,
                 from ../node_modules/nan/nan.h:196,
                 from ../binding.cc:38:
../node_modules/nan/nan_implementation_12_inl.h: In static member function ‘static Nan::imp::FactoryBase<v8::Function>::return_t Nan::imp::Factory<v8::Function>::New(Nan::FunctionCallback, v8::Local<v8::Value>)’:
../node_modules/nan/nan_implementation_12_inl.h:109:32: error: no matching function for call to ‘v8::Function::New(v8::Isolate*&, void (&)(const v8::FunctionCallbackInfo<v8::Value>&), v8::Local<v8::Object>&)’
                           , obj));
                                ^
In file included from ../binding.cc:24:
/home/emrah/.cache/node-gyp/12.16.1/include/node/v8.h:4275:31: note: candidate: ‘static v8::MaybeLocal<v8::Function> v8::Function::New(v8::Local<v8::Context>, v8::FunctionCallback, v8::Local<v8::Value>, int, v8::ConstructorBehavior, v8::SideEffectType)’
   static MaybeLocal<Function> New(
                               ^~~
/home/emrah/.cache/node-gyp/12.16.1/include/node/v8.h:4275:31: note:   no known conversion for argument 1 from ‘v8::Isolate*’ to ‘v8::Local<v8::Context>’
In file included from ../node_modules/nan/nan_new.h:189,
                 from ../node_modules/nan/nan.h:196,
                 from ../binding.cc:38:
../node_modules/nan/nan_implementation_12_inl.h: In static member function ‘static Nan::imp::FactoryBase<v8::StringObject>::return_t Nan::imp::Factory<v8::StringObject>::New(v8::Local<v8::String>)’:
../node_modules/nan/nan_implementation_12_inl.h:345:37: error: no matching function for call to ‘v8::StringObject::New(v8::Local<v8::String>&)’
   return v8::StringObject::New(value).As<v8::StringObject>();
                                     ^
In file included from ../binding.cc:24:
/home/emrah/.cache/node-gyp/12.16.1/include/node/v8.h:5531:23: note: candidate: ‘static v8::Local<v8::Value> v8::StringObject::New(v8::Isolate*, v8::Local<v8::String>)’
   static Local<Value> New(Isolate* isolate, Local<String> value);
                       ^~~
/home/emrah/.cache/node-gyp/12.16.1/include/node/v8.h:5531:23: note:   candidate expects 2 arguments, 1 provided
In file included from ../node_modules/nan/nan_new.h:189,
                 from ../node_modules/nan/nan.h:196,
                 from ../binding.cc:38:
../node_modules/nan/nan_implementation_12_inl.h:345:58: error: expected primary-expression before ‘>’ token
   return v8::StringObject::New(value).As<v8::StringObject>();
                                                          ^
../node_modules/nan/nan_implementation_12_inl.h:345:60: error: expected primary-expression before ‘)’ token
   return v8::StringObject::New(value).As<v8::StringObject>();
                                                            ^
In file included from ../binding.cc:38:
../node_modules/nan/nan.h: In function ‘v8::Local<v8::Value> Nan::MakeCallback(v8::Local<v8::Object>, v8::Local<v8::Function>, int, v8::Local<v8::Value>*)’:
../node_modules/nan/nan.h:817:60: warning: ‘v8::Local<v8::Value> node::MakeCallback(v8::Isolate*, v8::Local<v8::Object>, v8::Local<v8::Function>, int, v8::Local<v8::Value>*)’ is deprecated: Use MakeCallback(..., async_context) [-Wdeprecated-declarations]
         v8::Isolate::GetCurrent(), target, func, argc, argv);
                                                            ^
In file included from ../binding.cc:25:
/home/emrah/.cache/node-gyp/12.16.1/include/node/node.h:174:50: note: declared here
                 NODE_EXTERN v8::Local<v8::Value> MakeCallback(
                                                  ^~~~~~~~~~~~
/home/emrah/.cache/node-gyp/12.16.1/include/node/node.h:93:42: note: in definition of macro ‘NODE_DEPRECATED’
     __attribute__((deprecated(message))) declarator
                                          ^~~~~~~~~~
In file included from ../binding.cc:38:
../node_modules/nan/nan.h:817:60: warning: ‘v8::Local<v8::Value> node::MakeCallback(v8::Isolate*, v8::Local<v8::Object>, v8::Local<v8::Function>, int, v8::Local<v8::Value>*)’ is deprecated: Use MakeCallback(..., async_context) [-Wdeprecated-declarations]
         v8::Isolate::GetCurrent(), target, func, argc, argv);
                                                            ^
In file included from ../binding.cc:25:
/home/emrah/.cache/node-gyp/12.16.1/include/node/node.h:174:50: note: declared here
                 NODE_EXTERN v8::Local<v8::Value> MakeCallback(
                                                  ^~~~~~~~~~~~
/home/emrah/.cache/node-gyp/12.16.1/include/node/node.h:93:42: note: in definition of macro ‘NODE_DEPRECATED’
     __attribute__((deprecated(message))) declarator
                                          ^~~~~~~~~~
In file included from ../binding.cc:38:
../node_modules/nan/nan.h: In function ‘v8::Local<v8::Value> Nan::MakeCallback(v8::Local<v8::Object>, v8::Local<v8::String>, int, v8::Local<v8::Value>*)’:
../node_modules/nan/nan.h:831:62: warning: ‘v8::Local<v8::Value> node::MakeCallback(v8::Isolate*, v8::Local<v8::Object>, v8::Local<v8::String>, int, v8::Local<v8::Value>*)’ is deprecated: Use MakeCallback(..., async_context) [-Wdeprecated-declarations]
         v8::Isolate::GetCurrent(), target, symbol, argc, argv);
                                                              ^
In file included from ../binding.cc:25:
/home/emrah/.cache/node-gyp/12.16.1/include/node/node.h:167:50: note: declared here
                 NODE_EXTERN v8::Local<v8::Value> MakeCallback(
                                                  ^~~~~~~~~~~~
/home/emrah/.cache/node-gyp/12.16.1/include/node/node.h:93:42: note: in definition of macro ‘NODE_DEPRECATED’
     __attribute__((deprecated(message))) declarator
                                          ^~~~~~~~~~
In file included from ../binding.cc:38:
../node_modules/nan/nan.h:831:62: warning: ‘v8::Local<v8::Value> node::MakeCallback(v8::Isolate*, v8::Local<v8::Object>, v8::Local<v8::String>, int, v8::Local<v8::Value>*)’ is deprecated: Use MakeCallback(..., async_context) [-Wdeprecated-declarations]
         v8::Isolate::GetCurrent(), target, symbol, argc, argv);
                                                              ^
In file included from ../binding.cc:25:
/home/emrah/.cache/node-gyp/12.16.1/include/node/node.h:167:50: note: declared here
                 NODE_EXTERN v8::Local<v8::Value> MakeCallback(
                                                  ^~~~~~~~~~~~
/home/emrah/.cache/node-gyp/12.16.1/include/node/node.h:93:42: note: in definition of macro ‘NODE_DEPRECATED’
     __attribute__((deprecated(message))) declarator
                                          ^~~~~~~~~~
In file included from ../binding.cc:38:
../node_modules/nan/nan.h: In function ‘v8::Local<v8::Value> Nan::MakeCallback(v8::Local<v8::Object>, const char*, int, v8::Local<v8::Value>*)’:
../node_modules/nan/nan.h:845:62: warning: ‘v8::Local<v8::Value> node::MakeCallback(v8::Isolate*, v8::Local<v8::Object>, const char*, int, v8::Local<v8::Value>*)’ is deprecated: Use MakeCallback(..., async_context) [-Wdeprecated-declarations]
         v8::Isolate::GetCurrent(), target, method, argc, argv);
                                                              ^
In file included from ../binding.cc:25:
/home/emrah/.cache/node-gyp/12.16.1/include/node/node.h:160:50: note: declared here
                 NODE_EXTERN v8::Local<v8::Value> MakeCallback(
                                                  ^~~~~~~~~~~~
/home/emrah/.cache/node-gyp/12.16.1/include/node/node.h:93:42: note: in definition of macro ‘NODE_DEPRECATED’
     __attribute__((deprecated(message))) declarator
                                          ^~~~~~~~~~
In file included from ../binding.cc:38:
../node_modules/nan/nan.h:845:62: warning: ‘v8::Local<v8::Value> node::MakeCallback(v8::Isolate*, v8::Local<v8::Object>, const char*, int, v8::Local<v8::Value>*)’ is deprecated: Use MakeCallback(..., async_context) [-Wdeprecated-declarations]
         v8::Isolate::GetCurrent(), target, method, argc, argv);
                                                              ^
In file included from ../binding.cc:25:
/home/emrah/.cache/node-gyp/12.16.1/include/node/node.h:160:50: note: declared here
                 NODE_EXTERN v8::Local<v8::Value> MakeCallback(
                                                  ^~~~~~~~~~~~
/home/emrah/.cache/node-gyp/12.16.1/include/node/node.h:93:42: note: in definition of macro ‘NODE_DEPRECATED’
     __attribute__((deprecated(message))) declarator
                                          ^~~~~~~~~~
In file included from ../binding.cc:38:
../node_modules/nan/nan.h: In constructor ‘Nan::Utf8String::Utf8String(v8::Local<v8::Value>)’:
../node_modules/nan/nan.h:890:53: error: no matching function for call to ‘v8::Value::ToString()’
       v8::Local<v8::String> string = from->ToString();
                                                     ^
In file included from ../binding.cc:24:
/home/emrah/.cache/node-gyp/12.16.1/include/node/v8.h:2668:44: note: candidate: ‘v8::MaybeLocal<v8::String> v8::Value::ToString(v8::Local<v8::Context>) const’
   V8_WARN_UNUSED_RESULT MaybeLocal<String> ToString(
                                            ^~~~~~~~
/home/emrah/.cache/node-gyp/12.16.1/include/node/v8.h:2668:44: note:   candidate expects 1 argument, 0 provided
In file included from /home/emrah/.cache/node-gyp/12.16.1/include/node/v8-internal.h:14,
                 from /home/emrah/.cache/node-gyp/12.16.1/include/node/v8.h:27,
                 from ../binding.cc:24:
/home/emrah/.cache/node-gyp/12.16.1/include/node/v8.h:2684:31: note: candidate: ‘v8::Local<v8::String> v8::Value::ToString(v8::Isolate*) const’
                 Local<String> ToString(Isolate* isolate) const);
                               ^~~~~~~~
/home/emrah/.cache/node-gyp/12.16.1/include/node/v8config.h:328:3: note: in definition of macro ‘V8_DEPRECATED’
   declarator __attribute__((deprecated(message)))
   ^~~~~~~~~~
/home/emrah/.cache/node-gyp/12.16.1/include/node/v8.h:2684:31: note:   candidate expects 1 argument, 0 provided
                 Local<String> ToString(Isolate* isolate) const);
                               ^~~~~~~~
/home/emrah/.cache/node-gyp/12.16.1/include/node/v8config.h:328:3: note: in definition of macro ‘V8_DEPRECATED’
   declarator __attribute__((deprecated(message)))
   ^~~~~~~~~~
In file included from ../binding.cc:38:
../node_modules/nan/nan.h:900:74: error: no matching function for call to ‘v8::String::WriteUtf8(char*&, int, int, const int&)’
         length_ = string->WriteUtf8(str_, static_cast<int>(len), 0, flags);
                                                                          ^
In file included from ../binding.cc:24:
/home/emrah/.cache/node-gyp/12.16.1/include/node/v8.h:2878:7: note: candidate: ‘int v8::String::WriteUtf8(v8::Isolate*, char*, int, int*, int) const’
   int WriteUtf8(Isolate* isolate, char* buffer, int length = -1,
       ^~~~~~~~~
/home/emrah/.cache/node-gyp/12.16.1/include/node/v8.h:2878:7: note:   no known conversion for argument 1 from ‘char*’ to ‘v8::Isolate*’
In file included from ../binding.cc:38:
../node_modules/nan/nan.h: In member function ‘bool Nan::Callback::operator==(const Nan::Callback&) const’:
../node_modules/nan/nan.h:1371:61: warning: ‘v8::Local<v8::Value> v8::Object::Get(uint32_t)’ is deprecated: Use maybe version [-Wdeprecated-declarations]
     v8::Local<v8::Value> a = New(handle)->Get(kCallbackIndex);
                                                             ^
In file included from /home/emrah/.cache/node-gyp/12.16.1/include/node/v8-internal.h:14,
                 from /home/emrah/.cache/node-gyp/12.16.1/include/node/v8.h:27,
                 from ../binding.cc:24:
/home/emrah/.cache/node-gyp/12.16.1/include/node/v8.h:3557:51: note: declared here
   V8_DEPRECATED("Use maybe version", Local<Value> Get(uint32_t index));
                                                   ^~~
/home/emrah/.cache/node-gyp/12.16.1/include/node/v8config.h:328:3: note: in definition of macro ‘V8_DEPRECATED’
   declarator __attribute__((deprecated(message)))
   ^~~~~~~~~~
In file included from ../binding.cc:38:
../node_modules/nan/nan.h:1372:67: warning: ‘v8::Local<v8::Value> v8::Object::Get(uint32_t)’ is deprecated: Use maybe version [-Wdeprecated-declarations]
     v8::Local<v8::Value> b = New(other.handle)->Get(kCallbackIndex);
                                                                   ^
In file included from /home/emrah/.cache/node-gyp/12.16.1/include/node/v8-internal.h:14,
                 from /home/emrah/.cache/node-gyp/12.16.1/include/node/v8.h:27,
                 from ../binding.cc:24:
/home/emrah/.cache/node-gyp/12.16.1/include/node/v8.h:3557:51: note: declared here
   V8_DEPRECATED("Use maybe version", Local<Value> Get(uint32_t index));
                                                   ^~~
/home/emrah/.cache/node-gyp/12.16.1/include/node/v8config.h:328:3: note: in definition of macro ‘V8_DEPRECATED’
   declarator __attribute__((deprecated(message)))
   ^~~~~~~~~~
In file included from ../binding.cc:38:
../node_modules/nan/nan.h: In member function ‘v8::Local<v8::Function> Nan::Callback::GetFunction() const’:
../node_modules/nan/nan.h:1403:56: warning: ‘v8::Local<v8::Value> v8::Object::Get(uint32_t)’ is deprecated: Use maybe version [-Wdeprecated-declarations]
     return scope.Escape(New(handle)->Get(kCallbackIndex)
                                                        ^
In file included from /home/emrah/.cache/node-gyp/12.16.1/include/node/v8-internal.h:14,
                 from /home/emrah/.cache/node-gyp/12.16.1/include/node/v8.h:27,
                 from ../binding.cc:24:
/home/emrah/.cache/node-gyp/12.16.1/include/node/v8.h:3557:51: note: declared here
   V8_DEPRECATED("Use maybe version", Local<Value> Get(uint32_t index));
                                                   ^~~
/home/emrah/.cache/node-gyp/12.16.1/include/node/v8config.h:328:3: note: in definition of macro ‘V8_DEPRECATED’
   declarator __attribute__((deprecated(message)))
   ^~~~~~~~~~
In file included from ../binding.cc:38:
../node_modules/nan/nan.h: In member function ‘bool Nan::Callback::IsEmpty() const’:
../node_modules/nan/nan.h:1409:43: warning: ‘v8::Local<v8::Value> v8::Object::Get(uint32_t)’ is deprecated: Use maybe version [-Wdeprecated-declarations]
     return New(handle)->Get(kCallbackIndex)->IsUndefined();
                                           ^
In file included from /home/emrah/.cache/node-gyp/12.16.1/include/node/v8-internal.h:14,
                 from /home/emrah/.cache/node-gyp/12.16.1/include/node/v8.h:27,
                 from ../binding.cc:24:
/home/emrah/.cache/node-gyp/12.16.1/include/node/v8.h:3557:51: note: declared here
   V8_DEPRECATED("Use maybe version", Local<Value> Get(uint32_t index));
                                                   ^~~
/home/emrah/.cache/node-gyp/12.16.1/include/node/v8config.h:328:3: note: in definition of macro ‘V8_DEPRECATED’
   declarator __attribute__((deprecated(message)))
   ^~~~~~~~~~
In file included from ../binding.cc:38:
../node_modules/nan/nan.h: In member function ‘v8::Local<v8::Value> Nan::Callback::Call_(v8::Isolate*, v8::Local<v8::Object>, int, v8::Local<v8::Value>*) const’:
../node_modules/nan/nan.h:1447:27: warning: ‘v8::Local<v8::Value> v8::Object::Get(uint32_t)’ is deprecated: Use maybe version [-Wdeprecated-declarations]
         Get(kCallbackIndex).As<v8::Function>();
                           ^
In file included from /home/emrah/.cache/node-gyp/12.16.1/include/node/v8-internal.h:14,
                 from /home/emrah/.cache/node-gyp/12.16.1/include/node/v8.h:27,
                 from ../binding.cc:24:
/home/emrah/.cache/node-gyp/12.16.1/include/node/v8.h:3557:51: note: declared here
   V8_DEPRECATED("Use maybe version", Local<Value> Get(uint32_t index));
                                                   ^~~
/home/emrah/.cache/node-gyp/12.16.1/include/node/v8config.h:328:3: note: in definition of macro ‘V8_DEPRECATED’
   declarator __attribute__((deprecated(message)))
   ^~~~~~~~~~
In file included from ../binding.cc:38:
../node_modules/nan/nan.h:1463:5: warning: ‘v8::Local<v8::Value> node::MakeCallback(v8::Isolate*, v8::Local<v8::Object>, v8::Local<v8::Function>, int, v8::Local<v8::Value>*)’ is deprecated: Use MakeCallback(..., async_context) [-Wdeprecated-declarations]
     ));
     ^
In file included from ../binding.cc:25:
/home/emrah/.cache/node-gyp/12.16.1/include/node/node.h:174:50: note: declared here
                 NODE_EXTERN v8::Local<v8::Value> MakeCallback(
                                                  ^~~~~~~~~~~~
/home/emrah/.cache/node-gyp/12.16.1/include/node/node.h:93:42: note: in definition of macro ‘NODE_DEPRECATED’
     __attribute__((deprecated(message))) declarator
                                          ^~~~~~~~~~
In file included from ../binding.cc:38:
../node_modules/nan/nan.h:1463:5: warning: ‘v8::Local<v8::Value> node::MakeCallback(v8::Isolate*, v8::Local<v8::Object>, v8::Local<v8::Function>, int, v8::Local<v8::Value>*)’ is deprecated: Use MakeCallback(..., async_context) [-Wdeprecated-declarations]
     ));
     ^
In file included from ../binding.cc:25:
/home/emrah/.cache/node-gyp/12.16.1/include/node/node.h:174:50: note: declared here
                 NODE_EXTERN v8::Local<v8::Value> MakeCallback(
                                                  ^~~~~~~~~~~~
/home/emrah/.cache/node-gyp/12.16.1/include/node/node.h:93:42: note: in definition of macro ‘NODE_DEPRECATED’
     __attribute__((deprecated(message))) declarator
                                          ^~~~~~~~~~
In file included from ../binding.cc:38:
../node_modules/nan/nan.h: In member function ‘void Nan::AsyncWorker::SaveToPersistent(const char*, const v8::Local<v8::Value>&)’:
../node_modules/nan/nan.h:1518:64: warning: ‘bool v8::Object::Set(v8::Local<v8::Value>, v8::Local<v8::Value>)’ is deprecated: Use maybe version [-Wdeprecated-declarations]
     New(persistentHandle)->Set(New(key).ToLocalChecked(), value);
                                                                ^
In file included from /home/emrah/.cache/node-gyp/12.16.1/include/node/v8-internal.h:14,
                 from /home/emrah/.cache/node-gyp/12.16.1/include/node/v8.h:27,
                 from ../binding.cc:24:
/home/emrah/.cache/node-gyp/12.16.1/include/node/v8.h:3499:22: note: declared here
                 bool Set(Local<Value> key, Local<Value> value));
                      ^~~
/home/emrah/.cache/node-gyp/12.16.1/include/node/v8config.h:328:3: note: in definition of macro ‘V8_DEPRECATED’
   declarator __attribute__((deprecated(message)))
   ^~~~~~~~~~
In file included from ../binding.cc:38:
../node_modules/nan/nan.h: In member function ‘void Nan::AsyncWorker::SaveToPersistent(const v8::Local<v8::String>&, const v8::Local<v8::Value>&)’:
../node_modules/nan/nan.h:1524:42: warning: ‘bool v8::Object::Set(v8::Local<v8::Value>, v8::Local<v8::Value>)’ is deprecated: Use maybe version [-Wdeprecated-declarations]
     New(persistentHandle)->Set(key, value);
                                          ^
In file included from /home/emrah/.cache/node-gyp/12.16.1/include/node/v8-internal.h:14,
                 from /home/emrah/.cache/node-gyp/12.16.1/include/node/v8.h:27,
                 from ../binding.cc:24:
/home/emrah/.cache/node-gyp/12.16.1/include/node/v8.h:3499:22: note: declared here
                 bool Set(Local<Value> key, Local<Value> value));
                      ^~~
/home/emrah/.cache/node-gyp/12.16.1/include/node/v8config.h:328:3: note: in definition of macro ‘V8_DEPRECATED’
   declarator __attribute__((deprecated(message)))
   ^~~~~~~~~~
In file included from ../binding.cc:38:
../node_modules/nan/nan.h: In member function ‘void Nan::AsyncWorker::SaveToPersistent(uint32_t, const v8::Local<v8::Value>&)’:
../node_modules/nan/nan.h:1530:44: warning: ‘bool v8::Object::Set(uint32_t, v8::Local<v8::Value>)’ is deprecated: Use maybe version [-Wdeprecated-declarations]
     New(persistentHandle)->Set(index, value);
                                            ^
In file included from /home/emrah/.cache/node-gyp/12.16.1/include/node/v8-internal.h:14,
                 from /home/emrah/.cache/node-gyp/12.16.1/include/node/v8.h:27,
                 from ../binding.cc:24:
/home/emrah/.cache/node-gyp/12.16.1/include/node/v8.h:3508:22: note: declared here
                 bool Set(uint32_t index, Local<Value> value));
                      ^~~
/home/emrah/.cache/node-gyp/12.16.1/include/node/v8config.h:328:3: note: in definition of macro ‘V8_DEPRECATED’
   declarator __attribute__((deprecated(message)))
   ^~~~~~~~~~
In file included from ../binding.cc:38:
../node_modules/nan/nan.h: In member function ‘v8::Local<v8::Value> Nan::AsyncWorker::GetFromPersistent(const char*) const’:
../node_modules/nan/nan.h:1536:61: warning: ‘v8::Local<v8::Value> v8::Object::Get(v8::Local<v8::Value>)’ is deprecated: Use maybe version [-Wdeprecated-declarations]
         New(persistentHandle)->Get(New(key).ToLocalChecked()));
                                                             ^
In file included from /home/emrah/.cache/node-gyp/12.16.1/include/node/v8-internal.h:14,
                 from /home/emrah/.cache/node-gyp/12.16.1/include/node/v8.h:27,
                 from ../binding.cc:24:
/home/emrah/.cache/node-gyp/12.16.1/include/node/v8.h:3553:51: note: declared here
   V8_DEPRECATED("Use maybe version", Local<Value> Get(Local<Value> key));
                                                   ^~~
/home/emrah/.cache/node-gyp/12.16.1/include/node/v8config.h:328:3: note: in definition of macro ‘V8_DEPRECATED’
   declarator __attribute__((deprecated(message)))
   ^~~~~~~~~~
In file included from ../binding.cc:38:
../node_modules/nan/nan.h: In member function ‘v8::Local<v8::Value> Nan::AsyncWorker::GetFromPersistent(const v8::Local<v8::String>&) const’:
../node_modules/nan/nan.h:1542:55: warning: ‘v8::Local<v8::Value> v8::Object::Get(v8::Local<v8::Value>)’ is deprecated: Use maybe version [-Wdeprecated-declarations]
     return scope.Escape(New(persistentHandle)->Get(key));
                                                       ^
In file included from /home/emrah/.cache/node-gyp/12.16.1/include/node/v8-internal.h:14,
                 from /home/emrah/.cache/node-gyp/12.16.1/include/node/v8.h:27,
                 from ../binding.cc:24:
/home/emrah/.cache/node-gyp/12.16.1/include/node/v8.h:3553:51: note: declared here
   V8_DEPRECATED("Use maybe version", Local<Value> Get(Local<Value> key));
                                                   ^~~
/home/emrah/.cache/node-gyp/12.16.1/include/node/v8config.h:328:3: note: in definition of macro ‘V8_DEPRECATED’
   declarator __attribute__((deprecated(message)))
   ^~~~~~~~~~
In file included from ../binding.cc:38:
../node_modules/nan/nan.h: In member function ‘v8::Local<v8::Value> Nan::AsyncWorker::GetFromPersistent(uint32_t) const’:
../node_modules/nan/nan.h:1547:57: warning: ‘v8::Local<v8::Value> v8::Object::Get(uint32_t)’ is deprecated: Use maybe version [-Wdeprecated-declarations]
     return scope.Escape(New(persistentHandle)->Get(index));
                                                         ^
In file included from /home/emrah/.cache/node-gyp/12.16.1/include/node/v8-internal.h:14,
                 from /home/emrah/.cache/node-gyp/12.16.1/include/node/v8.h:27,
                 from ../binding.cc:24:
/home/emrah/.cache/node-gyp/12.16.1/include/node/v8.h:3557:51: note: declared here
   V8_DEPRECATED("Use maybe version", Local<Value> Get(uint32_t index));
                                                   ^~~
/home/emrah/.cache/node-gyp/12.16.1/include/node/v8config.h:328:3: note: in definition of macro ‘V8_DEPRECATED’
   declarator __attribute__((deprecated(message)))
   ^~~~~~~~~~
In file included from ../binding.cc:38:
../node_modules/nan/nan.h: In function ‘void Nan::AsyncQueueWorker(Nan::AsyncWorker*)’:
../node_modules/nan/nan.h:1706:62: warning: cast between incompatible function types from ‘void (*)(uv_work_t*)’ {aka ‘void (*)(uv_work_s*)’} to ‘uv_after_work_cb’ {aka ‘void (*)(uv_work_s*, int)’} [-Wcast-function-type]
     , reinterpret_cast<uv_after_work_cb>(AsyncExecuteComplete)
                                                              ^
In file included from /usr/include/c++/8/cassert:44,
                 from /home/emrah/.cache/node-gyp/12.16.1/include/node/node_object_wrap.h:26,
                 from ../node_modules/nan/nan.h:49,
                 from ../binding.cc:38:
../node_modules/nan/nan_object_wrap.h: In destructor ‘virtual Nan::ObjectWrap::~ObjectWrap()’:
../node_modules/nan/nan_object_wrap.h:24:25: error: ‘class Nan::Persistent<v8::Object>’ has no member named ‘IsNearDeath’
     assert(persistent().IsNearDeath());
                         ^~~~~~~~~~~
In file included from ../node_modules/nan/nan.h:2192,
                 from ../binding.cc:38:
../node_modules/nan/nan_object_wrap.h: In member function ‘void Nan::ObjectWrap::MakeWeak()’:
../node_modules/nan/nan_object_wrap.h:67:34: warning: ‘void v8::PersistentBase<T>::MarkIndependent() [with T = v8::Object]’ is deprecated: Weak objects are always considered independent. Use TracedGlobal when trying to use EmbedderHeapTracer. Use a strong handle when trying to keep an object alive. [-Wdeprecated-declarations]
     persistent().MarkIndependent();
                                  ^
In file included from /home/emrah/.cache/node-gyp/12.16.1/include/node/v8-internal.h:14,
                 from /home/emrah/.cache/node-gyp/12.16.1/include/node/v8.h:27,
                 from ../binding.cc:24:
/home/emrah/.cache/node-gyp/12.16.1/include/node/v8.h:570:22: note: declared here
       V8_INLINE void MarkIndependent());
                      ^~~~~~~~~~~~~~~
/home/emrah/.cache/node-gyp/12.16.1/include/node/v8config.h:328:3: note: in definition of macro ‘V8_DEPRECATED’
   declarator __attribute__((deprecated(message)))
   ^~~~~~~~~~
In file included from /usr/include/c++/8/cassert:44,
                 from /home/emrah/.cache/node-gyp/12.16.1/include/node/node_object_wrap.h:26,
                 from ../node_modules/nan/nan.h:49,
                 from ../binding.cc:38:
../node_modules/nan/nan_object_wrap.h: In static member function ‘static void Nan::ObjectWrap::WeakCallback(const v8::WeakCallbackInfo<Nan::ObjectWrap>&)’:
../node_modules/nan/nan_object_wrap.h:124:26: error: ‘class Nan::Persistent<v8::Object>’ has no member named ‘IsNearDeath’
     assert(wrap->handle_.IsNearDeath());
                          ^~~~~~~~~~~
../binding.cc: In static member function ‘static void zmq::Socket::UV_MonitorCallback(uv_timer_t*, int)’:
../binding.cc:533:98: warning: cast between incompatible function types from ‘void (*)(uv_timer_t*, int)’ {aka ‘void (*)(uv_timer_s*, int)’} to ‘uv_timer_cb’ {aka ‘void (*)(uv_timer_s*)’} [-Wcast-function-type]
 or_handle_, reinterpret_cast<uv_timer_cb>(Socket::UV_MonitorCallback), s->timer_interval_, 0);
                                                                     ^

../binding.cc: In static member function ‘static Nan::NAN_METHOD_RETURN_TYPE zmq::Socket::Bind(Nan::NAN_METHOD_ARGS_TYPE)’:
../binding.cc:766:37: warning: cast between incompatible function types from ‘void (*)(uv_work_t*)’ {aka ‘void (*)(uv_work_s*)’} to ‘uv_after_work_cb’ {aka ‘void (*)(uv_work_s*, int)’} [-Wcast-function-type]
                   (uv_after_work_cb)UV_BindAsyncAfter);
                                     ^~~~~~~~~~~~~~~~~
../binding.cc: In static member function ‘static Nan::NAN_METHOD_RETURN_TYPE zmq::Socket::Unbind(Nan::NAN_METHOD_ARGS_TYPE)’:
../binding.cc:847:37: warning: cast between incompatible function types from ‘void (*)(uv_work_t*)’ {aka ‘void (*)(uv_work_s*)’} to ‘uv_after_work_cb’ {aka ‘void (*)(uv_work_s*, int)’} [-Wcast-function-type]
                   (uv_after_work_cb)UV_UnbindAsyncAfter);
                                     ^~~~~~~~~~~~~~~~~~~
../binding.cc: In destructor ‘zmq::Socket::IncomingMessage::MessageReference::~MessageReference()’:
../binding.cc:999:54: warning: throw will always call terminate() [-Wterminate]
               throw std::runtime_error(ErrorMessage());
                                                      ^
../binding.cc:999:54: note: in C++11 destructors default to noexcept
../binding.cc: In static member function ‘static Nan::NAN_METHOD_RETURN_TYPE zmq::Socket::Monitor(Nan::NAN_METHOD_ARGS_TYPE)’:
../binding.cc:1049:103: warning: cast between incompatible function types from ‘void (*)(uv_timer_t*, int)’ {aka ‘void (*)(uv_timer_s*, int)’} to ‘uv_timer_cb’ {aka ‘void (*)(uv_timer_s*)’} [-Wcast-function-type]
 or_handle_, reinterpret_cast<uv_timer_cb>(Socket::UV_MonitorCallback), timer_interval, 0);
                                                                     ^

../binding.cc: In destructor ‘zmq::Socket::OutgoingMessage::~OutgoingMessage()’:
../binding.cc:1205:50: warning: throw will always call terminate() [-Wterminate]
           throw std::runtime_error(ErrorMessage());
                                                  ^
../binding.cc:1205:50: note: in C++11 destructors default to noexcept
../binding.cc: In constructor ‘zmq::Socket::OutgoingMessage::BufferReference::BufferReference(v8::Local<v8::Object>)’:
../binding.cc:1217:78: warning: cast between incompatible function types from ‘void (*)(uv_async_t*, int)’ {aka ‘void (*)(uv_async_s*, int)’} to ‘uv_async_cb’ {aka ‘void (*)(uv_async_s*)’} [-Wcast-function-type]
            uv_async_init(loop, &async, reinterpret_cast<uv_async_cb>(cleanup));
                                                                             ^

../binding.cc: In static member function ‘static Nan::NAN_METHOD_RETURN_TYPE zmq::Socket::Sendv(Nan::NAN_METHOD_ARGS_TYPE)’:
../binding.cc:1285:39: warning: ‘v8::Local<v8::Value> v8::Object::Get(uint32_t)’ is deprecated: Use maybe version [-Wdeprecated-declarations]
       Local<Object> buf = batch->Get(i).As<Object>();
                                       ^
In file included from /home/emrah/.cache/node-gyp/12.16.1/include/node/v8-internal.h:14,
                 from /home/emrah/.cache/node-gyp/12.16.1/include/node/v8.h:27,
                 from ../binding.cc:24:
/home/emrah/.cache/node-gyp/12.16.1/include/node/v8.h:3557:51: note: declared here
   V8_DEPRECATED("Use maybe version", Local<Value> Get(uint32_t index));
                                                   ^~~
/home/emrah/.cache/node-gyp/12.16.1/include/node/v8config.h:328:3: note: in definition of macro ‘V8_DEPRECATED’
   declarator __attribute__((deprecated(message)))
   ^~~~~~~~~~
../binding.cc:1286:48: warning: ‘v8::Local<v8::Value> v8::Object::Get(uint32_t)’ is deprecated: Use maybe version [-Wdeprecated-declarations]
       Local<Number> flagsObj = batch->Get(i + 1).As<Number>();
                                                ^
In file included from /home/emrah/.cache/node-gyp/12.16.1/include/node/v8-internal.h:14,
                 from /home/emrah/.cache/node-gyp/12.16.1/include/node/v8.h:27,
                 from ../binding.cc:24:
/home/emrah/.cache/node-gyp/12.16.1/include/node/v8.h:3557:51: note: declared here
   V8_DEPRECATED("Use maybe version", Local<Value> Get(uint32_t index));
                                                   ^~~
/home/emrah/.cache/node-gyp/12.16.1/include/node/v8config.h:328:3: note: in definition of macro ‘V8_DEPRECATED’
   declarator __attribute__((deprecated(message)))
   ^~~~~~~~~~
In file included from ../binding.cc:25:
../binding.cc: At global scope:
/home/emrah/.cache/node-gyp/12.16.1/include/node/node.h:601:43: warning: cast between incompatible function types from ‘void (*)(Nan::ADDON_REGISTER_FUNCTION_ARGS_TYPE)’ {aka ‘void (*)(v8::Local<v8::Object>)’} to ‘node::addon_register_func’ {aka ‘void (*)(v8::Local<v8::Object>, v8::Local<v8::Value>, void*)’} [-Wcast-function-type]
       (node::addon_register_func) (regfunc),                          \
                                           ^
/home/emrah/.cache/node-gyp/12.16.1/include/node/node.h:635:3: note: in expansion of macro ‘NODE_MODULE_X’
   NODE_MODULE_X(modname, regfunc, NULL, 0)  // NOLINT (readability/null_usage)
   ^~~~~~~~~~~~~
../binding.cc:1619:1: note: in expansion of macro ‘NODE_MODULE’
 NODE_MODULE(zmq, init)
 ^~~~~~~~~~~
In file included from ../binding.cc:24:
/home/emrah/.cache/node-gyp/12.16.1/include/node/v8.h: In instantiation of ‘void v8::PersistentBase<T>::SetWeak(P*, typename v8::WeakCallbackInfo<P>::Callback, v8::WeakCallbackType) [with P = node::ObjectWrap; T = v8::Object; typename v8::WeakCallbackInfo<P>::Callback = void (*)(const v8::WeakCallbackInfo<node::ObjectWrap>&)]’:
/home/emrah/.cache/node-gyp/12.16.1/include/node/node_object_wrap.h:85:78:   required from here
/home/emrah/.cache/node-gyp/12.16.1/include/node/v8.h:10226:16: warning: cast between incompatible function types from ‘v8::WeakCallbackInfo<node::ObjectWrap>::Callback’ {aka ‘void (*)(const v8::WeakCallbackInfo<node::ObjectWrap>&)’} to ‘Callback’ {aka ‘void (*)(const v8::WeakCallbackInfo<void>&)’} [-Wcast-function-type]
                reinterpret_cast<Callback>(callback), type);
                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/emrah/.cache/node-gyp/12.16.1/include/node/v8.h: In instantiation of ‘void v8::PersistentBase<T>::SetWeak(P*, typename v8::WeakCallbackInfo<P>::Callback, v8::WeakCallbackType) [with P = Nan::ObjectWrap; T = v8::Object; typename v8::WeakCallbackInfo<P>::Callback = void (*)(const v8::WeakCallbackInfo<Nan::ObjectWrap>&)]’:
../node_modules/nan/nan_object_wrap.h:66:61:   required from here
/home/emrah/.cache/node-gyp/12.16.1/include/node/v8.h:10226:16: warning: cast between incompatible function types from ‘v8::WeakCallbackInfo<Nan::ObjectWrap>::Callback’ {aka ‘void (*)(const v8::WeakCallbackInfo<Nan::ObjectWrap>&)’} to ‘Callback’ {aka ‘void (*)(const v8::WeakCallbackInfo<void>&)’} [-Wcast-function-type]
In file included from ../binding.cc:38:
../node_modules/nan/nan.h: In instantiation of ‘void Nan::imp::SetMethodAux(T, v8::Local<v8::String>, v8::Local<v8::FunctionTemplate>, ...) [with T = v8::Local<v8::Object>]’:
../node_modules/nan/nan.h:1888:20:   required from ‘void Nan::SetMethod(HandleType<T>, const char*, Nan::FunctionCallback) [with T = v8::Object; HandleType = v8::Local; Nan::FunctionCallback = void (*)(const Nan::FunctionCallbackInfo<v8::Value>&)]’
../binding.cc:1572:52:   required from here
../node_modules/nan/nan.h:1872:3: warning: ‘bool v8::Object::Set(v8::Local<v8::Value>, v8::Local<v8::Value>)’ is deprecated: Use maybe version [-Wdeprecated-declarations]
   recv->Set(name, GetFunction(tpl).ToLocalChecked());
   ^~~~
In file included from /home/emrah/.cache/node-gyp/12.16.1/include/node/v8-internal.h:14,
                 from /home/emrah/.cache/node-gyp/12.16.1/include/node/v8.h:27,
                 from ../binding.cc:24:
/home/emrah/.cache/node-gyp/12.16.1/include/node/v8.h:3499:22: note: declared here
                 bool Set(Local<Value> key, Local<Value> value));
                      ^~~
/home/emrah/.cache/node-gyp/12.16.1/include/node/v8config.h:328:3: note: in definition of macro ‘V8_DEPRECATED’
   declarator __attribute__((deprecated(message)))
   ^~~~~~~~~~
make: *** [zmq.target.mk:111: Release/obj.target/zmq/binding.o] Error 1
make: Leaving directory '/home/emrah/Code/node-python/node_modules/zmq/build'
gyp ERR! build error
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/home/emrah/.nvm/versions/node/v12.16.1/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:194:23)
gyp ERR! stack     at ChildProcess.emit (events.js:311:20)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:275:12)
gyp ERR! System Linux 4.19.0-6-amd64
gyp ERR! command "/home/emrah/.nvm/versions/node/v12.16.1/bin/node" "/home/emrah/.nvm/versions/node/v12.16.1/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /home/emrah/Code/node-python/node_modules/zmq
gyp ERR! node -v v12.16.1
gyp ERR! node-gyp -v v5.0.5
gyp ERR! not ok
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR<EMAIL_ADDRESS>install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the<EMAIL_ADDRESS>install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/emrah/.npm/_logs/2020-02-25T16_54_17_808Z-debug.log

zmq hasn’t been updated for four years (https://www.npmjs.com/package/zmq) and from the errors in the logs looks like it is not compatible with currently supported versions of Node.js. https://github.com/JustinTulloss/zeromq.node#readme says that zmq has been superseded by zeromq (https://www.npmjs.com/package/zeromq).


Use "oscrypto" & "certbuilder" packages instead of the OpenSSL command line tool

Generate localhost test certs with the oscrypto and certbuilder packages instead of using the OpenSSL command line tool. As a consequence the code no more prints the OpenSSL version and doesn't check if the OpenSSL tool is in the path.
Prior to merging the code needs to be tested at least on Windows, OSX and a common Linux distribution of choice. See the list of platforms oscrypto supports. @oherrala might be interested to check out whether this version of trytls can still be run on OpenBSD.
This is an alternative for #254. Closes #198.

Works in OpenBSD-current (near-6.0). Also code looks good to me.

Rebased on top of master.

Rebased again to get AppVeyor tests rolling.

We (@oherrala and @jviide) decided to go with oscrypto + certbuilder instead of cryptography package (#254).
Merging.


[DEVICES] Not reporting WAN traffic / speed <- add in here, please

:lady_beetle: Some Asus devices are known to not report WAN traffic. That means also the speed cannot be calculated. I am currently looking in the walk-around to get this data for the full user experience.
In case, you are experiencing this issue, please add your device model and firmware version in the comments.
List of known devices not reporting WAN data:

RT-AC86U (FW: <IP_ADDRESS>.386_48260) (via https://community.home-assistant.io/t/custom-component-asusrouter-integration/416111/8)
RT-AX88U (FW: <IP_ADDRESS>.386_45934) (via https://github.com/Vaskivskyi/ha-asusrouter/issues/16#issuecomment-1121311921)

An RT-AX88U (FW: <IP_ADDRESS>.386_48631) does NOT show such a problem. Could it be related to the AiMesh? The one with the problems in the original issue was using it. This one does not 🤔

An RT-AX88U (FW: <IP_ADDRESS>.386_48631) does NOT show such a problem. Could it be related to the AiMesh? The one with the problems in the original issue was using it. This one does not 🤔

Hi, for me not work on FW: <IP_ADDRESS>.386_48631

Hey, @leonidfeldman1977,
Can you please enter the web panel of your device and go to the Traffic analyzer -> Traffic monitor (as on the snapshot 1).
Then you would need to open Developer Tools in your browser (F12 on keyboard), there tab Network and find one of the requests to update.cgi (as on the snapshot 2).
I would need the response for one of such requests. It includes something similar to:
netdev = {
 'BRIDGE':{rx:0x466aebec4,tx:0x15af576701}
,'INTERNET':{rx:0x146f3e3ca5,tx:0x43f8c2d43}
,'WIRED':{rx:0x16fa833cd8,tx:0x6f5557c3c}
,'WIRELESS0':{rx:0xf847fae4,tx:0xfe463937}
,'WIRELESS1':{rx:0x2195ed1a7,tx:0xa9227f7b8}
}

This could help in solving the problem of the WAN absence from the integration. Thanks!

snapshots

Unfortunately, this issue cannot be solved from the integration point of view. If a device is not reporting some data in the API endpoints, the only way to troubleshoot it will be to get direct access to the device for tests. Other devices of the same models and/or firmware versions are working well.
In case this issue happens to any other user and device, I suggest updating the firmware to the latest version and performing a factory reset (all the settings will be lost in this case).